SouthBridgeAI/hankweave-runtime
GitHub: SouthBridgeAI/hankweave-runtime
一个面向长周期任务的可维护性运行时,通过声明式编排与哨兵监控解决智能体系统难以调试与交接的问题。
Stars: 113 | Forks: 16
# hankweave
[](./LICENSE.md)
[](https://www.npmjs.com/package/hankweave)
[](https://hankweave.southbridge.ai)
单线程、无头优先、专注于
**可维护性、可修复性和长期执行**的数据智能体运行时。 
## 为什么
在达到一定复杂度——或[任务范围](https://www.southbridge.ai/blog/antibrittle-agents#:~:text=Task%20horizon%20%2D%20the%20length%20of%20time%20a%20task%20can%20be%20productively%20worked%20on%20%2D%20applies%20similarly%20to%20humans.)——之后,智能体系统会变得难以维护且极难调试。真正的瓶颈不在于模型,而在于能够理解并推理智能体行为的人类。
Hankweave 通过牺牲一些“从零开始的便捷性”来换取显著更好的“遗留工程”能力。Hank 更难编写,但更容易调试、更容易交接给他人。
[阅读更多关于“为什么” →](https://southbridge.ai/hankweave)
Hankweave 负责处理长时间运行的任务,同时:
- **预检**在第一个 token 生成前尽可能多地发现问题——API 密钥、模型可用性、文件路径、严谨配置、哨兵模式。
- **哨兵**实时监控事件流以捕获漂移、懒惰和约定违规——充当错误检测器、叙述者和实时评估,同时让核心智能体保持专注。
- **循环**通过智能体动态规划,用计算换取可靠性,串联重复的复杂任务。
- **预算**让作者和运营者可以独立表达成本、时间和 token 上限。运行时解析竞争偏好,在 codons 和循环之间分配预算并实时强制执行——包括基于预算的循环终止。
- **夹具抽象**让 hanks 可以在 Claude Code、Codex、Gemini CLI、Pi、OpenCode 或任何暴露必要能力的智能体上运行。在你偏好的编码智能体中测试,然后冻结并部署。无缝切换夹具,或使用 [Clausetta](./learning/examples/clausetta/)——我们用于自动生成适配器的 hank——构建新的适配器。
- **夹具**提供确定性的代码加载和工作区设置,确保相同的 codon 每次都以相同方式运行。
- **检查点与回滚**在每个 codon 边界创建 Git 快照。当出错时,可以回滚到任意点并尝试不同方法。
- **结构化事件日志**追溯每个工具调用和决策的来源,使能够精确定位 20 小时运行出错的位置。
- **基于文件的提示**结合模板变量、注释和前置元数据,使提示自文档化且易于导航——无论是人类编辑还是智能体读取。
## 背景
Hankweave 在 [Southbridge](https://southbridge.ai) 开发,用于运行超出人工维护能力的无头 AI 工作流——数千次工具调用、数百次调用、持续时间长达 18 小时以上。现有工具要么不支持长周期执行,要么在复杂度超过阈值后让调试变得不可能。我们需要一种让 [遗留 AI 工程](https://www.southbridge.ai/blog/antibrittle-agents) 成为可能的运行时——一种我们可以维护、改进并交接给他人,而不会附带“它能用但你需要我”的系统。
如今,Hankweave 负责执行 Southbridge 的所有可靠 AI 工作。它迁移我们的写作到各平台,进行 [ extensive planning ](./learning/examples/plan-gen-v2-general/),[自动构建适配器以应对底层智能体夹具的变化](./learning/examples/clausetta/),以及更多。Hanks 帮助我们的合作伙伴挖掘数据进行研究、构建代码手册——以及更多我们可协作完成的工作,这都要感谢 hanks。
### 有意为之的选择
**单一智能体线程**。就像故事中的时间旅行,并行系统会让推理行为变得极其困难。任何时候都只有一个智能体在执行。
**简单工具,[善加使用](https://youtu.be/OUZZKtypink?si=Hy_x5qAKnkJ_NId0&t=592)。** 文件编辑、脚本和 Shell 命令。没有 MCP,没有技能树,没有最新的酷炫功能。Hankweave 在识别和管控其支持的内容上极其高效。
**非交互式**。没有聊天,没有来回。Hankweave 旨在通过套接字协议以智能体化或程序化方式管理。你失去的是流式体验,换来的是可重现性。
## Hankweave 如何工作
Hankweave 运行时是一个 **服务器**,用于编排智能体夹具——Claude Code、Codex、Gemini CLI、Pi、OpenCode 等——以可靠地执行 hanks。完全用 TypeScript 编写,旨在成为一个可配置的底层运行时,几乎可以在任何地方运行。以下是完整架构图:
```
┌─────────────────────────────────┐
│ HANK (the program) │ ┌───────────────────────────┐
│ │ │ │
│ prompts • codons • rigs │ + │ runtime config │
│ sentinels • context boundaries │ │ data (read-only) │
│ file tracking │ │ │
└────────────────┬────────────────┘ └─────────────┬─────────────┘
└────────────────────┬───────────────────┘
▼
┌───────────────────────────────┐
│ HANKWEAVE RUNTIME │
└───────────────┬───────────────┘
│
┌───────────────────────────────────┴───────────────────────────────────┐
│ │
▼ ▼
EVENTS (WebSocket) ORCHESTRATES
│ │
▼ ▼
┌─────────────────────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────┐
│ CONSUMERS │ │ Claude │ │ Gemini │ │ Codex │ │ Pi │ │ OpenCode │
│ │ │ Code │ │ CLI │ │ │ │ │ │ │
│ Basic CLI (included) │ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ └────┬─────┘
│ Data pipelines │ │ │ │ │ │
│ CI systems │ └──────────┴──────────┴──────────┴───────────┘
│ Custom UIs │ │
│ │ ▼
└─────────────────────────┘ ┌─────────────────────────────────────────────┐
│ FILESYSTEM & TOOLS │
│ │
│ isolated workspace • shell • file I/O │
│ git (shadow) • network │
└─────────────────────────────────────────────┘
```
你为 Hankweave 提供三样东西:一个 **hank**(程序)、**运行时配置**(API 密钥、模型设置)和 **数据**(要处理、以只读方式挂载的文件)。运行时在一侧编排智能体夹具,在另一侧通过 WebSocket 流式输出事件。
因为 Hankweave 编排的是现有智能体夹具而非重新实现它们,所以你可以获得 [Claude Code](https://docs.anthropic.com/en/docs/claude-code) 和 [Codex](https://openai.com/index/introducing-codex/) 的全部能力——包括其不断演进的工具集——而 Hankweave 负责编排、隔离和状态管理。事件流也支持更复杂行为的定制触发器:保持智能体运行在正轨上的哨兵、成本监控、实时文档编写等。
## 开始使用
- **试用**:`bunx hankweave` 会引导你完成设置并运行一个示例 hank。
- **查看真实 hank**:浏览 [示例](./learning/examples/) 了解我们在生产环境中的注释 hank。
- **阅读文档**:[完整文档](https://hankweave.southbridge.ai) 涵盖概念、指南和完整参考。
- **学习工作流**:[CCEPL 驱动开发](https://www.southbridge.ai/blog/ccepl-driven-development) 解释 hanks 是如何构建的——从编码智能体到冻结 codon。
- **理解理念**:[反脆弱智能体](https://www.southbridge.ai/blog/antibrittle-agents) 解释了 hankweave 背后的哲学。
## 针对遗留系统设计
Hanks 被组织为:
- **可重复**通过运行时
- **可扩展**通过循环
- **可检查**通过事件日志和哨兵
- **可靠**通过全面的预检和自动恢复机制
当出错时——正如所有智能体最终都会出错——hanks 提供了修复方式:
- 不确定一个 20,000 次工具调用的过程哪里出错了?**检查事件日志。**
- 需要扩展上下文和能力?**使用循环。**
- 智能体懒惰或忽略约定?**添加 [哨兵](#one-more-thing)(事件流上的实时监控)。**
- 问题过于复杂或上下文腐化?**将工作拆分为独立的 codons**(可独立评估的密封智能体块)。
- 脆弱、复杂的重复操作?**添加夹具**(每个智能体块或 codon 的确定性设置)。
- 需要高上下文理解和高推理能力?**混合使用夹具**——用 Claude Code 做针对性工作,用 Codex 做规划,用 Gemini 做写作/规范等。
Hanks 是声明式的——智能体运行的每一件事都存在于一个地方,使每个决策可追溯。随着时间推移,hanks 会积累智慧:边缘情况变成修复,修复变成知识,知识变成可靠性。
## 还有一件事
上述所有内容使 hanks 可靠。**哨兵**让它们变得智能。
在智能体运行期间,它会生成事件流——每一次工具调用、每一次文件写入、每一次决策。哨兵接入该流。它们与主智能体并行运行,观察但不中断。当触发条件满足时,哨兵可以运行确定性代码、调用 LLM,或两者兼有。
将 LLM 用作评估器不可靠。将 LLM 用作**观察者**——捕捉漂移、标记异常、记录笔记——则出奇地有效。这就是哨兵的作用:提前发现问题,以便你在问题扩大前修复。
这解锁了其他方式无法实现的能力:
- **护栏**——在执行前捕获危险模式并进行干预
- **实时文档**——在智能体编码时编写变更日志的哨兵
- **成本跟踪**——在 token 使用激增时发出警报并自动限流
- **漂移检测**——察觉智能体偏离任务或忽略约定
[开始使用哨兵 →](https://hankweave.southbridge.ai/concepts/sentinels/)
## 常见问题
### 理解 Hankweave
**可维护性、可修复性和长期执行**的数据智能体运行时。 