Why Agent Protocol on the front?
Clients need a portable runs/threads/streaming surface. Workers need a different contract: leases, heartbeats, fencing, connector sessions.
Decision
Clients speak Agent Protocol (HTTP/SSE) to the plane. Runners speak Runner Protocol (gRPC) to the plane. The plane is the only place those worlds meet — grants, HITL, kill, audit, and opaque checkpoints live there, not in each framework SDK.
Consequences
- Any Agent Protocol client can drive the plane without learning Runkite-only APIs first.
- Framework adapters stay thin: implement Runner Protocol, not a second control plane.
- We do not pretend ThreadState is a LangGraph checkpointer — see opaque checkpoints.
Rejected alternatives
- Expose only a proprietary admin API — kills portability and client ecosystem.
- Make runners speak Agent Protocol — wrong shape for reclaim/fencing/connector minting.
Map: Docs · Protocols · runner-protocol/.