01 / session supervisor / macOS

doff knows quiet is not stuck.

A local supervisor that observes Claude Code and desktop sessions, acts only inside configured policy, and leaves a complete JSONL decision record.

doff / fleet sweep simulation / no machine access
local runtime ready
observed sessions1 / 96 inside 10m
transcript state + reachable surface
defaultAskUserQuestion / iTerm2 reachable
create tests/run_suite.py? blocked answer recommended
validatorClaude Code / transcript current
python3 test-doff.py active observe only
sonolystCowork / says it is waiting
say the word when ready idle send continue
research-runtranscript only / no pane adapter
claude --resume 7cb4d1 visible cannot act
$doff once --dry-runready
  1. fleet awaiting sweepidle
local / macOS ~0.4s measured sweep record / JSONL

operating contract

Observe. Distinguish. Act. Prove.

doff separates the state it can know from the surface it can reach. Detection never becomes permission to act by accident.

01

Observe both stores

Claude Code transcripts carry structured tool state. Cowork sessions carry their own audit JSONL. A live iTerm2 pane adds reachability.

02

Classify before action

Question, permission, active, waiting, finished, unreadable, and unknown remain distinct outcomes. Silence alone is not evidence.

03

Act inside policy

Known confirmations can be answered; waiting work can be continued. Unreadable sessions and transcript-only sessions are never treated as reachable.

04

Leave the receipt

Question text, all options, selected answer, session identity, model, cwd, and resume command are appended locally to JSONL.

failure-aware by design

The refusal paths are part of the product.

A supervisor is useful only when broken detection cannot turn into confident action.

dry run

Think out loud, send nothing

--dry-run follows the same observation and decision path, records the decision, and suppresses delivery.

empty fleet

Empty can mean inaccessible

A shell without the iTerm2 cookie cannot enumerate live panes. doff reports that leg unavailable instead of calling it a clean sweep.

wide window

Warn with the real count

Past 24 hours, the CLI and dashboard expose how much session history the configured window can reach. It warns; it does not silently cap.

weak parse

Uncertainty produces refusal

The uncalibrated iTerm multi-select path refuses unless at least two independent menu signals agree.

current verification envelope

Receipts, not adjectives.

Claims are tied to the current tool, its measured sweep, and the latest foreground test run.

203 / 203checks passed / current run

Policy, parsing, host legs, setup route, shutdown, rendering widths, and refusal paths.

~0.4smeasured fleet sweep

The interval between sweeps dominates runtime; observation itself stays short.

JSONLdurable local record

Dry or live, every decision is inspectable after the session window is gone.

localmacOS execution

Python and the local adapters do the work. The site simulation never touches the machine.

operator surface
doff once
doff run
doff once --dry-run
doff list --all
doff show <id>
doff config

doff stop follows the same clean shutdown path as Ctrl-C and clears stale pid files rather than reporting a dead process as live.

private testing

Put a real fleet behind the contract.

Request access, report a host-specific edge case, or bring the unattended workflow that keeps requiring a witness.