name: multi-agent-handoff description: Plan and document handoffs, parent lane contracts, and parallel batch contracts between specialized AI agents (foreman, workers, reviewers). Use for multi-agent workflows, subagents, original goal preservation, native gates, claim ceilings, terminal states, baton passes, or guild-style agent coordination. license: MIT type: governance metadata: author: skill-steward version: "1.0.0" category: multi-agent
Multi-agent handoff
Structure work so multiple agents can execute sequentially without losing context.
When to use
- Splitting a large task across explorer, implementer, and reviewer agents
- Foreman/worker or parent/subagent patterns
- Need a written baton between chat sessions or tools
Handoff document template
Create or update HANDOFF.md (or a section in the task issue) with:
## Goal
{one sentence outcome}
## Done
- {completed items}
## Next
1. {ordered steps for the receiving agent}
## Constraints
- {tech stack, style, files not to touch}
## Verification
- {commands or checks that must pass}
## Validation status
- {commands run}
- {commands skipped or blocked, with reason}
- {blocked JSON explained with `steward blocked explain --input <path> --json`, when available}
- {schema/output drift checked with `steward schema check-outputs --json`, when machine-readable output is part of the handoff}
- {claims not proven because validation was skipped or blocked}
## Partial results
- {missing, partial, superseded, or timed-out agents/lenses}
## Context links
- {paths, PRs, prior decisions}
## Artifact capture
- {ADR, FAQ, skill, evidence note, test, validator, generator, or check that should absorb durable learning}
Parallel batch contract
For broad decomposable work, the parent may use a disposable batch section instead of a new plan format. Keep only enough contract to move safely:
- original goal and user acceptance check;
- default native gate and aggregate gates;
- product impact check for the primary artifact, especially when the repo is an app, library, CLI/tool, plugin, or prototype;
- detour budget and stop condition;
- integration capacity, merge order, and conflict policy;
- comparison strategy for lane outputs;
- final evidence boundary, claim ceiling, and non-claims;
- acceleration note with three fields:
Saved,Cost/duplication, andFuture hot path; - hot-path promotion check for repeated verification or comparison work.
Use this compact shape before dispatching parallel lanes:
## Parallel Batch
Original goal: {user-visible outcome}
Acceptance check: {how the parent will know the original goal is satisfied}
Product impact check: {source-owned product behavior/API/UI/perf/doc-user workflow that must change or be proven unchanged}
Default native gate: {repo-native command or reason none exists}
Aggregate gate: {final validation before claiming completion}
Detour budget: {when to stop repairing tools and return to the goal}
Claim ceiling: {strongest claim allowed if all lanes pass}
Non-claims: {adjacent claims this batch cannot prove}
Acceleration note:
- Product impact line: {recognized prefix plus proof; use support_only: Steward scaffolding only when no product surface moved}
- Saved: {time, uncertainty, or risk reduced by running lanes in parallel}
- Cost/duplication: {duplicated work, integration cost, or coordination drag caused or avoided}
- Future hot path: {command, check, skill, script, deletion, or native route created for the next run}
| Lane | Agent/role | Scope | Write set | Forbidden paths | Native gate | Direct fix? | Terminal state |
|------|------------|-------|-----------|-----------------|-------------|-------------|----------------|
| L1 | {owner} | {bounded work} | `{paths}` | `{paths}` | `{command}` | yes/no | pending |
Delete or collapse this batch section after synthesis unless it becomes a review artifact. Do not preserve lane maps as project management state.
Parent lane contract
Parent-assigned lane contracts are the only write-authority surface. Advisory ecology route dispatch_lane_candidates, MoE findings, A2A notes, and reviewer comments are inputs only.
Each assigned lane should state:
lane_id, assigned agent/role, scope, exactwrite_set, andforbidden_paths;- inherited repo rules, required impact checks, permission checks, native gate, and aggregate gate responsibility;
direct_fix_allowed: true|false, claim ceiling, non-claims, and escalation triggers;- terminal state:
integrated_to_owner,rejected,blocked_to_current_ledger,promoted_to_durable_owner,deleted,reported_to_parent,accepted_as_input,partial,timed_out, orsuperseded.
Only a parent lane contract may set direct_fix_allowed: true. Direct fixes must be bounded low-risk work with exact write sets, declared forbidden paths, inherited safety rules, required impact/permission checks, and available validation. If validation is skipped or blocked, the result downgrades to blocked or recommendation; it is not integrated_to_owner.
A2A artifacts never authorize writes, widen scope, accept/reject lanes, or launder steward judgment. The parent or explicit A2Human checkpoint owns authorization, synthesis, final claims, and scope changes.
Landing phase
When a lane proves a fix in a temp clone, fork, worktree, or external checkout,
that proof is accepted_as_input until the owner checkout carries the smallest
source-owned diff and reruns the native gate. Do not treat temp proof as
repo-owned evidence by default.
Before claiming a lane is integrated:
- Isolate the minimal source-owned diff from the temp or worker result.
- Apply only that diff to the owner checkout.
- Rerun the lane's native gate in the owner checkout.
- Update the current ledger or evidence note only if the claim changed.
- Record
source_owner_statusastemp_only,owner_landed_pending_gate,owner_gate_passed, orblocked_owner_dirty. - Mark the terminal state as
integrated_to_owner,blocked_to_current_ledger,accepted_as_input, orrejected.
If the source checkout is dirty or cannot accept the diff safely, record the temp proof as a candidate and keep the stronger source-owned claim unproven. After one bounded landing attempt, close the lane as blocked or rejected rather than creating another proof packet for the same unlanded result.
Workflow
- Decompose — break the goal into independent slices where possible.
- Assign roles — e.g. Explore (read-only), Implement (write), Review (read-only critique).
- Write baton — fill the template; keep "Next" to ≤7 concrete steps. For parallel work, include the compact batch table before dispatch.
- Execute one slice — receiving agent does only "Next"; updates "Done".
- Record proof — update validation status before claiming completion. Skipped checks and blocked generators are non-proof, not quiet success.
- Land source-owned changes — convert temp or worker proof into the owner checkout and rerun the native gate before strengthening the claim.
- Close every lane — assign a terminal state to each lane or lens, including timed-out, blocked, or superseded work.
- Measure acceleration — fill the acceleration note with what was saved, what duplicated work or coordination cost appeared, and what future command/check/hot path now exists. If nothing was saved, say so and keep the claim ceiling low.
- Check product impact — for product repos, name the source-owned product
delta or product-native gate reached. If the batch only improved Steward
scaffolding, proof artifacts, or tools-about-tools, claim orientation or
harness maintenance only, not product acceleration.
Use one product impact prefix:
runtime_behavior:,public_api:,product_native_gate:,visual_capture:,performance_metric:,release_path:,developer_workflow:,command_output:,plugin_install:, orsupport_only:. IfCost/duplicationis not lower than the saved uncertainty, risk, or repeat work, default toleave_native,rejected, or a low-confidence support claim. - Capture durable learning — if a finding changes future behavior, route it to an ADR, FAQ, skill, evidence note, validator, generator, test, or check.
- Re-handoff — pass updated
HANDOFF.mdto the next agent or subagent. - Close — delete or archive handoff file when goal is verified.
Anti-patterns
- Vague "continue working on X" without file paths or acceptance criteria
- Handoffs longer than one screen (split into
references/or issues) - Duplicate conflicting instructions across parent and child agents
- Subagents that repeat the parent plan instead of looking for contradiction, stale assumptions, missing evidence, or smaller deletable designs
- Final handoffs that sound complete while validation is skipped, blocked, or only manually inferred
- Clean temp proof presented as source-owned adoption before landing and rerunning the owner checkout's native gate
- Long-running or vanished subagents silently absorbed into parent synthesis without a
partial,timed_out,blocked, orsupersededterminal state - Parallel work claimed as faster without naming saved uncertainty, duplicated work, and the future command/check/hot path it created
- A batch that closes with green Steward gates but no product delta, product-native gate, screenshot/perf proof, API behavior change, or user-facing workflow improvement while still claiming product acceleration
Subagent hints (Codex / Cursor / Zed)
- Use read-only agents for exploration and review
- Pass the handoff block verbatim in the subagent prompt
- Prefer
disable-model-invocation: trueon skills that must run only when invoked - For parallel work, keep agent scopes non-overlapping and declare write ownership before implementation.
- Useful reviewer roles include
Repo Truth Verifier,Boundary Leak Reviewer,Evidence Ladder Reviewer,Doc Collapse Reviewer,Harness QA Reviewer, andStale External Assumption Reviewer. - Codex custom agents live in
.codex/agents/*.tomlor~/.codex/agents/*.toml; definename,description, anddeveloper_instructions, and spawn subagents only when the user explicitly asks for subagent delegation. - Cursor custom subagents live in
.cursor/agents/*.mdor~/.cursor/agents/*.md; each run has isolated context, and background/parallel execution is useful for independent slices. - Zed parallel work uses separate agent threads or worktrees; use skills for repeatable single-context procedures and threads for independent concurrent work.
Install
npx skills add arenukvern/skill_steward --skill multi-agent-handoff
Sources
See references/sources.md. When researching, follow skill-source-citations.