用途
Bernstein 是面向 AI 智能体的开源治理层,核心理念是“策略即代码”:用户以声明式方式编写规则(谁可以做什么、什么需要审批、什么必须被记录),由 Bernstein 强制执行并生成可验证的记录。它旨在解决并行运行多个编程智能体时出现的非确定性合并、成本不透明、事后难以审计等问题。
主要能力
- 协调环节无 LLM:调度使用纯 Python,运行端到端可复现。回放昨天的计划会得到昨天的任务图。
- 事后可检查:回放日志(replay journal)记录每次运行;常开的 lineage spine 记录每个带血缘的步骤;可选的 HMAC 链式审计日志(设置 BERNSTEIN_AUDIT=1)生成可离线验证的回执。非确定性会以哈希不匹配的形式出现在确切步骤,而非以不稳定的重跑形式出现。非代码交付物同样如此:任务可声明工件契约(报告、数据集、动作日志、运维结果),并以签名的血缘回执而非 git 提交作为完成条件。
- 构造上隔离:每个编码任务拥有自己的 git worktree,并置于合并门(merge gates)之后;工件模式任务在 .sdd/workspaces/ 下获得工作目录。默认情况下智能体不共享可变工作区,唯一共享状态是任务待办列表,以原子方式认领。更严格的文件系统强制为可选项,由沙箱后端提供。若禁用 worktree,则所有任务在共享检出中运行。
- 广泛且本地:超过 50 个可选择的 CLI 智能体适配器,另有一个通用的 --prompt 包装器;基于文件的状态,无 SaaS 中转,无第三方数据平面。
使用方式
安装:pipx、pip、brew、dnf、npm 和 Docker 均在安装指南中覆盖;气隙环境有单独的 wheelhouse 指南。
声明式工作流:一个 YAML 文件声明一次运行——阶段、角色、依赖关系以及节点运行的条件。调度器将其作为纯 Python 执行,文件内容不是提示词,也不由模型决定下一步。
每个节点的执行:节点由阶段允许角色的智能体认领;角色围栏和审批门不受智能体在任务内行为的影响。编码节点在其自己的 git worktree 中经过合并门后完成;工件契约类型的节点则命名交付物(报告、数据集、扫描、动作日志),并以签名的血缘回执而非提交作为完成条件。同一调度器、同一日志、同一离线验证,无论任务图产出代码、研究、运维变更还是三者混合。现成的工作流图位于 .bernstein/scenarios/。
审计校验:以审计模式运行,然后验证记录。日志每次运行都会写入;lineage spine 始终开启。bernstein audit verify 仅在运行时设置了 BERNSTEIN_AUDIT=1、使用了合规预设或 bernstein run --audit 时才有一条链可检查。--audit 标志属于 bernstein run;在上面的 bernstein -g 形式中,请设置环境变量。
单次运行回执:在单个 Ed25519 签名的主题下,绑定日志头、lineage spine 头(若运行写入了 spine 条目),以及可选的审计链区间,并内嵌公钥。持有该文件和运营者公钥的审查者可以确认内嵌的动作和链未被更改:无需 HMAC 密钥,无需活动 .sdd/ 目录,篡改时以退出码 2 并指出第一个分歧步骤。
评估数字的可验证性:bernstein bench run <suite> --reliability k(也写作 bernstein eval --reliability k)在固定协调下将每个任务运行 k 次,然后报告 pass^k 下限(所有 k 次尝试都必须通过)以及 pass@1 上限。结果封存在签名回执中,bernstein bench reliability-verify 可离线重算,因此伪造的下限无法通过验证。
目标四阶段:
- 分解:管理者将目标拆分为具有角色、所属文件和完成信号的任务。一次 LLM 调用,之后为纯 Python。
- 派生:智能体在隔离的 git worktree 中启动,每个编码任务一个;工件模式任务则获得一个普通工作目录。主分支保持干净。
- 验证:janitor 检查具体信号——测试通过、文件存在、lint 干净、类型正确。
- 合并:已验证的工作合入 main。失败任务重试或路由到其他模型。
工作流命令:bernstein workflow 运行由 agent、command 和 loop 节点组成的声明式 YAML DAG,支持中断运行后的恢复。运行状态在每个节点检查点到 .sdd/runs/<run_id>/。恢复时会在运行开始时校验清单摘要,因此规格变更会被拒绝,而不是静默执行不同的清单。
仓库卫生门控:bernstein readme-l10n verify 会使翻译 README 与英文源漂移的 PR 失败(并指出过时的章节),bernstein readme-l10n sync 在英文编辑后重新绑定它们。
支持的智能体:Claude Code、Codex CLI、Gemini CLI、GitHub Copilot CLI、Cursor、Aider、Goose、Muse Code、OpenAI Agents SDK、Amp、Cody、Continue、Devin Terminal、Junie、Kilo、Kiro、AWS Q Developer、Ollama、OpenCode、OpenHands、Open Interpreter、gptme、Plandex、AIChat、Letta Code、Qwen 等。适配器索引为其中 30 个提供安装命令。bernstein integrations list 枚举全部 56 个已接入集成(来自 src/bernstein/adapters/registry.py,是解析结果的唯一事实来源)。其中 54 个是可选择的智能体适配器;另外两行是 mock 测试桩和自托管端点配置。任何带 --prompt 标志的工具都可通过通用包装器使用。可在同一次运行中混合智能体:便宜的本地模型处理样板,较重的云模型处理架构。bernstein integrations list --installed 显示本机可用项。
志愿者计算:项目可将 issue 标记为向志愿者开放,任何人都可在自己机器上运行而无需账户或协调者。项目在 volunteer.json 清单中声明任务允许做什么(沙箱后端、网络允许列表、墙钟和内存上限),捐赠者自己的限制只能收窄、不能放宽。完成的任务生成的回执将结果与其运行时的隔离决策绑定。捐赠者指南涵盖运行 worker 和设定预算,项目指南涵盖声明清单,威胁模型说明各边界保护和不保护什么。一键运行器尚未发布:目前可用的子命令是 verify、browse、budget、verify-bundle 和 hub。
适用场景
- 并行运行多个 CLI 编程智能体并需要确定性、可复现的协调;
- 需要事后审计、可验证证据包的合规或企业场景;
- 研究、文档、运维变更等非代码交付物的治理;
- 气隙/离线环境部署;
- 希望由项目声明隔离边界、由志愿者贡献算力的场景。
限制
- 状态为 beta,由个人维护、活跃开发中。版本号只计数发布次数,不代表成熟度——次要版本可能更改接口。对任何依赖项请固定版本;回归会快速修复,可通过 issue 提交。
- 气隙安装配置包含在项目中,但一键志愿者运行器尚未发布。
- 仅在运行时启用了审计时,
bernstein audit verify才有链可检查。 - 无 --public-key 固定的情况下,仅凭回执文件的检查只是完整性检查——它证明回执内部一致,而非谁签名的;判定会说明这一点。
- 证明某状态是完整已完成的日志,还需独立的头部/计数密封(head/count seal)。
- 关于收费、价格、平台等更多细节资料中暂未提供。
许可证与署名
Apache-2.0,免费。项目名依据 Leonard Bernstein(美国指挥家、作曲家)命名。引用元数据见 CITATION.cff,项目名称另有 TRADEMARKS.md 覆盖。