
2026/05/12 23:24
【紹介】Statewright:AI エージェントの信頼性を高めるビジュアル状態遷移図による状態機械。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
State Wright は、データ損失や認証情報の漏洩など、危険で不安定なアクションを実行することを防ぐために設計された確率的なガードレールシステムです。このシステムは、特定のワークフローフェーズに基づいて利用可能なツールを厳格に制限し、LLM の干渉なしで強制を行う専用 Rust エンジンを活用することで、モデルの幻覚によって引き起こされる脆弱な振る舞いを排除します。
本文
エージェントは「提案」であり、ステートは「法」というものです。
ステートマシンによるガードレールにより、AI エージェントが各フェーズで使用できるツールが制御されます。一度にワークフローを定義し、Claude Code、Codex、Cursor、opencode、Pi すべてに対して一貫して適用します。詳細ドキュメントについては →
クイックスタート
無料プランで Claude Code 上で試すには、以下のコマンドを実行してください:
/plugin marketplace add statewright/statewright /plugin install statewright /reload-plugins
その後、「bugfix」というワークフローを開始するか、
/statewright start bugfix を実行します。プロンプトに従って API キーを貼り付ける必要があります。最新版の Claude が警告表示することがありますが、その場合は再度 API キーを貼り付け、「本気だ」と伝えます(Claude は慎重なだけです)。
問題点
AI エージェントは強力ですが、脆い性質を持っています。モデルに 40 以上のツールとオープンエンデッドな課題を与えると、かろうじてスタートラインを切っただけで進めないことが多いです。一般的な解決策として大きなモデルや長いプロンプトを検討しますが、それはときにのみ有効です。観測可能性は失敗後に何が起켰かを教えてくれるに過ぎず、事前に防止することはできません。
アプローチ
モデルを大きくするのではなく、課題を小さくすることにより解決します。
ステートマシンはツールと解答の空間を制約し、モデルが各ステップで集中的な文脈の中で推論できるようにします。計画フェーズでは読み取り専用ツールのみが利用可能です。エージェントが実装フェーズへ移行すると、編集系ツールのロックが開き、限定的なシェルアクセスが可能になります(ただし Bash が許可されていても、
write-via-redirect や破壊的操作はブロックされます)。テストフェーズでは指定されたテストコマンドのみが実行できます。現在フェーズにないツールを呼び出そうとすると、「現在利用可能なツール」と「どのようにフェーズ遷移すべきか」を示すメッセージと共に拒否されます。
この仕組みは、 Frontier モデルにおいても(トークン消費を削減)、ローカルモデルにおいては 13B パラメータ以上のモデルが本来失敗していたタスクを解決開始できるようになります。
リサーチ結果
| モデル | サイズ | Bug Fix(26 行) | SWE-bench(5 タスク) |
|---|---|---|---|
| gemma3 | 3.3GB | FAIL | FAIL |
| gemma4:e2b | 7.2GB | PASS* | FAIL |
| gpt-oss:20b | 13.8GB | PASS | PASS(5/5) |
| gemma4:31b | 19.9GB | PASS | PASS(5/5) |
| llama3.3 | 42.5GB | PASS | PASS(2/2)† |
* 専用
edit_line ツールの適応により達成† 実験直後に追加された残り 3 タスクのうち 2 つで確認
影響が最も明確に測定できるローカルモデルにおいて検証を行いました。5 タスクからなる SWE-bench サブセットにおいて、statewright の制約を導入したことで、13.8GB と 19.9GB の 2 つのモデルは「成功件数」が 2/10 から 10/10 に向上しました。タスクもハードウェアも同じです。13GB を下回るモデルではツール呼び出し自体は可能ですが、ファイル内容を含めることが難しく正確な編集ができないため、「床」としての閾値に達し、statewright の制限ではありません。
デフォルトシステムプロンプトを使用する Frontier モデルは、重大な操作(データベースの削除、認証情報の漏洩など)を「ほとんど」回避できます。しかし、構造的な利点はさらに大きいです:同じファイルを 5 回以上読み返し却始终編集を行わないような「読み込みループによる死んだスパイラル」を断ち切り、ツール空間を十分小さく保つことでモデルがフラストレーションを起こすことなく実際に推論できるようにします。[リサーチブリーフ →]
クイックスタート
Claude Code へのインストール:
/plugin marketplace add statewright/statewright /plugin install statewright
ブラウザが開き、statewright.ai で登録してキーを生成し、それを貼り付けるだけです。完了です。
その後、ワークフローを開始します:
❯ calc.py のテストを直すための「bugfix」ワークフローを開始 ◆ statewright — statewright_start(ワークフロー: bugfix) ◆ [statewright] ワークフローが起動しました:bugfix ◆ statewright — statewright_get_state (MCP) ◆ 現在のフェーズ:planning。まずはコードを読んでおきます。 2 つのファイルを読み込みました [statewright] planning → implementing ◆ statewright — statewright_transition (READY) calc.py の編集:1 行変更 [statewright] implementing → testing ◆ statewright — statewright_transition (DONE) Bash: pytest -x — 7 つのテストがパスしました [statewright] testing → completed ◆ [statewright] ワークフロー完了。所要時間:46 秒。
また、スラッシュコマンド
/statewright start bugfix を直接実行することもできます。
仕組み
コアはステートマシンの定義(ステート、遷移、ガード、ツールの制限など)を評価する決定論的な Rust エンジンです。LLM はループには含まれません。
その上にプラグインレイヤーが乗っており、MCP を通じてコーディングエージェントと統合します。ワークフローをアクティブにすると、フックによって各ステートに応じたツールの制限が自動的に強制されます。モデルは現在のフェーズに適した明瞭な指示を受け、5 つのツールしか見ずに作業し、条件を満たすと自動でフェーズが遷移します。
ガードレール
| ガードレール | 機能 |
|---|---|
| ステートごとのツール強制 | 許可されたツールリスト外はエージェントに不可視 |
| Bash の判断力 | 非書き込みステートではリダイレクト()、破壊的操作(, )、スクリプト解釈器等をブロック |
| エディットガード | 最大編集行数を超す差異は拒否、ステートごとの編集ファイル数上限を適用 |
| コマンド許可リスト | ステートごとにプレフィックス一致する許可コマンド |
| 条件付き遷移 | 文脈データ上でプログラム可能な述語(, , など)を持つガード |
| 承認ゲート | 高リスクな遷移前に人間によるレビュー待ち() |
| 環境スコープ | ステートごとの と |
| セッション隔離 | を通じたセッション別ステート |
詳細なガードレールの参照についてはドキュメントをご覧ください。
カスタムワークフローの定義
{ "id": "bugfix", "initial": "planning", "states": { "planning": { "allowed_tools": ["Read", "Grep", "Glob"], "max_iterations": 8, "on": { "READY": "implementing" } }, "implementing": { "allowed_tools": ["Read", "Edit", "Write"], "max_edit_lines": 20, "max_files_per_state": 3, "on": { "DONE": "testing" } }, "testing": { "allowed_tools": ["Read", "Bash"], "allowed_commands": ["pytest", "cargo test", "npm test"], "on": { "PASS": { "target": "completed", "guard": "tests_passed" }, "FAIL_TEST": "implementing" } }, "completed": { "type": "final" } }, "guards": { "tests_passed": { "field": "test_result", "op": "eq", "value": "pass" } } }
ステートマシンは DAG ではなくループとリトライを許容する仕組みであり、エージェント作業に本来必要な特性です。JSON スキーマを指し示すことで、
statewright_create_workflow を通じてワークフローが生成されます。可視化エディタでツール、コマンド、環境ブロックを調整できます。
対応エージェント
| エージェント | 統合方法 | 強制レベル |
|---|---|---|
| Claude Code | フック + MCP | ハード(プロトコル層) |
| Codex | フック | ハード(アルファ版) |
| opencode | TypeScript プラグイン | ハード(アルファ版) |
| Pi | Skills 拡張 | ハード(アルファ版) |
| Cursor | MCP + ルール | アドバイザリ(アルファ版) |
「ハード」はモデルがツール呼び出しを看见する前にプロトコル層でブロック。「アドバイザリ」は文脈にルールを注入しますが強制されません。
料金体系
個人開発者向けには無料です。statewright.ai の管理クラウドでは、ワークフローの保存、実行履歴、MCP ゲートウェイを処理しています。
(これらのプランは変更が予想されます:料金は値上げせず、付与される tiers は増加のみ)
| プラン | ワークフロー数 | 遷移/月 | 実行履歴 | 料金 |
|---|---|---|---|---|
| Free | 3 | 200 | 72 時間 | $0 |
| Pro | 10 | 2,500 | 7 日 | $29/月 |
| Team | 30 | 10,000 | 90 日 | $99/月 |
| Enterprise | 無制限 | 無制限 | 仕様に従う | 問い合わせ |
オートホスト
エンジン(
crates/engine)は Apache 2.0 ライセンスで、ランタイム依存なしに埋め込めます。FSL ライセンスの下、単一開発者・単一チームによるフルスタックのオートホストも許可されています。
use statewright_engine::{MachineDefinition, resolve_transition, validate_definition};
トレードオフ
- エージェント側で MCP をサポートしている必要があり(MCP なエージェントの場合、Codex などはフックを必要とします)
- ワークフロー定義は手書きになりますが、エージェントは
を通じて生成することも可能statewright_create_workflow - Cursor では強制レベルが「ハード」ではなく「アドバイザリ」。Cursor のアーキテクチャでは MCP 一筋でツール呼び出しをゲートできません
- リサーチ結果は、完全な 2,294 インスタンスのベンチマークではなく、5 タスクの SWE-bench サブセットからのもの
- ワークフローが過度に制限的だとエージェントが停滞します。この場合
で脱出が可能ですstatewright_deactivate
ドキュメント
statewright.ai/docs — インストールガイド、ワークフロー作成、スキーマ参照、MCP ツール参照、エージェント生成型ワークフローなど。
貢献
ワークフロー定義、テンプレート、バグ報告を歓迎します。「独自のワークフロー作成」をご覧ください。
ライセンス
Apache 2.0 —— 一部のコードは FSL-1.1-Apache-2.0(2029 年 5 月 3 日に Apache 2.0 に切り替え)
管理クラウド:statewright.ai
「すべてのエージェントを統制する、一つのフック。」