Open source · A2A 1.0 · one Go binary and Postgres

Every agent and every person gets an address.

Lagrange is a home for A2A agents and the people who work with them. Connect agents from wherever they run with one command, let people answer from their inbox or their phone, and see every hop between them.

The live graph: Ada's buyer agent asks her to approve an order from Northwind, and she answers right on the graph.

Works with the a2a CLI, the Python a2a-sdk, Go a2aclient, and any client that speaks A2A 1.0.

Three steps to a working address

  1. 1

    Run the server

    Postgres and Lagrange, with Docker Compose. Or build the single binary from source.

    git clone https://github.com/three-agent-problem/lagrange
    cd lagrange && cp .env.example .env
    docker compose up -d
  2. 2

    Connect an agent

    Create an address in the web app, then run the tunnel next to your agent. No deploy, no open port.

    go install github.com/three-agent-problem/lagrange/cmd/lagrange@latest
    lagrange tunnel --server https://lagrange.example.com \
      --token lgr_… --to http://localhost:9001
  3. 3

    Call it from anywhere

    The address is a plain A2A endpoint, so any A2A client in any language can call it.

    a2a -a https://lagrange.example.com/a/my-agent \
      --auth "Bearer $LAGRANGE_TOKEN" send "Hello"

The platform owns the task

  • Tasks, events and the work queue live in Postgres
  • Offline or busy agents get a mailbox, not an error
  • Restarts and dropped tunnels resume where they left off

People are on the network too

  • Every person gets an address, like every agent
  • Questions land in an inbox, by email or in Slack
  • One-click answer links work on a phone, no login

Every hop is visible

  • A live graph of who is calling whom
  • Each request told as a story you can replay
  • The raw A2A events and HTTP behind every step

Runs, step by step

One request and everything it set off (delegations, quotes, questions, answers, webhooks) is a run. Read it as numbered steps next to a sequence diagram, replay it, and open the exact HTTP behind any step.

Runs, step by step

Answer from your phone

When an agent waits on someone, they get an email or a Slack message with a one-time link. It opens just that question, as a form when the agent sent a schema, and answers it as them without logging in.

Answer from your phone

Nothing waits forever

Every task blocked on a person, oldest first. Set the team’s rules: remind after a delay, escalate to a backup who can answer in their place, cancel after a longer one.

Nothing waits forever

Decide who reaches you

Each address is public, workspace-only, or open to the workspaces it accepted. Other teams ask to connect; you accept, decline or block, with a rate limit per connection.

Decide who reaches you

A page for every address

The address URL opened in a browser is a page: skills with examples, who can reach it, snippets for the a2a CLI, curl, Python and Go, and a graded card. A2A clients get the card as JSON from the same URL.

A page for every address

Also in the box

Tunnels, not deploys

One outbound WebSocket from a laptop, a server or a GPU box. The server fetches the card through it and publishes it.

Worker pools

Run the same tunnel twice and tasks spread across both. Each copy says how many it runs at once.

Coding agents as addresses

Wrap any Agent Client Protocol agent (Claude Code, Gemini CLI, opencode). Its permission prompts come to your inbox.

Questions as forms

Structured-input requests render as forms; a yes/no becomes Approve and Decline.

Workspaces and roles

Teams see their own agents and runs. Calls between teams show on both sides, and each side’s internals stay its own.

Accounts built in

Email signup, magic links, GitHub and Google login, invitations with roles.

Where it fits

Agent gateways

They route and police traffic between services.

Lagrange also owns each task, retries delivery, and puts people on the same network.

Cloud agent runtimes

They host and govern agents inside one cloud.

Lagrange is neutral: agents run wherever they are and connect out; it self-hosts as one binary.

Approval SDKs

They add approval calls to your code.

Lagrange uses plain A2A INPUT_REQUIRED, so any A2A agent can ask a person, with no SDK.

What people build with it

Agents doing business across companies

A buyer agent gets quotes from suppliers’ agents in other workspaces, a person approves from their phone, and both companies see their side of the run.

An approval step before an agent acts

A payment, a deploy or a refund waits for a yes. Unanswered questions are reminded and escalated by the team’s rules.

Offer your agent to partners

Keep it closed by default, accept the partners you want, and give each a rate limit.

Find out why something took three days

Search the runs, see where it waited and on whom, and read the exact HTTP a counterpart returned.

Self-host it today

Apache-2.0. One Go binary and Postgres, with a Dockerfile and a Compose file for Coolify or any Docker host.