saphan config
Mint and inspect ~/.saphan/config, the canonical identity file (config-mint)
saphan config
Mint and inspect ~/.saphan/config, the canonical identity file (config-mint)
Subcommands
| Subcommand | What it does |
|---|---|
saphan config init | Mint ~/.saphan/config's identity: git-first prompt, else a system proposal — identity.actor is always human-confirmed |
saphan config set | Set one key in ~/.saphan/config (git-identical: git config <key> <value>) |
saphan config show | Show the effective config-v1 identity/engine/workspace settings |
saphan config init
Mint ~/.saphan/config's identity: git-first prompt, else a system proposal — identity.actor is always human-confirmed
Interactive (a real TTY, no --from/--actor given): offers git's own
user.name/user.email first, behind a yes/no question (MANDAT.2's
"git-first ZA PYTANIEM"); answering no (or git having nothing set) falls to
a system proposal via getpwuid(getuid()) — login + GECOS, POSIX, never a
parsed id or dscacheutil call. Whichever source wins, identity.actor is
ALWAYS confirmed at its own prompt with edit (MANDAT.4's hard blade):
auto-adoption of either proposal is forbidden even when the operator
answered yes above — that only picked which proposal feeds the prompt's
default.
Non-interactive (CI-safe, no TTY prompting either way): --from git|system adopts that source directly with ZERO prompt (the flag itself IS the human's decision); or pass --actor/--display-name/--email explicitly. An incomplete source (e.g. --from git with no git user.name configured) refuses named, nothing written.
Options
| Option | Type | Default | Description |
|---|---|---|---|
--actor | string | unset | non-interactive: explicit identity.actor (bypasses lookup and any prompt) |
--display-name | string | unset | non-interactive: explicit identity.display_name |
--email | string | unset | non-interactive: explicit identity.email (optional) |
--from | string | unset | non-interactive: git | system — adopts that source directly, zero prompt |
saphan config set
Set one key in ~/.saphan/config (git-identical: git config <key> <value>)
Write ONE dotted key to ~/.saphan/config, preserving every other key the
file already carries — the same round-trip discipline git config <key> <value>
gives its own file.
Known keys:
identity.actor canonical actor identity
identity.display_name UI-only display name
identity.email optional email
engine.binary engine binary path
workspace.default default workspace path
workspace.worktree_grant_class declared permission-grant class for worktree provisioning
run.binary agent backend binary (claude/codex)
run.env comma-separated env var names passed to the backend
run.laws absolute path to the standing-law index
run.grant deprecated: permission-grant file path (use workspace.worktree_grant_class)
run.confinement who jails a spawned agent: engine or vendor
run.role_liveness_freshness how recent counts as live for dispatch locks (Go duration)
run.transcript_streaming stream-json for streaming JSONL, empty for legacy single-object
run.git_user_name git author/committer NAME every spawned leg commits as
run.git_user_email git author/committer EMAIL every spawned leg commits as
store.backend storage backend: sqlite (default) or postgres
store.postgres_dsn_env env var NAME carrying the Postgres DSN (never the value itself)
class.law_db_name CouchDB database name for law material
class.work_db_name CouchDB database name for working material
class.record_db_name CouchDB database name for the record
class.telemetry_db_name CouchDB database name for telemetry
evidence.base_url CouchDB server base URL
evidence.db_name CouchDB database name
evidence.couchdb_credentials_env env var NAME carrying CouchDB credentials (never the value)
oauth.mode self-issued (default) or external
oauth.issuer external authorization server issuer URL
trust.enforce signed-instruction enforcement: off | warn | enforce
org.supersede_policy organisation supersede policy: flag | refuse-merge | owner-decides
server.listen host:port bind address (ambiguous host-less values refused)
server.public_base_url the origin this engine asserts as its OAuth issuer (never derived from a request)
server.trusted_proxies comma-separated CIDR blocks whose X-Forwarded-*/Forwarded: this engine believes (adds to loopback)
headroom.warn_usd fleet-capacity pre-flight warning threshold (USD)
fleet.ssh_host_key_policy fleet-wide SSH host key policy: refuse | accept_rotation
scheduler.host_max_live per-host live-run ceiling
scheduler.exhausted_window_hours lane-state $0 heuristic window (hours)
scheduler.usage_probe_after_exhausted policy for usage probe after lane exhaustion
probe.model.claude-code comma-separated probe model list for claude-code backend
probe.model.codex comma-separated probe model list for codex backend
dispatch.model.<role>.<backend> default dispatch model for a role and backend
dispatch.effort.<role>.<backend> default dispatch effort for a role and backend
dispatch.verbosity.<role>.<backend> default dispatch verbosity for a role and backend: terse | normal | narrative
verify.full.argv full verification suite command (comma-separated)
verify.full.report full verification report kind
verify.full.report_path full verification report file path/glob
verify.full.timeout full verification wall-clock timeout
verify.affected.argv affected-path verification command (comma-separated)
verify.affected.report affected-path verification report kind
verify.affected.report_path affected-path verification report file path/glob
verify.affected.timeout affected-path verification wall-clock timeout
verify.provision.<alias>.source absolute host-local path of a document the suite swears by
verify.provision.<alias>.dest where that document lands in the measured tree (tree-relative)
lane.<alias>.base_url lane endpoint base URL
lane.<alias>.credentials_env env var NAME for lane credentials (never the value)
lane.<alias>.credentials_file absolute path to host-local credentials file
host.<id>.ssh_host_key_policy per-host SSH key policy override: refuse | accept_rotation
saphan config show
Show the effective config-v1 identity/engine/workspace settings
Print every config-v1 field this operator has set. --provenance names WHICH tier produced identity.actor — flag (--actor here, a preview of what an act verb would resolve), env (SAPHAN_ACTOR), file (~/.saphan/config), or unset (the tier an act verb without any of the above would refuse on, MANDAT.4). Every other field (display_name, email, engine.binary, workspace.default, run.binary/env) has only two possible tiers: file or unset.
Options
| Option | Type | Default | Description |
|---|---|---|---|
--actor | string | unset | preview identity.actor's resolution as if this verb were an act verb invoked with --actor (source: flag) |
--provenance | bool | false | print each value's source tier alongside it |