agents-with-receipts

agents-doctor

仓库 agent-ready 体检器。零依赖,Node ≥ 20。

一条命令回答「这个仓库对 AI agent 友好吗」——memory 文件、软链、hooks、敏感文件、CI 门禁,7 项一次查完。路径清单与 rosetta/README.md 的跨工具对照一致。

用法

node tools/agents-doctor/index.mjs          # 体检当前目录
node tools/agents-doctor/index.mjs ../repo  # 体检别的仓库
node tools/agents-doctor/index.mjs --json   # 机器可读,见下
node tools/agents-doctor/index.mjs --help

发现 error 时退出码 1,适合直接进 CI。

检查项

检查 级别 内容
agents-md error/warn/ok 根 AGENTS.md 存在,且通过 agentsmd-lint(有 lint error 本项 error,只有 warn 则 warn)
claude-md ok/info/warn 指向 AGENTS.md 的软链 ok;内容相同的独立副本 info;漂移或缺失 warn
rules info .claude/rules/*.md.cursor/rules/*.mdc.github/instructions/*.instructions.md 哪几家已配置(可选项)
hooks info/warn .claude/settings.jsonhooks 键、.codex/hooks.json.cursor/hooks.json.github/hooks/*.json;settings.json 解析失败 warn
skills info .claude/skills/*/SKILL.md.agents/skills/*/SKILL.md.github/skills/*/SKILL.md 各有几个
secrets error/ok .env / .env.local / credentials.json / cookies.json 存在时必须被 .gitignore 覆盖,否则 error
ci-gate ok/info .github/workflows/*.y*ml 里有 agentsmd-lint 门禁 ok;有 CI 无门禁 info(见 practices/00 Step 5)

末尾输出一行总结:agent-ready: ok X · warn Y · error Z

机器可读输出

--json 让 stdout 只剩一个 JSON 对象(没有人类输出混入,没有 ANSI)。四个 CLI 共用同一个 schema,agent 只需要学一次:

node tools/agents-doctor/index.mjs /tmp/demo-app --json
{
  "tool": "agents-doctor",
  "target": "/tmp/demo-app",
  "summary": {
    "ok": 1,
    "warn": 1,
    "error": 1,
    "info": 4
  },
  "results": [
    {
      "id": "agents-md",
      "level": "error",
      "message": "AGENTS.md 存在,但 agentsmd-lint 报 2 error / 1 warn",
      "advice": "node tools/agentsmd-lint/index.mjs AGENTS.md 看逐条明细"
    },
    {
      "id": "claude-md",
      "level": "warn",
      "message": "CLAUDE.md 与 AGENTS.md 内容不同——两份 memory 已经漂移",
      "advice": "合并进 AGENTS.md 后 ln -sf AGENTS.md CLAUDE.md"
    },
    {
      "id": "rules",
      "level": "info",
      "message": "没有条件规则(可选项)——Codex 无 glob 机制,需要时用嵌套 AGENTS.md"
    },
    {
      "id": "hooks",
      "level": "info",
      "message": "没有 hooks 配置(可选项)"
    },
    {
      "id": "skills",
      "level": "info",
      "message": "没有 skills(可选项)"
    },
    {
      "id": "secrets",
      "level": "ok",
      "message": "根目录没有常见敏感文件"
    },
    {
      "id": "ci-gate",
      "level": "info",
      "message": "有 CI workflow 但没接 agentsmd-lint 门禁",
      "advice": "照 practices/00-agent-ready-walkthrough.md Step 5 加一步 node tools/agentsmd-lint/index.mjs AGENTS.md"
    }
  ]
}
字段 说明
tool 工具名,固定 agents-doctor
target 被体检仓库的绝对路径
summary ok / warn / error / info 四个计数,等于 results 里各 level 的条数
results[].id 上表 7 个检查 id,顺序固定,一次体检各出现一次
results[].level 只有 ok / warn / error / info 四个取值
results[].message 结论,与人类输出同一句话
results[].advice 可选:怎么修。没有可给的建议时省略这个键,不会是 null

跨工具口径:level 四个取值全工具一致;advice 可选,缺失时省略这个键而不是给 null;stage 只有 verify-doctor 有;line 只有 agentsmd-lint 与 agents-init 的自检条目有。

退出码(--json 与默认模式逐字一致):

含义
0 没有 error 级检查
1 有 error 级检查
2 用法错误(给的路径不是目录);此时 stderr 一行用法说明,不输出 JSON

--help 列出全部 flag 与退出码含义,退出码恒为 0。

测试

node --test tools/agents-doctor/test/doctor.test.mjs