
ADS · beta
Say fix #13. An agent team tests, changes and reviews it. You keep the last word.
You ask Claude Code for a change, and ads runs an agent team for it: tests first, then the change, then a review in layers. A small change of trivial, low or medium risk that passes every check can land by itself, signed in git; high and critical changes wait for your ok <code>.
ADS is in beta. The repository opens soon.
> fix #13 #13 Plan feature: Add a cover target to the Makefile #13 Plan risk high (forecast): Makefile matches a path rule, declared trivial #13 Plan test author, implementer, 6 review layers · at most 3 rounds · 8M tokens · 3600 s #13 Step test author done · 1 frozen test · 74 s #13 Step round 1 · implementer done · 32 s #13 Step checks: test pass · frozen pass #13 Step review round 1: correctness ✓ · scope ✓ · acceptance ✓ · security ✓ · concurrency ✓ · api ✓ #13 End ready for sign-off · 123k tokens
ads needs your approval: sign off and land #13 "Add a cover target to the Makefile" Risk: high Tests: 1 frozen test failed before the change and passes now, checks pass Spent: 123k tokens Changed files: - cover_cdr0013_test.go (+18 −0) - Makefile (+4 −0) Head: 3f9c0a7b12de To approve, reply: ok 4f2a
How a change lands, in four steps.
test author
Tests first
A test author writes tests for the request, and they are frozen. For a bug or a feature, they must fail before the change. A docs-only change has none: a test would pass before and after it.
implementer
The change
An implementer makes the change until the frozen tests and the checks pass, in at most 3 rounds by default.
reviewers
A review in layers
Each layer is a separate reviewer: one for a trivial change, six for high and critical. A finding blocks only from severity major, and only with a test that fails on the change.
risk decides
It lands, or it waits for you
The risk picks one of the two exits below. To land by itself, a change must stay within its size limit and pass every check; a medium one only when the run had no dispute and no stall. Every landed change can be undone, after your approval, with a signed revert.
- trivial, low, mediumlands by itself, signed with the team key
- high, criticalwaits for your
ok <code>, signed with your key
You talk, it works
No new tool to learn: you speak to Claude Code.
After setup you work by talking to Claude Code, and it runs ads for you. Only the install, the setup and its check run in a terminal.
| You say | What happens |
|---|---|
| “fix #12” | The team works on issue 12 in the background. You get a short report, or one question. |
| “work the queue” | The team works the open issues labeled ads, one at a time, and ends with what waits for you. |
| “what is waiting for me?” | A list of the changes that need you: a sign-off, a question, a budget, or a paused change. |
| “change X” | After a report: the team makes one more round with your words. |
| “be stricter on payment/” | The session proposes a change of the team rules and shows it in plain words, with the files that gain or lose protection. After your approval, it lands signed with your key. |
ok 4f2a | Approves the one pending question with the code 4f2a. |
Risk decides who signs
The risk of a change decides who signs it.
The risk is the highest of three: the risk the team declares, the path rules in .ads/config.yaml, and the risk a reviewer raises. Agents cannot lower it below the path rules.
A change lands by itself only within a size limit: 20 changed lines for trivial, 200 for low, 400 for medium. A binary file, or a file outside the request, makes it wait for your sign-off.
| Risk | Lands | Signed by |
|---|---|---|
| trivial, low | by itself, when every check passes | team key |
| medium | by itself, when every check passes, the run had no dispute and no stall; otherwise it waits for your sign-off | team key, or you |
| high, critical | waits for your sign-off | your key |
Signed in git
Every step is signed in git.
Each change keeps its history as signed events on its own git ref. The team key signs what the agents do. ads work starts only once ads init has set up the team key and listed it as trusted. Your key signs your answers, approvals, sign-offs and team-rule changes.
The keys that may sign are listed in .ads/allowed_signers on the trunk. ads audit verify checks every signature, and ads audit show prints each event with its signer.
| Who acts | Signed with |
|---|---|
| the agent team: tests, change, review, a landing by itself | team key |
| you: an approval, a sign-off, a team-rule change | your key |
Stop, pause, undo
Stop, pause or undo at any time.
pause #12 stops the team after its current step and keeps everything: the pull request, the branch, the tests and the budget used. It needs no approval, and the current step can still land the change.
stop #12 ends the work and closes the pull request, after your approval. Only a stop keeps a change from landing.
undo #12 reverts a landed change with a signed commit, after your approval.
An approval is your ok <code> in the session, within 10 minutes. A plain “ok” with no code approves nothing.
A budget per change
Each change has a budget, and asks before it spends more.
By default a change gets at most 3 rounds and 3600 seconds, and a token budget for its risk. Tokens count every kind, cache reads included. There is no dollar limit by default.
Going over asks you for one more budget, with an approval. You can set your own budgets per risk in .ads/config.yaml.
| Risk | Rounds | Seconds | Tokens |
|---|---|---|---|
| trivial | 3 | 3600 | 1M |
| low | 3 | 3600 | 1.5M |
| medium | 3 | 3600 | 3M |
| high | 3 | 3600 | 8M |
| critical | 3 | 3600 | 8M |
What it does not do
The limits, plainly.
- The approval guard is a text filter that runs as your own user. It stops mistakes and casual prompt injection; it does not stop a model that sets out to get around it. A real boundary needs an OS sandbox, which
adsdoes not ship yet. - Claude Code’s transcript of the session holds each approval code in plain text.
adsneeds Claude Code: you work through it, and its hooks make approvals in the session work.- GitHub is optional:
ads init --no-githubskips the GitHub steps. adsis in beta. Its commands and its output still change.
Install
Set it up once, then talk to Claude Code.
You need Go, git 2.38 or newer, OpenSSH and Claude Code. The GitHub CLI is optional.
$ git clone https://github.com/sondalab-ai/agentic-dev-system.git $ cd agentic-dev-system $ make install # then, in the repository you work on $ ads init $ ads doctor
With Claude Code installed, ads init sets the claude agents for every role, so your first change runs with real agents. Without it, every role gets the fake adapter, which does no work: install Claude Code, then ask it to “use the claude agents for every role”.
ADS is in beta. The repository opens soon.
Everyday use