Skip to content

Operations

Troubleshooting

Terminal window
sigil doctor --deep

--deep round-trips every connector — it actually spawns the MCP server and runs a hook, rather than checking that config files exist. That distinction resolves most reports.

If that doesn’t tell you enough:

Terminal window
sigil daemon logs --follow

Or open the dashboard’s Activity screen, which streams every hook fire, search, and LLM call live.


By far the most common report, and it has one common cause: a stale path after a Node version switch, a reinstall, or an update.

Terminal window
sigil connect

Re-pins the launcher shims in ~/.sigil/bin/ and re-syncs every client’s generated config. Touches no database, no provider, no API key.

Terminal window
sigil connect --clients claude-code,cursor # or just some
sigil connect --dry-run # see what would change

If that doesn’t fix it, work down the list below.


SymptomCause
Sigil does not support native WindowsCorrect. Install inside WSL.
Node version errorSigil needs Node 20+
git: command not foundSigil installs as a git clone and updates by fast-forwarding it
Refuses to set up from a cache directoryYou ran it via npx/pnpx. Use the installer or npm install -g.
Terminal window
sigil daemon status
sigil daemon logs
sigil daemon url # the URL, with its auth token

If the daemon isn’t running, sigil daemon start --foreground shows you why in the terminal instead of a log file.

Port 7777 already taken? Change http.port in ~/.sigil/config.json and restart.

MessageFix
Connection refusedPostgres isn’t running, or the host/port is wrong
extension "vector" is not availableInstall pgvector. The dashboard offers a one-click fix; the pgvector/pgvector Docker image has it preinstalled.
Authentication failedCheck user and password. Managed providers usually need ?sslmode=require.
Migrations fail on a pooled URLSigil routes migrations to the direct endpoint automatically. If you pasted a pooler host with no direct equivalent, use the direct one.

Or sidestep it entirely: choose Built-in and get a zero-install PGlite database.

ProviderCommon cause
OpenAI / OpenRouter / VoyageBad key, no credit, or a network egress block
OllamaNot running (ollama serve), or the model isn’t pulled
Claude CodeThe claude binary isn’t on the daemon’s PATH — set llm.cliPath
CodexSame, llm.codexPath

Under launchd or systemd the daemon gets a stripped PATH and can’t see ~/.local/bin or nvm directories. That’s what cliPath exists for.


Terminal window
sigil facts --limit=20 # is anything landing at all?
sigil doctor # are the hooks registered?

If hooks are registered and nothing is landing, check the dashboard’s Activity screen for the turn in question. You’ll see one of:

  • The classifier skipped it. It’s deliberately conservative. Say it more declaratively, or run sigil remember.
  • Extraction produced nothing. The message had no atomic assertion in it.
  • AUDM said “already known”. Check for a near-duplicate with sigil facts.
  • The hook errored. ~/.sigil/.hook-errors.log has the detail.
Terminal window
sigil doctor # reports the count
cat ~/.sigil/.hook-errors.log
sigil doctor --ack # acknowledge once you've read them

After five unacknowledged errors in 24 hours, sigil doctor exits non-zero so CI can catch a degrading install.

memory.skipThreshold (default 0.88) is too high for your LLM’s ability to recognize restatements. Lower it slightly in Settings → Advanced. This is the common adjustment on a local model. See Deduplication → Tuning.


Terminal window
sigil why "your query"

Four causes, in order of likelihood — full walkthrough in Debugging retrieval:

  1. It’s too vague to rank on any query
  2. Your query shares no vocabulary with it
  3. It’s below memory.minFactSimilarity (0.45)
  4. It’s visibility-scoped to a different agent or device

It ranks in why but the agent doesn’t use it

Section titled “It ranks in why but the agent doesn’t use it”

memory.injectionFloor (0.6) is higher than the search floor, deliberately — injecting weak matches into every prompt is worse than injecting nothing.

Or the agent isn’t calling search at all. For MCP clients that’s a prompting problem; see Integrations.

An empty recall is sometimes infrastructure, not an empty brain:

Terminal window
sigil doctor # daemon up? database reachable? embedder working?
sigil status # is there anything stored?
Terminal window
sigil maintain # promote, close editing windows, consolidate edges
sigil facts --limit=100 # scan for duplicate pile-up

Terminal window
sigil connect
sigil doctor --deep
ls -l ~/.sigil/bin/sigil-mcp

Restart the client — most read their MCP config only at startup. Validate the JSON. Confirm you added the inner sigil object, not the whole {"mcpServers": …} wrapper, if your client’s format expects just the entry.

Prompting, not plumbing. Each integration page has the exact wording for its client. The instruction that does the most work is “before answering questions about this project, call search”.

The token rotated:

Terminal window
sigil register --http --print

Update the Authorization header in your client config.


Cold hook invocation is 200–400ms, then warm. If that’s unacceptable, remove only the UserPromptSubmit entry from ~/.claude/settings.json — you keep asynchronous capture and the zero-latency hot-context snapshot, and lose per-prompt dynamic search.

Expected — it’s the expensive operation. Check queue depth on the dashboard’s Engine screen and raise ingest.workerConcurrency if your machine has headroom (needs a restart).

On Ollama, ingest is much slower still. Consider a hosted model for llm.extractionModel only, keeping embeddings local.

If the managed-session engine is on, lower poolSize or tokenBudget. Otherwise check llm.maxClaudeProcs (default 4) — that semaphore exists because an unbounded ingest fan-out once produced 1600+ live claude sessions.


Terminal window
sigil facts --limit=50
sigil forget <id> # wrong fact
sigil visibility <id> agent # right fact, wrong audience
sigil visibility <id> device # right fact, wrong machine
sigil pod archive <uid> # a whole stale context

For something that’s outdated rather than wrong: just state the current truth. AUDM supersedes the old fact and keeps the history.

Terminal window
sigil export --format=json --output=backup.json # first
sigil reset --keep-db # config only
sigil reset # everything

Terminal window
sigil doctor --deep
sigil daemon logs
cat ~/.sigil/.hook-errors.log
sigil status

Those four outputs describe almost any Sigil problem completely. Include them when you open an issue.