Operator Control Plane

Owner's Manual — Refactored Edition

This is a snapshot. Generated from repository snapshot cab4a7a, published 2026-09-16. For current behavior, see the repository README.

What Operator Control Plane Is

A local-first control plane for AI coding work. Its center of gravity is a repository-local ledger that records claims, evidence, verification, and the doctor audit trail. It is a trust record for work, not a generic workspace or hosted service.

The roles are distinct:

RoleWhat they do
BuilderCreates claims and drafts evidence
VerifierEstablishes trusted sign-off from a distinct OS identity
AdministratorHandles enrolled authority boundary and host prerequisites
HarnessRuns delegated or study work — not a trust authority
OwnerThe person reading this manual and deciding what the product should promise
Key boundary: Operator is not Bulkhead Tau, Project Phoenix, or an internal component of another product. It is a standalone, domain-neutral control plane. BT, BN, PBC are external consumers, not architectural components. The dependency direction is one-way: Bulkhead Tau may use Operator; Operator must never import or require Bulkhead Tau code.

Quickstart

pip install -r requirements.txt        # runtime: just PyYAML
pip install -r requirements-dev.txt    # tests/lint: pytest, ruff, black, isort
./operator --help

mkdir /tmp/operator-demo && cd /tmp/operator-demo
/path/to/operator init                 # creates .operator/ ledger in current dir
/path/to/operator doctor               # consistency check → "All records consistent."
python3 -m pytest tests/test_operator.py -q   # repo CLI, ledger layout, identity, doctor, usage
python3 -m pytest tests/ -q                     # everything (some suites need Linux)

The ledger (.operator/) is gitignored — it's your work history, not the tool. Its durable local event history is stored in .operator/ledger.sqlite3.

The Trust Model

Operator enforces a strict partition: an agent's claim ("I did X") is only trustworthy if it has evidence attached and is verified by a distinct identity. The system records: task → claim → evidence → verification → session → usage.

The handoff, not the blur

Work is not trusted until it passes from builder output into verifier judgment. Doctor keeps checking the result afterward — it is a continuing audit, not the step that creates trust.

Work → Builder → Draft claim + Evidence → Verifier → Trusted record → Doctor (ongoing)

Draft vs. verified — different thresholds

The same problem (e.g., missing evidence) is warning-level on a draft but a blocking failure on a verified record. A warning on draft material is not proof that the trust boundary has failed.

Closeout is provisional. A later negative verifier write on the transition claim can reopen the task and clear the closeout state. Closeout is not one-way.

Core Workflow

The everyday loop is the local path. By default, the product stays local:

  1. Task creation — open a task with an objective, optional assignee and reviewer.
  2. Claim registration — a builder registers a typed, gate-bound claim (e.g., test_passes, file_exists, numeric_measurement).
  3. Evidence attachment — local files are copied into the ledger and fingerprinted with SHA-256, byte size, and modification time.
  4. Verification — a different OS UID than the claim author writes status-bearing evidence.
  5. Doctor audit — read-only consistency check across the ledger.
  6. Session tracking — track coding session and cost, then close out with a handoff brief.

What the daily loop looks like

# Open a task
./operator task-create --objective "Add retry to the uploader" --id up-retry

# Builder registers a claim
./operator claim-add --task up-retry --type test_passes \
    --text "uploader retries 3x on 5xx" --gate tests/test_upload.py

# Evidence + advisory verification
./operator evidence-attach tests/out/upload.log --task up-retry --claim claim-0001 \
    --type test_output --status verified --verified-by reviewer \
    --verify-cmd "pytest -q tests/test_upload.py"

# Doctor reads the record
./operator doctor

# Track session cost, generate handoff
./operator session-start --task up-retry --harness claude
./operator session-end usage-0001 --outcome useful --cost 12.50
./operator handoff-add --task up-retry --changed "uploader.py" --verified "retry test" --open "tune backoff"
./operator export-brief --for codex --task up-retry

A runnable version of this lives at examples/verified-work/run.sh and is executed on every CI run.

Verified facts

Ledger Governance

The ledger is the product's memory: it decides what work exists, which evidence supports it, and what can be trusted later.

What is durable, what is not

SurfaceDurable?Can be rebuilt?Backup this?
ledger.sqlite3 — append-only event history✅ YesNo — it's the sourceYes, critical
YAML projections✅ Yes (read-only)Yes — from SQLiteOptional
Compatibility read surface✅ YesYes — from SQLiteNo
Read-only snapshots✅ YesYesNo
The rule: The append-only SQLite ledger is the only record that must survive restore and audit. The other surfaces can be rebuilt from it. Back up canonical history, not the projections.

Store replacement is never silent

When the authority store or projection layer has been replaced, the system does not silently adopt the new incarnation. It requires explicit reset acknowledgment:

  1. New store incarnation appears → system detects mismatch
  2. System asks for explicit reset acknowledgment
  3. After acknowledgment: resets sequence progress, drops prepared work tied to old store
  4. Retries prepared broker work idempotently

Recovery is not repair

Doctor reports divergence but does not silently repair either side. A changed verified source or retained snapshot fails closed; an unavailable original source is reported separately when its retained snapshot is still current. Remote evidence without a local snapshot is explicitly uncheckable.

When to Use Enrolled Authority Mode

Enrolled authority is an optional privileged layer above the repo-local ledger. It matters when you need a separate host-managed trust boundary, not just local claim and evidence tracking.

The tradeoff

Local ledger (default)Enrolled authority
Trust boundaryRepository-local, per-repoHost-managed, broker-enforced
Setup./operator initRoot-only, host preflight required
Role separationAdvisory (single_user) or enforced (distinct UIDs)Broker-gated, OS-identity-bound
RecoveryLocal restoreExplicit reconciliation step
CostLow — works immediatelyHost prerequisites, operational surface
Owner decision: If the team only needs local evidence tracking, the local ledger is enough. If the team needs a separate host-managed trust boundary with stronger role separation and recovery discipline, enrolled authority is worth the cost.

What enrollment does

What enrollment does not do

Provisioning and rollback safety are not proven from source alone. A checkout is not a production install. Reading the code does not demonstrate that recovery works on a live host. This applies to the broker path specifically.

Operating Safely and Recovering Cleanly

Recovery follows the boundary that failed. Don't treat every stop the same way.

When this happensUseWhat it does
Host or enrollment boundary failedre-stageTrust the machine again — check privileges, socket, policy, registry
Saved state changed underneath the productreconcileExplicitly adopt changed state with reset acknowledgment
Checkpointed run can continue on same validated planresumeContinue from stored run ID inside the cataloged plan

Recovery principles

What looks solid

Harnesses, Delegation, and Study Work

These are support paths, not a trust model

Harness and study work freeze a concrete execution shape. They make a run more specific by binding it to named harness profiles and explicit phases. But this structure is support infrastructure, not a replacement for the ledger's claim-evidence-verification story.

The distinction: The ledger answers whether a claim has been backed by evidence and verified. A study plan answers how a particular run should unfold, in what order, and under what limits. If a study run pauses for approval or quota, that pause changes execution, not truth.

Three execution surfaces

Execution pathEntry controlReplay ruleScope
Main study runCatalog validation, phase order, harness profile count, mutating vs. read-only shapeCompleted phases replay idempotently; quota exhaustion pausesStudy execution with explicit phase states
Checkpointed dogfoodSaved phase checkpoints + approval and quota gatesReplay only when saved plan fingerprint matches; failed work needs quota-reset acknowledgmentDogfood replay with retained checkpoints
Local A/B raceOnly two local OpenCode armsLocal comparison onlyNarrow comparison between two local arms

What is proven, what isn't

Confirmed hereNot proven here
Harness support12 cataloged profiles seeded at operator initEvery named external provider binary works everywhere
Dogfood replayCheckpointed, fingerprint-validatedEvery interrupted host interaction can safely continue
Local A/BTwo local arms on one machineGeneral benchmark or provider matrix
Warning on overreading: The local A/B tool is deliberately narrow. Its output is a measurement of one machine on one day, not a general benchmark. The comparison is useful precisely because it stays bounded.

Command Reference

The operator CLI exposes ~23 subcommands across the task → claim → evidence → verification → session → usage lifecycle. Run ./operator <command> --help for full flags.

Setup

CommandPurpose
operator initCreate the .operator/ ledger in the current repo. Re-running on an existing YAML-only ledger baselines those records into SQLite.

Tasks

CommandPurpose
task-create --objective "..." [--id ID] [--repo R] [--assign A] [--review R]Open a task
task-show [ID]Show a task's claims, evidence, and status
task-route --task ID --review H / --clear-reviewAppend auditable correction to reviewer routing
task-listList all tasks with outcome summaries
decide --claim ID --decision approve|reject|defer --rationale "..."Operator ruling on a frozen proposal claim. Records UID; does not require a distinct verifier UID.

Claims

CommandPurpose
claim-add --type TYPE --text "..." [--task ID] [--gate GATE] [--verify-cmd CMD] [--by WHO]Register a claim. --gate is an artifact path; --verify-cmd is the command a verifier reruns.
claim-show [ID] / claim-list [--task ID]Inspect claims

Claim types: file_exists, test_passes, numeric_measurement, real_data, model_output, firmware_behavior, deployment_state, supervision_credit, paper_or_report_claim

Evidence & Verification

CommandPurpose
evidence-attach PATH --claim CID --type TYPE [--hash SHA256] [--status {verified,false,quarantined}] [--verified-by WHO] [--verify-cmd CMD]Attach an artifact and optionally verify the claim. Local files copied into ledger, fingerprinted with SHA-256.
verify RUN_DIRAutomated audit of a run directory's artifacts
doctor [--audit]Read-only consistency check. Flags unverified claims, self-verification, advisory verification, malformed UID-isolated metadata. Never executes anything.

Evidence types: run_log, manifest, database_query, test_output, git_commit, screenshot, transcript, paper_section, external_doc, session_crystal

Sessions

CommandPurpose
session-start --harness H [--task ID] [--force]Open a coding session
session-end usage-XXXX --outcome {useful,partial,no_go,quarantined,reverted,unknown} --cost NClose session with outcome and cost
session-list [--open] [--task ID] [--harness H]List sessions

Usage / Quota

CommandPurpose
usage-add --harness H [--model M] [--outcome ...]Capture a pasted usage snippet
usage-import --harness {claude,codex,gemini-agy,prime-agent} [--since ...] [--dry-run]Auto-ingest token/usage from harness session-log adapters
usage-summary [--by-task] [--by-harness] [--by-model] [--by-lane] [--offload-audit] [--metering]Aggregated usage view
Lane economics: Cost is the driver's price, not the author's (usage-summary --by-lane). Transcript chores (summaries, rehydration) are "cheap-lane" work; don't run them in expensive seats.

Briefs & Handoff

CommandPurpose
brief --for H [--task ID] / export-brief --for H [--task ID]Generate a harness-specific brief (copy-paste for the next agent)
handoff-add [--task ID] [--changed ...] [--verified ...] [--claimed ...] [--open ...]Record a closeout

Headless Delegation

./delegate-brief --task ID --brief FILE --harness {claude,codex,grok,gemini-agy,fable,openrouter} [options]
# Preserves brief under --deliver/.brief.md, optional --freeze path hashes, full log + exit code
# --record writes an Operator handoff (dispatch outcome only, not acceptance)

Configuration

Operator is driven by files under .operator/ (created by init):

.operator/identity.yaml — Identity-enforcement policy

mode: enforced          # or: single_user (advisory)
uids:
  1001:
    name: builder
    roles: [builder]
  1002:
    name: reviewer
    roles: [verifier]

In enforced mode, a verification only counts when the verifier's OS UID differs from the claim author's. A different harness name buys nothing. Two agents under one Unix user are one identity.

In single_user mode, status writes remain available and are recorded as advisory, never uid_isolated. A "verified" status is advisory — the builder's own assertion, not an independent check.

.operator/ledger.sqlite3

Append-only, full-snapshot event versions for task, claim, evidence, handoff, and usage/session records. Event versions allocated transactionally, linked by per-record SHA-256 hashes, protected from UPDATE/DELETE through database triggers. Doctor reports divergence but does not silently repair.

Because both SQLite and YAML live on the same writable disk, this improves local durability and auditability — it is not an off-machine backup or an adversarial tamper-proof boundary.

.operator/{tasks,claims,evidence,handoffs,usage}/

Current YAML projections (gitignored). These are compatibility read surfaces, not backup.

Root-managed external policy (P3b)

The operator-admin tool installs the standalone broker under fixed root-controlled paths. It supports strict generation-one install, append-only rotation, terminal revocation, audit, and conservative privilege preflight. This is not repo CLI integration — operator and existing .operator ledgers do not consult the external authority yet.

Open Decisions

These are owner decisions, not technical questions. The code can't answer them for you.
  1. Stay local, or enroll authority? The local path is the documented default. Enrollment buys a root-managed boundary and costs host prerequisites and operational surface.
  2. Who owns reconciliation and store-reset acknowledgment? Should explicit acknowledgment be a first-class documented step rather than an implicit one?
  3. Are study plans and phase catalogs owner-facing? They can be presented as supported product workflows or as operator-internal material.
  4. Should dogfood stay administrator-only with one acknowledged retry?
  5. Is closeout provisional until the transition claim stays verified? (The current design says yes — this is the right answer, but should it be explicit in the owner-facing docs?)
  6. Should quota exhaustion pause a study for resumption, or stop the run outright?
  7. Should root-only enrollment and rebind be documented as a separate privileged surface rather than as advanced options inside the main flow?
  8. Should warning-only doctor output be described as advisory for drafts in owner-facing documentation?

Operating Caveats

Trusted verification needs a genuinely distinct verifier. Under mode: enforced, a verification only counts when the verifier's OS UID differs from the claim author's. A different harness name buys nothing. Two agents under one Unix user are one identity.
A harness name is routing, not authority. assigned_harness and review_harness describe where work goes. Neither confers the right to bless a claim.
Enrolled authority is a separate, root-managed surface. Enrollment, rotation, revocation and rebinding are privileged operations with host prerequisites. They are not part of the daily loop.
A broker receipt is not local convergence. The broker accepting a protected change means the change was authorized, not that the repository has finished reconciling.
Durable history is local, and projections are not backup. Compatibility views can be rebuilt; they do not reconstruct the authority store. Back up canonical history, not the projections derived from it.
Status-bearing evidence can reopen finished work. Attaching evidence with a status can move a task backward or out of trusted state. Closeout is not one-way.
Doctor is strict on verified records and advisory on drafts. A warning on draft material is not the same signal as an error on a verified claim. Read the level, not just the presence of output.
Doctor never executes anything. It validates paths, bytes and identity. A recorded required_gate is an artifact path it checks for existence; the rerunnable command lives in verify_cmd and is run by a verifier, never by doctor.
Rollback and provisioning safety are not proven from source alone. A checkout is not a production install, and reading the code does not demonstrate that recovery works on a live host.