demetere/pi-hive

GitHub: demetere/pi-hive

pi-hive 是一个配置优先的 Pi 平台扩展,通过声明式层级 agent 团队树和规划-执行分离模式,为 AI 编程提供可控、可观测、spec 驱动的多智能体编排能力。

Stars: 8 | Forks: 0

# pi-hive ![pi-hive 遥测仪表板 —— 实时会话拓扑、KPI 和流式传输活动](https://raw.githubusercontent.com/demetere/pi-hive/main/docs/assets/dashboard-overview.png) ## 这是什么 大多数 agent 框架交给你的是一个固定的集群和一个黑盒。`pi-hive` 则 截然相反:**它是 config-first(配置优先)的,并且你拥有整个树。** 在 *你*描述好团队之前,什么都不会运行。 - **Config-first —— 你拥有一切。** 在项目包含 `.pi/hive/hive-config.yaml` 之前,该扩展不会执行任何操作。 那一个文件既是 opt-in(选择启用)触发器,*也是*团队定义:你需要声明 agent、它们的模型、它们的 工具、它们的文件系统域以及它们的嵌套关系。角色不是魔法出来的 —— 如果一个节点拥有成员,它就是 **lead**;如果没有,它就是 **member**,而 agent 只能 **委派给其直接下属**。你通过嵌套来表达权限, 而不是编写策略。每个 agent 的 prompt、知识和技能都以纯文本文件的形式存放在你仓库的 `.pi/hive/` 下,并随你的代码一起进行版本控制。请参阅 **[SETUP.md](./SETUP.md)** 获取完整的编写指南。 - **真正的层级结构,而不是扁平的集群。** 可见的会话是一个 *orchestrator*(编排器), 它负责路由但从不过行编辑。它将任务委派给团队 **lead**,每个 lead 将工作分发给其 **member**,并且每个 agent 都作为其自身独立的 `pi` 子进程运行,带有受限的工具白名单和 **强制执行的写入域** —— 一个 worker 在物理层面绝对无法编辑其 lead 授权范围之外的文件。嵌套可以 任意深入。 - **先规划,后执行 —— 两个独立的团队。** 会话在三种 模式之一运行(`normal → plan → hive`,通过 `Ctrl+Alt+T` 循环切换)。**Plan 模式** 激活一个 `planning:` 团队,它会生成完整的 spec 并且*不编写任何代码*。 **Hive 模式**激活一个独立的 `hive:` 团队,负责执行已批准的 spec。它们在你的 config 中是独立的树,因此项目永远不会在不知情的情况下针对其编码树运行规划。 - **Spec 驱动,由 OpenSpec 支持。** 非简单的工作会通过固定的关卡 — `proposal → requirements → design → tasks` — 存储在 `.pi/hive/plans//` 下。[OpenSpec](https://github.com/Fission-AI/OpenSpec) (一个 CLI 依赖项)是存储和验证器:它管理着 artifact 依赖 图,并报告每个 artifact 的就绪状态。执行是硬性限制的 —— `/hive-execute` 在 `tasks.md` 存在且其关卡被批准之前拒绝运行。 - **Human-in-the-loop(人工介入)计划审查,自托管。** `pi-hive` 将 [Plannotator](https://github.com/backnotprop/plannotator) 审查界面**直接嵌入到其自己的 仪表板中** —— 无需为每个审查启动服务器。你可以在浏览器中对每个计划 artifact 进行标注、批准或拒绝;批准操作会解除对规划器的阻碍,拒绝操作会将你的 反馈路由回去并阻止该关卡。判决结果会持久化保存到本地 SQLite。 - **本地、私密的遥测。** 每个会话都会将其专属的定制事件日志流式传输到 `.pi/hive/sessions/`,并且 `/hive-observe` 会打开一个本地 Solid + Vite 仪表板 (`127.0.0.1:43191`),显示每个项目和会话的实时拓扑、委派生命周期、token 以及 成本。不会向任何第三方发送任何内容。 ## 安装位置与激活 推荐使用 `pi install` 从 GitHub 安装: ``` pi install git:github.com/demetere/pi-hive # latest main pi install git:github.com/demetere/pi-hive@v0.1.0 # pin a tag/commit ``` `pi install` 也接受完整的 HTTPS 或 SSH URL,例如 `pi install https://github.com/demetere/pi-hive` 或 `pi install ssh://git@github.com/demetere/pi-hive`。Pi 会为该包运行 `npm install`, 因此扩展的运行时依赖项 ([OpenSpec](https://github.com/Fission-AI/OpenSpec))会自动获取;Pi 主机 包被声明为 peer dependencies(对等依赖项),并在加载时由 Pi 提供。 你也可以在 Pi 的 `settings.json` 中以声明式的方式添加它: ``` { "packages": ["git:github.com/demetere/pi-hive"] } ``` 对于本地开发,可以在不安装的情况下临时加载检出代码: ``` pi -e . # from the repository root ``` 安装后,Pi 会为**每个**项目自动发现该包。 对于仓库优先的开发,请使用 `just` 作为唯一的命令事实来源: ``` just pi-dev # run this checkout temporarily with pi -e . just pi-reload-dry-run # preview copying this checkout to ~/.pi/agent/extensions/pi-hive just pi-reload # update the user-level extension from this checkout ``` 运行 `just pi-reload` 之后,在 Pi 中执行 `/reload`。 - **仅在项目包含 `.pi/hive/hive-config.yaml` 时激活。** 如果没有该文件,扩展不会注册任何内容 —— 没有工具,没有命令,也没有 hooks —— 因此非 hive 项目完全不受影响。 ## 快速开始 1. 安装扩展(见上文),以便 Pi 为每个项目发现它。 2. 在你想要运行 hive 的项目中,创建 `.pi/hive/hive-config.yaml`。此文件是 opt-in(选择启用)触发器并定义团队树 —— 编写它的最快方法是将一个 agent 指向 [SETUP.md](./SETUP.md),让它来采访你(参见下方的[在新项目中构建 hive](#build-a-hive-in-a-new-project))。 3. 在该项目中启动 Pi 并按 `Ctrl+Alt+T`(或运行 `/hive`)进入 hive 模式;可见的会话将成为一个 Lead,将其任务委派给其团队。 4. 运行 `/hive-observe` 以在 `http://127.0.0.1:43191` 打开实时遥测仪表板。 如果发现任何异常,`/hive-doctor` 将运行只读的诊断。 ## 环境要求 - **Bun ≥ 1.1** —— 遥测仪表板服务器(`src/observability/server/index.ts`)在 Bun 下运行并使用 `bun:sqlite`。如果缺少 Bun,`/hive-observe` 命令会通知你。 - Pi 主机在加载时提供 `@earendil-works/pi-coding-agent` 和 `@earendil-works/pi-tui`(声明为 peer deps)。 ## 打包与分发 此扩展是自包含的,并以两种方式发布: - **Git** —— 克隆或作为 submodule 放入 `~/.pi/agent/extensions/`。预构建的仪表板(`ui/web/dist/`)已提交,因此**在安装时没有构建步骤**。依赖文件夹被 gitignore 忽略。 - **Tarball/package** —— `just pack-dry-run` 预览已发布的包内容。根目录的 `package.json` 的 `files` 白名单仅发布运行时代码 + 预构建的 `dist/`;依赖文件夹永远不会发布。包的 prepack hook 委托给 `just prepack`,因此发布的包永远不会包含过期的 UI。 在编辑了 `ui/web/src/` 下的任何内容后,重新构建已提交的 bundle: ``` just dashboard-build # Vite build + stamp dist/.build-hash ``` 防止发布过期的 UI(可接入 pre-commit hook 或 CI): ``` just dashboard-verify # fails if dist/ is out of date with src/ ``` ## 在新项目中构建 hive 将一个 agent 指向构建指南,让它来采访你: **[SETUP.md](./SETUP.md)** 是权威的、独立的操作手册:包含 config + frontmatter schema、用于 orchestrator/lead/member 的可直接复制的模板、访谈问题、约定(工具、域、distiller)以及验证检查表。 ## 模式与命令(仅在配置了 hive 时才会注册) `pi-hive` 具有三种硬编码的会话模式:`normal` → `plan` → `hive` → `normal`。循环顺序是不可配置的。 - `normal` —— 普通 Pi 聊天。没有 hive 工具或 hive 强制执行机制。 - `plan` —— `planning:` 团队处于活动状态。可见的主会话应为 `agent-type: planner`;plan 关卡在 `.pi/hive/plans//` 下按 `proposal → requirements → design → tasks` 的顺序运行。 - `hive` —— `hive:` 团队处于活动状态。可见的主会话应为 `agent-type: lead`;执行 agent 构建已批准的 `tasks.md`。 命令: - `/hive-normal`、`/hive-plan-mode`、`/hive` —— 切换到特定模式。 - `/hive-toggle` 或 `Ctrl+Alt+T` —— 循环切换 `normal → plan → hive → normal`。 - `/hive-execute ` —— 验证 change 是否存在、是否有 `tasks.md` 并且 tasks 关卡是否已批准,然后切换到 hive 模式并驱动执行。 - `/hive-plan [change-id]` —— 列出计划 change 或选择/显示其中一个。 - `/hive-status` —— 打开实时层级视图(每个 agent 的状态、token、成本)。 - `/hive-doctor` —— 对 opt-in 配置、已加载的 agent、仪表板资源、Bun 可用性、SDD 状态和遥测路径运行只读诊断。 - `/hive-observe` —— 重启/打开本地浏览器仪表板以查看全局 hive 遥测(默认为 `http://127.0.0.1:43191`)。 - `/hive-observe-stop` —— 停止配置端口上的遥测仪表板。 hive 工具集在代码中受到模式/类型的范围限制,用户不可配置:plan 模式向符合条件的 planner/reviewer 暴露 planning/store/review 工具,hive 模式向符合条件的执行 agent 暴露 delegation/status/review 工具,而 normal 模式不暴露任何工具。仪表板的 host/port 默认为 `127.0.0.1:43191`,并且只能使用 `HIVE_TELEMETRY_HOST` / `HIVE_TELEMETRY_PORT` 进行更改。 SDD/OpenSpec 是用于非简单 hive 工作的默认操作模式。Agent 的 `skills:` 路径通过 `--no-skills` 加上重复的 `--skill ` 显式传递给 worker Pi 进程,因此 Hive 重用了 Pi 原生的 skill 系统,且不会发生自动发现的泄露。 ## 已配置项目的布局 ``` .pi/hive/ hive-config.yaml # the team tree + global settings (also the activation trigger) agents/ # one folder per agent, mirroring the tree; each holds .md + -mental-model.yaml knowledge/ # always-inlined context/reference files skills/ # Pi Agent Skills explicitly granted to agents sessions/ # runtime transcripts + hive-events.jsonl telemetry (gitignore this) ``` 完整的目录契约请参见 SETUP.md §4。 ## Hive 遥测 `pi-hive` 为每个 hive 会话将其自身定制的遥测流写入 `.pi/hive/sessions//hive-events.jsonl`,并将实时可变状态快照写入 `.pi/hive/sessions//hive-state.json`。顶层会话也会注册在位于 `~/.pi/agent/hive/telemetry-sessions.jsonl` 的全局索引中,因此一个 `/hive-observe` 仪表板可以显示来自多个项目的 hive 以及许多同时运行的会话。 仪表板 UI 是一个位于 `ui/web/` 下的预构建 Solid + Vite 单页应用。服务器(`src/observability/server/index.ts`)从 `ui/web/dist/` 提供已构建的 bundle,该目录已提交,因此最终用户无需构建步骤。如果你更改了 `ui/web/src/` 下的任何内容,请重新构建它: ``` just dashboard-install # first time only just dashboard-build # rebuild dist/ — the server picks it up on next page load ``` 在发布或打开 release PR 之前,运行与 CI 相同的关卡: ``` just ci ``` 在 UI 开发期间,你可以运行 `just dashboard-dev`(在端口 43192 上运行 Vite HMR),并在 `HIVE_TELEMETRY_PORT` 上运行遥测服务器;开发服务器将 `/events`、`/states`、`/stream` 和 `/health` 端点代理到该遥测服务器。 这并未连接到第三方的可观测性服务器。运行时的旋钮是专门针对 hive 的: - `HIVE_TELEMETRY_PORT` —— 仪表板端口,默认为 `43191` - `HIVE_TELEMETRY_HOST` —— 仪表板主机,默认为 `127.0.0.1` - `HIVE_TELEMETRY_NO_OPEN=1` —— 启动服务器但不打开浏览器 - `HIVE_TELEMETRY_REGISTRY` —— 覆盖全局会话注册表路径 - `HIVE_TELEMETRY_DB` —— 覆盖本地 SQLite 数据库路径
标签:自动化攻击