Skip to content

Reference

CLI reference

Terminal window
sigil <command> [options]
sigil --help
sigil <command> --help

Running sigil with no arguments starts the daemon and opens the dashboard.

Setupinit · update · connect · uninstall · doctor · migrate · reset
Memoryremember · ingest · search · why · facts · forget · docs · context · export
Organizationpod · kind · session · namespace · visibility
Operationsstatus · maintain · daemon · register
Devicespair · join

Terminal window
sigil init [--url <postgres-url>]

The setup wizard, in the terminal. Drives the same engine as the dashboard and writes everything to ~/.sigil/config.json.

Five steps:

  1. Database — Built-in (PGlite, zero install) · local Postgres · Docker · external URL
  2. LLM provider — Claude Code · OpenRouter · OpenAI · Anthropic · Ollama
  3. Embeddings — OpenAI · Voyage · OpenRouter · Ollama (all pinned to 1024 dimensions)
  4. Coding agents — connect Claude Code, Cursor, Codex CLI, Kiro, Hermes
  5. Your name — stored, and written as your first memory
FlagEffect
--url <url>Skip the database picker. Creates the database if missing, enables pgvector, applies migrations.

Idempotent — re-running preserves existing configuration.

Terminal window
sigil update [--check] [--force]

Fast-forwards the git clone at ~/.sigil/app to the latest release branch and runs pending migrations. There is no npm package to bump.

FlagEffect
--checkReport whether an update is available; don’t apply it
--forceRe-pull and reinstall even if already current

A failed migration rolls the update back rather than leaving you half-upgraded.

Terminal window
sigil connect [--clients <a,b,...>] [--all] [--dry-run]

Re-pins the launcher shims in ~/.sigil/bin/ to the current install and re-syncs each client’s generated config — Claude Code hooks and CLAUDE.md, Cursor, Codex CLI, Kiro.

Run this when memory stops working after an upgrade, a reinstall, or a Node version switch. It fixes stale paths without redoing setup, and touches no database, provider, or API key.

FlagEffect
--clients <a,b,…>Client ids: claude-code (claude), cursor, codex-cli (codex), kiro, hermes
--allReconnect every detected client without prompting
--dry-runShow what would change; write nothing

Non-interactive with --clients/--all, or when stdin isn’t a TTY.

Terminal window
sigil uninstall [--dry-run]

Removes Sigil’s entries from selected AI clients: MCP entry stripped (other entries preserved), instructions/rules/steering file deleted, hook entries removed for Claude Code.

Your data — ~/.sigil/, the database, stored facts — is not touched. Use reset for that.

Terminal window
sigil doctor [--deep]
sigil doctor --ack

Checks config location and validity, database connection, stored data counts, LLM provider, embedding provider, hook registration, and the hook error budget.

FlagEffect
--deepRound-trip each connector — actually spawns the MCP server and runs a hook, proving the integration works rather than that its files exist
--ackAcknowledge current hook errors without running checks

Exits non-zero after five unacknowledged hook errors in 24 hours, so CI can catch a degrading install.

Terminal window
sigil migrate

Runs pending database migrations. update does this for you; you need it directly only after restoring a dump.

Terminal window
sigil reset # confirm, then drop the database and wipe everything
sigil reset --yes # skip the prompt (scripting)
sigil reset --keep-db # wipe config and disconnect agents, keep the data

Destructive. Export first.


Terminal window
sigil remember "fact" ["fact2" ...]
sigil remember --bg "fact1" "fact2"
echo "a fact" | sigil remember

Saves one or more short, self-contained facts. Each quoted argument is a separate fact; with no arguments, each non-empty line on stdin becomes one.

FlagEffect
--bgReturn immediately; complete the write in a detached process
--namespace=<ns>Target namespace
--pod=<name>Attach to a specific pod instead of the one derived from your working directory

Output reports what AUDM decided: Remembered. (1 new), Already known., or a combination.

Terminal window
sigil ingest <file|url|glob> [options]
Terminal window
sigil ingest ./docs/README.md
sigil ingest "docs/**/*.md"
sigil ingest https://example.com/page --wait
sigil ingest file1.md file2.md --namespace=engineering
FlagEffect
--waitBlock until ingestion finishes and report results. Default is to queue in the background.
--namespace=<ns>Target namespace
--skip-factsStore and embed chunks; extract no facts
--skip-entitiesSkip entity linking
Terminal window
sigil search "query" [options]
FlagEffect
--limit=<n>Max results (default 10)
--namespace=<ns>One namespace, or several comma-separated
--all-namespacesSearch every namespace in the store
--scopeRestrict to the active project and session pods
--graph / --no-graphExpand through the entity graph
--routeLLM query routing
--synthesizeReturn a written answer instead of a list
--chunksInclude raw chunk matches
Terminal window
sigil why "<query>" [--namespace=<ns>] [--limit=5] [--pod-scope=auto|global|<name>,<name>]

Runs the same hybrid search the UserPromptSubmit hook uses and prints the per-fact breakdown — fused RRF score, Hebbian boost, category, importance, confidence, and source pods.

The primary retrieval debugging tool. See Debugging retrieval.

Terminal window
sigil facts [--namespace=<ns>] [--category=<c>] [--limit=<n>]

Lists stored facts with their ids. Default limit 20. [VITAL] marks vital importance.

Terminal window
sigil forget <id>

Deletes a fact. The id prefix printed by facts or search is enough.

Terminal window
sigil docs # documents for the current project
sigil docs <uid> # print one in full
sigil docs --all # every project
FlagEffect
--namespace=<ns>Filter by namespace
--type=<t>Filter by source type: file, raw, url, …
--limit=<n>Max documents listed (default 50)
--max-chars=<n>Truncate printed text
Terminal window
sigil context [--namespace=<ns>] [--limit=<n>] [--explain]

Rebuilds the hot-context snapshot in ~/.sigil/CLAUDE.md. Runs automatically after remember and ingest.

FlagEffect
--limit=<n>Max facts (default 20)
--explainDon’t write — print which pod kind each fact came from
Terminal window
sigil export [--format=json|markdown] [--namespace=<ns>] [--output=<path>]

Exports facts, entities, and documents. json by default; markdown for reading. Writes to stdout unless --output is given.


Terminal window
sigil pod list [--type=<t>] [--namespace=<ns>] [--limit=20]
sigil pod show <uid>
sigil pod create --type=person --name="<name>" [options]
sigil pod archive <uid>
sigil pod delete <uid> --confirm

create supports --type=person today. Session and project pods are created automatically.

Person options: --slack=U123 · --github=<username> · --email=<addr> · --role="…" · --relationship=manager|report|peer|external · --notes="…" · --namespace=<ns>

Terminal window
sigil kind list
sigil kind show <name>

Inspect registered pod kinds and their contracts. See Pod kinds.

Terminal window
sigil session current # active session uid + summary
sigil session list [--limit=10]
sigil session show [<uid>] # defaults to the active session
Terminal window
sigil namespace list
sigil namespace delete <ns> [--confirm]
Terminal window
sigil visibility <fact-id|uid> <shared|agent|device>
ScopeWho can retrieve it
sharedEvery device and every agent — the default
agentOnly the agent that wrote it
deviceOnly the machine that wrote it

Takes effect on the next read, on every device. See Provenance and visibility.


Terminal window
sigil status [--namespace=<ns>]

Knowledge base statistics — documents, chunks, facts, entities, relations, and lifecycle stage distribution.

Terminal window
sigil maintain

Periodic memory maintenance: promote eligible fresh facts, close editing windows, consolidate graph edges. Monthly is plenty. See Memory decay.

Terminal window
sigil daemon start [--foreground]
sigil daemon stop
sigil daemon restart
sigil daemon status
sigil daemon logs [--follow]
sigil daemon open # open the dashboard
sigil daemon url # print the URL with its auth token

The daemon auto-starts on first use; these are for explicit control.

File
~/.sigil/sockUnix socket
~/.sigil/sigild.pidPID file
~/.sigil/sigild.logAppend-only log
Terminal window
sigil register [--http] [--print]

Registers the MCP server. By default a stable stdio launcher at ~/.sigil/bin/sigil-mcp — because the registration points at a shim rather than a versioned path, it survives Node switches and reinstalls.

FlagEffect
--httpRegister the daemon’s HTTP transport instead (/mcp + bearer token). The URL never changes.
--printPrint the config without modifying any files

Terminal window
sigil pair create --name <device-name> [--role <role>] [--ns ns1,ns2] [--ttl <seconds>]
sigil pair list
sigil pair revoke <id>

Run on the master. Prints a plaintext code once, which is never stored.

RoleGrants
readerRead-only — search, status
writerRead and write — remember, ingest (default)
adminFull access, including device management
Terminal window
sigil join <master-node-id> <pairing-code> [--name <name>]
[--addresses host:port,host:port] [--relay <url>] [--lite]

Run on the joining device. Iroh resolves the master’s transport details automatically; --addresses and --relay override that. --lite joins as a lite-follower that proxies everything and stores nothing locally.

See Multi-device.


CodeMeaning
0Success
1Command error, or doctor found five or more unacknowledged hook errors

Configuration lives in config.json, not the environment. The only variables Sigil reads are ones that cannot live in a file:

VariablePurpose
HOMELocates ~/.sigil/
SIGIL_PGLITE_PATHRedirect the embedded database path (tests, launch)
SIGIL_BRANCHRelease-lane selector, set by install.sh
SIGIL_DEBUGVerbose diagnostics
SIGIL_AGENT, SIGIL_WORKER_ID, SIGIL_SOURCE, SIGIL_DAEMON_PROCESS, SIGIL_SUPERVISEDPer-process identity and IPC — set by Sigil itself

A stray LLM_PROVIDER or DATABASE_URL in your shell has no effect. That’s deliberate: it used to be possible for a global env var to silently override what onboarding saved.