Saphan StudioDocs
Reference/Command reference

saphan init

Grant each backend's measured-minimum permissions at `<workspace>`/.claude/settings.json (interactive; law #35)

saphan init

Grant each backend's measured-minimum permissions at <workspace>/.claude/settings.json (interactive; law #35)

saphan init [flags]

Detects what <workspace>/.claude/settings.json already grants each backend, explains the trade for whatever is missing, proposes the exact bytes, and asks — default "NO". Nothing is written without an affirmative answer, and the answer (yes OR no) is always recorded.

claude-code: a measured minimum allow-list (git add/commit/status/diff — what an executor leg needs to persist its own commit; NOT go/gofmt, which is a property of the permission class, not this workspace).

codex: no allow-list is proposed. One would be theater — codex never reads .claude/settings.json (its own home is $CODEX_HOME), and it has no approval layer to gate in the first place (codex exec rejects --ask-for-approval outright). This verb prints the honest facts instead: what confines a codex spawn is the VENDOR's own OS sandbox plus the argv pins composeCodex sets — NOT a jail of this engine's, which composes none for codex on any transport (runner.backendTraits, confinable=false; nesting ours inside the vendor's was measured to fail).

A real TTY: prompts, [y/N], default "NO" on blank/anything else. No TTY: refuses by default — the ONLY way to write without a TTY is the explicit --yes flag.

Idempotent: a workspace that already carries the full claude-code minimum is reported complete and is never prompted again.

Options

OptionTypeDefaultDescription
--yesboolfalseexplicit consent to write claude-code's minimum permission patterns with no TTY prompt (a deliberate act, never a silent default)

On this page