模型 / 数据集
smithersai/smithers avatar
smithersai/smithers

Smithers:把编码 Agent 的临时编排变成可回放、可分支的持久运行

具有完全可观察性和时间旅行的代理工作流程:实时观看每一步、倒带、分叉、重播任何运行。 Claude Code、Codex、Gemini、任何模型或安全带。相同的工作流程跨 Claude Code、Codex、Pi、AI SDK 模型和远程沙箱运行。

413 个 Star50 个 ForkJavaScriptMIT

秒懂

它是什么?
Smithers 是一个面向编码 Agent 的运行时,把一次会话里的临时子代理编排,变成持久化、可观察、可回放的工作流。本文基于 README 与仓库信息,分析它的机制、上手方式、局限和适用边界。
适合谁用?
Smithers 适合那些需要让编码 Agent 在真实仓库上执行多步骤、跨会话工作的团队,尤其是当工作必须能中断恢复、需要人工审批门禁、或者要在多个 Agent 供应商之间复用同一份工作流时。它不适合只想从单个提示词拿一个答案的场景,那种情况直接调用模型更简单。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 JavaScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决的是会话结束就消失的编排问题

Claude Code、Codex 这类编码 Agent 本身就能派生子代理,适合一次会话内完成的工作。但 README 明确指出,这种内置扇出是临时的:会话结束或崩溃时,整个编排就没了。Smithers 把编排从提示词提升为持久化的运行记录,每个步骤都是数据库中的一行,因此可以实时观看、回退、分支和重放。它面向的是需要 Agent 在真实仓库上编辑文件、经历多次迭代、中途可能等待人工审批的场景。如果你只是想要一个提示词得到一个答案,README 的表格里直接写了:不适合,直接调用模型即可。

工作流是一棵 JSX 树,提示词就是编写过程

Smithers 的工作流不是手写的 YAML 或 JSON,而是一棵 JSX 任务树。用户用自然语言描述目标,Agent 会根据内置包里的原语生成工作流。README 给出的例子是用 `<Loop>` 包住实现和审查两个任务,直到审查者批准。代码片段里用 `createSmithers` 定义输入和输出 schema,用 `CodexAgent` 指定模型和推理强度,审查者还加了 `sandbox: "read-only"`。这意味着工作流本身是代码,可以版本控制、审查和重跑。这种设计的代价是,如果 Agent 生成的工作流有误,你需要能读懂 JSX 才能修复。

时间旅行的机制:每个步骤都是数据库行

所谓时间旅行,在 Smithers 里不是概念宣传,而是数据模型的直接结果。README 说每个步骤在完成时立即持久化,所以运行可以随时重放、回退或分支。回退到某个更早的帧,就能创造一条替代时间线。这种设计让崩溃恢复变得简单:运行从最后完成的步骤恢复,而不是从头开始。但需要注意,README 没有说明数据库的类型、存储位置或并发控制方式。如果你要在生产环境长时间运行,这些细节需要进一步查证。

零配置起步:一条命令装好 skill

安装过程被刻意简化。在项目目录下运行 `bunx smthrs init`,它会自动把 `smithers` skill 安装到本机已检测到的编码 Agent(如 Claude Code、Pi),并生成 `.smithers/` 目录,包含 `create-workflow`、`create-skill`、`docs-driven-development` 三个工作流。之后你只需要用自然语言告诉 Agent 要做什么,例如“编排一个 Agent 添加速率限制并持续迭代直到测试通过”。另外可以用 `bunx smthrs mcp add` 把 MCP 服务器接入所有检测到的 Agent。整个过程不需要手动创建目录或下载脚本。

跨 Agent 与跨模型的可移植性

Smithers 声明同一份工作流可以在 Claude Code、Codex、Pi、AI SDK 模型和远程沙箱上运行。代码示例里用 `CodexAgent` 创建两个 Agent,分别用不同的模型和推理强度。这意味着你可以把工作流文件当作一种可移植的编排描述,换供应商时不需要重写。但 README 没有列出完整的 Agent 支持矩阵,只说“更多”,具体每个 Agent 的 skill 安装情况需要查看官方文档。如果你依赖某个小众 Agent,需要先确认是否在支持列表里。

内存机制:跨运行的记忆与语义检索

Smithers 提供 `<Memory>` 包装,让 Agent 能回忆之前运行学到的东西,并在任务中调用 `remember` 和 `recall` 工具。默认本地工作,不需要额外配置。如果要按语义检索,可以连接 Hindsight 服务。这个机制对多步骤、跨会话的工作流很有价值,比如一个长期维护的代码库,Agent 可以记住之前的决策。但 README 没有说明记忆的存储格式、容量限制或清理策略。如果你打算长期使用,需要自己评估记忆膨胀的风险。

局限:不适合单次问答,也不适合完全不懂代码的团队

Smithers 的定位非常明确,它不是一个聊天界面,而是由 Agent 驱动的运行时。如果你只需要一次模型调用,用它就是过度设计。另外,虽然你不需要手写工作流,但工作流文件是 JSX,如果 Agent 生成的代码有问题,你仍然需要能读懂它。README 中的示例涉及 `zod` schema 定义和 Agent 配置,这要求团队至少有一人熟悉 TypeScript 和 JSX。另一个潜在问题是,持久化运行意味着状态存储在某个地方,如果你在沙箱或远程环境中运行,需要考虑数据安全和隐私。

替代方案:Temporal 与 LangGraph 的对比

README 提到了与 Temporal 和 LangGraph 的对比页面。Temporal 是通用的持久化工作流引擎,适合任何类型的业务编排,但它是用代码定义工作流,且不专门针对编码 Agent。LangGraph 是图结构的工作流框架,更强调状态机和图执行,但通常需要手动构建图。Smithers 的不同之处在于,它把 Agent 本身当作执行单元,工作流直接调用 `CodexAgent` 或 `ClaudeAgent`,并且把审批、循环、记忆作为一等公民。如果你已经有 Temporal 或 LangGraph 的成熟实践,迁移到 Smithers 的收益需要仔细评估;如果你是从零开始且专注编码 Agent,Smithers 的零配置和内置时间旅行更有吸引力。

编辑结论

Smithers 适合那些需要让编码 Agent 在真实仓库上执行多步骤、跨会话工作的团队,尤其是当工作必须能中断恢复、需要人工审批门禁、或者要在多个 Agent 供应商之间复用同一份工作流时。它不适合只想从单个提示词拿一个答案的场景,那种情况直接调用模型更简单。也不适合完全没有 JSX 或 TypeScript 经验的团队,因为工作流本质上是 JSX 树,虽然可以交给 Agent 生成,但排查问题仍需阅读代码。采用前应先验证三件事:第一,确认你常用的 Agent(Claude Code、Codex、Pi 等)在官方支持矩阵里,且 `bunx smthrs init` 能正确安装 skill;第二,检查持久化机制是否满足你的崩溃恢复要求,README 说每个完成的步骤都会立即持久化,但未说明底层存储类型,生产环境需确认数据落盘方式;第三,试用 `<Loop>` 和审批流程,确认它在你预期的长时间运行场景下稳定。Smithers 的核心承诺是让编排从提示词变成可版本化的文件,这一设计取舍是否值得,取决于你是否需要跨会话的耐久性。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记