Skip to main content

Command Palette

Search for a command to run...

Day 53: Why handoffs need contracts

Why reliable handoffs need structured state, evidence, open questions, and ownership.

Updated
3 min readView as Markdown
Day 53: Why handoffs need contracts
V
I’m Vamsi, a builder focused on production AI systems. I write Production AI Field Notes to break down the architecture behind reliable LLM apps, RAG, agents, multi-agent workflows, evaluation, observability, safety, and governance. My goal is simple: help builders move beyond impressive AI demos and design systems that can be tested, operated, trusted, and improved in the real world.

Audit a failed multi-agent run and the defect is rarely inside an agent. It is between them — at a handoff, where context the sender held never reached the receiver, which then did something perfectly reasonable with a fragment.

The instinct is to blame the receiver. The fix is upstream: a handoff is a typed contract, not a message.

{
  "objective": "Resolve refund eligibility",
  "current_state": "policy evidence retrieved",
  "evidence_ids": ["policy-refunds-v4", "order-9821"],
  "ruled_out": ["store-credit path: customer requested cash"],
  "constraints": { "budget_remaining": 3, "deadline": "2026-06-26T18:00Z" },
  "decision_owner": "refund_policy_agent",
  "next_action": "verify item condition",
  "blocked_on": null
}

Five fields, and why each one earns its place

  • Objective, the outcome needed and how it will be judged. Without it the receiver optimises for its own local notion of good.
  • State: what is done, what remains, and what was already ruled out. That third part is the one everyone omits and it is what prevents expensive re-exploration of dead ends.
  • Evidence, the actual findings, attached by reference. Not summarised into vapour, because a summary of evidence is not evidence.
  • Constraints: budget consumed, deadlines, boundaries inherited from the original request. Otherwise each agent starts fresh against limits that were already half-spent.
  • Ownership, who holds the task now, and what is owed back.

Every missing field becomes guesswork downstream, and guesswork downstream looks exactly like an agent behaving badly.

Validate at the boundary

Treat handoffs like API payloads: validate on receipt, reject incomplete ones at transfer time.

The economics are stark. A rejected handoff costs seconds and produces a precise error. An incomplete one costs a full downstream execution built on an invented premise, plus the investigation to work out why the output was wrong, plus the temptation to fix it in the wrong place.

Trace the gaps, not just the agents

Most observability setups instrument what each agent did. Far fewer capture what moved between them.

If your traces show five agents each behaving sensibly and a wrong final answer, the missing evidence is in the seams, and you cannot see it unless the handoff payloads themselves are logged.

A handoff is more than a message. It is the point where context either survives or quietly does not, and the failure surfaces several steps later wearing someone else's name.

Day 53 of 60 Days of Production AI Systems.

Look at one handoff in your system: how much would the receiver have to guess?


Previous: Day 52: Why shared memory becomes a permission problem
Next: Day 54: Why multi-agent systems need decision rules

Day 53 of 60 · Agent Coordination Contracts (chapter 9 of 10)

Agent Coordination Contracts

Part 5 of 6

A practical series on the contracts that let agents coordinate without chaos. It covers decentralized behavior, role design, shared communication, shared versus private memory, handoff payloads, and decision rules when agents disagree.

Up next

Day 54: Why multi-agent systems need decision rules

Why agents need arbitration rules before disagreement reaches the final answer.