tk3.biz
ブログ一覧に戻る Back to Blog

[Released] dev-orchestra: 作業単位の並列実行と役割ごとの指示を追加 v1.1.0 - v1.2.1 [Released] dev-orchestra: Parallel Work Units and Per-Role Instructions v1.1.0 - v1.2.1

はじめに

dev-orchestra は、1 文の依頼から設計・実装・テスト・複数の AI によるレビュー・修正までを回す、Claude Code / Codex / Antigravity のプラグインです。

この記事では、v1.1.0 から v1.2.1 まで(1.1.0、1.1.1、1.1.2、1.2.0、1.2.1 の 5 つの版)の変更をまとめます。1.0.0 の内容は紹介の記事に書いています。

dev-orchestra は GitHub で公開しています(MIT ライセンス)。役に立ちそうと思ったら、スターを付けてもらえるとうれしいです。

→ github.com/istb16/dev-orchestra

主な変更

計画を作業単位に分けて、並べて走らせる(1.2.0)

計画(plan.md)に ## Units を書くと、計画を作業単位に分けて実装できるようになりました。互いに依存しない作業単位は、それぞれ専用の git worktree で並べて走り、終わったものから作業ツリーへファイルごとにマージされます。

  • units check で、ファイルが重なる作業単位などを実行前に拒否し、どの順に走るか(波)を表示する
  • 同時に走らせる数は implementation.max_parallel(既定 2、最大 8)
  • 1 つの計画の作業単位は、implementer の試行を合わせて 1 回分だけ使う
  • 作業単位を書いていない計画は、これまでどおり 1 回の実行

実際に 2 つの作業単位を並べて走らせた手順は、作業単位の記事にまとめました。

役割ごとに決まった指示を渡す(1.2.1)

設定の instructions に、役割(orchestrator、architect、implementer、review_fixer、reviewers、design_reviewers)ごとの指示を書いておくと、毎回の実行でその役割のプロンプトに入るようになりました。「テストは make test で」「db/ の下は触る前に聞く」のように、依頼のたびに書いていたことを一度だけ書けます。

# .dev-orchestra.yaml
instructions:
  orchestrator: "Ask before adding a new dependency."
  implementer:
    file: .dev-orchestra/implementer.md
  reviewers: "Check that every public function in textkit/ has a docstring."

あわせて、作業単位のテストをマージ後に 1 回だけ流す implementation.unit_tests: after_merge と、git が無視するファイル(.env.test など)を作業単位の worktree にコピーする implementation.worktree_files も入りました。使い方は役割ごとの指示の記事にまとめました。

設計の前に質問する(1.1.0)

design.ask_questions を auto か true にすると、計画を書く前に、要件についてユーザーに質問するようになりました。オーケストレーターが自分で気づいた質問をしたあと、architect がコードを読んで見つけた質問を出します。答えは decisions.md にまとまり、計画の ## Decisions に反映されます。

dev-orchestra config set design.ask_questions auto

既定は無効(false)で、無効のままなら動きは 1.0.0 と変わりません。質問の回数は design.max_question_rounds(既定 2)で抑えられます。

進み具合の報告を設定できる(1.1.2)

長い実行の途中で、オーケストレーターがどれくらいの間隔で進み具合を伝えるかを、progress の設定で決められるようになりました。

設定既定内容
progress.updatesautotrue にすると、architect の実行とレビューをいつも裏で走らせて報告する。false は「止まっていそう」の知らせだけ
progress.interval_seconds180報告の間隔(30〜3600 秒)。jobs wait の既定の待ち時間にもなる
progress.quiet_notice_seconds600ツールの動きがこの秒数ないと may be stuck と知らせる。0 で無効

「止まっていそう」の知らせは知らせるだけで、実行を取り消すことはありません。

対応が必要になるかもしれない変更

  • Windows で出力を取り込んでいる場合(1.2.0)。 パイプやファイルへの出力を UTF-8 で書くようになりました。エージェントが読む日本語は化けなくなりましたが、PowerShell で $x = dev-orchestra ... のように取り込むと、今度はそちらが化けます。[Console]::OutputEncoding を UTF-8 にするか、前の出力に戻すなら PYTHONIOENCODING=cp932 を設定してください
  • jobs wait の既定の待ち時間(1.1.2)。 --timeout を付けないときの待ち時間が 60 秒から 180 秒(progress.interval_seconds)になりました
  • config validate の文言(1.1.2)。 null を受け付ける設定のメッセージに or null が付きました。受け付ける値は変わっていませんが、config validate --json や doctor --json のメッセージの文字列で判定しているスクリプトは直す必要があります
  • 自作のアダプタ。 Provider.worktree_files(1.2.0)と Provider.file_read_tools(1.2.1)が増えました。どちらも既定の値があるので、何もしなくても動きます

細かな変更と不具合の修正

  • 作業単位の実行がいなくなったとき、units status や run implementer --unit を実行した時点で失敗として記録されるようになった(units clean を先に走らせなくてよい)
  • 作業単位の worktree にコピーするファイルが、リンクを通るものや通常のファイルでないものなら、note: を出して飛ばすようになった
  • ワークフローの手引きが、短めの計画を求め、4 手順を超える計画を作業単位に分け、小さな作業を light tier に回すようになった(費用を抑えるため。CLI の動きは変わらない)
  • Windows で、置き換え中のファイルが読み手から一瞬消えて見え、実行中のジョブや状態が「無い」と読まれることがあったのを直した
  • Windows で、Claude Code やエディタが開いている settings.json に hooks install / hooks uninstall が書き込めなかったのを、再試行して書けるようにした
  • reviewer set --role で役割を変えたとき、前の役割の関連度のルールを外して知らせるようになった(セットアップのウィザードと同じ)
  • Antigravity CLI(agy)1.4.7 がファイルを read_file で読むのに合わせ、ツールの動きの表示と実機の確認で view_file と両方を受け付けるようにした
  • 実機での確認のスクリプト(scripts/smoke_live.py)が、日本語の Windows の画面で結果を表示するときに落ちていたのを直した
  • README の冒頭に実行例のアニメーションを置いた

安定化のための対応

大きなファイルを役割ごとに分けるなど、動作を安定させるための内部の整理と、テストの追加・整理を行いました。CI ではテストを分けて並べて流すようにしています。利用者から見た動きは変わりません。

更新方法

更新のしかたは、使っている CLI ごとに違います。アップデートの方法の手順で、新しい版のタグ(v1.2.1)を指定して更新してください。更新したら、dev-orchestra doctor を一度実行しておくと安心です。

まとめ

  • 作業単位(1.2.0):計画を分けて、依存しないものは worktree で並べて走らせる
  • 役割ごとの指示(1.2.1):instructions に書いた指示が毎回プロンプトに入る。作業単位のテストをマージ後に回す設定も
  • 設計の前の質問(1.1.0):design.ask_questions で、計画の前に要件を確かめる
  • 進み具合の報告(1.1.2):progress で間隔と「止まっていそう」の知らせを決める
  • Windows で出力を取り込んでいる人は、UTF-8 への変更に注意

GitHub: istb16/dev-orchestra(スターを付けてもらえると励みになります)

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 from v1.1.0 to v1.2.1 (five releases: 1.1.0, 1.1.1, 1.1.2, 1.2.0 and 1.2.1). What 1.0.0 does is covered in the introduction 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

Split a plan into work units and run them side by side (1.2.0)

If a plan (plan.md) has a ## Units section, it can now be implemented as work units. Units that don’t depend on each other run side by side, each in its own git worktree, and each is merged back into the working tree file by file as it finishes.

  • units check refuses units that cannot run, such as two whose files overlap, before anything runs, and prints the order they will run in (waves)
  • How many run at once is implementation.max_parallel (default 2, up to 8)
  • The units of one plan share a single implementer attempt
  • A plan without units runs once, as before

I walk through running two units side by side in the work units post.

Standing instructions per role (1.2.1)

Instructions written under instructions in the configuration, per role (orchestrator, architect, implementer, review_fixer, reviewers, design_reviewers), now go into that role’s prompt on every run. Things you used to repeat in every request, like “run tests with make test” or “ask before touching db/”, can be written once.

# .dev-orchestra.yaml
instructions:
  orchestrator: "Ask before adding a new dependency."
  implementer:
    file: .dev-orchestra/implementer.md
  reviewers: "Check that every public function in textkit/ has a docstring."

Alongside it came implementation.unit_tests: after_merge, which runs the units’ tests once after merging, and implementation.worktree_files, which copies git-ignored files (such as .env.test) into each unit’s worktree. See the per-role instructions post for how to use them.

Questions before the design (1.1.0)

With design.ask_questions set to auto or true, dev-orchestra now asks you questions about the requirements before the plan is written. The orchestrator asks the questions it noticed itself, then the architect asks the ones it found by reading the code. The answers are collected in decisions.md and reflected in the plan’s ## Decisions.

dev-orchestra config set design.ask_questions auto

It is off (false) by default, and while it stays off nothing changes from 1.0.0. The number of question rounds is capped by design.max_question_rounds (default 2).

Configurable progress reports (1.1.2)

The new progress settings decide how often the orchestrator reports during a long run.

SettingDefaultWhat it does
progress.updatesautotrue always runs architect runs and reviews in the background and reports on them. false keeps only the “may be stuck” notice
progress.interval_seconds180How often to report (30 to 3600 seconds). Also the default wait of jobs wait
progress.quiet_notice_seconds600With no tool activity for this many seconds, it says may be stuck. 0 turns it off

The “may be stuck” notice only informs; it never cancels the run.

Changes you may need to act on

  • If you capture its output on Windows (1.2.0). Output to a pipe or a file is now written in UTF-8. Japanese read by the agent is no longer garbled, but capturing it in PowerShell, as in $x = dev-orchestra ..., now garbles it there instead. Set [Console]::OutputEncoding to UTF-8, or set PYTHONIOENCODING=cp932 to get the old output
  • The default wait of jobs wait (1.1.2). Without --timeout, it now waits 180 seconds (progress.interval_seconds) instead of 60
  • The wording of config validate (1.1.2). Messages for settings that accept null now say or null. The accepted values haven’t changed, but a script that matches the message text from config validate --json or doctor --json needs updating
  • Your own adapters. Provider.worktree_files (1.2.0) and Provider.file_read_tools (1.2.1) were added. Both have defaults, so nothing needs to change

Smaller changes and bug fixes

  • A work unit whose run is gone is now recorded as failed as soon as units status or run implementer --unit runs (no need to run units clean first)
  • A file to be copied into a unit’s worktree that goes through a link, or isn’t a regular file, is now skipped with a note:
  • The workflow guidance now asks for shorter plans, splits a plan with more than four steps into work units, and sends small jobs to the light tier (to keep costs down; the CLI’s behavior is unchanged)
  • On Windows, a file being replaced could vanish for an instant to a reader, so a running job or its state could be read as missing. Fixed
  • On Windows, hooks install / hooks uninstall couldn’t write a settings.json that Claude Code or an editor had open. They now retry
  • reviewer set --role now drops the old role’s relevance rule when the role changes and says so (as the setup wizard does)
  • Antigravity CLI (agy) 1.4.7 reads files with read_file, so the tool activity display and the live checks now accept it as well as view_file
  • The live check script (scripts/smoke_live.py) no longer crashes when printing results on a Japanese Windows console
  • The README now opens with an animated example run

Stabilization

As usual, there was internal reorganization for stability, such as splitting large files by responsibility, along with added and tidied tests. CI now runs the tests split into parts in parallel. Nothing changes from a user’s point of view.

How to update

How you update depends on your CLI. Follow the steps in the update post with the new version’s tag (v1.2.1). After updating, it’s worth running dev-orchestra doctor once.

Summary

  • Work units (1.2.0): split a plan, and run the independent parts side by side in worktrees
  • Per-role instructions (1.2.1): instructions under instructions go into the prompt on every run. Plus a setting to run the units’ tests after merging
  • Questions before the design (1.1.0): design.ask_questions checks the requirements before the plan
  • Progress reports (1.1.2): progress sets the interval and the “may be stuck” notice
  • If you capture its output on Windows, watch out for the switch to UTF-8

GitHub: istb16/dev-orchestra (a star is always appreciated)

関連記事 Related Posts

dev-orchestra をアップデートしてみた(Claude Code / Codex / Antigravity) Updating dev-orchestra (Claude Code / Codex / Antigravity)

dev-orchestra を 1.0.0 から 1.1.1 に、Claude Code・Codex・Antigravity のそれぞれで実際に更新してみました。Claude Code は claude plugin update だけでは更新されず、先にマーケットプレイスの更新が要りました。今の版の確かめ方、CLI ごとの手順、更新したあとに確かめることをまとめます。 I actually updated dev-orchestra from 1.0.0 to 1.1.1 in each of Claude Code, Codex, and Antigravity. In Claude Code, claude plugin update alone did nothing; the marketplace had to be refreshed first. I cover how to check your version, the steps for each CLI, and what to check after updating.

Antigravity で dev-orchestra を使ってみた I tried dev-orchestra in Antigravity

Antigravity にも dev-orchestra を入れてみました。話しかける場所としては普通に使えますが、Antigravity CLI(agy)に設計やレビューを任せるのは限定的です。できること・できないことと、おすすめの使い方をまとめました。 I installed dev-orchestra in Antigravity too. It works fine as the place you talk to, but handing design and review to the Antigravity CLI (agy) is limited. Here is what works, what doesn't, and how I recommend using it.

dev-orchestra で役割ごとに決まった指示を渡してみた Giving dev-orchestra Standing Instructions per Role

dev-orchestra 1.2.1 で入った instructions を試しました。implementer やレビュアーへの決まった指示をリポジトリに書いておくと、毎回のプロンプトに入ります。どう表示され、どこに入り、指示を変える変更がどう扱われるかを、実際の出力で確かめます。 I tried instructions, added in dev-orchestra 1.2.1. Standing instructions for the implementer or reviewers written in the repository go into every prompt. I check, with real output, how they are shown, where they go, and how a change to the instructions is treated.