engram-know
Query and verify over the code graph and knowledge graph — "where is X", "how does Y work", "why did Z break", "what realizes concept Z". An iterative hypothesis→retrieve→verify loop with evidence lab
SKILL.md.agents/skills/engram-know/SKILL.md
GitHubengram-know
Answer questions with evidence. A loop: hypothesis → retrieve → verify →
refine. Stop when the claim is [proven] — or honestly unproven.
This skill never writes. Querying is its whole job; recording is a handoff (see step 6).
Contract
- Read-only: no
write_memory,store_knowledge,put_entity,put_relationship,index_docs,scan_repofrom this skill. - Never claim file contents from memory alone — verify with
fetch_content. - Every claim in the answer carries its evidence: the tool + query that proved it.
- Two fruitless iterations → say what you looked for and stop.
- Labels:
[proven](verified against source/graph),[likely](strong signal, unverified),[guessed](hypothesis only — say so).
Workflow
1. State the hypothesis
Before any tool call, write one line: "I expect X lives in Y because Z." This anchors the search and makes refinement measurable.
2. Retrieve from two angles
recall({ "query": "<the question's key terms>" })
search({ "query": "<the likely symbol/term name>" })
recall covers memories + knowledge + docs (the "why"); search covers
the code graph (the "where"). Keep both angles even though this skill
never writes — retrieval is fused, only recording is split.
3. Drill the neighborhood
For the best candidate symbol:
symbol_context({ "symbol": "<name>", "depth": 2 })
For an area rather than a symbol:
explore({ "query": "<area terms>", "depth": 2 })
For a concept (knowledge-graph side): recall with the concept name;
graph_neighbors and resolve_entity exist only under the server's full
tool profile — use them when available, don't depend on them.
4. Verify against source
Before asserting what code does:
fetch_content({ "path": "<file path from the graph>" })
Graph and memory say where; the file says what. If they disagree, the
index is stale — say so ([likely] at best).
5. Refine or stop
- Found and verified → answer.
- Found but unverified → answer with
[likely], offer to fetch. - Nothing → refine the query with terms the graph revealed (community names, related symbols), one more iteration. After two empty iterations, report the queries tried and stop.
6. Hand off records (mixed "find AND remember" requests)
If the request also asks to remember the answer, complete the verification first, then hand the verified claim with its evidence line to the right writer — do not write it yourself:
- Experience (decisions, gotchas, stances, what worked) →
engram-mem(write_memory/procedure_put). - Source-grounded knowledge (facts/entities/relationships extracted
from a doc or the code itself) →
engram-distill(store_knowledge, source-keyed batch).
Output format
<answer, one paragraph>
Evidence:
- [proven] <claim> — symbol_context(X): called by A, B; fetch_content(file.rs)
- [likely] <claim> — recall hit "…" (indexed Oct 2026; may be stale)
- [guessed] <claim> — naming convention only
When it fails
- Empty store (no index yet) → say "not indexed; run engram-index or scan_repo first" and stop. Do not fall back to grepping as if indexed.
- Stale-index signals (symbols that no longer exist per
fetch_content) → flag the staleness in the answer; suggestscan_repo. - Ambiguous symbol (many same-name entities) → disambiguate with
symbol_contextper candidate, or ask; don't average.
Anti-patterns
- Claiming behavior from memory alone (no
fetch_content). - One query, one give-up.
- Answering from general language knowledge instead of this repo's graph.
- Skipping the hypothesis line.
- Writing "as a convenience" — that is another skill's contract.
Final check
- Is every claim labeled?
- Did I read the actual file for the load-bearing claims?
- Would the evidence chain convince a skeptical reviewer?
- Did records route to mem/distill instead of being written here?