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
| Role | Hops | Agents |
|---|---|---|
planner | next-plan-request | chatgpt-browser · claude-code · codex · grok · manual |
implementer | plan, implementation-handoff | claude-code · codex · grok · manual |
reviewer | plan-review, sprint-review | same as planner |
qa | qa-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
- Planner scopes the packet
- Implementer writes the plan
- Reviewer approves or sends it back
- Implementer builds (implementation gate must be GO)
- QA checks, if assigned
- 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
- Roles — pick an agent and optional model for each role. Save.
- + Loop — project, optional ticket, the four roles, tracker. Creates the first hop.
- 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.