Skip to main content
Nasiko runs containers that speak A2A, an open JSON-RPC protocol for agentic applications. Implement the contract below and your container runs on Nasiko regardless of language, framework, or model. A2A treats each agent as an opaque peer: you send it a message, it works on a task, it returns artifacts. The platform never inspects an agent’s prompts, tools, or reasoning.

The agent contract

A container must do three things:
  1. Serve an agent card — JSON describing name, skills, and capabilities, over unauthenticated GET at /.well-known/agent-card.json (the legacy /.well-known/agent.json also works).
  2. Implement A2A JSON-RPC — at minimum message/send. Add message/stream for token-by-token SSE responses.
  3. Respond to health checks — HTTP 200 on the same endpoint.
Nasiko doesn’t enforce internal implementation or response quality. Whether an agent’s declared skills work is on you.

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 minimal message/send:
The non-streaming response wraps the result in a 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

Routed dispatch runs a multi-turn ReAct loop: the orchestrator exposes every agent you can access as a callable tool, then an LLM decides across up to ten turns which agents to call and in what order. This is not the routing engine’s three-stage shortlist/rerank/select pipeline — no shortlisting or reranking happens here, and the orchestrator can call several agents per query. The routing engine is used elsewhere, to auto-assign agents to MAF workflow steps. Either way, every hop is an ordinary A2A call proxied through the platform. An agent can’t tell whether it was called directly or by the orchestrator.
Agent identifiers accept a name or a UUID almost everywhere — except the agent proxy, which requires a UUID. If you’re calling /api/agents/{id} directly, resolve the name first.

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 under result, 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.