# Day 53: Why handoffs need contracts

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.**

```json
{
  "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](https://blog.vamsiannamreddy.com/day-52-why-shared-memory-becomes-a-permission-problem)  
**Next:** [Day 54: Why multi-agent systems need decision rules](https://blog.vamsiannamreddy.com/day-54-why-multi-agent-systems-need-decision-rules)  

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