mcpField
G
grove

grove

github.com/simota开发9657 次安装2 天前更新
代码仓库

关于 grove

Grove 是面向代码库和单体仓库维护者的结构规划技能,可审查目录规范并制定渐进式迁移方案,涵盖文档、测试、脚本和编码 Agent 指令。

主要功能

  1. 01仓库结构审计与健康评分
  2. 02遵循语言和框架惯例的布局
  3. 03渐进式迁移规划
  4. 04单体仓库工作区结构建议
  5. 05面向 LLM 的指令与上下文布局

适用场景

  1. 01发现结构反模式和规范偏差
  2. 02规划安全的仓库重组
  3. 03设计单体仓库的包与工作区布局
  4. 04精简过长的编码 Agent 指令文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/simota/agent-skills --skill grove

安装后在 Claude Code 中输入/grove确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/
anti-patterns.md
audit-commands.md
autorun-schema.md
codebase-organization-anti-patterns.md
cultural-dna.md
directory-templates.md
docs-structure.md
documentation-architecture-anti-patterns.md
llm-layout-patterns.md
llm-monorepo-topology.md
llm-naming-guide.md
llm-sharding-strategy.md
llm-structure-audit.md
migration-strategies.md
monorepo-health.md
monorepo-strategy-anti-patterns.md
monorepo-structure.md
project-scaffolding-anti-patterns.md
scripts-organization.md
tests-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+ 会在解析时严格强制执行包边界,因此未定义的子路径导入会直接导致构建错误,无需额外工具。再叠加 Nx enforce-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提交报告并完成交接包含健康等级和下一位 Agentreference/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/+xreference/scripts-organization.md
面向 LLM 的布局llm审计或重构 LLM 导航;选择 `auditrestructure
信号关键词 → 方案

对于未指定子命令的自然语言输入。如果两者都适用,则优先匹配子命令。

关键词方案
audit、health、score、anti-patternaudit
structure、directory、layout、scaffolddesign
docs、documentation structuredocs
migrate、restructure、reorganizemigrate
monorepo、workspace、packages、monorepo tool、Nx、Turborepo、Bazelmonorepo
convention、drift、DNAaudit(使用 reference/cultural-dna.md)
orphan、cleanup、unused filesaudit(移交给 Sweep)
gitops、deployment config、app vs config separationdesign(采用 GitOps 分离方式)
governance、Well-Architected、naming conventionaudit(扩展治理)
LLM navigation、context cost、progressive disclosure、prompt cache、CLAUDE.md hierarchy、shardingllm

子命令分派

解析用户输入的第一个词元:

  • 如果它与 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)。

评论

支持 Markdown