docs/public/usage/knowledge-agents.mdx
Knowledge agents let you compile a slice of your claude-mem observation history into a queryable "brain" that answers questions conversationally. Instead of getting raw search results back, you get synthesized, grounded answers drawn from your actual project history -- decisions, discoveries, bugfixes, and features.
Three ways to use knowledge agents, from simplest to most powerful.
Use the /knowledge-agent skill or the MCP tools directly:
build_corpus name="hooks-expertise" query="hooks architecture" project="claude-mem" limit=200
This searches your observation history, collects matching records, and saves them as a corpus file. Then prime it — this loads the corpus into a Claude session's context window:
prime_corpus name="hooks-expertise"
Your knowledge agent is ready. The returned session_id is the agent — a Claude session with your history baked in.
Once primed, ask any question and get a grounded answer:
query_corpus name="hooks-expertise" question="What are the 5 lifecycle hooks and when does each fire?"
The agent answers grounded in its corpus — responses are drawn from your actual project history, reducing hallucination and guessing. Each follow-up question builds on the prior conversation:
query_corpus name="hooks-expertise" question="Which hook handles context injection?"
If the conversation drifts, or you want to ask an unrelated question against the same corpus, reprime to start clean:
reprime_corpus name="hooks-expertise"
This creates a new session with the full corpus reloaded — like opening a fresh chat with the same "brain." All prior Q&A context is cleared, but the corpus knowledge remains. Use this when:
When new observations are added to your project, rebuild the corpus to pull in the latest, then reprime:
rebuild_corpus name="hooks-expertise"
reprime_corpus name="hooks-expertise"
Rebuild re-runs the original search filters. Reprime loads the refreshed data into a new session.
BUILD ──> PRIME ──> QUERY
A corpus is a filtered collection of observations saved as a JSON file. Use search filters to select exactly the slice of history you want.
curl -X POST http://localhost:37777/api/corpus \
-H "Content-Type: application/json" \
-d '{
"name": "hooks-expertise",
"query": "hooks architecture",
"project": "claude-mem",
"types": ["decision", "discovery"],
"limit": 200
}'
Under the hood, CorpusBuilder searches your observations, hydrates full records, parses structured fields (facts, concepts, files), calculates stats, and writes everything to ~/.claude-mem/corpora/hooks-expertise.corpus.json.
Priming loads the entire corpus into a Claude session's context window.
curl -X POST http://localhost:37777/api/corpus/hooks-expertise/prime
The agent renders all observations into full-detail text and feeds them to the Claude Agent SDK. Claude reads the corpus and acknowledges the themes. The returned session_id is the knowledge agent -- a Claude session with your history baked in.
Resume the primed session and ask questions.
curl -X POST http://localhost:37777/api/corpus/hooks-expertise/query \
-H "Content-Type: application/json" \
-d '{ "question": "What are the 5 lifecycle hooks?" }'
Each follow-up question adds to the conversation naturally. If the session expires, the agent auto-reprimes from the corpus file and retries.
Use these parameters when building a corpus to control which observations are included:
| Parameter | Type | Description |
|---|---|---|
name | string | Name for the corpus (used in all subsequent API calls) |
project | string | Filter by project name |
types | string[] | Filter by observation type (bugfix, feature, decision, discovery, refactor, change) |
concepts | string[] | Filter by tagged concepts |
files | string[] | Filter by files read or modified |
query | string | Full-text search query |
dateStart | string | Start date filter (YYYY-MM-DD) |
dateEnd | string | End date filter (YYYY-MM-DD) |
limit | number | Maximum observations to include |
MCP Tools HTTP API
(mcp-server.ts) (worker on :37777)
| |
build_corpus ──┤ |
list_corpora ──┤ |
prime_corpus ──┤── callWorkerAPIPost() ──>|
query_corpus ──┤ |
rebuild_corpus ──┤ |
reprime_corpus ──┘ |
v
CorpusRoutes
(8 endpoints)
/ | \
CorpusBuilder | KnowledgeAgent
| | |
SearchOrchestrator | Agent SDK V1
SessionStore | query() + resume
|
CorpusStore
(~/.claude-mem/corpora/)
Key insight: The Agent SDK's resume option lets you prime a session once (upload the corpus), save the session_id, and resume it for every future question. The corpus stays in context permanently -- no re-uploading, no prompt caching tricks. The 1M token context window makes this viable: 2,000 observations at ~300 tokens each fits comfortably.
/knowledge-agent vs /mem-search/mem-search | /knowledge-agent | |
|---|---|---|
| Returns | Raw observation records | Synthesized conversational answers |
| Best for | Finding specific observations, IDs, timelines | Asking questions about patterns, decisions, architecture |
| Token model | Pay-per-query (3-layer progressive disclosure) | Pay-once at prime time, then cheap follow-ups |
| Interaction | Search, filter, fetch | Ask questions in natural language |
| Data freshness | Always current (queries database live) | Snapshot at build time (rebuild to refresh) |
| Setup | None -- works immediately | Build + prime required before first query |
Rule of thumb: Use /mem-search when you need to find something specific. Use /knowledge-agent when you want to understand something broadly.
| Method | Path | Description |
|---|---|---|
| POST | /api/corpus | Build a new corpus from filters |
| GET | /api/corpus | List all corpora with stats |
| GET | /api/corpus/:name | Get corpus metadata |
| DELETE | /api/corpus/:name | Delete a corpus |
| POST | /api/corpus/:name/rebuild | Rebuild from stored filters |
| POST | /api/corpus/:name/prime | Create AI session with corpus loaded |
| POST | /api/corpus/:name/query | Ask the knowledge agent a question |
| POST | /api/corpus/:name/reprime | Fresh session (wipe prior Q&A) |
resume fails, the agent auto-reprimes from the corpus file and retriesCLAUDE_MEM_MODEL from user settings -- no hardcoded model IDs