coryhacking/wavefoundry

GitHub: coryhacking/wavefoundry

一个面向 AI 编码 agent 的本地化开发生命周期与代码智能框架,通过强制门禁和本地 MCP 服务器为代码交付提供结构化流程与代码语义检索能力。

Stars: 3 | Forks: 0

# Wavefoundry [![Version](https://img.shields.io/badge/version-1.6.2-purple)](https://github.com/coryhacking/wavefoundry/releases) [![MCP](https://img.shields.io/badge/MCP-local_server-0a7ea4)](https://modelcontextprotocol.io) [![Hosts](https://img.shields.io/badge/hosts-Claude_Code_%C2%B7_Cursor_%C2%B7_Codex_%C2%B7_Junie-blue)](https://github.com/coryhacking/wavefoundry) [![Python](https://img.shields.io/badge/python-%E2%89%A53.11-blue)](https://www.python.org/downloads/) [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) 你的 AI 编码 agent 会忘记它上个会话做了什么,跳过你要求它遵循的审查步骤,并且交付偏离计划的工作成果。Wavefoundry 是一个针对这三者的本地框架。它在你的机器上运行。没有服务,没有账号,没有遥测。 ## 适用对象 - 正在使用 **AI 编码 agent 交付生产级工作** 的团队或独立工程师。 - 注重审查规范、可追溯性以及“之前做了什么决定?”的代码库。 - **目前还没有太多工程流程**,但拥有将长期维护的代码的团队:Wavefoundry 提供了你原本需要自己发明的结构,并且从第一天起 MCP 智能功能就能发挥作用,即使在生命周期门禁启用之前也是如此。 任何将要长期存在的东西都能从中受益。 ## 你将获得什么 **结构化的交付生命周期** — 规划变更 → 准备 wave → 实施 → 审查 → 关闭。其中两个阶段是强制门禁。`Prepare wave` 会拒绝推进不完整的变更文档。未经操作员签字,`Close wave` 将拒绝执行。 **一个具备代码库工作知识的本地 MCP 服务器。** 运行生命周期的同一服务器会在本地为你的代码和文档建立索引,并将其作为 agent 工具公开: - **针对代码和文档的语义搜索** — agent 根据意图进行搜索,而不是依赖 grep 匹配模式,并在你的代码和 `docs/` 目录树中提供重新排序后的结果。 - **代码图查询** — 调用层次结构、影响分析、引用、依赖项遍历、社区聚类。 所有这些都作为 MCP 工具公开 — `docs_search`、`code_search`、`code_ask`、`code_callhierarchy`、`code_impact`、`code_references`、`code_graph_community`、`wave_graph_report` 等等。它们在任何 wave 运行之前就能工作。agent 不再凭空捏造不存在的函数,而是开始从你的实际代码中回答“我们在哪里处理了 X?”。 **内置机密检测。** 该框架在每次 wave 中使用基于 [Gitleaks](https://github.com/gitleaks/gitleaks) 的 TOML 规则集(MIT 许可证,由社区维护)扫描你的项目中的硬编码凭证、API 密钥和 token。检查结果会记录在 `docs/scan-findings.json` 中,并具有生命周期 — `pending` → `false-positive`(需要多名审查人员确认)或 `confirmed-secret`(需要在每次 wave 中得到操作员确认)。在所有检查结果解决之前,`Close wave` 将拒绝执行。随时调用 `wave_scan_secrets` 进行按需扫描;当规则集发生更改时,增量模式会自动升级为全面扫描。 ## 设计原则 - **本地优先。** 操作状态存在于磁盘上的代码仓库和你的主目录中。没有服务,没有账号,没有遥测。 - **结构强制优于策略。** 门禁在框架中触发,而不是在种子 prompt 语言中触发。agent 无法通过花言巧语绕过 `wave_close`。 - **框架作为可部署的制品。** Wavefoundry 以 zip 格式发布,任何代码仓库都可以安装或升级。该框架在 Wavefoundry 自身的 wave 流程中演进、打包,并传播到下游项目。 - **对范围诚实。** 必需的就是必需的;可选项会被明确标记。 ## 前置条件 三个硬性前置条件。在全部满足之前,请勿运行任何安装命令。 1. **Python 3.11 或更高版本。** 使用以下命令检查: python3 --version # 预期:Python 3.11.x(或更高) *在 `python3 --version` 报告 3.11 或更高版本之前,请勿继续执行此步骤之后的操作。* 通过你的包管理器(`brew install python@3.11`、`apt install python3.11`)或 [`pyenv`](https://github.com/pyenv/pyenv) 进行安装。 2. **受支持的宿主机操作系统** — macOS、Linux,或通过 WSL2 运行的 Windows。 3. **支持 MCP 的 agent 宿主。** 建议首次安装时使用 **Claude Code** 或 **Codex CLI** — 两者都从磁盘配置(`.mcp.json` / `.codex/config.toml`)自动加载 MCP,因此安装过程无需任何手动 UI 步骤即可运行。**Cursor**、**Junie**、**GitHub Copilot**、**Windsurf**、**Air** 和 **Warp** 也可以通过它们各自的 MCP 接口进行连接 — 请参阅 [宿主支持](#host-support)。 ## 快速开始 两个操作员步骤,一次 MCP 重启,如果 Python 已就绪大约需要 3 分钟。**安装由 agent 驱动** — 你只需将 zip 文件放入你的代码仓库并输入 `Install Wavefoundry`;剩下的由 agent 完成。 ### 安装指南 安装在**两个阶段**中进行,两者之间需要重启 MCP 宿主。这两个阶段都由 agent 驱动 — 操作员仅有的操作是拖入 zip 文件、输入安装指令,以及在 agent 提示时重启你的宿主。 **(a) 将发布版的 zip 文件放在你的代码仓库根目录** 前往 [Releases](https://github.com/coryhacking/wavefoundry/releases) 并下载附加到**最新版本**的资产。将 zip 文件 — 保持压缩状态,不要解压 — 放在你目标代码仓库的根目录中。 **(b) 将此快捷指令作为聊天消息发送给你的 AI agent:** ``` Install Wavefoundry ``` 这是发送给你的 AI agent 的**聊天消息**,而不是 shell 命令。Agent 必须已经在你的代码仓库中打开(该代码仓库被设为工作目录)并连接到受支持的 AI 宿主: - **推荐用于首次安装:** **Claude Code** 或 **Codex CLI** — 两者都从磁盘配置自动加载 MCP,因此无需任何手动 UI 步骤即可运行安装。 - **同样支持:** **Cursor**、**Junie**、**GitHub Copilot**、**Windsurf**、**Air**、**Warp** — 有关各宿主的连接方式,请参阅 [宿主支持](#host-support)。 #### 第一阶段 — 引导框架(尚无 MCP) 第一阶段安装的是 Wavefoundry MCP 服务器,因此该阶段仅从你 agent 的一般功能开始运行 — 尚未调用任何 `wave_*` MCP 工具。Agent 会: - **解压发布版的 zip 文件。** 标志:`.wavefoundry/`、`docs/` 和 `.mcp.json` 出现在你的代码仓库根目录。 - **设置生命周期起点**于 `docs/workflow-config.json` 中(默认设为你项目的首次 git 提交日期)。 - **运行 `setup_wavefoundry.py`** — 该编排器会在 `~/.wavefoundry/venv/` 创建共享工具 venv,安装依赖项,构建框架及项目的语义索引,写入 `.wavefoundry/bin/` 启动器和你宿主的 MCP 配置,并在你重启之前试运行 MCP 服务器以捕获启动故障。标志:编排器以 0 状态退出;最终汇总行报告索引就绪。 - **停止并告诉你重启你的 MCP 宿主。** 这是明确的阶段 1 → 阶段 2 的交接;不要尝试在当前的 agent 会话中继续。 #### → 重启你的 MCP 宿主,然后继续 退出并重新启动你的 agent,或使用你宿主的 MCP 重新加载命令。重启后,`wavefoundry` MCP 服务器会出现在你宿主的 MCP 服务器列表中,并且 agent 可以调用 `wave_*` 工具。 **要继续,请再次输入 `Install Wavefoundry`。** 安装快捷方式是状态感知的:当 `.wavefoundry/install-log.md` 已经存在时,agent 会从第一个未勾选的行(即第 2 阶段的第 2.1 行,`wave_install_audit(phase=1)`)继续。不需要单独的“开始第 2 阶段”的指令。 #### 第二阶段 — 项目发现(由 MCP 驱动) 在可以访问 MCP 服务器的情况下,agent 会逐行遍历 `.wavefoundry/install-log.md`,在行与行之间调用 `wave_install_audit` 以强制执行边做边 lint(lint 错误和缺失的制品会阻碍进展)。第 2 阶段引导为你的代码仓库量身定制的项目专属制品 — 这也是 Wavefoundry 从一个通用的安装程序转变为看起来像*你的*代码仓库的框架的阶段。Agent 会: - **审计阶段 1 的制品**(`wave_install_audit(phase=1)`) — 如果有任何缺失则进行恢复。 - **分析你的代码仓库** — `docs/repo-profile.json`(原型、特征、适用因素)、`docs/repo-index.md`。 - **引导规范的 `docs/` 结构** — `architecture/`、`contributing/`、`plans/`、`references/`、`prompts/`、`waves/`、`agents/`。 - **生成各角色的 agent 文档** — 按启用的角色生成 `docs/agents/.md`,包括从其权威 seed 加载的三个委员会专家角色(`wave-council`、`red-team`、`archetype-council`)。 - **映射你的架构** — `docs/ARCHITECTURE.md` 以及 `current-state.md`、`domain-map.md`、`layering-rules.md`、`cross-cutting-concerns.md`、`data-and-control-flow.md`、`testing-architecture.md`。 - **确立基态** — `QUALITY_SCORE.md`、`RELIABILITY.md`、`SECURITY.md`、`PERFORMANCE.md`(视情况而定)。 - **配置文档门禁**,**生成 prompt 接口**,**引导 wave 制品**,**合成角色设定**,**引导角色专属日志**,以及**登记偏移预期**。 - **确认完成。** 最终的 `wave_install_audit()` 返回 `{status: "complete"}`。Agent 会提供一份操作员总结,涵盖已 seed 的内容、工作流、命令、角色以及文档门禁。 ## 安装内容 `Install Wavefoundry` 完成后,你的代码仓库将具有以下结构。它是持久化的 — 在升级过程中,相同的路径会出现在相同的位置。 ### 在你的代码仓库中 ``` .wavefoundry/ framework/ Framework code, seeds, dashboard assets bin/ Repo-local CLI shims index/ Local semantic + graph indexes (LanceDB) * logs/ Build, upgrade, dashboard logs * docs/ prompts/ Public command catalog waves/ Wave records — your delivery history plans/ Change docs being authored architecture/ Architecture docs agents/ Agent role docs, journals, session handoff references/ Long-form project references AGENTS.md Agent-facing entry surface CLAUDE.md Claude Code-specific entry surface .mcp.json MCP server stdio entry ``` \* `.wavefoundry/index/` 和 `.wavefoundry/logs/` 已被 gitignored — 属于单机且可重新生成。一些宿主机本地的 runtime 制品也已被 gitignored:`.wavefoundry/guard-overrides.json`、`.wavefoundry/dashboard-server.json`、`.wavefoundry/*.lock`、`.wavefoundry/framework/test-cache.json`。 Wavefoundry 仅写入上述路径。框架本身会被提交,因此团队中的每个人都会拥有锁定在代码仓库中的相同版本。如果你运行特定于宿主的渲染器(Claude Code、Cursor、Codex、Junie、GitHub hooks),它们将写入 `.claude/`、`.cursor/hooks.json`、`.codex/config.toml`、`.junie/` 和/或 `.github/hooks/` — 所有这些都会被提交。 每个 `docs/` 子目录包含的内容 — agent 会读取它们以作为其工作的基础: - **`docs/prompts/`** — agent 查询以路由快捷指令的目录(`Plan feature`、`Create wave` 等)。 - **`docs/waves/`** — 你的交付历史。每个关闭的 wave 都是一条已提交的记录,说明了谁决定了什么、谁进行了审查以及交付了什么。 - **`docs/plans/`** — 在被接纳进 wave 之前,正在编写的变更文档的暂存区。 - **`docs/architecture/`** — 领域映射、分层规则、当前状态快照、数据/控制流、ADR。Agent 在起草计划之前会阅读此内容,以免违反边界。 - **`docs/agents/`** — 角色文档(wave-coordinator、planner、reviewer 专家)、角色设定、日志以及会话交接文件。Agent 在每一步之前都会阅读其自身的角色描述和任何活动的监控点。 - **`docs/references/`** — 持久的项目上下文:记忆、已知陷阱、项目概述。 ### 在你的用户主目录中 | 路径 | 用途 | |---|---| | `~/.wavefoundry/venv/` | 共享工具 venv(依赖项 — LanceDB、ONNX 等) | | `~/.wavefoundry/cache/fastembed/` | Embedding 和 reranker 模型权重(FastEmbed 量化的 ONNX),在首次构建索引时从 H Face 获取,此后进行本地缓存 | ### 网络足迹 **Runtime 时对 Wavefoundry 控制的端点访问为零。** Embedding 模型权重会在首次构建索引时从 Hugging Face 获取,并在此后进行本地缓存。依赖项会在 `setup_wavefoundry.py` 期间以及框架升级期间通过 `uv`(或 `pip` 回退)进行安装。没有服务,没有账号,没有遥测。 ## 你的第一个 wave 三轮对话,从头到尾。第 3 步包含一个你无法用语言绕过的结构性拒绝 — 这正是该框架的核心意义所在。 ### 1. 规划变更 ``` > Plan feature: add /healthz endpoint to the API server [agent reads docs/architecture/, drafts the change doc] Agent: I've drafted docs/plans/12abc-feat add-healthz-endpoint.md with Rationale, Requirements, Acceptance Criteria, Tasks, and Risks. Want me to admit it into a new wave? > yes, create a wave for it ``` Agent 创建了一个*变更文档*(针对单个工作单元的计划制品),并准备将其并入一个*wave*(接纳一个或多个变更的交付单元)。 ### 2. 创建 wave,接纳,准备 ``` > Create wave: api-healthz Agent: Created docs/waves/12abd api-healthz/wave.md. Admitting 12abc... Wave status: planned, 1 admitted change. > Prepare wave Agent: Running readiness checks… - Change docs complete: ✓ - AC priority recorded: ✓ - Required review lanes selected: code-review, qa-review: ✓ - Wave Council readiness review: PASS Wave status: active. Pre-implementation review gate next. ``` `Prepare wave` 是一个真正的门禁。文档 lint 必须通过。每个接纳的变更文档必须完整。必须记录验收标准(AC)优先级。配置后,结构化的委员会审查必须记录 `wave-council-readiness`。只有满足这些条件,wave 才会被**就绪** — 它保持为 `planned` 状态;一个独立的、单一 OPEN 门控步骤(`Implement wave`)会将其开启为 `active`/`implementing`。任意数量的 wave 可以并行进行计划和就绪;但同时只能有一个处于 OPEN 状态。 ### 3. 实施,审查,关闭 ``` > Implement wave [agent edits api/server.py, adds tests, runs them] Agent: Implementation complete. Tests pass. Review lanes: code-review: approved qa-review: approved Ready to close? > Close wave Agent: wave_close returned an error. Diagnostic: operator_signoff_missing Recovery: operator must record `operator-signoff: approved` in ## Review Evidence on wave.md before close can succeed. > approved, go ahead and close Agent: Recorded operator-signoff. Running wave_close again… Wave closed. 1 change implemented. Session handoff updated. ``` 第一次尝试被拒绝正是其目的所在。`wave_close` 受到结构性的拦截 — agent 绝不可能通过花言巧语绕过它。门禁即是框架,而不是 prompt。 ## 核心概念 ### 生命周期 变更文档通过被接纳进 wave 而进入流水线。Wave 会经历五个阶段 — **规划变更**、**准备 wave**、**实施**、**审查**、**关闭** — 其中两个阶段是*强制门禁*: - **`Prepare wave`** 会阻塞,直到文档 lint 通过。每个接纳的变更都必须记录 AC 优先级。配置后,必须记录结构化的委员会就绪审查。 - **`Close wave`** 会阻塞,直到每个必需的审查通道都记录了签字,并且操作员已确认关闭。 Agent 无法绕过任何一个门禁。上面的记录展示了当缺少先决条件之一时,拒绝的情况是怎样的。 ### Waves *Wave* 是交付单元。工作以一个或多个*变更文档*的形式被接纳进 wave,通过 `Prepare wave` 进行门禁,通过 `Implement wave` 进行实施,通过 `Review wave` 进行核对,最后由 `Close wave` 封存。 **最接近的类比:** 一个功能分支结合了一份发行说明草稿。**关键区别:** wave 的生命周期具有*强制门禁* — 当未满足先决条件时,框架会拒绝关闭,而不是依赖软性约定。 ### 变更文档 *变更文档* 是针对单个工作单元的结构化计划制品:基本原理、需求、验收标准、任务、风险、决策日志。 **最接近的类比:** 一个 GitHub Issue 加上一份设计文档加上一份内部的 RFC。**关键区别:** 变更文档位于你代码仓库中的代码旁边(计划期间在 `docs/plans/`,接纳后在 `docs/waves//`),并且是 agent 读取、编辑以及框架进行 lint 的对象。 ### Seeds *Seeds* 是带编号的 prompt 主体 — 目前从 `001` 到 `250+` — 它们定义了 agent 在每个生命周期步骤中应如何表现。它们位于 `.wavefoundry/framework/seeds/` 中,涵盖了从安装框架到进行对抗性委员会审查的所有内容。 **最接近的类比:** 一份风格指南结合操作手册。**关键区别:** seeds 由 MCP 服务器(`seed_get`、`docs_search`)进行索引和检索,因此 agent 会直接在行内获取它们,而不是在每次交互时重新阅读它们。 ### 反馈传感器 分为两类:**计算型传感器**(在检查失败时会阻塞的 linter、验证器、门禁脚本)和**推理型传感器通道**(基于 LLM 的代码审查、架构审查、安全审查、QA 审查等,作为结构化证据记录在 wave 上)。机密检测是一种内置的计算型传感器 — 它在每次 wave 中扫描硬编码的凭证,并阻塞关闭,直到每一个检查结果都被分类。 **最接近的类比:** CI pipeline 结合 PR 审查分配。**关键区别:** 传感器将其检查结果作为结构化证据记录在 wave 文档本身上,并且在必需的通道签字存在之前,`wave_close` 会阻塞。 ### MCP 服务器 一个本地 MCP 服务器(`wavefoundry`)公开了对代码仓库自身文件进行操作的工具。它与你 agent 的宿主一起运行。没有服务,没有账号,没有遥测。 **最接近的类比:** 一个你自己使用结构化 I/O 调用的 CLI。**关键区别:** agent 在对话期间直接调用工具,因此生命周期门禁会在对话过程中触发,而不是仅仅在你记得运行检查时才触发。 ## 宿主支持 任何感知 MCP 的宿主都可以连接到本地的 Wavefoundry 服务器。对于某些宿主,`render_platform_surfaces.py` 会为你写入配置;对于其他宿主,你需要自行将 stdio 条目粘贴到宿主的 MCP 设置中。 | 宿主 | 操作方式 | |---|---| | **Claude Code** | `render_platform_surfaces.py --platform claude` | | **Codex CLI** | 提交的 `.codex/config.toml` 在项目受信任时加载 | | **Cursor** | `render_platform_surfaces.py --platform cursor` | | **Junie** | `render_platform_surfaces.py --platform junie` | | **GitHub Copilot · Windsurf · Air · Warp** | 将 [`docs/prompts/install-wavefoundry.prompt.md`](docs/prompts/install-wavefoundry.prompt.md) 中的 stdio 条目粘贴到你宿主的 MCP 设置中 | ## 日常指令 日常使用大约六个指令;其余功能在你需要时随时可用。 - `Plan feature` — 编写变更文档 - `Create wave` — 开启一个交付单元 - `Add change to wave` — 将变更接纳进活动的 wave - `Prepare wave` — 实施前的就绪门禁 - `Implement wave` — 由协调器管理、带有审查通道的实施循环 - `Close wave` — 具有操作员签字的结构化关闭 [完整工具接口](docs/prompts/index.md) 涵盖了 wave 管理、代码搜索、图查询、dashboard 控制、门禁管理和对抗性审查。可以从 agent 内部搜索该目录(`docs_search`、`code_ask`)。 ## 对于企业内部 fork 如果你 fork Wavefoundry 用于内部分发,上面上游的 GitHub URL(`github.com/coryhacking/wavefoundry/releases`、版本徽章的**链接目标**,以及内置 `install/install-block.md` 中的链接)需要指向你的 fork。版本徽章**图像**现在是一个静态的 shields 徽章,其值由 `build_pack.py --release` 自动加盖,因此它是 fork 稳定的 — 只需要重定向其链接目标。快捷指令、安装流程以及 zip 包内的各种接口都是 fork 稳定的;只有下载/发布页面的链接需要重定向。 当你进行 fork 时,需要更新的具体位置: - 这份 `README.md` — 版本徽章的**链接目标**(大约第 3 行;徽章图像是静态的,其版本由 `build_pack --release` 自动加盖)以及**快速开始 → (a)** 中的 Releases 下载链接。 - `.wavefoundry/framework/install/install-block.md` — 底部附近的 README 链接。此块会通过 `build_pack.py --release` 自动添加到每个发行版的说明前面,因此该链接会指向你 fork 的发布页面。 - 任何逐字引用安装步骤的内部文档或新手引导演示文稿。 该框架有意不去自动检测“这是哪个 fork” — GitHub 的远程 URL 是事实来源,但安装接口是静态的,以便气隙隔离的操作员仍然可以阅读它们。Fork 需自行管理重定向步骤。 ## 对于团队 评估 Wavefoundry 的团队通常会问三个问题。 ### 采用成本 安装它,端到端驱动一个小型的 wave,然后决定这种规范是否适合你的代码库。框架按代码仓库进行配置,完全存在于你的代码仓库以及 `~/.wavefoundry/` 中。无需运维任何基础设施,也没有需要运行的共享服务。 ### 锁定 所有的计划制品(变更文档、wave 记录)都是你 `docs/` 目录树中的 Markdown 文件。它们是可读的、可被 grep 搜索的,并且在 Wavefoundry 被删除后依然存在。`.wavefoundry/index/` 中的语义索引可以从源代码重新生成。移除 Wavefoundry 只需 `rm -rf .wavefoundry/`,如果你不想要宿主 shim,再加上 `rm .mcp.json AGENTS.md CLAUDE.md` 即可 — 你的 `docs/` 目录依然记录着已交付内容的故事。 ### 安全性 仅限本地操作。Runtime 时不对 Wavefoundry 控制的端点进行任何网络调用。没有服务,没有账号,没有遥测。Embedding 模型权重在首次构建索引时从 Hugging Face 获取,并在本地缓存。依赖项在安装和升级期间通过 `uv` 以及供应链时间锁进行安装。经过审计的文件写入接口 — Wavefoundry 从不编辑 [已安装内容](#what-got-installed) 中所示路径之外的文件。 内置凭证扫描:框架使用社区的 Gitleaks 规则集检查每个项目文件,并阻塞 wave 关闭,直到检查结果被分类。你的 `docs/scan-rules.toml` 可扩展或覆盖框架的默认设置,以满足项目的特定需求。 ## 升级 ``` Upgrade wave framework ``` Agent 会检测框架偏移,核对 prompt 和 hook 接口,运行文档门禁,重启 MCP 服务器,并更新语义索引。升级程序会搜索项目根目录、`~/.wavefoundry/` 以及 `~/.wavefoundry/dist/`,以寻找可用的最高 semver zip 包。 ## 贡献 Wavefoundry 使用 Wave 框架来开发自身。维护者使用的与发布到下游项目的 MCP 工具是相同的 — 语义搜索、代码图查询、生命周期门禁。此代码仓库中的 wave 目录就是其实践的证明。 有关如何贡献,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 安全 请参阅 [SECURITY.md](SECURITY.md) — 本地优先意味着没有可被攻击的服务,但供应链接口(`uv`、依赖项安装)依然是真实存在的。Wavefoundry 还使用内置的基于 Gitleaks 的规则集扫描你的项目文件以查找硬编码凭证;检查结果会被记录在 `docs/scan-findings.json` 中,并且必须在 wave 关闭之前得到解决。 ## 许可证 Apache 2.0 — 请参阅 [LICENSE](LICENSE)。
标签:AI辅助开发, MCP, 代码智能, 数据管道, 生命周期管理, 软件工程, 逆向工具