The agent contract
A container must do three things:- Serve an agent card — JSON describing name, skills, and capabilities, over unauthenticated GET at
/.well-known/agent-card.json(the legacy/.well-known/agent.jsonalso works). - Implement A2A JSON-RPC — at minimum
message/send. Addmessage/streamfor token-by-token SSE responses. - Respond to health checks — HTTP 200 on the same endpoint.
Agent card
The platform reads the card once at deploy time. Changing what an agent can do means changing its source and redeploying, not editing metadata.
Wire format
A2A is JSON-RPC 2.0 over HTTP. A minimalmessage/send:
Task:
message/stream returns the same envelope as SSE: a working status, artifact chunks, then a terminal completed status.
contextId ties a multi-turn conversation together. It’s also what a Nasiko session groups in observability.
Official A2A SDKs exist for several languages, and the sample agents are working examples you can copy from.
How Nasiko dispatches to agents
Frameworks and languages
If none fit, implement the three-item contract in any language that serves HTTP and SSE. There’s no SDK requirement. See scaffolding for the template library.
Version compatibility
A2A response shapes differ subtly across versions — older responses put artifacts directly underresult, newer ones under result.task. Nasiko’s client tries current method names and dialects first, then falls back through older forms rather than hard-failing.
Implement against current message/send/message/stream and the task-wrapped shape above. You don’t need to special-case older dialects.
Next
Agents in the dashboard
Deploy and manage from the web app.
Routing and flow limits
The ReAct loop and the MAF assignment pipeline.
Sample agents
Reference agents to copy from.
Scaffolding
Generate a new project from a template.
