Skip to content

CLI reference

Every rationale command — setup, context, the Control Room, human authority, migration, and maintenance.

Setup

Command Purpose
init [--skip-agent-config] Create the .rationale/ canon, or keep it intact when it exists, and configure detected agents.
install-agent [--dry-run] [--refresh-skills] [--global-only] Register the MCP server per user and write the protocol and skills into the project. Idempotent.
uninstall-agent [--global-only] Revert exactly what install-agent wrote.
update Install the latest release of your channel through the installed helper.

Context

Command Purpose
health Project identity, Git revision, working tree, provider status, and coverage.
prepare <target> [--intent "…"] [--repo-path <path>] Compile the same context packet an agent receives.
serve [--client <claude-code|codex|cursor>] Run the persistent MCP stdio server.
ui [--port <n>] [--no-open] Open the read-only Control Room on 127.0.0.1.

Human authority

Command Purpose
pin <record-id> [--reason "…"] Fix a Record: agents use it but cannot replace it without your decision.
unpin <record-id> [--reason "…"] Return a pinned Record to normal authority.
conflicts [--json] List agent assertions that tried to replace a pinned rule.
resolve <conflict-id> <keep-pinned|adopt-new> Decide a conflict. adopt-new requires declared authority.
review-record <record-id> Correct, dispute, revoke, supersede, change authority, or add evidence to a Record, with an audited lifecycle event.

pin and unpin require an interactive terminal and an actor declared under authority: in .rationale/config.yaml, and ask you to type the Record id to confirm. resolve also requires an interactive terminal; adopt-new additionally requires a declared actor. An agent can never run them for you.

Migration and maintenance

Command Purpose
migrate [--dry-run] [--json] Pass pre-1.0 pending proposals through the capture gate: valid ones become Records with migrated provenance, noisy ones are archived with their reason. Nothing is deleted.
review Legacy: confirm pre-1.0 proposals one by one. Normal work never creates proposals.
doctor [--check] [--repair] [--json] Find invalid severities or authorities, Records without bindings, broken paths, dangling Subjects, and unmigrated proposals. --check exits 1 on findings; --repair asks per finding.

Common options

rationale health --project-root /path/to/project
rationale prepare "src/auth.rs::resolve" --intent "accept expired tokens for one minute"
rationale install-agent --project-root /path/to/project --dry-run

--project-root is accepted by every project command except init, which runs from the project root. --no-mascot (or RATIONALE_NO_MASCOT=1) silences Chestie. --help on any command is side-effect free.

Environment

Variable Effect
RATIONALE_PROVIDER=none Disable the structural provider.
RATIONALE_ACTIVITY=off Disable local activity and operation snapshots.
RATIONALE_SKIP_AGENT_CONFIG=1 Skip agent configuration in init.
RATIONALE_CHANNEL=stable|preview Release channel for the installer and update (default stable).
RATIONALE_VERSION, RATIONALE_INSTALL_DIR Pin an installer version or change the binary directory.

Output boundary

Commands with a machine contract keep JSON on stdout; diagnostics and Chestie go to stderr. serve never prints anything to stdout except MCP messages.