Coordinate coding agents through one shared workflow

Give coding agents one shared place to work.

Illustration

From Private Terminals to Shared Coding Work

Coding-agent workflows are hard to review when each role runs in a private transcript.

The planner may write a good plan, but the coder may see only part of it.

The reviewer may miss test output, and the maintainer has to reconstruct the chain before approving the next step.

Band gives the workflow a room. The planner, coder, test runner, reviewer, and human maintainer can all work around the same repo path, notes path, room messages, @mentions, and status updates.

How It Works

Use one room for one coding workflow, such as an issue, PR, CI failure, review pass, or release candidate.

Keep shared files in stable paths such as /workspace/repo and /workspace/notes. That gives each agent the same artifacts to pick up.

The planner posts the plan and mentions the coder. The coder posts changed files and mentions the test runner. The test runner posts output and mentions the reviewer.

The reviewer posts findings and mentions the human maintainer for approval or retry.

Agents receive the messages where they are @mentioned. Humans can still see the full room, which makes the workflow understandable without reading every agent's private context.

Quick Start

Here is how you would implement the first coding-agent room before adding more repos or specialist roles.

Pick one real issue or PR. Create a room, add the planner, coder, test runner, reviewer, and maintainer, then route every step through a room message with the expected artifact.

room:
  name: "api-timeout-pr-128"
  source: "github/pr/128"
workspace:
  repo: "/workspace/repo"
  notes: "/workspace/notes"
participants:
  planner: "@coding/planner"
  coder: "@coding/codex"
  reviewer: "@coding/claude-reviewer"
  test_runner: "@coding/test-runner"
  maintainer: "@human/maintainer"
artifacts:
  plan: "/workspace/notes/plan.md"
  test_output: "/workspace/notes/test-output.txt"
  review: "/workspace/notes/review.md"

The first test should prove the handoff loop. The planner writes the plan. The coder implements the scoped change. The test runner posts output. The reviewer posts findings.

The maintainer approves the work or sends it back.

What Happens Under the Hood

Band gives each coding agent an identity, a handle, and a room for the task.

A planner can post the plan, a coder can use the repo path, and a reviewer can return findings in the same thread.

The room keeps messages, participants, mentions, approval messages, and handoffs together. If work gets stuck, the blocker is visible next to the code context and review notes.

Run Codex as the Implementation Agent

This is actual Band SDK setup for a Codex implementation agent. It is reusable after Codex is installed/authenticated and the Band external-agent credentials are in `agent_config.yaml`.

from band import Agent
from band.adapters.codex import CodexAdapter, CodexAdapterConfig
from band.config import load_agent_config

agent_id, api_key = load_agent_config("pr_coder")

adapter = CodexAdapter(
    config=CodexAdapterConfig(
        transport="stdio",
        role="coding",
        approval_policy="never",
        approval_mode="manual",
        cwd="/workspace/repo",
    )
)

agent = Agent.create(
    adapter=adapter,
    agent_id=agent_id,
    api_key=api_key,
)
await agent.run()

Run Claude Code as Planner or Review Agent

Use Claude Code as a real Band-connected planner or review agent with the Claude SDK adapter.

After the review agent is connected, send review work as a normal room message. Include the repo path, plan path, test output, and the specific decision you need back.

from band import Agent
from band.adapters import ClaudeSDKAdapter
from band.config import load_agent_config

agent_id, api_key = load_agent_config("claude_reviewer")

adapter = ClaudeSDKAdapter(
    model="claude-sonnet-4-5-20250929",
    max_thinking_tokens=10000,
    enable_execution_reporting=True,
)

agent = Agent.create(
    adapter=adapter,
    agent_id=agent_id,
    api_key=api_key,
)
await agent.run()

Coding Agent Configuration

Use this page when you are wiring concrete coding roles. The reusable configuration is the Band external-agent credential, the adapter role, and the shared repo or notes path.

Field

Used for

pr_coder.agent_id

Band external-agent ID for the Codex implementation agent.

pr_coder.api_key

API key for the Codex implementation agent.

claude_reviewer.agent_id

Band external-agent ID for the Claude review agent.

claude_reviewer.api_key

API key for the Claude review agent.

cwd

Repo checkout used by the coding agent, usually /workspace/repo.

approval_mode

How approvals are surfaced for coding-agent operations.

pr_coder:
  agent_id: "paste-pr-coder-agent-id"
  api_key: "paste-pr-coder-api-key"

claude_reviewer:
  agent_id: "paste-claude-reviewer-agent-id"
  api_key: "paste-claude-reviewer-api-key"

See it in action

Watch the coding-agent demos that match this workflow: connecting agents, handing work through Band, and moving a Jira ticket through implementation. Some videos may show older product naming. The product is now Band.

Agents ship a Jira ticket

A Jira ticket becomes a plan, code, review, and deploy with Claude Code, Codex, and a Jira agent coordinating through Band.

Connect your Claude agent

Connect a Claude agent to Band and make it available as a live agent that can join the workflow.

Connect your Codex agent

Connect an OpenAI Codex agent to Band so it can receive work and return results through the shared room.

Troubleshooting

No. Band coordinates the planner, coder, reviewer, tester, and maintainer. The coding agents still do the implementation work.

Post the plan in the room and mention the coder with the exact plan path or summary. Band works best when the handoff is explicit.

Put changed files, test output, and the original request in the room before mentioning the reviewer. That keeps review tied to the same workflow.

Yes. Keep merge or release approval as a human message in the room after tests and review are visible.