tk3.biz
Back to Blog

[Released] dev-orchestra: Start the Review While the Tests Run v1.3.1

Introduction

dev-orchestra is a plugin for Claude Code / Codex / Antigravity that takes a one-sentence request through design, implementation, testing, review by several AIs, and fixes.

This post rounds up the changes in v1.3.1 (2026-10-29). The changes in v1.3.0 are in the previous release post.

dev-orchestra is open source on GitHub (MIT license). If it looks useful, a star would mean a lot.

→ github.com/istb16/dev-orchestra

Main changes

Start the review while the tests run

Until now, the code review went in this order: implementation (or a fix for review findings) → tests → review. In a repository with slow tests, the reviewers just waited all that time.

In 1.3.1, turning on the review.start_before_tests setting starts the review right after the implementation or fix, at the same time as the tests. It is off by default.

dev-orchestra config set review.start_before_tests true --scope global

Reviewing before the tests finish does not mean you end up fixing findings on code that fails. The review can be used only once the tests pass on the same working tree it reviewed. Until then, accepting a finding (review triage --status accepted) and writing the fix instructions (review fix-brief) are refused with exit code 2. Where things stand shows on the tests on the reviewed tree: line of review status.

tests on the reviewed tree: pending -- no test result recorded on the reviewed tree yet
next: record the tests on this tree (state record test ok|failed), then review status again

If the files the tests write (result files, coverage, and so on) are not ignored by .gitignore, the tree counts as “a different tree” and the review cannot be used. Make the tests’ outputs ignored before turning this on.

I tried it on and off in a scratch repository; the steps and output are in the dev-orchestra series post “I Let dev-orchestra Start the Review Without Waiting for the Tests” (scheduled for November 19, 2026).

A change that may need action: plan approval now defaults to auto

dev-orchestra shows the plan the architect wrote to the user and waits for a yes before implementing (design.require_approval). In 1.3.1 this setting gains auto, and auto is now the default.

auto skips the approval only when all three of these hold:

  • Nobody is watching: the environment variable DEV_ORCHESTRA_UNATTENDED is set. If it is not, CI is read the same way (DEV_ORCHESTRA_UNATTENDED=0 keeps asking even when CI is set)
  • The plan is not risky: the plan touches no path marked high-risk (optimization.high_risk_paths and so on), and no design review round ran with --high-risk
  • The design review left nothing above Low: either the design review was skipped because the plan is small, or the latest design review looked at this very plan and left nothing above Low

If any one is missing, it asks, just as true did. So in ordinary interactive use you are still asked for approval, as before. What changes is runs in CI or with DEV_ORCHESTRA_UNATTENDED.

In a scratch repository I put a small plan that touches only two files and compared the Plan approval: line of status. Without the environment variable, it waits for approval as before:

Plan approval: pending -- present .ai/workflows/ap1/plan.md to the user and ask; a yes is recorded with `design approve`, never without one

With DEV_ORCHESTRA_UNATTENDED=1, it decided no approval was needed:

Plan approval: not required (design.require_approval: auto -- nobody watching; the design review was skipped (2 code files, none high-risk))

If you want approval to always be asked, even in CI, set it to true:

dev-orchestra config set design.require_approval true --scope global

With true, it stayed pending even with DEV_ORCHESTRA_UNATTENDED=1. design.require_approval is read only from the global config; writing it in the project config (.dev-orchestra.yaml) has no effect.

Claude write runs get only the tools they use

Write runs on Claude Code (the implementer, the review fixer, run --mode implement) now start with only the tools they use and without MCP servers. You can see the command with run implementer --print-command (PowerShell is added on Windows):

claude -p --output-format stream-json --verbose --include-partial-messages --model opus --permission-mode acceptEdits --tools Read,Edit,Write,Bash,Grep,Glob,PowerShell --strict-mcp-config

Before, every built-in tool and the definitions of the user’s MCP servers were sent on every turn. According to the CHANGELOG, measured on claude 2.1.312, the old way started a run at about 47k tokens of context instead of about 12k. As for cost, the docs (providers.md) say the same task cost 26% less with the narrowed tools (from $1.72 to $1.28). I compared the two in a scratch repository; the steps and output will be covered in the dev-orchestra series post “I Narrowed the Tools dev-orchestra Hands Its Write Runs and Compared the Tokens” (scheduled for November 23, 2026).

If you want the implementer to use MCP servers, set that role’s options.tools to all to get the old behavior back. You can also list tool names to choose which ones it gets (MCP servers are still left out in that case).

dev-orchestra config set implementer.options.tools all --scope global

With all, --tools and --strict-mcp-config were no longer added. Like permission_mode, options.tools is read only from the global config. If the project config names it, that role’s write runs are refused.

Smaller changes and bug fixes

  • New environment variable DEV_ORCHESTRA_UNATTENDED: tells dev-orchestra that nobody is watching the run. 0, false, no, and off count as “watching”
  • The Plan approval: line of status now gives the reason for asking or not asking. design_approval in --json gains mode, reason, requirement, nobody_watching, and unattended_questions
  • Under auto with nobody watching, open design questions are left to the architect, as under false, and the approval asked for afterwards lists those questions
  • design.require_approval in the project config is still not used. If its value would loosen approval, such as auto over a global true, doctor reports it as a problem
  • On an older Claude Code whose --help does not list --tools and --strict-mcp-config, write runs go as before
  • With review.start_before_tests on, state record test and re-test now record the tree the tests ran on. round_tests was added to review status --json and to review in status --json

Stabilization

Work was done to make things more stable, such as adding tests for the new features and fixing gaps in how the review alongside the tests is judged.

How to update

How to update depends on the CLI you use. Follow the steps in How to Update with the new version’s tag (v1.3.1). After updating, running dev-orchestra doctor once is a good idea.

Summary

  • Start the review while the tests run (review.start_before_tests, off by default): the review can be used once the tests pass on the same tree
  • Plan approval now defaults to auto: interactive runs still ask, as before. Runs in CI or with DEV_ORCHESTRA_UNATTENDED skip the approval when the conditions are met. To always ask, set design.require_approval: true
  • Claude write runs start with only the tools they use and no MCP servers: set options.tools: all to go back to the old behavior

GitHub: istb16/dev-orchestra (a star would be a big encouragement)

Related Posts