Skip to content

Teams and adversarial review

Mjolnir runs Codex and Claude through one terminal, permission, session, and remote workflow. A team decides which of them fills each seat:

  • The coder backs the primary session — the agent that plans, edits, runs tools, and answers every user turn.
  • The reviewer backs the discrete-review pass that challenges changed turns and the default subagent pool.

The reason to split the seats is adversarial review. When discrete review is enabled — every team preset enables it — a completed turn that changed the workspace is held once its subagents have drained, and an independent session reviews the work before it is released. On a mixed team that session runs on the other provider, so the model challenging the diff did not write it and does not share its blind spots. Findings survive a validation pass before they reach the coder, and a clean review is a normal outcome.

Onboarding, the Team tab in /mjconfig, and Ctrl+Tab during a session offer the same four configurations:

TeamWhat it does
CodexCodex handles primary, subagents, and review
ClaudeClaude handles primary, subagents, and review
Codex coder + Claude reviewerCodex is primary; Claude handles subagents and review
Claude coder + Codex reviewerClaude is primary; Codex handles subagents and review

Choosing a team keeps every model selection on Auto, pins the primary seat to the coder’s adapter and the review and subagent seats to the reviewer’s, enables discrete review and subagent failover, and enables the built-in ACP routes its seats use — both routes for a mixed team, only that provider’s route for a single-provider team. Team changes apply to a new session; after saving from Ctrl+Tab, start the offered session to use the new team immediately.

A single-provider team still gets discrete review — the reviewer is an independent session with its own context, just not an independent provider.

Mjolnir’s terminal, permissions, worktrees, session storage, remote control, and voice input are identical across teams. Switching teams changes which provider fills each seat, never the workflow around them. Model requests go to the selected providers under their own terms; see Data and trust boundaries.

Review depth is controlled by the review tier on the Reviewer tab of /mjconfig:

  • Quick (default) sends one general reviewer over the change, then validates its findings before anything reaches the coder.
  • Extended runs an adversarial supervisor that forms a risk map and launches read-only specialist lanes on demand. It is more thorough and spends far more tokens.

Surviving findings return to the coder as a corrective turn, framed as strong leads to verify rather than instructions to obey. See Delegation and adversarial review for the full mechanics, and /review for explicit findings-only reviews of recent, uncommitted, or HEAD changes.

Each provider in the team needs its own working credentials: the codex CLI signed in for Codex, the claude CLI signed in for Claude. Roster resolution probes every enabled adapter, and a route that cannot launch is unavailable for its seats. Use /agents to record the model and adapter that actually bound to each seat.

Continue with Start with Codex or Start with Claude to set up a provider, then run the 10-minute evaluation to see a delegated, reviewed change end to end.