Autonomous coding · for multi-milestone projects · v2.17.0
An outsourcing team made of AI agents.
Running by process, 24/7, for large projects.
Astragentic is a scaffold for running a team of AI agents on the orchestrator model. You talk to one representative, the team builds by role, and every piece of work goes through an issue tracker: GitHub Issues, Jira or Linear. The hard parts of running many agents are settled; the rest is yours.
AI outsourcing team
What each agent does.
Every member of the team is an agent: a Claude Code session opened from the command line with a fixed role. It takes work, hands back the result when it is done, and can be cloned: several Builders building at once, several QAs checking at once, like a real team.
Each role has a name of its own: Thomas, Shaper, Builder, Rin, QA. The name keeps the agent from drifting out of its role across a long context, and it is the address for sending work, reading a pane, and attaching the right skills.
- Thomasyour representativeA resident session, alive across many tickets.Holds the tracker, runs the frontier query, claims, dispatches and merges. It is the only role still there once a Builder has closed its session, so every durable piece of state belongs to Thomas. It comes back to you at the decisions that matter.claude · claude-opus-5 · effort medium
- ShapershapingOne unbroken session end to end, never compacted.Runs grill-with-docs, to-spec and to-tickets in that order, and stops after the spec for you to approve.claude · claude-opus-5 · effort high
- BuilderbuildingOne session per ticket, in its own worktree, the only writer there.Implements, reviews the code on two axes, simplifies, then takes the cross review pass where Codex re-reads the diff. It may hand the typing to a junior pane. It commits at every boundary, not only at handback.claude · claude-sonnet-5 · effort medium
- Rinthe gateOne session per milestone, in a separate worktree at the exact SHA under review.Reads only, and writes exactly one file: the gate report. One pass per milestone, never a loop.
- QAacceptanceOne session per walk, with the product running for real in its own worktree.Uses the product the way a user does and never reads the diff. Read-only by default; every write needs your permission, one at a time.claude · claude-sonnet-5 · effort low
Model and effort per role
Each role runs on the model and effort its work needs. Thomas and Shaper reason at length, so they run Opus, Shaper at high effort. Builder and QA need speed and low cost, so they run Sonnet. Rin gates on Opus at medium effort.
This table is read straight from .agents/orchestrator.md in your repo. Change one row and that role's runtime, model or effort changes at the next dispatch, with no edit to the role contract.
harness/.agents/orchestrator.md
## Active assignments| Role | Runtime | Model | Effort | Advisor ||---|---|---|---|---|
| thomas | claude | claude-opus-5 | medium | fable || shaper | claude | claude-opus-5 | high | fable || builder | claude | claude-sonnet-5 | medium | opus || qa | claude | claude-sonnet-5 | low | opus |
Scroll sideways for the whole diagram
Thomas runs the whole team: takes your request, brings in the Shaper when a spec is needed, dispatches tickets to Builders, calls Rin’s gate at every milestone and QA’s walk before a merge, then reports back to you. Every arrow in the picture is one exchange there and back.
How you work with the AI team
The operating model.
You are the client, talking to Thomas, the team's representative. The team works around the issue tracker, and everything passes through it so you can read it back at any time.
Day to day, you work with Thomas alone
- Thomas runs the team.
- Thomas opens a Shaper session when something needs shaping, dispatches tickets to Builders up to capacity, calls Rin’s gate at every milestone and QA’s walk before a merge. You never summon an agent yourself.
- Thomas reads the reports for you.
- Handbacks, receipts, gate verdicts and walk reports reach Thomas first. Thomas reads them against the ticket and tells you what they say the way the two of you already talk: your language, the level of detail you want, an example in place of a term when you prefer one. The originals stay on the tracker for you to check.
- You only have to make Thomas understand what you want.
- You state what you want and where it is going; Thomas carries it out with the team and makes the calls along the way. It comes back to you only when a decision is genuinely yours, such as UI/UX or the tech stack, and by then the question has been reduced to a choice you can answer.
Scroll sideways for the whole diagram
How agents talk to each other
Dispatching a ticket opens a conversation with an address.
A ticket is an issue on the tracker, sliced small enough for one Builder to finish in one session. It carries a stable id, a status, an assignee, and blocking edges to the work that must land first.
Thomas dispatches with the dispatch-ticket skill: claim on the tracker, create the branch and worktree, open a herdr pane, launch the agent for the role, send the brief, set a watcher. The chain ticket → assignee → pane → worktree → branch → PR is one to one, so many Builders run in parallel without stepping on each other.
Between Claude Code sessions the main channel is built-in cross-session messaging. Every session has a name; Thomas looks it up with ListAgents and sends straight to it. On the receiving side the message appears as the preview line › Message from @thomas: …, expands with ctrl+o, and the reply travels back to the session that sent it.
herdr is the visible plane and the fallback: one named pane per agent, with a watcher reporting working, blocked, idle. Thomas reads a pane with herdr agent read when a session goes quiet, and prompts a junior pane through the herdr CLI.
- Technical questions: Thomas answers them for you, from the contract, the spec and the tracker.
- Design decisions: these come up to you through
to-questionnaire, as a question you can answer. - Where you stand: on the loop, not inside every step of it.
Issue tracker
Every piece of work goes through the tracker, so none of it drifts.
The state of the work is stored on the tracker, not in chat or in an agent's memory. Thomas asks the tracker what is ready; you open the board and read it.
- A ticket is data: id, status, assignee, blocking edges, read and written over an API. No more checkboxes in a markdown file that an agent has to remember to tick.
- A claim is one assignee line, written and read back, so many Builders run in parallel.
- One ticket is one branch, one worktree, one PR, carrying the same ticket id. After merge the ticket closes and the worktree is cleaned up.
- A ticket holds the whole story: the work, the approach, the questions asked, the receipts committed. You understand a piece of work by opening its ticket.
- No new tool to learn: GitHub Issues, Jira and Linear all work.
five requirements on the tracker · verbatim from tracker-contract.md
- A stable ticket id in the TITLE
- A status with five states — Backlog / Todo / In Progress / Done / Won't fix
- An assignee, written and read back atomically
- Every precondition as a queryable EDGE
- A surface the OWNER can open and read without running a query
linear-issue-trackerLinear
github-issue-trackerGitHub Issues
jira-issue-trackerJira
Scroll sideways for the whole diagram
Ticket lifecycle
A ticket passes through seven stages.
The stages are named, so every measured incident attaches to exactly one of them.
Scroll sideways for the whole diagram
- 01claim
Assignee written, then read back.
- 02brief
Dispatched into a pane, at Base.
- 03build
The Builder works in its own worktree.
- 04code-review
Rin re-reads the artifact and the traces.
- 05simplify
Markers cleared, the surplus cut.
- 06arm
Codex re-reads; the receipt is bound to a SHA.
- 07merge
One Ledger line written, assignee cleared.
mattpocock-skills
Astragentic runs on mattpocock-skills for both halves of a project.
Matt Pocock's skills cover both halves of a project, and Astragentic attaches each skill to the right role.
- The management half: wayfinder sets direction, triage sorts the work, grill draws out the requirements, to-spec settles the spec, to-tickets slices it into tickets.
- The engineering half: implement by TDD, code-review, simplify, diagnosing-bugs.
- One method for both: Thomas manages and Builder builds by the same rules, from the first requirement to the last PR.
- Thomas
- triage · wayfinder · to-questionnaire · ask-matt
- Shaper
- grill-with-docs → to-spec → to-tickets
- Builder
- implement
- Shared
- grilling · tdd · code-review · codebase-design · domain-modeling · research · prototype · diagnosing-bugs
Scroll sideways for the whole diagram
Approach
AI is now a real developer. Astragentic puts you in charge of that developer team.
A coding agent today takes the work, writes the code, runs the tests and fixes until they pass. Once execution is no longer the bottleneck, the engineer's value moves elsewhere: setting the right requirement, making the right call, keeping the process on course.
Astragentic is built so that you do exactly that part. It organises agents into an outsourcing team under the familiar SDLC discipline, and redesigns dispatch, review and handback for a speed no human team can sustain.
Features
Six things a team can do that a single agent cannot.
Each card opens the page that explains the mechanism behind it.
A review gate in two layers, two AIs from two vendors.
Every ticket goes through a code review against Standards and Spec on Claude Code, then a cross-read on Codex. Two models from two vendors read the same diff before the merge, so quality does not rest on a single model.
Read more →Continuous operation around the issue tracker.
Every requirement, spec and ticket sits on the tracker. When a review finds new work, it is written up as a new ticket. The team runs around the clock without you watching it, and nothing falls outside the system.
Read more →A team with names, roles and contracts.
Thomas represents you, the Shaper shapes, the Builder builds, Rin holds the gate, QA accepts. Each role carries its own contract and system context, so responsibility is clear and nobody does someone else's job.
Read more →One runtime, a second vendor to read it back.
Every role runs on Claude Code. Codex comes in when you want a second vendor to re-read the diff, and a Builder may hand the typing to a junior pane on another runtime. Model and effort per role are declared in orchestrator.md.
harness/.agents/orchestrator.mdbuilder · claude · claude-sonnet-5 · medium
Read more →Role Runtime Model Effort Thomas claude claude-opus-5 medium Shaper claude claude-opus-5 high Builder claude claude-sonnet-5 medium QA claude claude-sonnet-5 low The right model for the right work.
Sonnet for the Builder and QA, where fast and cheap matters; Opus for Thomas, the Shaper and Rin, where long reasoning matters. Cost and quality are balanced per role instead of one model for everything.
Read more →Full oversight, no need to take over.
The tracker board, the herdr panes, the designs and the decisions can all be read back. Thomas comes back to you at the points that matter: UI/UX, and the choice of tech stack. You decide, the team builds.
Read more →
The right size of project
For long-lived projects with many parts running in parallel.
A project is not large because it has sprints or stories. It is large because it is long-lived, wide, dependent and risky, and Astragentic has one mechanism for each: the tracker and receipts keep state outside any agent's memory, claims and worktrees let several Builders run in parallel, blocking edges and the frontier query keep the order, Rin's gate and QA's walk stop a merge before it hurts. With none of the four, an ordinary agent session is enough.
A fit when
- There is a roadmap of several releases; the codebase lives on for months after launch.
- Several modules or subsystems (app, backend, admin, integrations) are built in parallel.
- Work depends on other work and needs ordering; real users make regressions a risk.
Not needed when
- One deliverable, done when delivered.
- One person working sequentially would keep up; nothing runs in parallel.
- No dependencies between pieces of work, no release after this one.
Tech stack
Seven things to have before you install.
Five required, one optional, one pick-one-of-three. The check-requirements.sh script checks all of them for you before the install.
Required tech stack
- Claude Code CLIrequired
Runtime for the roles. Rin's milestone gate runs only on Claude, so without it nothing can gate.
- Codex CLIoptional
Second vendor for the cross review. Without Codex the team runs single-provider.
- Git ≥ 2.5 with worktreerequired
The isolation boundary: one checkout per Builder, nobody moves anyone else's HEAD.
One pane per agent. Thomas sees which agent is running and sends or waits on messages through the herdr CLI.
- mattpocock-skills ≥ 1.3.1required
The SDLC method the team follows: grill, spec, tickets, implement, code review.
- Issue tracker: GitHub Issues, Jira or Linearpick one
The team's shared memory. Every task, claim and receipt passes through it.
- python3required
Runs the git-guard hook and the contract reload after compaction.
Start an agent over the CLI
claude --dangerously-skip-permissions --agent builder --model <model> --effort <low|medium|high|xhigh|max>
Install
Five steps to put the team into your repo.
Astragentic installs from your checkout into each project folder, not onto the machine. One checkout serves many projects, and every customisation you make there reaches them by this same install path.
five steps · in order
Check the machine has the tech stack
./check-requirements.sh
Install the harness into your repo
Run it from the Astragentic folder, pointing at the project folder. It only copies one release into that project's
.astraler/releases/and edits none of your files. One Astragentic checkout serves many projects; you tune and upgrade the harness in one place, then install it again per project../install.sh /path/to/your-repo
Let Claude Code adapt the harness to the repo
Reads and executes ADAPT-HARNESS.md: tracker name, ticket prefix, docs paths.
cd /path/to/your-repo
claude "Read .astraler/releases/2.9.0/ADAPT-HARNESS.md completely and execute it."
Configure mattpocock-skills for the repo, once
This skill declares the tracker, the triage label set and where GLOSSARY.md and ADRs live; the engineering skills read that configuration afterwards.
claude
/mattpocock-skills:setup-matt-pocock-skills
Open Thomas's session
Thomas runs without per-command permission prompts so it can route continuously; model and effort follow the thomas row in orchestrator.md.
claude --dangerously-skip-permissions --agent thomas --model claude-opus-5 --effort medium
Customise
Everyone works with AI differently. Astragentic is the scaffold for those who work by agent orchestration.
There is no single right way to work with AI. Astragentic does not choose for you.
- The full SDLC loop: five roles, a gate at every milestone, a QA walk before merge.
- The minimal shape: two agents, one representative and one builder.
- Your own stack: swap the tracker, swap the runtime, add a review step of your own.
Customising means editing files in your checkout. Each role is a contract, each skill a folder, each hook a script.
The path from a change to a project is the release path: bump VERSION, add an entry to RELEASE-NOTES.md, then reinstall with install.sh. Inside the project the adaptation step compares the new release with the one running and keeps the files that belong to you, such as orchestrator.md.
Scroll sideways for the whole diagram
Self-repair
The scaffold learns from every loop, and the rule it draws goes straight into a file agents read.
A team of agents repeats its own mistakes when nothing writes them down. Here something does: every incident is one line in an append-only ledger, with a fixed id, never renumbered and never deleted.
A line that yields a rule puts that rule straight into a role contract, a skill or a hook — the files an agent reads at the start of its session. At the next dispatch the whole team behaves differently, not because anyone remembered, but because the text changed.
The foot of a merge commit
Pass: code-review, simplify, armLedger: AST-136 — --grep is BASIC regex, and every marker kindin this system contains parentheses
- It closes at merge: the merge commit carries a
Ledger:line naming what went in.Ledger: noneis valid; its absence is not. - No build step: the rule lives in the contract file itself, which the agent reads at session start. A hook re-arms the contract after a session compacts.
- Append-only: a line that has not yielded a rule yet stays where it is. An open record is more honest than a ledger holding only the things already solved.
The same property lets an agent customise the scaffold for you. All of Astragentic is text — contracts, skills, hooks — no binaries, no config schema to learn. You open a session inside the checkout, describe how you want to work, it proposes a diff, you approve it.
Read the whole mechanism →