Skip to content

Integrations

Claude Code

Auto-wired

Claude Code is the only client where memory is fully automatic. Four hooks run inside every session: memory is captured as you talk, and injected before Claude reads your prompt. You write zero sigil remember calls.

Terminal window
sigil init # or the browser wizard — both wire it
sigil doctor # verify

Sigil merges four hook entries into ~/.claude/settings.json and adds one @~/.sigil/CLAUDE.md import line to your global ~/.claude/CLAUDE.md. Existing hooks and settings are preserved, never overwritten.

Runs before Claude sees your message. Hybrid-searches your memory with your prompt, and injects the top-K facts as additionalContext.

No tool call, no round trip, no paste. Claude reads your context before reading your prompt.

~1.5K tokens per prompt, whether your corpus has ten facts or a hundred thousand.

Runs after every Edit, Write, and Bash. Captures the observation as a fact candidate, deduplicated by SHA-256 against a five-minute window — so a loop of edits doesn’t produce fifty near-identical rows.

Runs at the end of your turn. Classifies your last message:

preference“I prefer tabs over spaces”
decision“We’re moving retries to the Postgres job table”
constraint“We must stay under 50ms p99”
claim“The auth service is owned by the platform team”

Then extracts atomic facts, links entities, and runs AUDM against existing memory — so a contradiction supersedes rather than accumulating, and a restatement is recognized as already known.

This is the hook that makes capture invisible.

Summarizes the session into its claude_session pod and promotes facts that kept mattering.

The summary attaches to both the session pod and the project pod. The session copy expires at 90 days; the project copy is durable — which is how a session’s conclusions outlive the session.

Separately from search, your top-20 facts live in ~/.sigil/CLAUDE.md, imported by your global Claude config. Zero latency, always present, query-independent.

That last property is the point. “Keep explanations short” is relevant to every answer and semantically similar to no prompt — it would never be retrieved by any search. The snapshot is the channel that delivers it. See Hot context.

Terminal window
sigil context # rebuild it
sigil context --explain # show which pod kind filled each slot

Claude Code has a Bash tool, so it can also use Sigil directly. The instructions Sigil installs tell it to:

Terminal window
sigil search "..." # drill into something the injection missed
sigil remember --bg "..." "..." # save explicitly when you ask it to
sigil ingest ./DESIGN.md # store a document whole
sigil docs # list this project's documents

You can run these yourself too — prefix with ! in the Claude Code prompt to run a command in the session.

~/.claude/settings.json 4 hook entries (merged, not overwritten)
~/.claude/CLAUDE.md one @import line
~/.sigil/CLAUDE.md instructions + hot-context snapshot
~/.sigil/.hook-errors.log append-only diagnostic log

A broken memory layer must never block a working prompt.

Every hook wraps in a top-level try/catch that fails silently. If Sigil is down, misconfigured, or mid-update, your prompt still goes through — you lose memory, not your work.

Errors append to ~/.sigil/.hook-errors.log. After five unacknowledged errors in 24 hours sigil doctor exits non-zero, so CI and scripts can catch a degrading install.

Terminal window
sigil doctor # includes the hook error budget
sigil doctor --ack # acknowledge current errors without re-running checks
Cold start (first invocation)200–400ms — Node boot, connect, search
Warm30–60ms
Hot-context snapshot0ms — it’s a file

The daemon exists to keep the warm path warm.

Remove only the UserPromptSubmit entry from ~/.claude/settings.json:

  • You keep Stop, PostToolUse, and SessionEnd — they run asynchronously and add nothing to prompt latency
  • You keep the zero-latency hot-context snapshot
  • You lose per-prompt dynamic search, and fall back to Claude calling MCP search when it decides to

A reasonable trade if you trust the snapshot to cover most of what you ask.

A hook shows as unregistered.

Terminal window
sigil connect

Re-pins the shims and re-syncs the hook entries. This is almost always the fix after a Node version switch or reinstall — the hook entries pointed at a path that moved.

Memory stopped working after an update.

Same command. sigil doctor --deep if it doesn’t help — it actually runs a hook rather than checking that its config exists.

Facts aren’t being captured.

Check the dashboard’s Activity screen for the turn. You’ll see whether the classifier skipped it, extraction produced nothing, or AUDM decided you already knew it. See Debugging retrieval.