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.

  1. 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.

  2. implementer

    The change

    An implementer makes the change until the frozen tests and the checks pass, in at most 3 rounds by default.

  3. 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.

  4. 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
01

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 sayWhat 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 4f2aApproves the one pending question with the code 4f2a.
02

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.

RiskLandsSigned by
trivial, lowby itself, when every check passesteam key
mediumby itself, when every check passes, the run had no dispute and no stall; otherwise it waits for your sign-offteam key, or you
high, criticalwaits for your sign-offyour key
03

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 actsSigned with
the agent team: tests, change, review, a landing by itselfteam key
you: an approval, a sign-off, a team-rule changeyour key
04

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.

05

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.

RiskRoundsSecondsTokens
trivial336001M
low336001.5M
medium336003M
high336008M
critical336008M

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 ads does not ship yet.
  • Claude Code’s transcript of the session holds each approval code in plain text.
  • ads needs Claude Code: you work through it, and its hooks make approvals in the session work.
  • GitHub is optional: ads init --no-github skips the GitHub steps.
  • ads is 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.