Knowledge transfer Overview

00 / ACP KNOWLEDGE TRANSFER

Understand the control plane.
Keep the evidence visible.

A practical handover of ACP: engine authorization, ticket execution, conflict recovery, token economics and the path to multiple providers.

CURRENT DEVELOPMENT SNAPSHOT

The agent proposes.
The engine authorizes.
The server executes.

ACP turns tickets into scoped agent work with a pure orchestration engine, isolated worktrees, role-specific tools and explicit verification and delivery rules.

Read the architecture

THE FOUR RESPONSIBILITIES

  1. IntentLead chooses useful work.
  2. AuthorityEngine validates state and policy.
  3. ExecutionServer prepares workspaces and effects.
  4. EvidenceEvents, checks and outcomes feed decisions.

Know which kind of claim you are reading.

IMPLEMENTED

Present in the code

A path exists on this baseline. This does not promise every configuration works or that it is production-proven.

OPEN RISK

Mechanism, not a bill

The code supports the concern; its occurrence rate and actual token impact remain unmeasured.

PROPOSED

A future design

Context retrieval, new provider contracts and richer routing require separately scoped implementation.

ILLUSTRATIVE

Arithmetic with assumptions

Numerical scenarios explain scaling. They are not token-savings benchmarks or provider bills.

Suggested reading path

Architecture → Ticket flow → Conflict recovery → Token efficiency → Issues → Future providers. The publication chapter covers Pages preparation and a reviewed LinkedIn draft. All content is static; this site cannot launch agents or access live ACP data.

01 / ACP KNOWLEDGE TRANSFER

Who is allowed
to do what?

Authorization is a sequence of deterministic decisions and execution safeguards. A successful model response does not grant a permission.

ACP authorization architecture: owner and agent requests enter server validation, the engine authorizes, state is persisted, server effects execute, and lifecycle evidence returns to the engine.
Conceptual architecture. Open the vector diagram to zoom. Individual effects do not all execute in this visual order; the helper sequence below gives the launch ordering.

Inspect an authorization decision.

EXPLANATORY / NO LIVE ACTIONS

Start a helper

The engine checks caller, phase, node, capacity, depth, budget and attempts. The server persists before preparing the worktree, setup and SDK launch. An accepted request is not completed work.

Architecture Mermaid source · Helper sequence Mermaid source

The helper sequence

  1. Lead requests start_agent(role, task, helper?).
  2. Engine checks caller, run phase, node, capacity, nesting, budget and attempts. A refusal produces no launch effect.
  3. Server persists accepted state before executing launch effects.
  4. Server prepares the recorded-tip worktree, trusted setup and scoped context.
  5. Adapter launches with explicit role tools, model, effort and permission bridge.
  6. Events return to the engine; state is persisted and reconciliation may schedule next work.
Code evidence and scope
  • packages/orchestrator/src/commands.ts — applyCommand, createRun, agentEvent
  • packages/orchestrator/src/policy.ts; draft.ts; lead-tools.ts
  • packages/server/src/control/service.ts — apply, perform, startAgent, launch
  • packages/adapters/claude-code/src/managed/adapter.ts; permissions.ts; branch-guard.ts

Source snapshot: dev · df9cf44 · 27 Oct 2026. Code presence is not a production reliability benchmark.

02 / ACP KNOWLEDGE TRANSFER

A ticket becomes
coordinated work.

A workflow configures supported roles and routes. The engine compiles and enforces the program; it is not an arbitrary graph executor.

Ready ticket
→
Plan gate
→
Helpers + changes
→
Review + checks
→
Finish / delivery

What reaches the first agent?

Ticket key/title, type, priority and description enter the prompt builder. The server adds selected context, stage profile, mapped skills, attachment references and a prior summary of the same ticket where applicable. It does not automatically send the entire repository, all comments or other tickets.

What starts the helpers?

The lead asks for implementation helpers. The engine authorizes them. The server creates worktrees and setup, and the provider adapter starts sessions. Initial planning roles, change reviewers and final stages can be scheduled automatically by engine rules. A helper block is a template; a running helper is one authorized instance.

Roles and capability boundaries
Role Normal work Boundary
Planner Read and propose a plan No editing, shell or helpers
Lead Coordinate, inspect, request integration Read-only filesystem role
Helper Implement a scoped task Own worktree; no branch/history authority
Reviewer Inspect and report findings Read-only; review is not an executable check
Tester Add/extend tests for the combined behavior Its changes are reviewed and integrated
Resolver Repair merge content Dedicated operation, no child helpers; server concludes Git merge

Reviews, checks and completion

ACP seals editing work and follows configured change review/check routes. Checks blocks are optional on this baseline; legacy graphs retain their existing gates. A missing check gate is not a passing test result. Agent blocks can select model and effort; a profile narrows role tools rather than granting new authority.

Final stages inspect combined work. Later edits need fresh evidence, rather than assuming an earlier completed reviewer/tester covers a new candidate. Finish presents local merge or PR delivery. A run ending or a discard does not by itself establish accepted delivery.

Code evidence and scope
  • packages/server/src/board/service.ts — startTicket, runBase
  • packages/orchestrator/src/plan.ts; loop.ts; stages.ts
  • packages/core/src/workspace/graph/validate.ts; compile.ts
  • ADR-0023; ADR-0026; ADR-0027; ADR-0028

Source snapshot: dev · df9cf44 · 27 Oct 2026. Code presence is not a production reliability benchmark.

03 / ACP KNOWLEDGE TRANSFER

Repair content.
Keep Git authority in ACP.

Conflict recovery is implemented on this development baseline. Resolution, verification, review and delivery have separate statuses and policy decisions.

Pin tips + policy
→
Clean merge or resolver
→
Assess combined change
→
Policy + evidence
→
Promote + allowed delivery

A clean merge needs no resolver model call. For a conflict, ACP prepares a worktree with the merge in progress. The resolver edits content, reports its outcome/assessment, and the server seals and validates the candidate. Attempts are bounded across replacements: 1–3, default 2.

Independent verification and delivery routes
Condition Current behavior
Adaptive prose in approved scopes May skip normal checks; always-run checks still apply
Runtime, configuration, MDX or uncertainty Agent confidence or a small diff cannot create a prose skip
Missing checks Unavailable, or explicit unverified policy; configured escalation/draft route
Candidate / target / policy changed Evidence stale; promotion rechecks freshness
Delivery not delegated / target not allowed Retain owner delivery
Delegated push/PR Push and open/update PR; draft when the route requires it
Delegated merge Local fast-forward where applicable; existing PR follows the PR path

What is still limited?

  • Targets are local refs; ACP does not fetch origin before resolution.
  • Automatic triggers are supported view/refetch/local-merge paths, not a background timer.
  • Adaptive routing is project policy; no conditional verification node exists in the graph.
  • No automatic missing-test preparation route or independent assessor agent.
  • Delegated conflict delivery opens/updates PRs; it does not automatically merge them on GitHub.
Code evidence and scope
  • packages/server/src/control/conflict-resolution.ts
  • packages/core/src/workspace/conflict-resolution.ts — decideVerification
  • packages/orchestrator/src/resolution.ts; report-tool.ts; step-attempts.ts
  • docs/conflict-resolution/STATUS.md; ADR-0030 (file still marked proposed)

Source snapshot: dev · df9cf44 · 27 Oct 2026. Code presence is not a production reliability benchmark.

04 / ACP KNOWLEDGE TRANSFER

Optimize accepted work.
Not just the first prompt.

Understand the issue first: separate ticket agents can search and read the same code again. Then see the proposed fixes, current safeguards and illustrative numbers.

The issue: each new ticket can pay to learn the same code again

Imagine a large application with authentication, billing, notifications and shared libraries. Ticket A asks an agent to fix a login error. Before editing, it must locate the login route, follow the authentication service, understand shared validation and find the tests. Those reads are useful work: the agent needs evidence to make a correct change.

Ticket B later asks for another login change. It starts a separate run. ACP does not currently provide an automatic, project-wide memory of everything Ticket A discovered. The new lead and helpers may repeat searches and read the same route, service and tests. A reviewer may also inspect them independently. More tickets and more roles create more opportunities to repeat the same discovery.

This does not mean ACP automatically sends the entire repository to every agent. The model sees the context supplied to it and the results of tools it uses. An agent with an unclear brief may explore many folders or read large files; a focused agent may need only a few relevant modules. The risk is repeated broad exploration, not a guaranteed full-repository scan.

TICKET A / FIRST LOGIN CHANGE

Discover, read, change

Locate the login route → read authentication and validation → find tests → implement.

TICKET B / ANOTHER LOGIN CHANGE

Discover and read again

A separate run may repeat the same searches and file reads before its own implementation.

How repeated reads become model input

A file exists on disk without consuming model tokens. When an agent reads it through a tool, the returned text becomes input for a later model request. Search results, instructions, the task, relevant conversation history and the requested answer also contribute. Long tool results can remain in context for subsequent requests, subject to the provider and transport’s context management.

If another session reads that file again, its returned text can enter another model request. That is a new opportunity for input consumption even though the source file did not change. A matching provider prompt cache may reduce repeated processing or price, but an unchanged file alone does not guarantee a cache hit. Fresh sessions do not imply either zero reuse or fully shared memory.

Consider four sessions: the lead, two helpers and a reviewer. In the illustrative comparison below, discovery uses 15,000 tokens per session, or 60,000 across four. If focused context reduces discovery to 5,000 per session, that becomes 20,000. With 30,000 other tokens unchanged, the example moves from 90,000 to 50,000. These are assumptions to explain the mechanism, not measured ACP savings or a dollar bill.

Why a small ticket can still be expensive

Changing three lines may require understanding callers, permissions, data contracts and tests across several packages. Codebase size increases the search space; change size does not reliably predict discovery cost. Adding helpers can shorten elapsed time while increasing total reading, handoff, review and rework. Worktrees isolate edits; they do not automatically share what each agent learned.

The waste to reduce is avoidable rediscovery or irrelevant input. Re-reading current source to validate an assumption, checking a changed dependency and independently reviewing a security-sensitive edit can be necessary. Optimizing by forbidding those reads could save input while increasing incorrect changes and later repairs.

Proposed fix: give each role a focused starting point, then verify it

These are proposed improvements, not an implemented project-memory service. Start with a small, source-backed project map: module responsibilities, entry points, important dependencies, invariants and where trusted tests are defined. Reuse that map across tickets only while its references remain valid. Do not generate a full repository summary separately for every helper.

For the login example, a ticket brief should name the relevant route, authentication service, shared validator and tests, explain the requested behavior, and identify what is still uncertain. The lead hands a helper the findings and source references it already has. The helper verifies those references in its own checkout and expands its search whenever the task requires it.

Keep shared essentials small and tailor additional context to the role. A documentation helper does not automatically need the billing implementation. A reviewer still receives the current diff, acceptance criteria and relevant checks, and retains enough independence to find mistakes rather than merely accepting the implementer’s account.

Key reusable source facts to the project and source snapshot; use file content hashes and invalidate affected entries after changes. Concurrent tickets can be based on different commits, so a correct map for Ticket A may already be stale for Ticket B. Source facts remain data, never permission grants. New persistent knowledge needs an explicit trust and retention design; do not store conversations or tool output as memory.

Measure net benefit per correctly accepted ticket: model input/output and cache categories, discovery overhead where reliably attributable, preparation and refresh work, retries, reviews, latency and regressions. Do not claim a saving if maintaining the map or fixing missed context costs more than the reading it avoided.

What ACP already does, and what remains proposed

Implemented: bounded initial context of up to 10 files / 32 KiB, assembled once per run and passed to its agents; same-ticket summaries; helper-session continuation for rework when available; structured outcomes and attempt limits; role/node model and effort settings. These mechanisms help within the current design, but do not establish a cross-ticket memory or a provider cache hit.

Proposed: a reusable project map with freshness checks, task-specific retrieval and structured source handoffs, plus evaluation of their net benefit. The existing 32 KiB bound is a byte limit on initial context, not a total token cap or a limit on later file reads. The issue cards below pair each additional risk with its proposed control.

24 risks to understand before adding infrastructure

Historical fixes are labeled. Other mechanisms identify potential waste, not measured frequency or savings.

T01 Repeated repository discovery

Issue / consequence: Each ticket rediscovers layout, entry points and conventions. Cost grows with tickets and agents, not only repository size.

Evidence / status: Observed fresh-session mechanism; actual repeated reads unmeasured.

Proposed fix / control: Small versioned project map; task-relevant retrieval.

T02 Planner/lead/helper duplication

Issue / consequence: Several roles independently investigate the same question because handoff contains little evidence.

Evidence / status: Observed separate roles and helper briefs; overlap unmeasured.

Proposed fix / control: Structured handoff with findings, source references, assumptions and acceptance criteria. Preserve independent review where required.

T03 Context copied to every role

Issue / consequence: Large generic context, profiles or skills are supplied even when irrelevant.

Evidence / status: Observed shared run context/profile assembly; actual bloat unmeasured.

Proposed fix / control: Shared essentials plus role/task-specific references; hard size caps and explicit truncation.

T04 Broad search and oversized tool results

Issue / consequence: Dumps of whole files, generated assets, lockfiles or long search output fill subsequent rounds.

Evidence / status: Future risk; current byte cap does not bound tool exploration.

Proposed fix / control: Search filenames/symbols first, bounded excerpts, exclusions and expandable results.

T05 Growing conversation history

Issue / consequence: More messages and tool results increase input on later rounds; a long-lived agent becomes expensive to continue.

Evidence / status: General session risk; not profiled locally.

Proposed fix / control: Bounded milestones, concise handoffs, provider-supported compaction when validated.

T06 Prompt cache misses

Issue / consequence: Changing earlier instructions, tool ordering, models or reference text prevents reusable prefixes. A run-local text cache is mistaken for provider caching.

Evidence / status: Provider documentation; actual SDK cache hits require reported usage.

Proposed fix / control: Stable useful prefixes; measure actual cache categories; do not add padding just to reach thresholds.

T07 Over-delegation

Issue / consequence: Many tiny helpers each pay startup, discovery, reporting and review overhead.

Evidence / status: Observed launch model; optimal task size unmeasured.

Proposed fix / control: Compare coordination overhead with independent work; combine related edits under one capable helper.

T08 Overlapping parallel work

Issue / consequence: Helpers/tickets touch shared modules or depend on unmerged changes, causing conflicts and repeated fixes.

Evidence / status: Observed isolated branch semantics; historical supplied screenshot case.

Proposed fix / control: Dependency-aware scheduling, declared likely file scopes, shared-file hotspots, bounded conflict recovery. Scope estimates are advisory.

T09 Blocked or impossible tasks retried

Issue / consequence: A helper is asked to perform an unsupported operation; replacement starts can repeat it.

Evidence / status: Historical screenshot case. Current conflict operations, structured outcomes and no-change attempt bounds mitigate this loop.

Proposed fix / control: Use the supported server operation; retain capability-aware briefs and progress measurements.

T10 Rework without new information

Issue / consequence: The next attempt repeats the same strategy without new evidence.

Evidence / status: Current step/operation bounds cover no-change and failed outcomes; bounds do not prove each remaining attempt is useful.

Proposed fix / control: Use stable step identity and structured reasons; change strategy or stop within configured policy.

T11 Findings not consumed by the next actor

Issue / consequence: Useful findings can still be omitted from a task or ignored by the recipient.

Evidence / status: The earlier no-change reporting gap is fixed by reportedOutcome and noChangeLine. Cross-ticket knowledge reuse is still proposed.

Proposed fix / control: Keep structured handoffs, source pointers and outcome coverage; do not label the old gap open.

T12 Invalid tools and excessive polling

Issue / consequence: Repeated malformed calls, unknown targets or status checks consume model rounds without progress.

Evidence / status: Future risk; status tools exist, frequency unmeasured.

Proposed fix / control: Clear schemas/capabilities, actionable refusals, event-driven completion where possible.

T13 Duplicate review

Issue / consequence: Change reviewers, final reviewers and testers repeat identical analysis without a distinct acceptance goal.

Evidence / status: Configurable review/stage mechanism; duplication unmeasured.

Proposed fix / control: Assign review purpose and scope; retain independent checks required by policy.

T14 Repeated checks and log analysis

Issue / consequence: Same commit/check is rerun, or huge logs are repeatedly read by LLMs. Test execution itself is compute, not necessarily model-token usage.

Evidence / status: Commit-specific gating exists; waste frequency unmeasured.

Proposed fix / control: Trusted evidence reuse only when commit, check definition, environment and policy match; bounded failure summaries.

T15 Verification feedback too weak

Issue / consequence: Missing environment, unclear failure or flaky tests trigger speculative edits and repeated runs.

Evidence / status: Future risk; setup failure already blocks SDK startup.

Proposed fix / control: Distinguish setup/product/flaky/unknown failures; provide reproducible command IDs and bounded diagnostics.

T16 Stale knowledge and stale evidence

Issue / consequence: Cached architecture notes survive renames, branch changes or dependency updates, causing wrong edits and repair.

Evidence / status: Future risk for shared knowledge; context currently comes from owner checkout.

Proposed fix / control: Commit/content-hash provenance, dependency invalidation, freshness checks against the agent's checkout.

T17 Bad retrieval or over-compression

Issue / consequence: Relevant callers, invariants or tests are omitted; short prompts save input but cause more incorrect work.

Evidence / status: Future risk.

Proposed fix / control: Retrieval coverage checks, source pointers, uncertainty and on-demand expansion.

T18 Wrong model or effort

Issue / consequence: A costly model handles mechanical work, or a weaker configuration needs many failed attempts on hard work.

Evidence / status: Role/profile/project model selection exists; no measured routing policy.

Proposed fix / control: Evaluate outcome-adjusted work by task class; change configuration only under explicit policy.

T19 Verbose generated output

Issue / consequence: Long plans, repeated summaries and commentary add output and later input without helping execution.

Evidence / status: Short work-note instruction already exists; other verbosity unmeasured.

Proposed fix / control: Bounded structured plans/outcomes; retain required reasoning evidence without storing chain of thought.

T20 Unbounded project-wide activity

Issue / consequence: Per-agent limits still allow many concurrent tickets, replacements and repeated runs to spend heavily in aggregate.

Evidence / status: Current ADR-0014 budget is per agent.

Proposed fix / control: Proposed project/run aggregate admission and reservation policy with explicit unknown usage and overshoot. No silent change to existing accounting.

T21 Restart, reconnect and transport retries

Issue / consequence: Launching another agent after an uncertain result duplicates work or abandons useful session state.

Evidence / status: Restart recovery exists; provider/transport ambiguity remains a design concern.

Proposed fix / control: Idempotent operations, reconciliation before retry and explicit resumability capability.

T22 Cross-provider accounting mismatch

Issue / consequence: Inclusive cached input, reasoning already included in output, or cumulative totals are summed again. A cheaper-looking provider may simply report less.

Evidence / status: Future Codex integration risk; existing ACP has strict accounting rules.

Proposed fix / control: Versioned provider mappings, fixtures and provenance; no invented zeros or double counting.

T23 Knowledge maintenance costs more than it saves

Issue / consequence: A scout rescans the whole monorepo or regenerates summaries for every small change.

Evidence / status: Future risk of the proposed optimization itself.

Proposed fix / control: Deterministic metadata first, incremental invalidation, capped refreshes and measured net benefit.

T24 Cross-project leakage or untrusted cached instructions

Issue / consequence: Reused material includes another project's data or repository text is promoted to policy.

Evidence / status: Future risk; existing local-only and prompt-injection boundaries apply.

Proposed fix / control: Project isolation, allowlisted paths, origin/provenance, treat retrieved text as data and keep permissions outside model control.

Our opinion: reuse verified knowledge across isolated sessions.

01 / ESSENTIALS

Small project map

Owner-approved boundaries, invariants and trusted check IDs. Keep it concise.

02 / REFERENCES

Incremental module catalog

Local paths, symbols and dependencies. Validate content hashes and source snapshot.

03 / TASK

Focused role context

Goal, acceptance criteria, likely sources, tests and uncertainty. Allow expansion.

04 / EVIDENCE

Current candidate facts

Diff, checks and review bound to the relevant commits and policy.

Start with maintained docs and local file/symbol search. Do not add a mandatory research agent or external vector service before measuring net benefit. One permanent project conversation can accumulate irrelevant history, stale assumptions and mixed permissions.

Keep source facts separate from authority; invalidate affected knowledge and dependents after changes. Do not persist conversations, tool I/O or hidden reasoning as project memory.

Speak with numbers, keep assumptions visible.

Historical supplied screenshot arithmetic — anonymized, not a current benchmark
Historical helper card Displayed budget tokens
First Git-sync helper 5,836
Second Git-sync helper 6,847
Third Git-sync helper 8,297
Total displayed 20,980

The earlier conflict remained unresolved. Some investigation was useful, so the entire subtotal is not proven waste. Current recovery, outcome and retry-bound code mitigates the historical loop. Do not combine counters from screenshots taken at different moments.

Illustration: four sessions repeat discovery

Hypothetical budget tokens — lead, two helpers and a reviewer
Work Repeated discovery Focused context
Discovery per session 15,000 5,000
Discovery across four sessions 60,000 20,000
Other work, assumed equal 30,000 30,000
Total 90,000 50,000

Assumed difference: 40,000 tokens, about 44%. This arithmetic is not measured ACP savings. It assumes focused context reduces discovery while acceptance quality and other work stay equal.

Illustration: preparation and amortization

Hypothetical scaling — later maintenance omitted
Twenty comparable tickets Hypothetical budget tokens
20 × 90,000 baseline 1,800,000
20 × 50,000 focused execution 1,000,000
One-time project map 8,000
Focused total with preparation 1,008,000
Illustrative difference 792,000

Real evaluation must include refreshes, retrieval, failures and repairs. A map regenerated for every helper, or stale guidance that causes wrong edits, can erase the benefit.

Illustration: parallel overhead

Hypothetical equal useful implementation work; capacity still applies
Approach Implementation Coordination Rework Total
Two scoped helpers 30,000 10,000 0 40,000
Six overlapping helpers 30,000 30,000 20,000 80,000

Six instances need not run simultaneously. Parallel work can finish sooner while consuming more total tokens.

Actual budget semantics

Budget tokens = uncached input + cache creation + output. Cache reads are tracked separately and excluded from the cap. Default: 500,000 per agent, configurable and soft. Three agents reaching that allowance account for 1,500,000 before possible overshoot—not an observed bill. Follow-up allowance resets per question.

Initial shared context allows 10 files / 32 KiB. That does not cap later tool reads or history, and reading context once per run does not prove a provider cache hit.

Measure quality and the entire attempt

Track acceptance evidence, regressions/reopenings, owner interruptions, latency, reported usage coverage and retries. Include map maintenance, retrieval, reviews and repairs. Test compute time is separate from LLM tokens. Exact discovery-token attribution is not established; do not invent it from timestamps.

Code evidence and scope
  • docs/decisions/0014-orchestration-budget-metric.md
  • packages/core/src/orchestration/limits.ts — budgetTokens
  • packages/server/src/harness/context.ts; control/service.ts — setupFor, withTicketSummary
  • packages/orchestrator/src/budget.ts; follow-up.ts
  • Provider primary references are listed in Evidence. Cache behavior is model/transport dependent.

Source snapshot: dev · df9cf44 · 27 Oct 2026. Code presence is not a production reliability benchmark.

05 / ACP KNOWLEDGE TRANSFER

Make the remaining
risks actionable.

This is a bounded code review, not production incident statistics. Each issue names its mechanism, possible impact, proposed control and source.

Historical gaps that are now mitigated

Current baseline differs from the earlier screenshots
Earlier gap Current mitigation
No repair route through helper Git restrictions Server-owned isolated conflict operation and content-only resolver
Lead cannot see no-change reason Structured reportedOutcome and noChangeLine
No-change replacements escape attempt bounds Step accounting includes no-changes; resolver operation has its own bounds
Owner-only waits consume working deadline Current isRunOverdue subtracts tracked owner wait

Seven concrete mechanisms still worth reviewing

C01. A temporary context failure lasts for the run

Confirmed mechanism:The first rejected setup read is caught and replaced with NO_SETUP; its promise remains cached in live.setup. Later agents in that live run reuse the empty setup instead of retrying the read.

Possible consequence:If context loading fails before a lead and four helpers start, all five can lack the intended guidance. Actual extra discovery tokens are unknown.

Proposed control:Show degraded context explicitly; consider a bounded retry before later launches while preserving a coherent context version.

Source:packages/server/src/control/service.ts — setupFor.

C02. Context can describe a different source snapshot

Confirmed mechanism:Context is read from the owner checkout and reused per run; editing agents work in ticket-based worktrees. That launch path does not bind context file hashes to each helper base commit.

Possible consequence:A ticket still using the old directory layout may receive guidance from an owner checkout with a newer layout. The mismatch can cause wrong searches or rework.

Proposed control:Keep trusted owner policy separate from source facts. Attach source hashes/commit provenance and validate source references against the agent checkout.

Source:packages/server/src/board/harness.ts — agentSetup; control/service.ts — startAgent, setupFor.

C03. Input and event queues have no size bound

Confirmed mechanism:The adapter queue explicitly describes itself as unbounded. Messages sent while a worker starts also accumulate in an array. Existing message validation does not impose a total queue bound here.

Possible consequence:A burst can create a backlog of stale or repetitive requests. Queued input may cause extra turns if consumed; queued events create memory/backpressure risk rather than directly generating tokens.

Proposed control:Bound queue count/bytes; expose backpressure and per-message state. Coalesce only explicitly replaceable updates, never silently drop task instructions.

Source:packages/adapters/claude-code/src/managed/queue.ts — AsyncQueue; server/src/control/service.ts — pendingSends, sendTo.

C04. “Message sent” is not a delivery acknowledgment

Confirmed mechanism:The engine returns success after emitting send-to-agent. Missing handles and rejected sends are logged later; that reply does not acknowledge consumption or reading.

Possible consequence:The coordinator may wait, poll or repeat an instruction that never arrived. Race frequency and extra tokens have not been measured.

Proposed control:Track accepted, queued, delivered-to-handle and failed states. Do not claim read acknowledgment without provider evidence.

Source:packages/orchestrator/src/lead-tools.ts — message_agent; server/src/control/service.ts — sendTo.

C05. Follow-up spending resets for each question

Confirmed mechanism:Each ended-lead follow-up starts with EMPTY_LEDGER and zero turn usage, using the run per-agent limit. The budget is enforced per follow-up turn, not as a cumulative conversation allowance.

Possible consequence:Illustrative ceiling: ten follow-ups at the default 500,000-token allowance permit 5,000,000 budget tokens before considering soft-cap overshoot. This is permission to spend, not actual consumption.

Proposed control:Keep per-turn protection; propose a separate cumulative follow-up/project allowance and show remaining scope. Preserve accounting and explicit owner policy.

Source:packages/orchestrator/src/follow-up.ts — followUpChat, followUpBudgetTokens, followUpEvent.

C06. Large change inspection returns a bounded prefix

Confirmed mechanism:The full lead view_change reply is capped at 32 KiB. The tool takes an agent ID, with no file/range cursor. Repeating it without a source change cannot page through the rest.

Possible consequence:A large refactor can require repeated file discovery because later portions do not fit. The cap is intentional protection, not evidence that increasing it is the right fix.

Proposed control:Offer a file manifest and bounded per-file/range inspection with explicit coverage/truncation. Keep a total inspection budget.

Source:packages/orchestrator/src/loop.ts — viewChangeReply; server/src/control/service.ts — leadTool(view_change).

C07. Global check serialization can extend feedback loops

Confirmed mechanism:Checks share a server-wide serial runner. The working-state timeout defaults to two hours. The current isRunOverdue path subtracts owner-only wait time; no dedicated harness-queue subtraction is apparent in this path. Review/plan-owner-wait states have their own handling.

Possible consequence:Hypothetically, six ten-minute check jobs ahead create about one hour of waiting. Whether it times out a run depends on its state and remaining deadline. Waiting alone generates no model tokens; duplicate retries can.

Proposed control:Expose queued versus active work, avoid duplicate in-flight checks, and design resource/deadline policy deliberately. Preserve required checks and isolation.

Source:packages/server/src/harness/runner.ts — queue; packages/server/src/control/service.ts — sweep; packages/orchestrator/src/commands.ts — isRunOverdue.

Recommended priorities

  1. Make degraded context visible and validate source facts against the actual checkout.
  2. Bound message backlogs and expose delivery status without inventing read receipts.
  3. Scope aggregate run/project/follow-up admission limits separately from current accounting.
  4. Measure progress after the retry fixes; improve change-inspection coverage and evidence freshness.
  5. Reconcile ADR/status wording with the merged implementation in a separate governance change.
Code evidence and scope
  • packages/server/src/control/service.ts — setupFor, sendTo, sweep
  • packages/adapters/claude-code/src/managed/queue.ts — AsyncQueue
  • packages/orchestrator/src/follow-up.ts; loop.ts — viewChangeReply; stages.ts — nextStage
  • packages/server/src/harness/runner.ts — shared setup/check queue
  • docs/decisions/0030-conflict-resolution-and-delegated-delivery.md; docs/conflict-resolution/STATUS.md

Source snapshot: dev · df9cf44 · 27 Oct 2026. Code presence is not a production reliability benchmark.

06 / ACP KNOWLEDGE TRANSFER

More providers.
The same control-plane promises.

A model selection and a coding-agent integration are different things. Each provider needs explicit lifecycle, tools, permissions and usage semantics.

Provider status — no implied release commitments
Integration Status Next requirement
Claude Code Implemented managed provider Preserve role isolation and conformance
Codex Phase 6 planned Validate supported app-server transport/version and contracts
Other models Within a supported, validated provider configuration Check availability, effort support and acceptance quality

ACP owns intent and authority. Adapters own transport.

Keep logical task identity, workflow policy, context selection, retry limits and evidence in ACP. Translate them to each provider’s supported API or process. Do not pass a Claude session identifier to Codex or imply conversation/cache reuse across providers.

Lifecycle and permissions

Start, stream, interrupt, cancel, recover and resume with tested semantics. Enforce role tools, own-worktree writes, server-owned Git and unsupported-capability refusals.

Usage and context

Establish stable dedup identity, per-call vs cumulative reports, cached-input inclusion and reasoning inclusion. Missing fields stay unavailable; no invented zeros or double counting.

Sequence the work

  1. Stabilize the current provider and establish quality-aware baselines.
  2. Evaluate focused context and incremental local references with freshness checks.
  3. At Phase 6, test adapter capabilities and conformance before enabling real runs.
  4. Evaluate model/effort routing and richer retrieval only when evidence justifies them.

Current model precedence is node → profile → project → provider default. Effort is a separate workflow setting; support depends on the chosen provider/model. No new adapter, model recommendation service or future-phase feature is implemented in this documentation package.

Code evidence and scope
  • docs/roadmap.md — Phase 6 Codex adapter, Phase 5 Harness Lab, Phase 7 research
  • packages/core/src/adapters/managed.ts
  • packages/server/src/control/service.ts — resolveAgentModel, launch
  • packages/adapters/claude-code/src/managed/adapter.ts — buildOptions
  • ADR-0013; ADR-0014; ADR-0028

Source snapshot: dev · df9cf44 · 27 Oct 2026. Code presence is not a production reliability benchmark.

07 / ACP KNOWLEDGE TRANSFER

A guide you can
check against the code.

Use the pinned baseline and explicit claim labels. A design document is not proof of implementation, and code presence is not a measured reliability result.

Baseline and governance

dev / df9cf44f713e11c62add3786e6026aaee8022495, reviewed 27 Oct 2026. Package version 0.3.1. The snapshot includes conflict-recovery code, while ADR-0030 remains marked proposed and CR rows remain review. Maintainers should reconcile that wording separately.

Where to inspect

Source map — package paths abbreviated
Question Repository source
Ticket handoff server/src/board/service.ts; orchestrator/src/plan.ts
Authorization and scheduling orchestrator/src/commands.ts, policy.ts, draft.ts, loop.ts
Provider execution server/src/control/service.ts; adapters/claude-code/src/managed/adapter.ts
Safety managed/permissions.ts, branch-guard.ts; server/src/workspace/manager.ts
Conflict policy core/src/workspace/conflict-resolution.ts; server/src/control/conflict-resolution.ts
Usage docs/usage-accounting.md; ADR-0014; orchestrator/src/budget.ts

Primary external references

Limits of this review

No private provider transcript scan, production token study or comprehensive security audit was performed. Historical figures were transcribed from supplied screenshots; examples are hypothetical. Exact prices, model capacity and provider availability are deliberately not pinned.

The site makes no ACP API calls, uses no analytics, remote assets or browser storage, and contains no live inventory or credentials. Citations load only when clicked. Repository code links may require access to the private source; this guide does not require it.

02 / ACP KNOWLEDGE TRANSFER

How the engine works.
From ticket to coordinated agents.

The engine decides which transitions and effects are allowed. The server performs the work and returns events to the engine.

Who does what?

Engine: decisions

Maintains run state, checks the workflow and policies, enforces capacity and budgets, and declares permitted effects. It is pure logic: it does not launch processes or perform Git operations.

Server: execution

Persists accepted transitions, prepares worktrees, runs configured setup and checks, starts agents through the provider adapter, and feeds their events back to the engine.

How ticket details reach an agent

  1. The owner creates a ticket and starts a run. The server supplies the ticket brief and configured project context to the run.
  2. The workflow determines the available roles and routes. A planning role proposes work where configured, and the required approval must be satisfied before implementation proceeds.
  3. The lead receives its role instructions and ticket context. It can request a helper with a role and task through start_agent.
  4. The engine checks the caller, run phase, workflow node, capacity, nesting, budget and attempt limits. An invalid request is refused.
  5. For an accepted request, the server records the transition, prepares a worktree from the recorded ticket tip, runs trusted setup, assembles the helper brief and context, and invokes the provider adapter.
  6. The adapter starts the SDK query. Agent lifecycle and usage events return to the server and engine; a completed helper reports its outcome for the lead and configured review flow.

The engine can also schedule agents

Depending on the configured workflow, the engine can schedule planning, change reviewers and final stages as their conditions become ready. Conflict resolution uses a separate server-managed operation and resolver helper.

One command, four stages

1. Command
A user or agent requests an action.
2. State
The engine validates and updates the run.
3. Effect
The server carries out accepted work.
4. Event
The result returns to the engine.

Persisting state before an effect prevents an unrecorded launch when that database commit fails. It does not make SQLite, Git, the agent process and GitHub one atomic transaction; failures and restarts require reconciliation.

What the safeguards check

  • A helper cannot start before the required planning or branch conditions are met.
  • Configured capacity, nesting, budget and attempt limits apply to agent requests.
  • Reviewers are read-only; helper branch-management commands are denied.
  • Conflict candidate promotion checks the pinned candidate, target and policy. Delivery requires its own owner action or explicit project delegation.

These descriptions are based on the guide’s pinned development snapshot. See Architecture & authority for the diagram and Ticket & workflow for configurable routes.