Operations
Running the daemon
One long-lived process per machine, holding the connection pool, caches, write queue, and peer endpoint. It auto-starts on first use — these commands are for explicit control.
sigil daemon statussigil daemon start [--foreground]sigil daemon stopsigil daemon restartsigil daemon logs [--follow]sigil daemon open # open the dashboardsigil daemon url # print the URL with its auth tokenWhy it exists
Section titled “Why it exists”A hook runs on every prompt you type. Cold-starting Node, connecting to Postgres, and loading an embedding client costs 200–400ms — noticeable on every interaction.
The daemon keeps that warm, so hooks and CLI calls are a Unix socket round trip against an already-connected process. It also gives you one writer (a serialized queue, which matters enormously for the embedded PGlite database), one shared embedding cache, and one stable peer identity for device pairing.
| Path | |
|---|---|
~/.sigil/sock | Unix socket — hooks, CLI, stdio MCP |
~/.sigil/sigild.pid | PID file |
~/.sigil/sigild.log | Append-only log |
~/.sigil/heartbeat.json | Liveness |
~/.sigil/.spawn.lock | Prevents concurrent spawn races |
~/.sigil/.daemon-breaker.json | Circuit breaker state |
All recreated on start. Safe to delete while stopped.
The circuit breaker
Section titled “The circuit breaker”If the daemon fails to spawn repeatedly, a breaker trips and stops further attempts rather than retrying forever — which would turn a broken install into a fork bomb on every prompt.
When tripped, hooks fail silently and fast, your prompts still work, and sigil doctor tells you what happened.
sigil daemon logs # what actually failedsigil daemon start # clears the breaker on successThe HTTP server
Section titled “The HTTP server”| Setting | Default | |
|---|---|---|
http.enabled | true | (restart required) |
http.host | 127.0.0.1 | Loopback only (restart) |
http.port | 7777 | (restart) |
Serves the dashboard and the HTTP MCP transport, gated by a bearer token at ~/.sigil/gui.token.
Running under launchd or systemd
Section titled “Running under launchd or systemd”The daemon auto-starts on demand, so a service definition is optional. It’s worth it on a server where agents run unattended and you want the daemon up before they are.
[Unit]Description=Sigil memory daemonAfter=network.target
[Service]Type=simpleExecStart=%h/.sigil/bin/sigil daemon start --foregroundRestart=on-failureRestartSec=5
[Install]WantedBy=default.targetsystemctl --user enable --now sigil<?xml version="1.0" encoding="UTF-8"?><plist version="1.0"><dict> <key>Label</key> <string>dev.sigil.daemon</string> <key>ProgramArguments</key> <array> <string>/Users/you/.sigil/bin/sigil</string> <string>daemon</string> <string>start</string> <string>--foreground</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/></dict></plist>launchctl load ~/Library/LaunchAgents/dev.sigil.daemon.plistWatching it work
Section titled “Watching it work”sigil daemon logs --followThe dashboard’s Activity screen is better for most debugging — it streams each hook fire, search, classification, and LLM call with model and latency, filterable by agent.
The Engine screen shows worker pool state, queue depth, and database connection detail. If ingest feels slow, that’s where the answer is.
Restarting
Section titled “Restarting”Most configuration changes apply live — the in-memory config cache updates on every patch. Settings that need a restart are marked in Configuration and the dashboard restarts for you when you apply them.
sigil daemon restartsigil update restarts it automatically after fast-forwarding.
Version drift
Section titled “Version drift”If a daemon from an older version is still running after an update, Sigil detects the mismatch and restarts it — otherwise the stale process keeps serving and the update silently does nothing.
sigil daemon status # shows the running versionStopping it
Section titled “Stopping it”sigil daemon stopMemory is not lost — it’s in your database. Hooks fail silently while it’s down, and it auto-starts again on the next CLI call or hook fire.