agent2agentGuidesAgent DSL

Agent DSL

This guide covers the handler DSL for building agents.

Registering Handlers

Handlers are registered with on. Inside a handler block you have access to:

Helper Description
request The validated Schema::Definition for this operation
store The task store (in-memory or SQLite)
agent_card The agent card hash
respond(result) Set the response
stream Create an SSE stream (auto-selects JSON-RPC or REST)
agent = A2A::Agent.new do
  on "SendMessage" do |request|
    # request.message, request.configuration, etc.
    respond A2A::Schema["Send Message Response"].new(task: { ... })
  end

  on "GetTask" do |request|
    task = store.get(request.id)
    respond A2A::Schema["Task"].new(id: task[:id], ...)
  end

  # Handle multiple operations with one block
  on "CancelTask" do |request|
    store.cancel(request.id)
    task = store.get(request.id)
    respond A2A::Schema["Task"].new(id: task[:id], ...)
  end
end

server = A2A::Server.new(agent_card: agent_card, store: store)
server.register(agent)