Roles

Assign agents. Run the next hop.

Four roles. Each hop is handed to the agent (and optional model) you assigned. Arthur formulates a default sequence from the project or ticket. This is not a graph composer.

The roles

RoleHopsAgents
plannernext-plan-requestchatgpt-browser · claude-code · codex · grok · manual
implementerplan, implementation-handoffclaude-code · codex · grok · manual
reviewerplan-review, sprint-reviewsame as planner
qaqa-review (after implementation)same as planner, or none to skip

Example: reviewer = Claude Code on Opus. QA = Grok. Planner and implementer stay on Grok.

If roles is missing, advisor fills planner + reviewer and executor fills implementer. QA defaults to none.

Default sequence

  1. Planner scopes the packet
  2. Implementer writes the plan
  3. Reviewer approves or sends it back
  4. Implementer builds (implementation gate must be GO)
  5. QA checks, if assigned
  6. Reviewer closes the sprint

arthur loop create --from-ticket AUTH-2 writes that sequence into projects/<ID>/loop-plan.json and seeds the first hop.

Terminal

arthur roles
arthur roles set reviewer=claude-code:opus qa=grok
arthur loop create --project-id MY_APP --from-ticket AUTH-2 \
  --role planner=grok --role implementer=claude-code --role reviewer=claude-code:opus
arthur
arthur run
arthur run --all

Inside an instance, bare arthur is arthur run: claim → invoke that role’s CLI → capture → enqueue the next hop. arthur follow --once is the same engine.

Grok stays grok --always-approve -p. Add --model when you set one. Claude is claude --model … -p. Codex is codex exec --model ….

Web console

arthur web
  1. Roles — pick an agent and optional model for each role. Save.
  2. + Loop — project, optional ticket, the four roles, tracker. Creates the first hop.
  3. Run next — invokes the next assigned agent. The canvas strip shows the sequence; the current hop is highlighted.

Same files as the CLI. Localhost only. Token in the URL is the session key.

From an agent

/arthur-loop asks for the four roles, then calls arthur.loop.create and arthur.run (portable: arthur_loop_create, arthur_run). You can also call arthur.roles.set with reviewer=claude-code:opus.