Skip to content

Reference

Configuration

All configuration lives in ~/.sigil/config.json, chmod 600. Edit it through the dashboard (Settings) rather than by hand — the wizard validates and live-tests what it writes.

  • Sparse on disk. Only explicitly-set values are written. Defaults live in code and merge at read time, so defaults track the code instead of freezing into a stale file.
  • Versioned. schemaVersion plus ordered migrations run on load. Unknown keys are dropped.
  • Atomic. Written temp-then-rename, chmod 600.
  • Live. The daemon’s in-memory cache updates on every patch, so most changes apply without a restart. The ones that don’t are marked below.

KeyDefault
modenullembedded · local · docker · url
urlnullConnection string. Takes precedence when set.
hostlocalhost
port5432
namesigil
usersigil_app
passwordnull

Recognized providers — Neon, Supabase, RDS, Render, Railway, CockroachDB — get sensible SSL defaults automatically. Override with ?sslmode=… in the URL.

embedded runs PGlite in-process against ~/.sigil/db. Zero install, single machine only.


KeyDefault
providernullopenrouter · openai · anthropic · ollama · claude-cli · codex
modelprovider default
apiKeynullStored per chosen provider
hostnullOllama host — defaults to http://localhost:11434
maxRetries3
requestTimeout60000HTTP timeout (ms) for network providers
cliTimeout120000Timeout (ms) for CLI providers and local Ollama generation
maxClaudeProcs4Hard ceiling on concurrent claude processes
cliPath''Explicit path to the claude binary
codexPath''Explicit path to codex
codexExtraArgs[]e.g. ['-c', 'model_reasoning_effort="low"']
KeyCalled
extractionModelPer chunk — high volume, cheap model
decisionModelPer AUDM decision — judgement, worth a smarter model
entityModelEntity extraction

Use provider:model syntax:

extractionModel = openrouter:qwen/qwen3.5-flash
decisionModel = openrouter:anthropic/claude-sonnet-latest

Extraction is volume work; AUDM is judgement work. Splitting them is the highest-leverage tuning in Sigil. See Deduplication.

The cap exists because an unbounded ingest fan-out once produced 1600+ live claude sessions, pinning RAM and tokens. Every spawn routes through one semaphore, so excess calls queue rather than fork. Default 4 keeps throughput while making that failure impossible.


Warm claude CLI workers in tmux, amortizing agentic cold-start across many ingest calls. Opt-in — when disabled the provider transparently uses the one-shot path, so nothing breaks. Only meaningful on a host with both tmux and the claude CLI. All keys need a daemon restart.

KeyDefault
enabledfalse
poolSize1Workers per source type. 1 = strictly serial.
tokenBudget60000Recycle a worker after ~this many tokens — caps context bleed and memory creep
taskTimeoutMs120000Dead-man timeout per task → one-shot fallback + recycle
firstTaskTimeoutMs45000Boot handshake window. Must clear a cold claude TUI render (~10s) plus one agent turn.
healthProbeMs15000How often busy workers are swept for a wedged interactive dialog
clearBetweenTaskstrue/clear between tasks

KeyDefault
providernullopenai · voyage · openrouter · ollama
modelmxbai-embed-large
apiKeynull
hostnullOllama host

Dimension is not configurable. Every embedding is 1024 dimensions, pinned in code and in the schema so the two can never drift. A model that can’t emit or truncate to 1024 is rejected at setup.

Changing provider invalidates existing vectors. Sigil reports how many rows are affected and makes you choose.


AUDM thresholds and search floors. All in Settings → Advanced.

KeyDefault
skipThreshold0.88Above this similarity, skip as a duplicate
ambiguousThreshold0.78Above this, hand the decision to the LLM
supersedeThreshold0.72Floor for considering a supersession
supersedeScanLimit8Existing candidates compared against
minFactSimilarity0.45Search relevance floor — below this, results are dropped
injectionFloor0.6Automatic injection floor. Higher than the search floor, deliberately.

KeyDefault
synthesizetrueHave an LLM write an answer from retrieved facts
synthesizeModel''Provider default when empty

KeyDefault
eagerExtracttrueExtract facts at write time
extractRelationsfalseDiscover graph relations during ingest. Off — a coalesced background job handles cross-document edges more cheaply.
graphGleanRounds0Extra passes per chunk hunting for missed entities. Each round is another LLM call per chunk.
workerConcurrency2Background workers (restart required)
maxJobAttempts3Retries before a job is failed

Co-retrieval edge behaviour at the entity layer. See Ranking.

KeyDefault
enabledtrue
eta1How much one co-retrieval strengthens an edge
halfLifeDays30Edges decay; unused associations fade
cap50Strength ceiling
minEffective0.5Below this, an edge is ignored
rrfWeight0.3Influence on ranking
maxWriteEntities12Entities strengthened per search — bounds the O(n²)
expandPerSeed3Expansion breadth per seed

KeyDefault
namespacedefaultWhere this install writes. Always exactly one.
searchNamespaces[]Where this install reads. Empty means “just my own”; * means everything.

searchNamespaces exists for one case: two installs sharing a database under different namespaces that should still see each other.


KeyDefault
enabledtrue(restart required)
host127.0.0.1Loopback by default. Changing this exposes the dashboard and MCP HTTP transport to your network. (restart)
port7777(restart)

KeyDefault
modesolosolo · master · follower · lite-follower
enabledfalse
masterNodeIdnullSet by sigil join

KeyDefault
identity.namenullYour name — used in prompts and stored as your first memory
preferences.noUpdateCheckfalseSkip the periodic update check

Artifact storage for exports and generated files.

KeyDefault
storagelocallocal · s3
dir./output
s3.endpoint · s3.bucket · s3.region · s3.accessKey · s3.secretKey · s3.publicUrlS3-compatible target

Only bootstrap, runtime, and process-identity values remain:

VariablePurpose
HOMELocates config.json itself
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

Per-invocation CLI flags still override transiently. Those are explicit one-shot intent, not a file.


Terminal window
sigil doctor # includes config validation — catches provider/model mismatches
cat ~/.sigil/config.json

The file is sparse, so anything you don’t see is at its code default. That’s expected, not a missing key.