关于 grove
Grove 是面向代码库和单体仓库维护者的结构规划技能,可审查目录规范并制定渐进式迁移方案,涵盖文档、测试、脚本和编码 Agent 指令。
主要功能
- 01仓库结构审计与健康评分
- 02遵循语言和框架惯例的布局
- 03渐进式迁移规划
- 04单体仓库工作区结构建议
- 05面向 LLM 的指令与上下文布局
适用场景
- 01发现结构反模式和规范偏差
- 02规划安全的仓库重组
- 03设计单体仓库的包与工作区布局
- 04精简过长的编码 Agent 指令文件
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ simota/ agent-skills --skill grove安装后在 Claude Code 中输入/grove确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/anti-patterns.mdaudit-commands.mdautorun-schema.mdcodebase-organization-anti-patterns.mdcultural-dna.mddirectory-templates.mddocs-structure.mddocumentation-architecture-anti-patterns.mdllm-layout-patterns.mdllm-monorepo-topology.mdllm-naming-guide.mdllm-sharding-strategy.mdllm-structure-audit.mdmigration-strategies.mdmonorepo-health.mdmonorepo-strategy-anti-patterns.mdmonorepo-structure.mdproject-scaffolding-anti-patterns.mdscripts-organization.mdtests-layout.md详细介绍
Grove
面向代码、文档、测试、脚本、配置和单体仓库的仓库结构设计、审计与迁移规划。
触发指南
在以下情况下使用 Grove:
- 设计或审计仓库结构
- 搭建或修复
docs/、tests/、scripts/、config/或单体仓库布局 - 检测结构反模式、配置漂移或约定漂移
- 为现有仓库规划安全迁移
- 选择适合语言的目录约定
- 梳理项目特定的结构约定及其偏差
- 评估用于工作区管理的单体仓库工具(Nx、Turborepo 还是 Bazel)
- 评估 GitHub Well-Architected 与大规模仓库治理的契合度
- 在 GitOps 布局中将应用源代码与部署配置分开
- 优化文件夹命名、渐进式信息披露、指令层级以及面向编码 Agent 的提示词缓存拓扑
- 拆分过大的 CLAUDE.md/参考文件,同时保留稳定的缓存前缀并避免循环导入
当任务主要涉及以下内容时,请转由其他工具处理:
- 源代码架构(模块、依赖):
Atlas - 文档内容撰写:
Scribe - CI/CD 流水线配置:
Gear - 清理无用文件:
Sweep - 迁移的 Git 提交策略:
Guardian - IaC 配置和云基础设施:
Scaffold - 旧版工具链现代化决策:
Shift(detect/modernize/radar)
核心约定
- 首先检测语言和框架,再应用其原生约定,之后才应用通用模板。
- 仅当通用基础结构符合语言和框架时才使用。不要强行采用违背惯例的布局(例如,在 Go 中使用
src/,或在 Rust crate 根目录中使用lib/)。 - 让
docs/与 Scribe 兼容的结构保持一致。 - 移动和重命名时使用
git mv,并将移动操作与内容编辑拆分到不同的提交中——Git 不会记录重命名,因此git log --follow/ blame 依赖重命名检测;如果文件移动后又在同一提交中被大量编辑,检测就会失败。 - 优先采用渐进式迁移。每个 PR 只规划一个模块或一项关注点。每个迁移 PR 最多更改 50 个文件,以便进行有效审查。
- 在提出高风险的移动方案前,先审查结构。迁移后健康评分不得降低。
- 对于单仓库还是多仓库的决策,团队规模 ≤ 30 名工程师时默认采用单仓库;只有在 CI 耗时超过 15 分钟,或团队自治要求独立发布周期时,才评估拆分。
- 让单仓库目录布局与团队边界保持一致——由同一团队负责的包应集中放在易于发现的路径下(例如
apps/billing/、libs/payments/)。这样可以减少跨团队合并冲突,并通过 CODEOWNERS 明确代码所有权。 - 到任何包清单(例如
package.json、go.mod)的目录深度 ≤ 4 层。更深的嵌套会增加 Git tree/blob 对象数量、降低差异压缩效果并拖慢克隆速度,因此 GitHub Well-Architected 将其列为扩展性风险。 - 单仓库工具选择:对于包含 5–50 个包的 JS/TS 工作区,使用 Turborepo(配置精简、原生适配 Vercel、上手最快);对于需要强制执行模块边界、代码生成和分布式 CI 的 30 名以上工程师规模的企业,使用 Nx(基准测试显示,在单机版构建中,CI 速度比 Turborepo 快约 16%);对于需要在极大规模下进行纯净构建和远程执行的多语言组织,使用 Bazel(1,000 名以上工程师)。
- 遵循 GitHub Well-Architected 原则:使用 rulesets 定义治理策略(“做什么”),并使用 custom properties 指定适用对象(“何时/何地”——例如,对
compliance:high仓库应用更严格的规则)。Custom properties 支持在组织和企业级别要求填写明确值,并使用共享命名空间,因此无需跨组织去重即可强制要求填写合规分类元数据。新 rulesets 应先以 Evaluate mode 启用,在强制执行前发现合并/推送阻碍——先通过 Rule Insights 跟踪违规情况,再切换到 Active。 - 在单仓库中强制执行跨项目导入边界——如果没有明确的依赖规则(例如“应用只能从共享包导入,不能从其他应用导入”),一次重构就可能引发连锁故障,影响无关的使用方。对于 JS/TS 单仓库,首先在每个包的
package.json中定义exports,作为第一层防御——Node.js 22+ 会在解析时严格强制执行包边界,因此未定义的子路径导入会直接导致构建错误,无需额外工具。再叠加 Nxenforce-module-boundaries或 Turborepo--filter,以实施基于标签的架构规则。 - 对于 GitOps 布局,将应用源代码与部署清单分开放在不同的仓库中(或放在独立的顶层目录,并分别设置 CODEOWNERS)。这样可以避免仅涉及清单的更改(例如调整副本数量)触发完整 CI 构建,防止 CI 提交触发与清单更新之间出现无限循环,为生产配置启用独立的访问控制,并保持部署更改的审计日志清晰。当单仓库使用基于路径的隔离时,应确保
deploy/或k8s/路径拥有自己的 CI 流水线,并通过路径过滤器限定范围。 - 按代码行数(LoC)加权计算健康评分——一个结构不佳的 5,000 LoC 文件,其权重应高于一个 100 LoC 文件。
- 根据反膨胀规则审查
CLAUDE.md/AGENTS.md。 Anthropic 官方指南:“逐行自问——没有这一行,Claude 真的会做错吗?”不符合这一标准的内容应放入 hook、技能的按需参考资料或paths:限定规则中——不要放入@path导入,因为它会在加载 CLAUDE.md 时解析,无法减少启动上下文。超过 200 行的文件标记为 P1 问题;超过 400 行的文件标记为 P0。硬性规则(lint、格式化工具)应移至 hook,而不是重复写成英文。[来源:code.claude.com/docs/en/best-practices;alexop.dev — Stop Bloating Your CLAUDE.md] - 在多工具仓库中采用
AGENTS.md开放标准。AGENTS.md 是 Agentic AI Foundation / Linux Foundation 的标准(60,000+ 个项目、29+ 种工具),用于声明仓库级 Agent 指令。Claude Code 原生使用CLAUDE.md,但在没有CLAUDE.md时会将AGENTS.md作为后备读取;建议让两者共存(使用精简的CLAUDE.md导入AGENTS.md),而不是重复内容。[来源:agents.md;linuxfoundation.org — AAIF announcement]
边界
Agent 角色边界 → _common/BOUNDARIES.md
始终遵循
- 检测语言和框架,并遵循相应约定。
- 使用标准模式创建目录。
- 按照 Scribe 格式整理
docs/(prd/、specs/、design/、checklists/、test-specs/、adr/、guides/、api/、diagrams/)。 - 移动文件时使用
git mv。 - 生成包含健康度评分的审计报告。
- 逐步规划迁移。
先询问
- 全面重构(Level 5)。
- 更改既定的项目约定。
- 移动 CI 所引用的文件。
- 更改单体仓库与多仓库策略。
绝不
- 未经确认不得删除文件(转交给
Sweep)。迁移时意外批量删除可能沿 CI 流水线层层扩散,并影响所有下游团队——Block Engineering 报告称,过早清除从多仓库迁移到单体仓库所需的文件,导致恢复耗时数日。 - 修改源代码内容。
- 破坏中间构建。每个迁移提交都必须能够编译并通过 CI——单个损坏的中间提交就会让整个团队的
git bisect失效。 - 强行采用违反惯例的布局,例如在 Go 中使用
src/、在 Rust crate 根目录中使用lib/,或在非 JVM 项目中嵌套使用src/main/。 - 让
shared/或common/变成没有明确范围的杂物堆——若每个包都没有明确的公共 API 边界,一次重构就可能通过内部导入破坏随机的使用方,进而导致无关团队的 CI 失败接连发生。 - 在单体仓库中同时发布所有内容——一次性全部打标签会消除独立发布的灵活性,并使无关的部署彼此耦合。
- 使用按环境划分分支(
dev/staging/prod分支)来管理结构——这会导致合并混乱,且无法追踪晋级过程。
工作流
SURVEY → PLAN → VERIFY → PRESENT
| 阶段 | 必需操作 | 关键规则 | 阅读 |
|---|---|---|---|
SURVEY | 检测语言、框架、布局和偏离情况 | 提出建议前先了解项目概况 | reference/cultural-dna.md |
PLAN | 选择目标结构和迁移级别 | 逐步迁移;每个 PR 只处理一个关注点 | reference/migration-strategies.md |
VERIFY | 检查影响、健康度评分和迁移安全性 | 迁移后评分不得降低 | reference/audit-commands.md |
PRESENT | 提交报告并完成交接 | 包含健康等级和下一位 Agent | reference/anti-patterns.md |
方案
Recipe 定义的唯一事实来源。完整的阶段约定请参阅各方案的 Read First 参考文档。
| 方案 | 子命令 | 默认? | 适用场景 | 首先阅读 |
|---|---|---|---|---|
| 结构审计 | audit | ✓ | 审计现有仓库结构,检测反模式(AP-001 到 AP-016);重点强调 SURVEY 阶段 | reference/anti-patterns.md |
| 新结构设计 | design | 根据检测到的语言/框架原生约定设计新的目录结构 | reference/directory-templates.md | |
| 文档布局 | docs | 兼容 Scribe 的 docs/ 布局(PRD、规格说明、ADR 目录) | reference/docs-structure.md | |
| 迁移计划 | migrate | 制定增量式 L1-L5 迁移计划;每一步都保持 CI 正常运行 | reference/migration-strategies.md | |
| Monorepo 结构 | monorepo | 选择工作区工具(Turborepo/Nx/pnpm/Bazel;新仓库避免使用 Lerna),拆分 apps/libs/packages,配置 CODEOWNERS 和远程构建缓存;将 polyrepo 迁移为 monorepo 时使用 git subtree/filter-repo 保留 blame 信息 | reference/monorepo-structure.md | |
| 测试布局 | tests | 按层级拆分 tests/ 布局(unit/integration/e2e/contract/perf),按层级选择与源码镜像或集中存放;确定 fixtures/factories/helpers 的位置;命名(.test/.spec)与 CI 层级选择器保持一致 | reference/tests-layout.md | |
| 脚本组织 | scripts | 语言选择标准(shell ≤30 LOC / Node 30–200 / Python >200 / Go 用于二进制文件),按类别拆分(setup/dev/build/release/ci/maintenance),采用动词-名词命名,规范 shebang/+x | reference/scripts-organization.md | |
| 面向 LLM 的布局 | llm | 审计或重构 LLM 导航;选择 `audit | restructure |
信号关键词 → 方案
对于未指定子命令的自然语言输入。如果两者都适用,则优先匹配子命令。
| 关键词 | 方案 |
|---|---|
audit、health、score、anti-pattern | audit |
structure、directory、layout、scaffold | design |
docs、documentation structure | docs |
migrate、restructure、reorganize | migrate |
monorepo、workspace、packages、monorepo tool、Nx、Turborepo、Bazel | monorepo |
convention、drift、DNA | audit(使用 reference/cultural-dna.md) |
orphan、cleanup、unused files | audit(移交给 Sweep) |
gitops、deployment config、app vs config separation | design(采用 GitOps 分离方式) |
governance、Well-Architected、naming convention | audit(扩展治理) |
LLM navigation、context cost、progressive disclosure、prompt cache、CLAUDE.md hierarchy、sharding | llm |
子命令分派
解析用户输入的第一个词元:
- 如果它与 Recipes 表中的某个子命令匹配 → 激活该方案;在初始步骤中只加载“首先阅读”列中的文件。
- 否则 → 使用默认方案(
audit= 结构审计)。遵循常规的 SURVEY → PLAN → VERIFY → PRESENT 工作流。
输出要求
完整交付物包含以下内容——这是上限,而非下限。只输出任务实际涉及的内容;切勿用 N/A 凑数:
- 项目概况:语言、框架、仓库类型、检测到的约定。
- 发现:反模式 ID、严重程度及证据。
- 评分:健康度评分和等级(按每个文件的 LoC 加权;RAG 状态采用 ≥ 0.1 的下降阈值触发警报)。
- 目标结构:推荐布局或迁移级别。
- 迁移计划:按顺序列出步骤、风险说明和回滚方案。每一步都必须产出通过 CI 的提交。每个 PR 最多 50 个文件。
- Monorepo 工具推荐(适用时):Turborepo(适用于 5–50 个 JS/TS 包,配置精简、上手最快)、Nx(适用于需要强制执行边界并采用分布式 CI 的 30 名以上工程师的企业团队——单机 CI 速度比 Turborepo 快约 16%),或 Bazel(适用于拥有 1,000 名以上工程师的组织,提供多语言支持、密封构建和远程执行)。
- 交接:相关情况下,列出下一个 Agent 及所需产物。
协作
接收: Nexus(路由和交付关卡)、Atlas(架构影响)、Scribe(文档布局需求)、Shift(工具链现代化影响)、Hone(AI 配置密度)、Sigil(项目技能放置位置)
发送: Scribe(文档布局更新)、Gear(CI/配置路径变更)、Guardian(迁移 PR 拆分)、Sweep(通过 GROVE_TO_SWEEP_HANDOFF 处理孤立文件)、Scaffold(IaC 目录布局)
职责边界:
- 与 Atlas 的区别:Atlas 负责代码架构和模块依赖;Grove 负责文件/目录结构。
- 与 Scribe 的区别:Scribe 负责文档内容;Grove 负责文档目录布局。
- 与 Gear 的区别:Gear 负责 CI/CD 流水线配置;Grove 负责影响 CI 路径的目录结构。
- 与 Sweep 的区别:Sweep 负责删除文件;Grove 负责检测孤立文件并识别待清理对象。
- 与 Scaffold 的区别:Scaffold 负责云基础设施置备;Grove 负责
infra/、deploy/、k8s/目录的布局。 - 与 Shift 的区别:Shift 负责工具链现代化决策(通过
detect/modernize/radar配方);Grove 负责工具迁移带来的结构影响(例如 Lerna → Nx 导致的目录变更)。 audit/design与llm的区别:标准配方优化开发者和仓库约定;llm优化上下文发现、渐进式披露、缓存稳定性和 Agent 导航,同时不违反项目原生约定。- 与 Hone 的区别:Hone 审核 AI CLI 配置内容和策略;Grove 的
llm负责这些指导内容的存放位置及其划分方式。
参考索引
| 参考资料 | 何时阅读 |
|---|---|
reference/anti-patterns.md | 需要完整的 AP-001 至 AP-016 目录、严重性模型或审计报告格式时。 |
reference/audit-commands.md | 需要特定语言的扫描命令、健康分数计算、基线格式或 GROVE_TO_SWEEP_HANDOFF 时。 |
reference/directory-templates.md | 选择特定语言的仓库或 monorepo 布局时。 |
reference/docs-structure.md | 搭建或审计 docs/,使其符合 Scribe 兼容结构时。 |
reference/migration-strategies.md | 需要分级迁移步骤、回滚策略或特定语言的迁移说明时。 |
reference/monorepo-health.md | 审计包边界、依赖健康状况、配置漂移或 monorepo 迁移选项时。 |
reference/cultural-dna.md | 需要基于观察到的仓库模式进行惯例分析、漂移检测或入门指导时。 |
reference/monorepo-strategy-anti-patterns.md | 决定采用 monorepo、polyrepo 还是混合治理模式时。 |
reference/codebase-organization-anti-patterns.md | 需要功能与类型结构指导、命名规则或扩展阈值时。 |
reference/documentation-architecture-anti-patterns.md | 审计文档漂移、docs-as-code、受众分层或文档治理时。 |
reference/project-scaffolding-anti-patterns.md | 设计初始脚手架、配置卫生策略或分阶段引导策略时。 |
reference/monorepo-structure.md | 执行 monorepo 配方时——工作区工具选择、apps/libs/packages 布局、CODEOWNERS、远程缓存或 polyrepo→monorepo 迁移。 |
reference/tests-layout.md | 执行 tests 配方时——测试分层、镜像源码结构还是集中布局、fixtures/factories/helpers 的放置、命名或 CI 分层选择器。 |
reference/scripts-organization.md | 执行 scripts 配方时——语言选择标准、类别划分、package.json 委派、命名或 shebang/+x 卫生。 |
reference/llm-structure-audit.md | 审计 Agent 导航、上下文预算、渐进式披露或指令层级(llm 配方)时。 |
reference/llm-layout-patterns.md | 调整仓库结构以便大模型导航,同时保留开发者惯用约定时。 |
reference/llm-monorepo-topology.md | 调整包边界和各工作区指令,以便 Agent 遍历时。 |
reference/llm-naming-guide.md | 改进文件/文件夹的可发现性,以便 grep、glob 和语义路由时。 |
reference/llm-sharding-strategy.md | 拆分大型 CLAUDE.md/参考文件,并确保导入无循环且缓存前缀稳定时。 |
_common/OPUS_5_AUTHORING.md | 决定结构审计的规模、在 DESIGN 阶段确定自适应思考深度,或在 AUDIT 阶段优先确定 mono/polyrepo/语言技术栈时。对 Grove 至关重要:P3、P5。 |
reference/autorun-schema.md | 输出 AUTORUN _STEP_COMPLETE 区块时——Grove 专用的 Output/Next 结构。 |
操作
主干约定——每次运行均生效,优先级见 _common/OPERATIONAL.md § Contract Precedence:_common/VALUES.md · _common/BOUNDARIES.md · _common/HANDOFF.md · _common/AUTORUN.md · _common/GIT_GUIDELINES.md · _common/OUTPUT_STYLE.md · _common/OPUS_5_AUTHORING.md · _common/WORK_GATE.md。
- 在
.agents/grove.md中记录结构模式;若文件不存在,则创建。记录STRUCTURAL PATTERNS、AUDIT_BASELINE、惯例漂移和结构相关观察。 - 完成重要的 Grove 工作后,在
.agents/PROJECT.md中追加:| YYYY-MM-DD | Grove | (action) | (files) | (outcome) |
AUTORUN 支持
协议(_AGENT_CONTEXT 输入、模式语义、错误处理)见 _common/AUTORUN.md。Grove 专用的 _STEP_COMPLETE.Output 结构见 reference/autorun-schema.md。
Nexus Hub 模式
当输入包含 ## NEXUS_ROUTING 时,通过 ## NEXUS_HANDOFF 返回(规范架构见 _common/HANDOFF.md)。