Snook-A-Look Fleet Operating Manual

A visual field guide to the autonomous agent fleet: how work moves, who does what, and where it can fail.

What the Fleet Is

The Snook-A-Look fleet is an iTerm2-based multi-pane agent system that ships code across a monorepo family: snookalook-backend, snookalook-web, snookalook-mobile, snookalook-admin-web, and snookalook-frontend. It is not a chatroom of models; it is a pipeline with defined roles, queues, audit gates, and a doctrine of scars.

Panes

iTerm2 sessions running long-lived Claude/Codex roles, launched by agents/run-<role>.sh and wired through agents/topology.json.

Conductor

A Python one-transport daemon that turns agents/inbox/<from>-<to>-<topic>-<unix>.md briefs into pane input. It deduplicates, orders, and probes liveness.

Doctrine

Founder-penned engineering law in docs/doctrine/8.x slots. Each slot captures one recurring failure class and its prescribed fix.

Live Roster

Roles are divided into pillars (planning and governance), workers (execution), and support. The kk:code-reviewer is not a pane; it is a headless subagent spawned in a worktree.

RoleClassModel / EffortJob
godpillaropus / highFounder proxy; scheduling, FS-POLL, cadence, asks founder only when required.
principalpillaropus / highOrchestrates execution, runs merge gate, filters scope-locks, owns audit receipts.
architectpillaropus / highRefines prompts, audits structural/authority/money paths, pre-dispatch gate.
curatorpillarsonnet / mediumRefines docs, audits correctness, doctrine curation, pre-dispatch gate.
infraworkeropus / mediumPillars, CI, launchd, secrets, environment wiring.
backendworkeropus / mediumFastify/Prisma server, settlement, APIs.
android / mobileworkersonnet / mediumKMP Compose Multiplatform Android builds.
iosworkersonnet / mediumiOS/KMP SwiftUI and App Store pipeline.
admin-web / webworkersonnet / mediumNext.js admin surface.
deployworkersonnet / highVercel, VPS, mobile release runs.
qa-mobileworkersonnet / mediumMaestro E2E, device installs, visual evidence.
sharedworkersonnet / mediumCross-cutting KMP shared logic.
heraldsupporthaiku / lowDocumentation-only projection (retired from execution 2026-08-26).
founder-consolesupportopus / highFounder-facing chat pane.
pr-stewardsupportsonnet / mediumThread closure, PR reply handshakes.
kk:code-reviewersubagentAgent toolIndependent code review in a worktree; never a pane, never woken.
conductordaemonopusMD inbox to pane transport; launchd supervised.

How Work Moves

A task enters through a pillar, is shaped by architect and curator, dispatched as a brief, executed by a worker, reported, and merged through principal-merge.sh.

flowchart TD A[User prompt or cadence wakeup] --> B{god or principal?} B -->|strategic / scheduling| C[god] B -->|execution / merge| D[principal] C --> E[FS-POLL + ScheduleWakeup pair] D --> F[Scope-lock filter] F --> G[Architect + Curator refine] G --> H[Brief written to agents/inbox/] H --> I[Conductor daemon] I --> J{Correct layer + refine gate?} J -->|yes| K[Wake target pane] J -->|no| L[Quarantine / reject] K --> M[Executor worker] M --> N[agents/reports/ evidence] N --> O[principal-merge.sh gate] O --> P[dev or production]

Conductor Pipeline

Audit and Merge Gates

Impact-Routed PR Review Lifecycle

  1. Contract freeze: Architect, Curator, and kk audit the final local commit before the PR opens. Each PASS names the full SHA.
  2. Build loop: open the PR, then run CI, Codex, and AGY concurrently on the exact head.
  3. Fix loop: implement only verified findings. kk reviews the new exact head and the finding reviewer receives a targeted resolution handshake.
  4. Impact-routed delta: only the role whose axis changed re-attests the exact head. Documentation/mechanical/test-only fixes carry forward with a kk scope receipt.
  5. Close and merge: resolve approved threads, immutable-head recheck, then run principal-merge.sh.
flowchart LR A[Local commit ready] --> B[Architect audit] A --> C[Curator audit] A --> D[kk subagent review] B --> E{PASS?} C --> E D --> E E -->|all PASS| F[PR opened at exact head] F --> G[CI] F --> H[Codex review] F --> I[AGY swarm] G --> J{Findings?} H --> J I --> J J -->|yes| K[Fix at new head + re-review] K --> J J -->|clean| L[principal-merge.sh] L --> M[dev merge]

principal-merge.sh Checks

Severity Floor (2026-09-14 Amendment)

SeverityAction
P0/P1Blocks merge. Must be fixed and the finding reviewer must confirm closure.
P2/P3Becomes an FU entry under agents/backlog/ with verdict: PASS, not a merge blocker.
Round capAfter codex_round_cap reviewed heads, an engineer triage marker stands in for Codex clean.

Doctrine System

Doctrine is the scar-compilation pipeline: each numbered slot is a founder-penned law born from a production incident. Slots flow from draft to LIVE and are mechanized in hooks, CI, or scripts.

flowchart LR A[Incident] --> B[Founder pen] B --> C[Numbered slot docs/doctrine/8.x] C --> D[Mechanize in CI/hook/script] D --> E[Register in doctrine-slot-tracker.md] E --> F[Loaded into CLAUDE.md table]

Sample of LIVE Doctrine Slots

SlotDomainEnforcement
8.22Secret bytes never echo into chathook + prose
8.26 v3Branch policy: mobile master, cadence mergehook + GitHub rulesets
8.31Never kill MobAI-Runnerfleet-hygiene hook
8.37Post-build daemon kill mandatoryscript + Fastlane after_all
8.40Dev feature/<slug> sub-branchesprose
8.42Architect + Curator pre-dispatch refinewake-pane gate
8.54Ktor 401 refresh race needs Mutexscript + CI
8.67Logout-drain chain isolationtest fleet
8.71Deploy env-delta ships with codeprose
model-tieringPane fixed by task type; cheap subagents for low-reasoning workprose + spawn rules

Full registry: agents/state/doctrine-slot-tracker.md. Pen history: docs/doctrine/PEN-LOG.md.

Key Decisions

Branch Policy v3

RepoProductionMerge rule
snookalook-mobilemasterFounder pen per merge + semver annotated tag
backend / admin-web / landingmainCadence-merge (audit-gated, god asks founder every 1-3 days)
AlldevUnlocked canonical integration; feature/<slug> sub-branches

Model Tiering

TierModelUse
hardopusPlanning, audits, architect, principal, god
normalsonnetImplementation, workers, qa
trivialhaikuherald projection only

Mid-session /model switch is banned. Change tier only by relaunching the pane.

Autonomy Decision Tree

  • Is the action one of the five founder-gated categories?
  • Mobile deploy, founder decision, collision, P0 critical, payment/paid-account: STOP and surface to founder (or god).
  • Is it a merge to main/master?
  • Requires curator + architect PASS on head, then principal-merge.sh.
  • Is it a dev merge?
  • Requires curator + architect + qa PASS, then merge. No founder ask.
  • Self-authorized: act, then report.

Lessons Learned

The fleet evolved through eras E1-E7. The most valuable meta-patterns and gotchas are captured here.

Top Techniques

  1. Scar-compilation pipeline: incident, pen, slot, gate, citations in hook headers.
  2. Identity-as-untrusted-input: session markers, process tree checks, fail-loud if identity is uncertain.
  3. Pointer-dispatch + payload gates: briefs live in files; wakes carry short pointers; no raw tool-call leakage.
  4. Exact-head evidence: audit receipts bind full SHAs, not branch names or timestamps.
  5. Cross-vendor quota failover: Claude/Codex defection with documented loss.
  6. Graduated-destructiveness recovery: wedge tiers ordered by what they destroy.
  7. Mechanical over behavioral: hooks and launchd replaced documented-but-fictional guarantees.

Common Gotchas

Scope Fence

Two fences keep principal from overstepping: founder-gated actions and the scope-lock registry.

Five Founder-Gated Actions

#CategoryExamples
1Mobile deploymentApp/Play Store submit, master cut, semver tag
2Founder decisionsDoctrine pen, legal/team/domain changes, product direction
3CollisionsConflicting pens needing arbitration
4Critical issuesP0: prod down, data loss, active breach, fleet-wide auth break
5Payment / paid-accountStripe LIVE rotation, billing, any money movement

Scope-Lock Registry

agents/state/principal-scope-locks.json lists workstreams owned by founder (often with god or architect) that principal must exclude from FS-POLL and status reports. Current locks include:

Auto-add discriminators: "me and god", "hands off", "until I ask", "work solely".

Key Commands

bash agents/tools/wake-pane.sh <role> "see agents/inbox/<from>-<to>-<topic>-<unix>.md"
bash agents/tools/principal-merge.sh <sub_repo> <branch> <trace> --gh-pr <n>
bash agents/tools/ensure-pr-audit.sh <sub_repo> <branch> <trace>
bash agents/tools/pr_raise_gate.sh <sub_repo> <branch> <review_trace_id>
python3 agents/tools/lesson_recall_lean.py "<query>"
python3 agents/tools/harness_audit.py
python3 agents/tools/fleet_health_probe.py

Environment Flags

MERGE_THREADS_EXCEPTION=1    # codex quota exhausted; AGY still enforced
MERGE_SWARM_EXCEPTION=1      # AGY down, founder authorized; codex still enforced
DEVICE_EVIDENCE_EXCEPTION=1  # founder-pen override of pre-PR mobile device evidence
REFINE_GATE_EXEMPT=1         # tiny value-tune / ops brief only, logged
WAKE_PANE_ALLOW_LONG=1       # rare long wake message, otherwise 160-char pointer
WAKE_PANE_SKIP_GATE=1        # legacy briefs, bypass layer gate