Skip to content

Concepts

Hot context

There are two channels into an agent’s context, and they exist for different reasons.

Query-drivenHot context
TriggerEvery promptSession start
SelectionHybrid search on your promptBlend across active pod kinds
Latency200–400ms cold, then warmZero — it’s a file
SizeTop-K, ~1.5K tokensTop 20 facts
Good at“What did we decide about X”“How does this person work”

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.

~/.sigil/CLAUDE.md the snapshot, rendered
~/.claude/CLAUDE.md one @import line pointing at it

Claude 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.

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 first
vital 6 slots globally important, any project
session 6 slots the live Claude Code session
project 4 slots the repo you're in
person 4 slots people mentioned in the last 24h
playbook 3 slots runbooks matching this project

Budgets 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.

Automatically, after every sigil remember and sigil ingest. Manually:

Terminal window
sigil context # rebuild the snapshot
sigil context --limit=30 # more facts
sigil context --namespace=<ns> # from a different namespace
sigil 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:

Terminal window
sigil context --explain

Hot context is scarce — twenty facts, permanently in every prompt’s budget. Good candidates:

  • Standing instructions. “Prefer named exports.” “Don’t use any without 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.

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.

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.