核心特性
Hook-First 运行时
Section titled “Hook-First 运行时”每个 turn 阶段都是一个 pluggy hook。 内置功能同样是普通的插件——只需注册自己的实现即可覆盖任何阶段。 同时支持 first-result hook(覆盖型)和 broadcast hook(观察型)。
run_model_stream 是主要的模型 hook。
旧版 run_model hook 仍可使用,会被自动适配为单条文本块流。
当没有模型 hook 返回值时,安全回退到提示文本(带 on_error 通知)。
当 render_outbound 无输出时,自动回退 outbound。
基于 Tape 的上下文
Section titled “基于 Tape 的上下文”运行时事件记录在 tape 中(默认位于 ~/.bub/tapes)。
上下文从 tape 记录中重建,而非累积在 session 状态中。
- CLI:通过 Typer 提供
run、chat、gateway、install、update和login;隐藏的hooks命令仍可用于诊断。 - 模型运行时:支持工具调用的 agent 循环,由 Republic 驱动。
- 逗号命令:
,help、,skill、,fs.read等。未识别的命令回退到 shell。 - Channels:
cli和telegram作为默认渠道。
这些都是 hook 实现。按需替换即可。
Channel 无关管道
Section titled “Channel 无关管道”CLI 和 Telegram 使用同一条 process_inbound() 路径。
Hooks 不感知自己运行在哪个 channel 中。
Outbound 路由由 ChannelManager 处理。
Skills
Section titled “Skills”Skills 是带验证 frontmatter 的 SKILL.md 文件。
插件可通过包含 skills/ 目录来提供自己的 skill。
插件可扩展性
Section titled “插件可扩展性”外部插件通过 Python entry points(group="bub")加载。
后注册的插件优先运行,可覆盖内置行为。
Envelope有意采用弱类型(Any+ 访问器辅助函数)。- 共享插件
state没有集中式的 key 约定。 - 没有内置 Discord 适配器——可通过
provide_channels实现。