V6 Corepre-alpha

証拠は最新であること。
不明なら、止まる。

AI エージェントが古いグリーンのテストで完了したり、結果を確認していない副作用を繰り返したり重ねたりするのを防ぐ Claude Code プラグインです。エージェントに何が許されるかは、あなたが書く policy ファイルで決まり、プロンプトで決まることはありません。

  • 現在の証拠
  • 最大 1 回
  • プロンプトではなく policy
  • フェイルクローズ

stale-green · 古いグリーン、そしてリトライされた push

demo
  1. claude sum.mjs のバグを直して。テストの再実行は不要
  2. testnode --test がファイル a1f3 で成功
  3. editエージェントが sum.mjs を編集、ファイルは 9c07 に
  4. stop「完了しました。テストは通っています。」
  5. bw差し戻し:test が最後に成功したのは a1f3 で、その後ファイルが変更されています。
  6. testエージェントが node --test を再実行:1 件失敗、修正して b2e8 で成功
  7. pushpush は反映済みなのに git push がタイムアウト
  8. pushエージェントが git push をリトライ
  9. bw拒否:git-push はこのコミットですでに成功しています。

SENT BACKCore はエージェントを 2 度止めました。1 度は古い合格結果で完了しようとしたとき、もう 1 度は再び push しようとしたときです。どちらも理由とともに差し戻されました。

Core がチェックしたこと

停止 2 回 · 偽の完了 0 回
  1. Policy.better-workflows/policy.json からPASS
  2. 証拠現在のファイルでのテストBLOCKED
  3. 再実行b2e8 でテスト成功PASS
  4. アクションgit-push、初回PASS
  5. 最大 1 回同じ push、同じコミットBLOCKED

リポジトリの stale-green デモを短縮したものです。ツリー ID は説明用です。完全なデモは Claude なしで数秒で自分で実行できます。

01原則PRINCIPLES

モデルが強くなるほど役に立つ 3 つのルール。

強いエージェントほど 1 セッションで多くのコードを書き、多くのコマンドを自分で実行します。これらのルールはエージェントが慎重であることに頼らず、エージェントが何を言っても成り立ちます。

WITHOUT vs WITH同じセッションで

状況エージェントのみCore あり
テスト成功後にファイルが変更された「テストは通っています。」現在のファイルで再実行するよう差し戻す。
npm test | tailグリーンとみなす。終了コードは tail のもの。決して数えない。Stop が理由を伝える。
スイート全体ではなく spec ファイル 1 つだけ「テストは通っています」とみなす。exact なら、コマンド全体だけが数えられる。
push が反映された後にタイムアウトもう一度 push する。同じコミットでの同じ push は拒否される。
プロンプトに「公開してよい」とある公開する。policy が決める:allow、ask、deny。

AUTHORITY権限の出どころ

  1. L1
    policy.json

    人が書き、人が変更する。エージェントによる直接の編集は Core が拒否する。

    出どころ
  2. L2
    Claude Code の権限

    引き続き適用される。policy の allow が Claude Code 以上の権限を与えることはない。

  3. L3
    Core の hooks

    すべてのコマンド、編集、停止に policy を適用する。

  4. L4
    プロンプト

    目的を説明する。権限は持たない。

    なし

02仕組みHOW IT WORKS

6 つの hook と、.git の中の台帳ひとつ。

Core は Claude Code 自身の hooks の中で動きます。起動するものも、サーバーも、アカウントもありません。状態は各リポジトリの .git/better-workflows/ に保存されます。

HOOKShooks

  1. SessionStart:どのチェックが通る必要があり、どの副作用が未確定かをエージェントに伝え、policy が無効なときや、gh が必要なのに使えないときに警告します。
  2. PreToolUse:各副作用を許可・確認・拒否し、policy と台帳への編集を拒否します。
  3. PostToolUse:各チェックを実行対象の Git ツリーとともに、各副作用を終了コードとともに記録します。
  4. Stop:ファイルが変更され、必須のチェックが欠けている、失敗している、または古い場合、理由とともにエージェントを 1 回差し戻します。次回は警告だけです。
  5. bw status(hook ではなくコマンド):同じ状態をあなたに表示します。
STOP

完了

ファイルに結びついた証拠

テスト、lint、型チェック、ビルドが数えられるのは、成功していて、その行の結果をそれ自身の終了コードが決めていて、実行中にファイルが変更されず、ファイルが実行時とまったく同じままである場合だけです。

オプション

  • exact:コマンド全体だけが数えられ、cwd で実行すべき場所を指定します。
  • scope(exact と併用):指定したディレクトリ外の変更では、結果は古くなりません。
  • ignore(policy 全体):カバレッジなど、チェックが書き出す出力は変更とみなされません。
PRETOOLUSE

副作用

最大 1 回、不明なら止まる

push、PR の作成とマージ、リリース、パッケージの公開、そして独自に定義した種類は、それぞれ policy の allow が必要です。結果が確定とみなされるのは終了コード 0 だけです。

不明な結果を確定させるための読み取り専用チェック

  • git ls-remote
  • gh pr list / view
  • gh release view
  • npm view

RULES常に成り立つルール

  • R1

    無効な policy は、デフォルトに戻るのではなく、すべての副作用を拒否します。

  • R2

    期限切れの許可は ask に戻ります。延長できるのは policy を編集する人だけです。

  • R3

    eval や sh -c のように Core が読み取れないコマンドは、不透明なものとして扱われ、確認が求められます。

  • R4

    台帳は追記専用でハッシュチェーンされています。bw verify は編集・削除されたエントリと書きかけの最終行を検出しますが、末尾から丸ごと切り取られたエントリは検出しません。

03対応ホストHOSTS

まず Claude Code から。

Core はホストに依存しません。各ホストには小さなアダプターが必要です。Claude Code が最初で、現在サポートされている唯一のホストです。

ホストと OS のサポート状況
ホストmacOSLinuxWindows
Claude Code最初のホストサポート済み、CI でテストサポート済み、CI でテスト未テスト
CodexV5 のみ、凍結予定予定予定
Gemini CLIV5 のみ、凍結予定予定予定
Qwen CodeV5 のみ、凍結予定予定予定

CI はすべての pull request で Core を実行します。macOS 15 と Ubuntu 24.04、Node 22.23.3 と 24.21.0。

04はじめにGET STARTED

3 つのコマンドのあと、変更を依頼する。

Node.js 22.14 以降、Git、プラグイン対応の Claude Code が必要です。

  1. 1

    Core をクローン

    マシンごとに 1 回。ここで V5 を使っていた場合は、先に ~/.better-workflows を ~/.better-workflows-V5 に移動し、SBW_STATE_ROOT をそこに向けてください。

  2. 2

    プラグインを追加

    --scope local でリポジトリごとにインストールするので、コミットするファイルには何も書き込まれません。

  3. 3

    policy を書く

    bw init が .better-workflows/policy.json を書き出します。コミットすれば全員が同じルールを使えます。

  4. 完全な手順では、独自のチェック、副作用、不明な結果を扱います。 入門ガイド

Claude Code

git clone https://github.com/stephen-taipei/better-workflows ~/.better-workflows
claude plugin marketplace add ~/.better-workflows/packages/bw-core
claude plugin install better-workflows-core@better-workflows --scope local
node ~/.better-workflows/packages/bw-core/bin/bw.mjs init

任意:Claude なしで 2 つのシナリオを数秒で実行できます。

node ~/.better-workflows/packages/bw-core/examples/stale-green/demo.mjs

次に試す

このリポジトリの 1 行を変更して。テストは実行しないで。

Claude Code が完了しようとすると差し戻され、どのチェックが足りないかを伝えられます。

05制限LIMITS

止められること、見えないこと。

ゲートは、その境界がわかっていてこそ役に立ちます。

止める

観測できるミス

  • 古いまたは失敗したテスト実行で完了すること、またはチェックが exact 指定のときに一部だけの実行で完了すること
  • パイプや || true による失敗の隠蔽
  • push、マージ、リリース、公開の繰り返し
  • 以前の副作用の結果が不明なままの副作用
  • エージェントによる自身の policy や台帳の直接編集

しない

見えない範囲

  • スクリプト内の副作用を見ること(policy がそのスクリプトを指定している場合を除く)
  • テストが十分に良いかどうかの判断
  • 依存グラフの構築:scope にはチェックが依存するものをすべて指定する必要があります
  • Git で無視されているファイルを証拠に含めること

あなたに任せる

人が下す判断

  • 結果を読み戻せない副作用の確定
  • 許可を expiresAt 以降に延長すること
  • scope が何を対象にするかの決定
  • セッションが堂々巡りになっているかの判断
Core は上記のミスをブロックします。長いタスクでの手戻りや誤った判断が減るかどうかはまだ測定されていません。それを確かめるのが現在の自己利用期間です。
  1. B1シェルパーサーは拡張しません。読み取れないコマンドは実行前に確認が求められ、eval や sh -c の中に隠れたテストは決して証拠として数えられません。
  2. B2Core はセッションの進み具合を数えるだけです。収束しているかどうかは、エージェントかあなたが判断します。
  3. B3pull request とリリースは gh で照合されます。gh がなければ、あなたが確定させるまで不明のままです。

06ステータスSTATUS

プロジェクトの現在地。

V6 は V5 のワークフローエンジンを小さなコアに置き換えます。日付は達成した時点で示します。

  1. DONE 凍結

    V5.0 RC1

    tag V5.0.rc1

    マルチホストのワークフローエンジン。frozen/v5 ブランチで凍結済みで、新しい開発はありません。

  2. NOW 進行中

    V6 Core pre-alpha

    packages/bw-core

    Claude Code hooks、証拠の scope、2 つのリポジトリでの自己利用。

  3. NEXT 自己利用期間の後

    V6 Core alpha

    最初のタグ付きリリース

    自己利用期間で実際の検出があり、誤ブロックが少ないと確認できた時点で公開します。その後、他のホストを小さなアダプターとして追加します。

STATEMENT声明

PRE-ALPHA

Core は今日から使え、メンテナー自身のリポジトリで動いています。policy の形式は alpha までに変わる可能性があります。

ここにあるものはすべて無料のオープンソースです。有料プラン、アカウント、テレメトリーはありません。

LICENSINGライセンス

ライセンス
対象ライセンス状態
V6 Core(packages/bw-core)Apache-2.0有効
ウェブサイトとリポジトリのその他の部分AGPL-3.0-only有効
V5 プラグインAGPL-3.0-onlyfrozen/v5 上凍結

07ドキュメントDOCS

すべてはリポジトリにあります。

ガイドは英語と繁体字中国語で書かれています。このサイトの各言語には、GitHub 上に短い README があります。

08FAQFAQ

よくある質問と、率直な答え。

ほかに質問があれば、GitHub で issue を開いてください。 GitHub Issues

Claude Code が遅くなりますか?

チェックや副作用を扱う hook は Git で作業ツリーのハッシュを取ります。通常のリポジトリならミリ秒単位です。非常に大きなリポジトリでは、そうした呼び出しごとのコストが大きくなります。

エージェントを永遠に差し戻し続けることはありませんか?

差し戻すときは、理由とここまでのセッションの経過(実行回数、連続失敗回数、差し戻し済みの回数)を伝えます。エージェントはそこで止まり、どのチェックが失敗し続けているかをはっきり伝えることができます。

エージェントがこれをオフにできますか?

直接はできません。Core はエージェントによる policy と台帳の編集を拒否し、bw init とアクションの手動確定も拒否します。プラグインのアンインストールや、遠回りな方法でのこれらのファイルの変更は Claude Code 自身の権限ルールで管理されるため、その確認プロンプトは有効のままにしてください。

どこかにデータを送信しますか?

サーバーもテレメトリーもありません。ネットワーク呼び出しは、副作用が起きたかどうかを確かめるために、あなた自身の git、gh、npm で行う読み取り専用の確認だけです。台帳は .git/better-workflows/ にとどまります。

Codex、Gemini CLI、Qwen Code は?

これらは V5 で動いていましたが、V5 は凍結されています。Core はホストに依存しないので、alpha の後にアダプターを予定しています。

数秒で試す

コマンドを実行しただけでは証拠にならない。証拠はファイルだ。

Claude なしでデモを実行し、次に 1 つのリポジトリにインストールして変更を依頼してください。