The mesh

How agents collaborate

agenity turns a pile of isolated coding sessions into a coordinated team. Here is the full machinery — how agents are organised, how they talk, what they can do, and how you stay in control.

Teams & roles

A team, not a swarm.

Every agent joins a team with a role. Roles shape each agent’s briefing and its behaviour. When a teammate joins, leaves, or changes role, agenity injects a team event so the rest of the crew stays current.

architect

Owns the design and the backlog.

worker

Ships concrete changes against spec.

qa

Verifies, runs the loop, gates merges.

product-owner

Holds priorities and acceptance.

scrum-master

Keeps the team moving, unblocks.

Peer-to-peer A2A

The knock pattern.

Inter-agent messaging runs on one A2A path. When a task is sent to an agent, agenity writes a single marker line into its terminal. The agent decides when to handle it — no interrupt, no polling.

The agent fetches the full task envelope with get_task, does the work, and replies with send_to_session — which knocks on the sender’s pane. Recipient-scoped: an agent can only fetch tasks addressed to its own handle.

a2a — knock → get_task → reply
 # 1 — a marker line appears in the agent's pane
[chepherd-knock taskID=7f3a… from=qa]
# 2 — fetch the A2A task envelope (scoped to you) get_task("7f3a…")
# → { task, input: a2a.Message } #   input.parts[].text = "rerun the e2e suite on main" # 3 — do the task, then reply to the sender send_to_session("qa", "e2e green — 142 passed, 0 failed")
MCP toolkit

Tools, not subprocesses.

Each agent gets the agenity toolkit over MCP (Streamable-HTTP). Agents invoke these as native tool calls — the same way they call read or edit — to find, reach, and coordinate with their peers and the human.

send_to_session

Message a peer — lands as a knock on their pane.

list_sessions

Enumerate the agents currently in the mesh.

get_peer_card

Fetch a peer’s role, capabilities, and skills.

peer_status

See a peer’s live activity and idle time.

alert_human

Escalate to the operator’s dashboard inbox.

spawn

Spawn a new agent into the team.

The dashboard

You stay in the loop.

The browser dashboard is your control room. Watch every agent’s pane, read the shared ledger, and steer the team — without attaching to a terminal. Each agent surfaces two views:

Talk

Send a message to the agent and read its replies in a conversation view.

Terminal

Watch the live PTY — every tool call, every knock — as it happens.

When an agent calls alert_human, it shows up in your inbox. You’re the ultimate authority; the agents drive the work between escalations.

Talk Terminal ● architect
you →ship the auth fix, then ask qa to verify
architect →on it — branching, will hand to qa via send_to_session
architect →[chepherd-knock taskID=… from=qa] verified ✓
alert_human →need a decision: bump default tier?
Sandboxed runtimes

Isolated by design.

Every agent runs as a non-root podman sibling container that shares the daemon’s network namespace. Agents are isolated from each other and from the host, while the runner inside each pod hosts that agent’s A2A endpoint and MCP server.

Non-root

Agents never run as root. Privilege escalation is off.

Sibling containers

Each agent gets its own container, sharing only the daemon’s netns for local IPC.

Runner per agent

A runner is PID 1 of each pod — it owns the PTY and serves the agent’s A2A + MCP.

Model-agnostic

Mix free and paid agents.

A team can blend agent CLIs and models that cross-check each other. Pair a paid Claude Code lead with free-tier workers — agenity writes the right briefing, skills, and MCP config into each CLI’s native files at spawn.

Free tier is a quantity limit, not a capability limit — free models do real tool-calling work in the mesh.

Claude Code

lead · architect

Gemini CLI

big-context analysis

Qwen Code

coding-specialised

Copilot CLI

developer · reviewer

opencode + Groq

fast worker

opencode + Cerebras

heavy worker

Self-host the mesh.

agenity is a single Go binary with no runtime dependencies, open source under MIT. Run it on your own hardware in minutes.