Skip to main content
Claude Code (and other agents that support the Agent Skills format) can learn to save content to the Knowledge Base on its own, using the engframe CLI. Drop the SKILL.md below into your project and your agent will recognize when a conversation has produced something worth keeping — a decision, a pattern, a runbook, a postmortem — and offer to write it up and ingest it, instead of letting it disappear at the end of the session.
This is a skill for an agent, not a person. It assumes engframe is installed and you’ve already run engframe login at least once — see engframe CLI: Install & Use if you haven’t. The skill itself tells the agent to check for this and prompt you if it’s missing, rather than assuming it silently.

What this skill does

Once installed, an agent with this skill will:
  1. Recognize moments worth persisting — the user asking to “save this”, “write this up”, “add this to the knowledge base”, or the agent itself noticing a conclusion, decision, or workaround from the current session that’s worth keeping for next time.
  2. Check that engframe is installed and the user is logged in before doing anything else.
  3. Write a Markdown file with the correct YAML front matter (title, type, tags, domains, project, etc.) and run engframe ingest on it.
  4. Tell you plainly that the result is a draft — not yet visible in search — and that it needs a reviewer to approve it, rather than implying the content is immediately live.
  5. Surface the actual error if ingestion fails, instead of retrying silently or inventing a workaround.

Install it

Create .claude/skills/knowledge-base-ingest/SKILL.md in your project (or your user-level ~/.claude/skills/ directory to make it available everywhere) and paste in the content below.
  • If the command isn’t found, tell the user to install it with npm install -g @engineeringframework/cli and stop.
  • If it reports the session isn’t logged in (or has expired), tell the user to run engframe login and stop. Don’t attempt to work around a missing login.
Don’t assume either of these is already satisfied — always check first.

Write the file

Draft a Markdown file with YAML front matter, then the content as the body. Use a temporary path (e.g. .claude/tmp/kb-<short-slug>.md) unless the user asks for it to be kept. Required front matter fields:
  • title — a specific, descriptive title.
  • type — one of concept, decision, guide, pitfall, process. Pick the one that matches what you’re recording; ask the user if it’s genuinely ambiguous.
Optional but encouraged when known:
  • tags — free-form keywords for filtering.
  • domains — subject areas this belongs to (e.g. payments, auth).
  • projectId — if this is specific to one project the user belongs to.
  • appliesTo — scope of applicability, if narrower than the domain/project implies.
  • sources — links to PRs, tickets, or docs that back this up.
  • edgespart_of / relates_to links to other Document IDs, only if you already know them and are authorized to view them.
Write the body as normal Markdown. Keep it substantive — a couple of sentences won’t clear review. Include the reasoning behind a decision, not just the outcome.

Ingest it

On success, engframe prints the new Document’s ID and status (status: draft). Tell the user:
  • The Document was created as a draft.
  • It is not yet visible in Knowledge Base search — a reviewer for its domain needs to approve it first.
  • Where to check on it later (the Review Queue in the dashboard), if they ask.
Do not tell the user the content is “saved to the knowledge base” in a way that implies it’s searchable now — say it’s queued for review.

If ingestion fails

engframe prints the specific problem (unknown project, unknown domain, an edges link to a Document you’re not authorized to see, not logged in, etc.). Show the user that actual error message. Don’t:
  • Retry the same command hoping it works.
  • Silently drop the field that caused the failure and re-ingest without telling the user.
  • Guess at a project or domain ID that wasn’t provided.
Ask the user how they’d like to resolve it, then try again once you have an answer.