Skip to content

arbiter

Exit maintainer dev mode — restore orchestration, remove the dev marker, log the exit.

The exit door for /ca:dev: it ends the maintainer override and restores normal orchestration. It writes the exit line to .codearbiter/overrides.log before anything else, removes the gitignored dev-active marker so the statusline drops out of alarm-red, then re-presents the startup state — current stage, any blocking [CONFIRM-NN], in-flight tasks — and waits for a slash command with routing, gates, and skills all back in force. If dev mode wasn’t active, this command is a no-op.

If a prior session ended mid-dev, SessionStart already appended a synthetic close line (BY: session-cleanup | DEV: exit) and cleared the marker for that orphaned entry; this command does not write a second exit line for it.

/ca:arbiter

Takes no arguments.

> /ca:arbiter
[2026-07-02T14:41:03Z] | BY: dev@example.com | DEV: exit
dev-active marker removed; statusline back to normal.
stage: implementation · tasks: 2 open · q: 0 · overrides: 1 since last checkpoint
Orchestration restored. Awaiting a command.
GateWhenEffect
append-only auditexiting dev modean exit line is appended to overrides.log and the dev-active marker is removed before orchestration resumes
Source — plugins/ca/commands/arbiter.md (v2.9.1)
---
description: Exit maintainer dev mode — restore orchestration, remove the dev marker, log the exit.
argument-hint: (none)
---
# /ca:arbiter — restore orchestration
The exit door for `/ca:dev`. No-op if dev mode is not active.
## Flow
1. **Log exit** — append to `${CLAUDE_PROJECT_DIR}/.codearbiter/overrides.log` (append-only, `>>`):
```
[ISO-8601 timestamp] | BY: <email> | DEV: exit
```
2. **Marker** — remove `${CLAUDE_PROJECT_DIR}/.codearbiter/.markers/dev-active`; the statusline
returns to normal.
3. **Resume** — re-present the startup state (stage, blocking `CONFIRM-NN`, in-flight tasks) and
await a slash command. Orchestration, routing, and all gates are back in force.
## Hard gate
MUST write the `DEV: exit` line to `overrides.log` and remove the `dev-active` marker before resuming
orchestration — the exit is on the audit trail like the entry. MUST NOT rewrite or truncate
`overrides.log` — the append-only rule has no dev exception, on entry or exit. If a prior session
ended mid-dev, SessionStart has already appended the synthetic `BY: session-cleanup | DEV: exit` close
line and cleared the marker (`session-start.py`, observability-001). In that case MUST NOT write a
second `DEV: exit` for that orphaned entry — the close is already on the trail.
Session-scoped clearing (#271): SessionStart's synthetic close is now conditional on the marker
plausibly being abandoned rather than owned by a different, still-live session — it will NOT clobber
another concurrently-running session's live `/dev` marker or write a false `DEV: exit` for it.
`/ca:arbiter` remains the ONLY way to cleanly close your OWN `/dev` session's audit pair; do not
rely on a future SessionStart to do it for you.

View in repo