Agentic engineering · for multi-milestone projects · v2.8.0
An outsourcing team made of AI agents.
Running by process, around the clock, for large projects.
Astragentic puts you in the client's seat at a complete software development unit: one representative to talk to, a team of agents with clearly defined roles to build, and an issue tracker at the centre so every piece of work leaves a trace. You keep the decisions and full oversight; the execution belongs to the team.
Agent
Each agent is an independent runtime session with a role and a contract of its own.
Every agent is a working session of Claude Code, Codex or OpenCode, launched from the command line with a defined role. It takes a task the way an employee does, hands back the result when it is finished, and can be cloned into several sessions running side by side: 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 role from drifting across a long context, and it is the address for sending work, reading a pane, and attaching the right skills.
A role is a declaration file in each runtime’s own format, loaded into the system prompt when the session opens; runtime, model and effort per role are declared in one place, orchestrator.md. The path of each file is on the Structure page.
Start an agent over the CLI on three runtimes
claude --dangerously-skip-permissions --agent builder --model <model> --effort <low|medium|high|xhigh|max>codex --profile builder # model and model_reasoning_effort live in the profile TOMLopencode --agent builder -m <provider>/<model> # no effort flag
AI outsourcing team
What each agent does.
- 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-vendor review pass. 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.claude · claude-opus-4-8 · effort medium
- 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 because grilling and spec are where the thinking happens; Builder and QA build and test, so they run Sonnet for speed and cost; 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 ||---|---|---|---|
| thomas | claude | claude-opus-5 | medium || shaper | claude | claude-opus-5 | high || builder | claude | claude-sonnet-5 | medium || rin | claude | claude-opus-4-8 | medium || qa | claude | claude-sonnet-5 | low |
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.
How agents talk to each other
Dispatching a ticket opens a conversation with an address.
A ticket is an issue on the tracker: a task, a feature or a requirement sliced small enough for one Builder to finish in one session. Each ticket carries a stable id in its title, a status, an assignee, and blocking edges to the work that must land first. Shaper creates tickets from the spec with the to-tickets skill; Thomas dispatches only the ones that are ready.
Thomas dispatches through the dispatch-ticket skill: claim on the tracker, create the branch and worktree, open a herdr pane, launch the role, send the brief, arm the watcher. The chain ticket → assignee → pane → worktree → branch → PR is one-to-one, so several Builders work in parallel without treading on each other.
When the roles all run Claude Code, the main channel is Claude Code’s built-in cross-session messaging. Every Claude Code session has a name; Thomas looks up the Builder’s with ListAgents and sends to exactly that name. In the receiving session the message shows up as a one-line preview, › Message from @thomas: …, expanded with ctrl+o, and the answer travels back into the session that sent it. A blocked Builder asks; Thomas reads the question, answers through that same channel, then sets a fresh Monitor and waits for the signal that the work is done. That is how the loop of dispatch, question, answer and handback runs unbroken, with nobody sitting and watching it.
Driving a Builder on Codex through herdr
herdr agent start "builder-TRA-142" --kind codex --pane <id> -- codex --profile builderherdr agent prompt <pane-id> "<brief>"herdr agent read <pane-id>
herdr is the visible plane and the fallback path: one named pane per role, a watcher reporting working, blocked, idle. Thomas reads a pane with herdr agent read when a session falls silent, and steers a Builder on Codex or OpenCode through the herdr CLI, where there is no cross-session messaging.
The issue tracker
Every piece of work passes through the tracker, so none of it drifts.
The state of the work lives on the tracker, not in a chat or in one agent's memory. Thomas asks the tracker what is ready; you open the board and read it.
No more task lists in markdown with checkboxes an agent has to remember to tick. A ticket has an id, a status, an assignee, blocking edges; read and written through an API, so everyone gets the same answer.
A claim is an assignee line written and read back, so several Builders run in parallel. An issue found mid-work becomes a new ticket instead of getting lost in a message.
One ticket is one branch, one worktree, one PR, all named after the ticket. One worktree per Builder; once merged, the ticket closes and the worktree is cleaned up.
Each ticket keeps what the work was, how it was done, the questions asked, the receipt committed. You understand a piece of work by opening its ticket. GitHub Issues, Jira and Linear all work; there is no new tool to learn.
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
Ticket lifecycle
A ticket passes through seven stages.
The stages are named, so every measured incident attaches to exactly one of them.
- 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 adopts mattpocock-skills as its framework for running and building a project.
Matt Pocock’s skill set covers both halves of a project. The management half: wayfinder sets direction, triage sorts the work, grill draws out the requirement, to-spec pins the spec, to-tickets cuts it into tickets. The development half: implement with TDD, code-review, simplify, diagnosing-bugs. Astragentic assigns each skill to the right role, so Thomas manages and the Builder builds inside one framework, 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
Why
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, like an engineer sitting next to you. Once execution is no longer the bottleneck, the engineer's value moves elsewhere: setting the right requirement, making the right call, and keeping the whole 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 to exploit a speed and a volume 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, 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. Claude Code, Codex and OpenCode all support agent profiles at this level.
Read more →One process, several runtimes.
Claude Code is the required base; Codex and OpenCode come in when you want a second vendor or another model. Which role runs on which runtime is declared in orchestrator.md; changing the runtime does not change the process.
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 Rin claude claude-opus-4-8 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 for four reasons: it lives long (several releases, a codebase still edited months after launch), it is wide (several modules or subsystems worked on at once), it has dependencies (this must finish before that), and it carries risk (real users, regressions that cost). Astragentic has exactly four mechanisms for those four things: 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. Without all four, this machinery is overhead, and 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.
Four required, one optional, one pick-one. 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 and a fallback runtime. 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.2.3required
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.
Install
Five steps to put the team into your repo.
Check the requirements, install the harness, let Claude Code adapt it to the repo, configure mattpocock-skills once, then open Thomas's session. From there, everything goes through Thomas.
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.8.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 CONTEXT.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