![]()
Part of Venutian Antfarm by RD Digital Consulting Services, LLC.
Visual guide to how the agent fleet collaborates. Source of truth for collaboration rules: .claude/COLLABORATION.md. Source of truth for documentation style: .claude/DOCUMENTATION-STYLE.md.
The fleet has three tiers: governance (sets policy), leadership (orchestrates delivery), and execution (builds and reviews). Authority flows down; data flows up.
flowchart LR
USER(["User"])
subgraph Gov ["Governance Layer"]
GOV(["CRO CISO CEO\nCTO CFO COO CKO"])
end
S(["Strategic\nPO SA SM"])
E(["Execution\nSpecialist agents\n(you define)"])
R(["Reviewers\nsecurity\n(you define)"])
O(["Output\ndoc training\n(you define)"])
USER -->|"approvals +\noversight"| Gov
USER -->|"evidence-based\noversight"| S
Gov -->|"controls +\ncompliance"| S
S -->|"context"| E
S -.->|"arch/process"| R
E -->|"work"| R
R -.->|"findings"| E
R -.->|"risk signals"| S
E -->|"milestone"| O
R -.->|"corrections"| O
O -.->|"content"| R
style USER fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style GOV fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style S fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style E fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style R fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style O fill:#ffcc80,stroke:#e65100,color:#1a1a1a
Diamond layout: Strategic at top feeds both Execution (context) and Reviewers (architecture/process). Execution and Reviewers interact laterally (work and findings). Both feed down to Output (milestones and corrections). Feedback flows back up (risk signals, content for review). The Governance layer sets policy above Strategic.
The governance tier sets policy and standards. The Chief Risk Officer (CRO) is the governance floor guardian – all floor changes require user approval. Each Cx role proposes controls to the CRO and participates in consensus when consulted. The CEO is the user’s proxy and operates on an independent trust-based pace.
flowchart TD
USER(["User"])
CRO["CRO"]
CISO["CISO"]
CEO["CEO"]
CTO["CTO"]
CFO["CFO"]
COO["COO"]
CKO["CKO"]
USER -.->|"floor approvals"| CRO
USER <-->|"executive brief"| CEO
CISO -->|"security controls"| CRO
CTO -->|"tech standards"| CRO
CFO -->|"cost controls"| CRO
COO -->|"operational controls"| CRO
CKO -->|"knowledge controls"| CRO
CRO -.->|"monitors\nautonomy"| CEO
style USER fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style CRO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CISO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CEO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CTO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CFO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style COO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CKO fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
The leadership triad orchestrates day-to-day delivery. Operational agents execute within the standards set by governance. Specialists are defined per-project.
flowchart TD
PO["PO"]
SA["SA"]
SM["SM"]
KO["Knowledge Ops"]
POPS["Platform Ops"]
CA["Compliance\nAuditor"]
SPEC(["Specialists\n(you define)"])
PO -->|"orchestrates"| SPEC
SA -->|"architecture\nguidance"| SPEC
SM -->|"triggers\ndistribution"| KO
PO -->|"dispatches"| CA
POPS -->|"metrics +\nCI/CD"| SM
style PO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SA fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SM fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style KO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style POPS fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style CA fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style SPEC fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
Governance sets the rules; operations follows them. Data flows up to inform governance decisions. The CRO and CKO are the primary bridges.
flowchart LR
subgraph Gov ["Governance"]
CX(["Cx Roles"])
end
subgraph Bridge ["Bridges"]
CRO_B["CRO\n(floor/targets)"]
CKO_B["CKO\n(knowledge)"]
end
subgraph Ops ["Operations"]
TRIAD(["PO SA SM"])
AGENTS(["Specialists +\nReviewers"])
end
CX -->|"floor rules\ntargets\nguidance"| CRO_B
CX -->|"knowledge\nstandards"| CKO_B
CRO_B -->|"controls"| TRIAD
CKO_B -->|"learnings"| AGENTS
AGENTS -->|"metrics\nfindings"| CX
TRIAD -->|"conformance\nreports"| CX
style CX fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CRO_B fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style CKO_B fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style TRIAD fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style AGENTS fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
How agents access code depending on whether the task frontmatter specifies worktree isolation.
flowchart TD
DISPATCH["Agent Dispatched"] --> CHECK{"isolation: worktree\nin frontmatter?"}
CHECK -->|"Yes"| WORKTREE["Temp Worktree\n(assess committed code)"]
CHECK -->|"No"| LIVE["Live Working Tree\n(current state)"]
WORKTREE --> ASSESS["Agent reads\ncommitted state only"]
LIVE --> WORK["Agent reads\ncurrent working state"]
ASSESS --> DONE["Task Runs"]
WORK --> DONE
style DISPATCH fill:#bdbdbd,stroke:#424242,color:#1a1a1a
style CHECK fill:#bdbdbd,stroke:#424242,color:#1a1a1a
style WORKTREE fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style LIVE fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style ASSESS fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style WORK fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style DONE fill:#bdbdbd,stroke:#424242,color:#1a1a1a
Use worktree isolation when you want a reviewer or auditor agent to assess only committed (stable) code rather than any in-flight edits. Set isolation: worktree in the agent task frontmatter.
How a backlog item flows through the 10-phase lifecycle.
flowchart TD
PRI["0. Prioritize\n(backlog triage)"] -->|"next item"| B
B["1. Groom\n(triad)"] -->|"passes DoR"| P["2. Promote\n(work item)"]
P --> IP["3. Build\n(specialists)"]
IP --> RV["4. Review\n(AC + specialists)"]
RV -->|"all pass"| DEP["6. Deploy\n(per environment)"]
DEP -->|"all envs pass"| ACC["7. Accept"]
ACC --> RET["8. Retro\n(team reflects)"]
RET --> CHK["9. Checkpoint\n(process health)"]
CHK -->|"next iteration"| PRI
RV -->|"rework"| FIX["5. Fix"]
DEP -->|"code problem"| FIX
ACC -->|"rejection"| FIX
FIX -->|"re-validate"| IP
DEP -->|"env problem"| ENVFIX["Env Fix\n(infra resolves)"]
ENVFIX -->|"resume"| DEP
style PRI fill:#ce93d8,stroke:#6a1b9a,color:#1a1a1a
style B fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style P fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style IP fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style RV fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style FIX fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style ENVFIX fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style DEP fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style ACC fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style RET fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style CHK fill:#bdbdbd,stroke:#424242,color:#1a1a1a
Key design decisions:
The fleet operates at a dynamic pace. The scrum master monitors performance and recommends changes.
flowchart LR
CRAWL["Crawl\nPropose everything\nUser reviews all"] -->|"evidence:\nfew findings,\nclean handoffs"| WALK["Walk\nStandard autonomy\nMilestone reviews"]
WALK -->|"evidence:\nlow rework,\ngood judgment"| RUN["Run\nExpanded autonomy\nBatch oversight"]
RUN -->|"evidence:\nproven track record,\nmature memories"| FLY["Fly\nFull autonomy\nFindings-based oversight"]
FLY -->|"significant\nproblem"| TRIAD
RUN -->|"significant\nproblem"| TRIAD
WALK -->|"significant\nmistake"| CRAWL
TRIAD{"Triad\nconsults"} -->|"high consensus\npace <= current"| AUTO["Inform user\nproceed at pace"]
TRIAD -->|"high consensus\npace increase"| REC["Unified recommendation\nto user"]
TRIAD -->|"low consensus"| ESC["Each perspective\nto user decides"]
style CRAWL fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style WALK fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style RUN fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style FLY fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style TRIAD fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style AUTO fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style REC fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style ESC fill:#ffcc80,stroke:#e65100,color:#1a1a1a
How the three autonomy tiers shift as the fleet moves from Crawl to Fly.
flowchart TD
subgraph CRAWL ["Crawl"]
C_A["Autonomous\nRead, diagnose,\nresearch"]
C_P["Propose\nAll builds, edits,\ndeploys, handoffs"]
C_E["Escalate\nCompliance floor,\narchitectural"]
end
subgraph WALK ["Walk"]
W_A["Autonomous\nWithin-domain routine"]
W_P["Propose\nCross-domain work,\njudgment calls"]
W_E["Escalate\nCompliance floor,\nstrategic decisions"]
end
subgraph RUN ["Run"]
R_A["Autonomous\nChains across items,\nroutine deploys"]
R_P["Propose\nArchitectural changes,\nstrategic direction"]
R_E["Escalate\nCompliance floor\n(always)"]
end
subgraph FLY ["Fly"]
F_A["Autonomous\nNearly everything,\nbatch oversight"]
F_P["Propose\nOnly genuinely\nblocked items"]
F_E["Escalate\nCompliance floor\n(always)"]
end
CRAWL -->|"evidence:\nfew findings"| WALK
WALK -->|"evidence:\nlow rework"| RUN
RUN -->|"evidence:\nproven record"| FLY
style C_A fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style C_P fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style C_E fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style W_A fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style W_P fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style W_E fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style R_A fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style R_P fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style R_E fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style F_A fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style F_P fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style F_E fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
Key insight: Compliance floor escalation never relaxes regardless of pace. The expanding blue (Autonomous) zone is the primary indicator of trust growth.
The PO selectively dispatches reviewers based on what changed.
flowchart TD
CHANGE["Completed Work"] --> CLASSIFY{"What changed?"}
CLASSIFY -->|"Backend API,\ndata model"| BACK_REV["backend-specialist\nreviews patterns"]
CLASSIFY -->|"Compliance-adjacent\ncode"| COMP_REV["security-reviewer\n+ compliance review"]
CLASSIFY -->|"Frontend UI"| FRONT_REV["frontend-specialist\nreviews patterns"]
CLASSIFY -->|"Docs changed"| DOC_REV["doc review"]
CLASSIFY -->|"Small bug fix,\nno compliance surface"| PO_ONLY["PO reviews\ndirectly"]
BACK_REV --> SYNTH["PO Synthesizes"]
COMP_REV --> SYNTH
FRONT_REV --> SYNTH
DOC_REV --> SYNTH
PO_ONLY --> SYNTH
SYNTH --> DECIDE{"Accept?"}
DECIDE -->|"Yes"| DONE["Done"]
DECIDE -->|"Revise"| REWORK["Back to specialist"]
DECIDE -->|"Reject"| REJECT["Requirements mismatch"]
style CHANGE fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style DONE fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style REWORK fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style REJECT fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style COMP_REV fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
Governance floors override all other protocol elements. Visualized as a foundation that everything rests on. Each floor is guarded by a Cx officer with sole write authority.
flowchart TD
subgraph Floors ["GOVERNANCE FLOORS (non-negotiable)"]
subgraph CFloor ["Compliance Floor (CRO guardian)"]
S1["Rule 1\n(your domain rule)"]
S2["Rule 2\n(your domain rule)"]
end
subgraph BFloor ["Behavioral Floor (COO guardian)"]
S3["Rule 3\n(your domain rule)"]
S4["Rule 4\n(your domain rule)"]
end
end
PACE["Pace Control"] -.->|"overridden by"| Floors
AUTO["Autonomy Tiers"] -.->|"overridden by"| Floors
PRIO["Priority Decisions"] -.->|"overridden by"| Floors
style S1 fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style S2 fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style S3 fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style S4 fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
Define your compliance floor in floors/compliance.md at the project root. See templates/floors/compliance.md for a starting template. The compliance floor is one instance of a general governance floor pattern. See docs/GOVERNANCE-FLOORS.md for the multi-floor model.
How the fleet improves over time through evidence-based refinement.
flowchart TD
WORK["Agents Work"] -->|"encounter\nnotable event"| FINDING["Write Finding\nto register"]
FINDING --> REG[".claude/findings/register.md"]
REG -->|"SM review"| CURATE["SM Curates\ngroups + proposes"]
CURATE --> REVIEW["User Reviews\nAccept / Modify / Defer"]
REVIEW -->|"accepted"| APPLY["Apply Refinement\nprompt, memory, or protocol"]
APPLY -->|"knowledge-ops\ndistributes"| DISTRIBUTE["Update Agent\nMemories"]
DISTRIBUTE --> WORK
REVIEW -->|"deferred"| REG
REVIEW -->|"dismissed"| ARCHIVE["Remove from\nactive register"]
style WORK fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style FINDING fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style CURATE fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style REVIEW fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style APPLY fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style DISTRIBUTE fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
Decision tree for choosing the right model tier and thinking budget.
flowchart TD
START["New Task"] --> Q1{"Requires synthesis,\ntradeoff, or judgment?"}
Q1 -->|"Yes"| OPUS["Expensive model\n(medium thinking)"]
Q1 -->|"No"| Q2{"Structured work\nwith clear patterns?"}
Q2 -->|"Yes"| SONNET["Mid-tier model\n(low thinking)"]
Q2 -->|"No"| Q3{"Mechanical check?"}
Q3 -->|"Yes"| HAIKU["Cheap model\n(no thinking)"]
Q3 -->|"No"| RECLASS["Re-examine task scope"]
RECLASS --> Q1
OPUS --> CEILING{"Hit thinking\nceiling?"}
SONNET --> CEILING
CEILING -->|"Yes"| FIND["Finding:\ntask mis-classified or\ncontext needs enriching"]
CEILING -->|"No"| DONE["Proceed"]
style START fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style Q1 fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style Q2 fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style Q3 fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style OPUS fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style SONNET fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style HAIKU fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style DONE fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style CEILING fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style FIND fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style RECLASS fill:#bdbdbd,stroke:#424242,color:#1a1a1a
How the fleet measures and improves delivery performance.
flowchart LR
subgraph Events ["Event Logging"]
LOG["ops/metrics-log.sh\n(agents log events)"]
JSONL[".claude/metrics/events.jsonl\n(append-only)"]
end
subgraph Dashboard ["Dashboard"]
DORA["ops/dora.sh\nDORA metrics"]
FLOW["ops/dora.sh --flow\nFlow quality"]
end
subgraph Decisions ["Decisions"]
SM_PACE["SM recommends\npace change"]
PO_PRI["PO adjusts\npriorities"]
end
LOG --> JSONL
JSONL --> DORA
JSONL --> FLOW
DORA -->|"CFR, lead time,\ndeploy frequency"| SM_PACE
FLOW -->|"FPY, handoff quality,\nrework rate"| SM_PACE
FLOW -->|"bug severity trends,\nbottlenecks"| PO_PRI
style LOG fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style JSONL fill:#bdbdbd,stroke:#424242,color:#1a1a1a
style DORA fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style FLOW fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SM_PACE fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style PO_PRI fill:#ffcc80,stroke:#e65100,color:#1a1a1a
Key events tracked: item-promoted, item-accepted, ext-deployed, bug-found, bug-fixed, handoff-sent, handoff-rejected, task-restarted, task-blocked, task-unblocked, regression-run. Pace thresholds: CFR < 10% to Walk; < 5% to Run.
The PO, SA, and SM form a servant leadership triad.
flowchart TD
subgraph Triad ["Leadership Triad (Servant Leaders)"]
PO_T(["PO\nBusiness priority\nAC, WSJF"])
SA_T(["SA\nTechnical approach\nNFRs, constraints"])
SM_T(["SM\nProcess flow\nPace, coordination"])
PO_T <-->|"groom\nalign"| SA_T
SA_T <-->|"sequence\nvalidate"| SM_T
PO_T <-->|"prioritize\nright-size"| SM_T
end
subgraph Team ["Specialists (Empowered to Decide)"]
SP1["specialist-1"]
SP2["specialist-2"]
SP3["specialist-N"]
end
Triad -->|"rich context:\nbusiness + technical\n+ process"| Team
Team -->|"good autonomous\ndecisions"| SUCCESS["SUCCESS:\nServant leadership working"]
Team -->|"frequent questions"| ENRICH["SIGNAL:\nEnrich the context"]
ENRICH --> Triad
style PO_T fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SA_T fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SM_T fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SUCCESS fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style ENRICH fill:#ffcc80,stroke:#e65100,color:#1a1a1a
| Activity | PO Leads | SA Contributes | SM Contributes |
|---|---|---|---|
| Grooming | Business priority, AC | Architectural implications | Right-sizing for pace |
| Solution alignment | Validates business | Proposes technical approach | Checks process feasibility |
| Work organization | Prioritizes items | Sequences by dependencies | Coordinates execution mode |
| Quality | Functional correctness | Architectural soundness | Process discipline |
How app-level agents extend harness agents. The merge produces the runtime agent definition.
flowchart LR
subgraph Harness ["Harness Agent"]
H_NAME["name: scrum-master"]
H_MODEL["model: opus"]
H_PROTO["protocol: full"]
H_AUTO["autonomy: default"]
end
subgraph App ["App Agent (extends)"]
A_RETRO["retro cadence: 2"]
A_AUTO["autonomy: override"]
end
subgraph Merged ["Runtime Agent"]
M_NAME["name: scrum-master"]
M_MODEL["model: opus"]
M_PROTO["protocol: full"]
M_RETRO["retro cadence: 2"]
M_AUTO["autonomy: override"]
end
Harness -->|"base fields\npreserved"| Merged
App -->|"app fields\noverride"| Merged
style H_NAME fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style H_MODEL fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style H_PROTO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style H_AUTO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style A_RETRO fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style A_AUTO fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style M_NAME fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style M_MODEL fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style M_PROTO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style M_RETRO fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style M_AUTO fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
Merge rules: App fields (orange) override matching harness fields. Harness fields (blue) not mentioned in the app definition are preserved. Green fields in the merged result show where overrides landed.
Two memory layers with distinct ownership. Knowledge-ops curates both (under CKO direction) and bridges them.
flowchart TD
subgraph HarnessLayer ["memory/harness/ (read-only)"]
HL["Framework learnings\nCollaboration patterns\nTool usage insights"]
end
subgraph AppLayer ["memory/app/ (read-write)"]
AL["Domain learnings\nProject decisions\nEnvironment quirks"]
end
AGENTS(["Any Agent"]) -->|"write during work"| AppLayer
KO(["Knowledge Ops"]) -->|"curate, dedupe,\nresolve conflicts"| AppLayer
KO -->|"curate on\nharness upgrade"| HarnessLayer
AppLayer -.->|"generic pattern?\nflag for promotion"| HarnessLayer
AGENTS -->|"read"| HarnessLayer
AGENTS -->|"read"| AppLayer
style HL fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style AL fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style AGENTS fill:#bdbdbd,stroke:#424242,color:#1a1a1a
style KO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
Key constraint: harness/ is read-only during normal operation. Only updated on harness version changes. app/ is where active learning accumulates.
How work transfers between agents with quality tracking.
sequenceDiagram
participant A as Agent A
participant H as Handoff Artifact
participant B as Agent B
participant M as Metrics
A->>H: What done, what needed,<br/>context, artifacts, urgency
A->>M: log handoff-sent
H->>B: Receive handoff
alt Clear enough to act
B->>B: Execute work
B->>A: Handoff Complete<br/>(result, artifacts, follow-up)
B->>M: log handoff-accepted
else Unclear handoff
B->>A: Reject with reason
B->>M: log handoff-rejected
Note over A,B: Finding: unclear handoff<br/>FPY decreases
end
The receiving agent should be able to act without asking for clarification. FPY (first-pass yield) by boundary pair is the most actionable metric for handoff quality.
Working state (ephemeral) and published view (version-controlled) serve different purposes.
flowchart TD
subgraph Working ["Working State (Tasks)"]
FIND["Findings"]
HAND["Handoffs"]
WIP["WIP Status"]
BLOCK["Blockers"]
end
subgraph Published ["Published View (Files)"]
PROG["User-facing progress"]
DECS["Documented decisions"]
ROAD["Roadmap / backlog"]
GOV["Governance records"]
end
Working -->|"at checkpoints,\nagent publishes"| Published
USER(["Human Operator"]) -->|"reads"| Published
USER -.->|"rarely needs"| Working
style FIND fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style HAND fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style WIP fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style BLOCK fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style PROG fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style DECS fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style ROAD fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style GOV fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style USER fill:#90caf9,stroke:#1565c0,color:#1a1a1a
Why this split: Tasks handle concurrent work without write contention. Files stay clean and curated. The user sees checkpointed progress, not coordination noise.
Three enforcement mechanisms from cheapest to most thorough.
flowchart TD
subgraph Hooks ["Layer 1: Hooks"]
HK["Shell scripts\non tool events"]
HK_C["Cost: zero tokens"]
HK_R["Reliability: deterministic"]
end
subgraph Memory ["Layer 2: Memory"]
MEM["Persisted behavioral\nrules + context"]
MEM_C["Cost: tokens on recall"]
MEM_R["Reliability: probabilistic"]
end
subgraph Skills ["Layer 3: Skills"]
SK["Loaded prompts with\nmandatory steps"]
SK_C["Cost: tokens on load"]
SK_R["Reliability: high"]
end
EVENT["Tool Event"] --> Hooks
Hooks -->|"pass"| Memory
Memory -->|"guides"| Skills
style HK fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style HK_C fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style HK_R fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style MEM fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style MEM_C fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style MEM_R fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style SK fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SK_C fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SK_R fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style EVENT fill:#bdbdbd,stroke:#424242,color:#1a1a1a
When to use each: Hooks for file-level guards and formatting (deterministic, free). Memory for cross-session behavioral guidance (probabilistic, cheap). Skills for complex multi-step workflows (reliable, most expensive).
How disagreements are routed to the right mediator.
flowchart TD
CONFLICT{"Agents\ndisagree"} -->|"technical"| SA["SA mediates"]
CONFLICT -->|"priority"| PO["PO decides"]
CONFLICT -->|"process"| SM["SM mediates"]
CONFLICT -->|"compliance"| FLOOR["Compliance floor\nwins (always)"]
CONFLICT -->|"cross-domain"| JOINT["SA + PO\njointly"]
SA -->|"unresolved"| USER(["User decides"])
PO -->|"unresolved"| USER
SM -->|"unresolved"| USER
JOINT -->|"unresolved"| USER
style CONFLICT fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style SA fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style PO fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SM fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style FLOOR fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style JOINT fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style USER fill:#90caf9,stroke:#1565c0,color:#1a1a1a
No agent overrides another agent’s domain authority. Compliance floor takes precedence over all other disagreements without escalation.
Periodic validation cycle with cadence tuning.
flowchart LR
COUNT["SM tracks\naccepted items"] -->|"every 3\n(tunable)"| TRIGGER["Trigger\nregression run"]
TRIGGER --> BACK["Backend\nAPI, data, schema"]
TRIGGER --> FRONT["Frontend\nUI, state, render"]
TRIGGER --> E2E["Browser E2E\nAll roles, screenshots"]
BACK --> FINDINGS["Regression\nfindings"]
FRONT --> FINDINGS
E2E --> FINDINGS
FINDINGS -->|"add to backlog\n(do NOT fix inline)"| BACKLOG["PO prioritizes\nfixes"]
FINDINGS -.->|"data informs"| TUNE{"Adjust\ncadence?"}
TUNE -->|"regressions rare"| LESS["Extend to 5"]
TUNE -->|"regressions frequent"| MORE["Tighten to 2"]
style COUNT fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style TRIGGER fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style BACK fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style FRONT fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style E2E fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style FINDINGS fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style BACKLOG fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style TUNE fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style LESS fill:#bdbdbd,stroke:#424242,color:#1a1a1a
style MORE fill:#bdbdbd,stroke:#424242,color:#1a1a1a
Fix discipline: Do not fix issues inline during regression testing. Record them as findings. Only fix roadblocks that prevent completing remaining tests.
How cost responsibility flows through the fleet.
flowchart LR
PO_B(["Platform-ops\nmeasures costs"]) -->|"per item,\nper agent"| ALERT["Alert at\nthresholds"]
SA_B(["SA estimates\nper-item budget"]) -->|"during grooming"| BUDGET["Item budget\n(NFR)"]
ALERT -->|"push to"| SM_B(["SM decides\non overruns"])
BUDGET --> SM_B
SM_B -->|"pause, shift\nmodels, extend"| ACTION["Adjustment"]
USER_B(["User sets\nbudget envelope"]) -.->|"total\ninvestment"| SM_B
style PO_B fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SA_B fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style SM_B fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style ALERT fill:#ef9a9a,stroke:#b71c1c,color:#1a1a1a
style BUDGET fill:#bdbdbd,stroke:#424242,color:#1a1a1a
style ACTION fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style USER_B fill:#90caf9,stroke:#1565c0,color:#1a1a1a
Monitoring rule: If expensive model usage exceeds 40% of total dispatches, investigate whether some judgment tasks could be downgraded with better context enrichment.
Parallel dispatch to output agents when a batch of items reaches acceptance.
flowchart TD
DECLARE["PO declares milestone\nversion tag + scope"] --> DISPATCH
subgraph DISPATCH ["Parallel Dispatch (no dependencies)"]
DOC["doc-quality\nChangelog, release notes"]
TRAIN["training-enablement\nUser guides, walkthroughs"]
COMMS["stakeholder-comms\nAnnouncements, demos"]
end
DOC --> TRACK["PO tracks\ncompletion"]
TRAIN --> TRACK
COMMS --> TRACK
TRACK --> TAG["Version archive\ngit tag"]
style DECLARE fill:#90caf9,stroke:#1565c0,color:#1a1a1a
style DOC fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style TRAIN fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style COMMS fill:#a5d6a7,stroke:#2e7d32,color:#1a1a1a
style TRACK fill:#ffcc80,stroke:#e65100,color:#1a1a1a
style TAG fill:#bdbdbd,stroke:#424242,color:#1a1a1a
Output agents work independently from accepted items and current documentation. If one is blocked, the others continue.