Concepts
Hot context
There are two channels into an agent’s context, and they exist for different reasons.
| Query-driven | Hot context | |
|---|---|---|
| Trigger | Every prompt | Session start |
| Selection | Hybrid search on your prompt | Blend across active pod kinds |
| Latency | 200–400ms cold, then warm | Zero — it’s a file |
| Size | Top-K, ~1.5K tokens | Top 20 facts |
| Good at | “What did we decide about X” | “How does this person work” |
The problem hot context solves
Section titled “The problem hot context solves”Recall is query-driven. The UserPromptSubmit hook searches Sigil with your literal prompt, so a fact surfaces only when it resembles what was just asked.
That works for subject-matter facts. It fails completely for standing instructions.
“Keep explanations short.”
That is relevant to every answer and semantically similar to almost no prompt. It would never be retrieved by any query-driven mechanism, no matter how good the search is. Users experience this as an assistant repeatedly ignoring a preference they already stated — which is exactly the complaint that produced this design.
Hot context is the query-independent channel.
Where it lives
Section titled “Where it lives”~/.sigil/CLAUDE.md the snapshot, rendered~/.claude/CLAUDE.md one @import line pointing at itClaude Code loads its global config on every session, so the snapshot is present before the first token. No search, no latency, no tool call.
## Active Context (9 facts · refreshed 2026-08-13 12:35 · ns=default)
- Edge-case payment records are skipped from the automated migration- payment-sheet work was stored in git stash@{0} during roadmap work- Check git stashes before assuming work is lost in mycohort-api…MCP clients get the same content through the prime tool, which they should call at the start of a session.
The blend
Section titled “The blend”Each active pod kind contributes up to its own budget, in registration order, with content-level deduplication, capped at 20 facts.
directive reserved standing instructions — taken firstvital 6 slots globally important, any projectsession 6 slots the live Claude Code sessionproject 4 slots the repo you're inperson 4 slots people mentioned in the last 24hplaybook 3 slots runbooks matching this projectBudgets are quotas, not guarantees. A kind with nothing to contribute yields its slots to the next one, so the snapshot is always full even when you have no active playbooks.
Registration order is blend order. Directives go first because a user-level instruction outranks project trivia for the scarcest space in the system.
When it refreshes
Section titled “When it refreshes”Automatically, after every sigil remember and sigil ingest. Manually:
sigil context # rebuild the snapshotsigil context --limit=30 # more factssigil context --namespace=<ns> # from a different namespacesigil context --explain # don't write — show which kind each fact came from--explain is the diagnostic. When a fact you expect isn’t in the snapshot, it tells you which kinds actually filled the slots:
sigil context --explainWhat belongs here
Section titled “What belongs here”Hot context is scarce — twenty facts, permanently in every prompt’s budget. Good candidates:
- Standing instructions. “Prefer named exports.” “Don’t use
anywithout a comment.” - Hard constraints. “Never write to the production database.”
- Vital project facts. The three things about this repo that always matter.
- Active people. Who you’re working with right now.
Bad candidates: anything a query would find. If “what’s our deploy process” retrieves it reliably, it doesn’t need a permanent slot.
Getting a fact in
Section titled “Getting a fact in”You don’t pick directly. Three levers:
Phrase it as a standing instruction. “Keep answers short” is classified as a preference and routed to the directive kind, which has reserved slots. “The API returns 429 under load” is a topical fact and won’t be.
Mark it vital. Facts with importance=vital get the global slots. The extractor decides, but declarative phrasing helps.
Attach it to the active project. Project pods get four slots, and project facts never decay.
Twenty facts is roughly 400–600 tokens, loaded on every session regardless of what you ask. That’s the price of the query-independent channel, and it’s why the budget is twenty rather than a hundred.
If you don’t want it at all, remove the @~/.sigil/CLAUDE.md import line from ~/.claude/CLAUDE.md. Query-driven recall keeps working; standing instructions stop reaching the model.
Relationship to CLAUDE.md
Section titled “Relationship to CLAUDE.md”They coexist by design. Your own CLAUDE.md holds hard-coded rules you maintain by hand. Sigil’s import adds the snapshot below it.
Sigil adds exactly one line and never rewrites yours.