Agent Triforge
Install

The roster

You set which coding agent does each job in one file, ops/roster.toml. The lead plans the work and merges it. The roster names who builds, reviews, tests, analyzes and documents, and who covers for a missing one.

Claude Code leads by default and Codex can lead too. Setup writes the file for you, and you can edit it by hand.

Fig. 1Default roles, the others covering for a missing agent, and Codex taking the lead

The agents

Eight coding agents can work on a team. Claude Code, Antigravity and Codex are always on it. The others join when you enroll them, and each one sends your code to its own provider.

Always on the team

  • Claude CodeCan lead
    Roles
    Any role
    Code goes to
    Anthropic
    Joins
    Always. It cannot be disabled.
  • Antigravity
    Roles
    Any role
    Code goes to
    Google
    Joins
    Always. It cannot be disabled.
  • CodexCan lead
    Roles
    Any role
    Code goes to
    OpenAI
    Joins
    Always. It cannot be disabled.

Join when you add them

  • OpenCode
    Roles
    Any role
    Code goes to
    Zhipu / Z.ai, through OpenRouter (which also sees the traffic)
    Joins
    When you enroll it
  • Kimi Code
    Roles
    Any role
    Code goes to
    Moonshot
    Joins
    When you enroll it
  • Cursor
    Roles
    Any role
    Code goes to
    xAI (Grok, via Cursor)
    Joins
    When you enroll it
  • Grok Build
    Roles
    Builder, reviewer and analyst
    Code goes to
    xAI
    Joins
    When you enroll it
  • DevinNeeds your consent
    Roles
    Reviewer and analyst; builder only after you opt in
    Code goes to
    Cognition (a model outside its SWE family also reaches the provider of that model)
    Joins
    Only with your consent on record

Versions, floors and the check each agent must pass are on Compatibility. What each provider receives is on Data egress.

Roles and fallbacks

The roster has five roles. Each names an agent, a model and an effort, and a chain of agents that take over in order when the one before is missing or disabled. Every chain ends at Claude Code, Antigravity or Codex.

  1. builder

    Writes the code for a task.

    1. Claude CodeClaude Code's own model, max effort
    2. CodexIf it is missing
    3. AntigravityThen
  2. reviewer

    Reviews every task it didn't build.

    1. Codexgpt-6-astra, xhigh effort
    2. AntigravityIf it is missing
    3. Claude CodeThen
  3. tester

    Writes the failing test first.

    1. Codexgpt-6-astra, xhigh effort
    2. Claude CodeIf it is missing
  4. analyst

    Maps the codebase before planning.

    1. AntigravityGemini 3.8 Flash (High), high effort
    2. Claude CodeIf it is missing
  5. documenter

    Writes the documentation.

    1. AntigravityGemini 3.8 Flash (High), high effort
    2. Claude CodeIf it is missing

The lead

The lead plans the sprint, hands out the tasks, reviews and merges. Claude Code or Codex can lead. With no [lead] table in the roster, Claude Code leads.

Switch from either CLI with setup's lead step. It refuses while leases are open, so finish or hand them over first.

Claude Code leads

/at-setup lead
The table that makes Codex the lead
[lead]
cli = "codex"

A Codex lead also needs a trust entry in ~/.codex/config.toml, which you add yourself. Setup prints it.

Change the roster

Setup's role step shows each role's current agent, model and effort, and lets you keep or change each one. It checks every change before it writes it.

You can also edit ops/roster.toml by hand. A field you leave out keeps the shipped default, so a role that sets only effort keeps its agent and model, and deleting the whole file is safe. Each fallback chain must end at Claude Code, Antigravity or Codex, and none of them can be disabled. A file that breaks a rule fails to load.

An optional agent is enrolled the first time it is found, at session start or in setup, and Devin only through setup, after you consent. enabled = false on its [members.<name>] table turns it off everywhere: every chain skips it.

Claude Code leads

/at-setup roles
One role, as the shipped roster sets it
[roles.reviewer]
cli = "codex"
model = "gpt-6-astra"
effort = "xhigh"
fallbacks = ["antigravity", "claude"]
The promotion gate
[promotion]
require_user_approval = false

With require_user_approval = true, the lead waits for your approval at the end of a wave before it promotes the sprint's branch to main. A change to a protected path needs your approval either way.

The whole shipped roster file on GitHub