statewright/statewright
State machine guardrails for AI agents
Statewright 是什么?
Statewright 是一个开源框架,允许您运行具有明确、可执行阶段的代理工作流。它为任务的每个步骤(例如,规划、实施、测试)定义了一个状态机,并控制每个阶段允许使用哪些 LLM 工具。当您将其插入受支持的 AI 客户端(Claude Code、Codex、Cursor、OpenCode、Pi、OMX 或自定义 MCP 主机)时,集成会拦截工具调用,阻止不允许的操作,并可以将不同阶段路由到不同的模型。
为什么重要
典型的 AI 辅助编码代理可以在整个任务过程中使用相同的工具,这使得它们很容易在审查之前编辑代码或在测试完成之前部署。Statewright 使这些边界变得明确,并且在主机支持的情况下,强制执行。这为您提供:
- 安全性 – 文件编辑或破坏性 shell 命令等工具仅在您指定的状态中允许。
- 细粒度模型路由 – 您可以为廉价阶段运行廉价模型,并为繁重阶段切换到更大的模型。
- 审批门 – 工作流可以在继续之前暂停以进行人工审查。
- 可重复、可审计的运行 – 每次转换、防护和工具使用都会被记录。
核心组件(如 README 中所述)
| 组件 | 语言 / 角色 | 主要职责 |
|---|---|---|
引擎 (crates/engine) |
Rust | 纯状态机评估器 – 无 LLM,确定性,提供防护、转换和工具允许列表。 |
代理二进制文件 (crates/cli, sw-agent) |
Rust | 在受限循环中执行 LLM,流式传输 JSONL 事件,尊重每状态模型路由,可以按需运行单个状态。 |
执行器 / 插件层 (plugins/*, crates/mcp-gateway) |
Rust + 主机适配器 | 保存工作流会话、凭据、遥测,并为每个受支持的客户端(Claude、Codex、Pi 等)转换原生工具钩子。 |
TUI (crates/tui, statewright) |
Rust (ratatui) | 运行 sw-agent 的终端 UI,显示实时 JSONL 事件,并允许您与工作流交互。 |
工作流的外观
工作流是一个 JSON 定义,列出状态、允许的工具、可选的每状态模型、防护和转换。示例(简化):
{
"id": "bugfix",
"initial": "planning",
"meta": {"default_model": "claude-sonnet-4"},
"states": {
"planning": {"allowed_tools": ["Read","Grep"], "model": "claude-haiku"},
"implementing": {"allowed_tools": ["Read","Edit","Write"]},
"testing": {"allowed_tools": ["Read","Bash"], "allowed_commands": ["pytest"]},
"completed": {"type": "final"}
}
}
引擎强制执行 allowed_tools 列表,阻止不允许的 Bash 命令,并且可以在转换时要求人工批准。
支持的 AI 主机
Statewright 附带原生插件,支持:
- Claude Code (0.3.4 候选版) – 原生 OAuth,预权限检查。
- Codex – 托管 App-Server 适配器。
- Pi、OpenCode、Cursor、OMX – 每个都有薄桥接,强制执行相同的护栏。 自定义 MCP 主机也可以通过网关连接。
研究快照
在 5 任务 SWE-bench 子集上进行的小型实验表明,在 Statewright 约束下,较大的模型(13.8 GB gpt-oss:20b 和 19.9 GB gemma4:31b)解决了所有任务,而较小的模型失败了。作者指出,这不证明最小模型大小;它只是说明护栏有助于代理保持在正轨上。
定价与部署
- 托管云 在 [statewright.ai] – 免费层级(3 个工作流,200 次转换/月)和付费层级($9/月 Pro,$99/月 Team,企业自定义)。计费涵盖工作流存储、运行历史和 MCP 网关。
- 自托管 – Docker-Compose 堆栈(PocketBase + 网关 + 编辑器)。您自带 Ollama 用于模型服务。引擎和代理是 Apache-2.0;网关目前是 FSL-1.1-ALv2(将在 2029 年转换为 Apache-2.0)。
权衡 / 限制
- 需要支持 MCP 的客户端或自定义钩子 – 并非所有 AI 聊天工具都支持。
- 工作流是手写 JSON(尽管代理可以通过
statewright_create_workflow生成它们)。 - 过度限制的工作流可能导致代理卡住;
statewright_deactivate命令可以绕过防护。 - 研究结果仅限于一个很小的基准子集。
谁可能使用它?
- 开发团队 想要安全、可审计的 AI 辅助代码更改。
- 工具构建者 希望嵌入具有严格策略执行的 LLM 代理。
- 研究人员 探索状态机引导的提示或每状态模型路由。
TL;DR: Statewright 是一个基于 Rust 的开源工具包,允许您定义由状态机驱动的 AI 代理工作流,强制执行每状态工具权限,并将不同阶段路由到不同的模型。它与几个现代 AI 编码助手集成,可以自托管或通过托管云服务使用。
相关
- Dispatch
- 项目
- 项目
- 项目
- 项目