localhost:9002,
endpoints POST /send, GET /recv, GET /topology.
Zuno treats AXL as the coordination layer for a multi-agent debate,
not a one-shot pipeline. Without it, “multi-agent” is just function
calls wearing a costume.
What ships in the box
packages/strategy/src/axl/transport/client.ts:AxlClientwithsend,request,recv,topology,listen.packages/strategy/src/axl/transport/discovery.ts: reads configured peer ids forcli,scout,strategist,critic,arbiter.
Why it matters in Zuno
- The CLI is a peer, not a special case.
- Scout, Strategist, Critic, and Arbiter exchange envelopes directly - no central queue, no orchestrator process.
- Strategist ↔ Critic loops over multiple rounds; Arbiter only joins on deadlock. AXL routing makes that pattern natural; HTTP request/response would force a heavier coordinator.
- Roles are open: anyone with a peer id can plug in a competing Strategist or Critic, and the position owner picks which they trust.
Configuration
Zuno expects real AXL nodes and real peer ids:bash tooling/axl-bootstrap.sh, then run
each agent in its own terminal:
Envelope kinds
Why long-poll instead of websockets
Long-poll matches what the real Gensyn AXL node does. Switching the transport to websockets later would be aclient.ts change only - the
agent code never sees the wire.
Inspecting the mesh
flow_start. If any are missing, the CLI
falls back to the in-process debate orchestrator (same handlers, same
prompts) so the demo still works.