CLAUDE.md · git:20261013.60e8978 · 2026-10-13 · sha256 1386f046bb781ad9
CLAUDE.md git:20261013.60e8978A
Immutable. This exact content never changes and is served at /api/v1/blob/1386f046bb781ad9.
# 面向 agent 的仓库说明 本文件给**在本仓库干活的 agent** 看:命令、隐性规范、踩坑点。 使用者的安装与用法见 [README.md](README.md);贡献者流程见 [CONTRIBUTING.md](CONTRIBUTING.md)。 --- ## 这是什么 11 个产品经理 skill 的集合,首尾相接成一条链路。全是 Markdown,**没有代码、没有构建、没有测试**。 ``` skills/<name>/ ├── SKILL.md # 必需。agent 读它执行 ├── README.md # 必需。给人看的使用说明 ├── agents/ # 可选。Codex 的 openai.yaml ├── references/ # 可选。展开文档 └── assets/ # 可选。模板、示例 ``` ## 常用命令 ```bash # 发布前自检(与 CI 门禁一致) grep -rnI $'\xef\xbf\xbd' . --exclude-dir=.git && echo "发现乱码" || echo "无乱码" grep -rnIE '(/Users/[A-Za-z0-9._-]+/|/home/[A-Za-z0-9._-]+/|[A-Za-z]:.Users.)' . --exclude-dir=.git # 校验 frontmatter name 与目录名一致 for d in skills/*/; do echo "$(basename $d) -> $(sed -n '1,10p' $d/SKILL.md | grep -m1 '^name:')" done # 链路闭环检查:每个「下一步」指向的 skill 必须真实存在 grep -rhoE '\[`[a-z-]+`\]\(\.\./[a-z-]+/\)' skills/ | sort -u ``` 仓库没有构建步骤。改完 Markdown 就是改完了,但**必须跑上面几条**。 --- ## 隐性规范(不照做会被 CI 拦住,或者更糟——静默出错) ### 1. frontmatter 的 `name` 必须等于目录名 CI 的 `structure` job 会拦。不一致时 agent 的 skill 发现机制会错位。 ### 2. 产物路径是硬约定 - 功能级产物 → `docs/prd/<feature-name>/` - 产品级基线 → `docs/product/<project-name>/` `<feature-name>` 用**小写短横线**(`user-auth`、`payment-flow`)。 链路靠这个目录约定衔接:上一个 skill 写进去,下一个 skill 直接读。**改任何 skill 的输出路径前, 先 grep 全仓库看谁在读它**。 ### 3. 证据标注三分法 所有面向事实的 skill 都用同一套标记,不要自创: | 标记 | 含义 | |---|---| | `[OBSERVED: URL]` / `[OBSERVED: SCREENSHOT]` | 直接可见的事实 | | `[INFERRED]` | 合理的重建推断 | | `[UNKNOWN]` | 输入资料无法确立,**必须写明归属人** | **绝不允许把 `[UNKNOWN]` 编成事实**。这是本仓库所有 skill 的共同底线。 ### 4. 「下一步」只能指向仓库内真实存在的 skill 这是最容易犯、也最伤的错误——读者被指去用一个他根本没有的 skill。新增或改名 skill 后, **grep 全仓库**确认没有悬空引用: ```bash grep -rnI "某个被删掉的-skill-名" --include="*.md" skills/ ``` ### 5. 不引入外部工具链依赖 本仓库的 skill **默认不依赖任何外部工具、MCP 服务或常驻进程**。可以提及某个外部工具是「可选」, 但必须写清「不装也不影响链路」,且**不得写死绝对路径**。 唯一被允许的例外是「解析特定文件格式确实绕不开的运行环境」—— 目前只有 `product-prd-extract` 一个(`.docx` 是 ZIP+XML,非 Node 不可)。它必须严格遵守下面第 7 条。 历史上这里踩过两个坑: - `design-spec-prototyper/SKILL.md` 里写过 `/Users/<原作者>/...` 的硬编码路径(已删) - 多个 README 引用过一批本仓库根本没有的 skill(已清) ### 6. 不写死作者本机路径 CI 门禁 2 会拦。 ### 7. 需要运行环境时,必须「自检 → 自动装 → 给退路」 如果某个 skill 确实需要 Node / Python 之类,**不允许把安装步骤甩给用户**。必须写成 agent 的主动行为: 1. **先自检,不要先问用户**——自己跑 `node --version` 之类确认环境。 2. **缺依赖就直接装**,不必先征求同意,但装之前要用一句话说清在装什么、多大、装几次。 3. **装不上要给可照做的指引**——按平台(macOS / Windows / Linux)给具体命令,不要只说「请安装 Node」。 4. **必须同时给退路**——让用户有办法在不装环境的情况下继续(例如粘贴文本),并说明走了退路会损失什么 (例如没做保真度校验、没提取内嵌图片)。 反面教材:文档里写「本 skill 需要 Node,请自行安装」。正面参照:`skills/product-prd-extract/SKILL.md` 的「依赖与自动准备」一节。 --- ## 新增一个 skill 的步骤 1. 建 `skills/<name>/`,目录名用**小写短横线**。 2. 写 `SKILL.md`:frontmatter 至少 `name` + `description`;正文照现有 skill 的骨架 (`## 使用边界` / `## 开始前` / 产物 / `## 不做什么` / `## 下一步`)。 3. `description` 要同时说清**做什么**和**什么时候用**,并写明**不适用**的情况与替代 skill。 这段文字决定 agent 会不会选它。 4. 写 `README.md`:面向使用者,说清用途、输入、产物、不做什么。**别抄 SKILL.md**—— README 讲「什么时候用」,SKILL.md 讲「怎么做」。 5. 如果是 Codex 也要用,加 `agents/openai.yaml`(三字段:`display_name` / `short_description` / `default_prompt`)。 6. 把它接进链路:改前一个 skill 的「下一步」和 README 的链路图,别让它成为孤儿。 7. 更新 `README.md` 和 `README.en.md` 的 skill 清单与链路图。 --- ## 踩坑点 ### 中文提交信息不要用 heredoc Windows + Git Bash 会把 heredoc 里的中文写成 U+FFFD 乱码,**而且不报错**——静默进历史。 用编辑器写入仓库外的临时文件,再 `git commit -F <文件路径>`,提交后 `git log -1 --format=%B` 回读确认。 ### 提交身份 本仓库是公开仓库,**必须先设本地身份再提交**——全局配置是公司身份,一旦进入公开历史就抹不掉: ```bash git config --local user.name "mingdui" git config --local user.email "37131158+mingdui@users.noreply.github.com" git config --local user.email # 每次提交前回读确认 ``` ### 第三方内容 收录任何第三方作品前,先确认对方 **LICENSE**: - 有许可(如 Apache-2.0 / MIT)→ 保留许可副本 + 在 [THIRD-PARTY.md](THIRD-PARTY.md) 写明来源与修改情况 - **没有 LICENSE → 默认保留全部权利,一个字都不能拷**。可以借鉴思路,但必须独立重写,并在 THIRD-PARTY.md 写明「仅借鉴思路、未复制任何文件」 ### `prototype-html` 是第三方,不要顺手改 它原样收录自 `vagerent/prototype-html`(Apache-2.0),改动会让「原样收录」的声明失准。 要改就先更新 THIRD-PARTY.md 里的修改说明。 --- ## 推送前 `git commit` / `git push` 是对外发布动作。**先确认再推**:远端地址、目标分支、提交身份、提交内容。