“The agent says it’s done” isn’t the same as done. Done Means is the list of commands that decide it for a repository, such as make test. Cavvy runs them by itself, before you spend a minute looking.

Set it up

On the repository’s page (click it in Project Info, ⌘I) → Settings → Done Means. Type a command into Add command …, or take one Cavvy found in the repository under Found::

The repository hasSuggested command
test, check or lint targets in a Makefile or justfilemake test, just check …; then only these
Cargo.tomlcargo test
package.json with a test scriptpnpm test, yarn test, bun test or npm test, by lockfile
Package.swiftswift test
go.modgo test ./...
pyproject.toml or pytest.inipytest
mix.exsmix test

Each command carries the tag must pass. The list is kept in the repository’s git config on its server, not in a commit, so it applies to every task and to nobody else.

When it runs

When an agent in a task finishes a turn and the task has new commits, Cavvy runs the commands in the task’s worktree, one after another, and stops at the first that fails. Each command has 15 minutes. Meanwhile the task stands under Automatic Check. A state that was checked already isn’t checked twice.

Red

The task moves to Problems. The card says Checks failed · revision … and shows the last lines of the output. Then:

  • Ask Claude Code to Fix It (with the name of the task’s agent) sends the agent the failing command and the end of its output.
  • Show Terminal shows the agent’s terminal.
  • Check Again runs the commands once more.

Green

If the repository has a second opinion set to After green checks, it starts now, and the task stays under Automatic Check. Otherwise the task moves to Ready for Review.

Without Done Means

Nothing is checked before a merge. Finish… then offers the merge only as Merge into … Anyway, in red, and a second opinion doesn’t start by itself either. Done Means is what lets you trust the green dot.