Summary
Agent-to-agent discovery (calf.agents) and the caller-side Ask (request/reply) mode, built on the substrate primitive. Phase 2 — after the Phase 1 substrate + capability migration.
Spec: docs/designs/agent-discovery-and-ask-spec.md
Blocked by: #239 (substrate — provides ControlPlaneView / ControlPlanePublisher).
Key design finding
A peer agent needs no new callee-side handler — invoked over the standard call path (a seeded sub-conversation State sent to its dispatch topic with a callback_topic), it processes the request through its existing run and replies through the existing reply slot. The only genuinely new code is the caller-side peer-as-tool adapter.
Scope / work breakdown
Out of scope (deferred)
Related
Summary
Agent-to-agent discovery (
calf.agents) and the caller-side Ask (request/reply) mode, built on the substrate primitive. Phase 2 — after the Phase 1 substrate + capability migration.Spec:
docs/designs/agent-discovery-and-ask-spec.mdBlocked by: #239 (substrate — provides
ControlPlaneView/ControlPlanePublisher).Key design finding
A peer agent needs no new callee-side handler — invoked over the standard call path (a seeded sub-conversation
Statesent to its dispatch topic with acallback_topic), it processes the request through its existingrunand replies through the existing reply slot. The only genuinely new code is the caller-side peer-as-tool adapter.Scope / work breakdown
AgentCard(extendsControlPlaneRecord) +calf.agents, published viaControlPlanePublisheronly whendiscoverable=True(opt-in)peers=[...]resolved against the agents view (the include-list is the trust boundary)Statefrom the tool args;Callthe peer withtag=tool_call_id+ the caller's return slot; translate the peer'sReturnMessage.parts→ToolReturnfolded intostate.tool_resultsState-seeding helper (today State-seeding lives only inClient)find_agents(query)tool (default-closed), filtered to live ∩ allowedcalf.agents; stale peer excluded from selectionOut of scope (deferred)
reply_ttlis a client-only in-process timer.)Related