关于 age
age 是面向开发者的代码审查技能,可在合并前或 /press 后检查差异或指定路径,并提供有依据的发现。它按多个维度和严重级别组织审查结果,还可将建议修复交给 /cure。
主要功能
- 01审查差异或指定路径
- 02检查多个审查维度
- 03为发现标注严重级别
- 04生成 Markdown 和可选 HTML 报告
- 05将发现交给 /cure 处理
适用场景
- 01合并前检查代码变更
- 02在 /press 后审查路径
- 03生成静态 HTML 审查报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ paulnsorensen/ easy-cheese --skill age安装后在 Claude Code 中输入/age确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
wedge.tomlassets/review-flow.svgreferences/commands.mddeslop-go.mddeslop-python.mddeslop-rust.mddeslop-shell.mddeslop-typescript.mddimensions.mdfan-out.mdhandoff-detail.mdpacket.mdreport-example.mdsub-agent-gate.mdvoice.md详细介绍
/age
在合并前或执行 /press 后,审查差异或指定路径。只要用户需要有证据支撑的观察,而非审批结论,就使用此技能。
阶段入口
运行 python3 skills/age/scripts/age.pyz wheypoint-resolve --ref <slug>。
authoritative 使用记录;其 working_context 是第一批 tilth_read。
not-found 则从冷启动继续;legacy 显示其来源和 slug,然后继续。
遇到 gated、ambiguous 和 error 时停止并显示载荷。
显示提示性发现 stale-commit 和 grounded-path-missing。
将其 record.revision_id 保留为 <base>(§ 基准修订)。
输入
/age [<ref-or-range>] [--scope <path>]... [--slug <slug>] [--effort quick|normal|deep] [--overall] [--full] [--safe] [--open-pr] [--auto] [--hard] [--html]
/age <slug> [--effort quick|normal|deep] [--overall] [--full] [--safe] [--open-pr] [--auto] [--hard] [--html]
每个待审查路径都重复使用 --scope <path>。
每份报告都需要一个 slug。
从 <slug> 表单中获取 slug。
对于指定范围或区间的审查,从 --slug <slug> 获取 slug。
仅当调用方未提供两者时,才用 slugify 推导 slug。
流水线中的调用方始终会传入流水线 slug。
存在十条或更多低严重性发现时,--full 会展开 ## Low 部分。
默认报告会将该部分折叠为一行摘要。
--safe 会重新引入补救措施选择。
--open-pr 会经由 /cure 传递到终端 /plate。
新 PR 遵循 /plate 关于明确选择和审查形式的策略。
进入阶段后,使用 .cheese/press/<slug>.md(如果存在)作为 Press 上下文。
审查当前工作差异。
对于 <ref-or-range>,审查该区间。
用户未提供任何输入时,审查当前工作差异。
如果基准分支不明确,请询问用户,或使用仓库中记录的默认分支。
--auto 是从 /cook --auto 传递而来的自主模式标志。
有关上限规则和完整链路,请参阅 ## Handoff 和 references/handoff-detail.md § 自动模式。
handoff_context.wiki_hits 是来自 /cheese 的可选定向输入。
每条命中项包含 page、line 和 why。
在重新进行依据核验前,先复用每条有效命中项。
在 ## Wiki context 中呈现复用的命中项。
--hard 会经由 /cure 传递到 /plate。
Age 不会触发关卡。
发布前,/plate 会向 /hard-cheese 提供最终核验过的产物状态。
--html 会在 .cheese/age/<slug>.md 旁生成一份静态 HTML 副本。
先写入 Markdown。
然后运行 python3 skills/age/scripts/age.pyz html-report --report .cheese/age/<slug>.md --slug <slug>。
打印返回的路径。
HTML 会在共享的 HTML 外壳中按严重性对发现分组。
输出可离线使用,且不使用 CDN 或 JS。
阅读 ../cheese/references/harness-portability.md,了解辅助工具解析、子 Agent 分派、GitHub 操作和交接转换。
优先使用捆绑的辅助工具或仓库本地辅助工具。
将 ${CLAUDE_SKILL_DIR} 视为宿主可选提供的回退路径。
斜杠命令是宿主环境中的呈现形式,并非控制模型。
以下交接块定义了可移植契约。
审查力度和范围
使用 --effort quick|normal|deep;默认值为 normal。
使用 --overall 对审查目标进行完整的主题分派。
--full 仍用于控制发现项的可见性,而非审查范围。
审查维度
审查正确性、安全性、封装、规范、复杂度、去赘、断言、NIH、效率、遥测、惯例、高度和重新构架。
为每项发现指定 blocker、high、medium 或 low 严重性。
严重性规则和建议格式请参阅 references/dimensions.md。
此工作流不包含 git 历史/先例维度。
流程
-
确定差异、范围,以及相关规范或问题。 阅读
references/fan-out.md,了解上下文检查清单和确定性规划约定。 收集指令来源,构建上下文,并通过其 bundle 路径运行scripts/age.pyz age-route。 使用分配结果、工作量、派发批次和能力限制。 在加锁前整理共享证据和计划;不要启动单独的分类 Agent。 锁定范围涵盖审查包,因为审查包属于审查证据。 然后运行python3 skills/age/scripts/age.pyz review-lock --slug <slug>,锁定生产树。 使用## Inputs中解析出的 slug。 如果生产文件发生变化,第 5 步会拒绝该报告。 -
从差异、改动文件、测试和调用方/导入项中收集证据。 运行
python3 skills/age/scripts/age.pyz artifact-path --phase press --slug <slug>,解析上游报告。 运行python3 skills/age/scripts/age.pyz read-handoff-slug --phase press --slug <slug>,验证其前言。 该命令只返回前言字段。 阅读解析出的文件本身,查找## Review follow-ups小节及每个未解决事项。 将每个未解决事项复制到## Press findings子小节中。 保留该前言中的artifact和baseline值,供第 5 步使用。/cure只读取.cheese/age/<slug>.md。如果不存在 press 报告,但存在 cook 交接记录,则记录
press: skipped(参见## Output)。 在交接时打印警告。 如果也不存在 cook 产物,则省略该标记并继续。 如果存在.cheese/glossary/<slug>.md,则阅读该文件,将命名偏差标记为 deslop 发现项。 -
审查每个维度。 没有发现项的维度应省略。 报告所有缺陷,无论其多么轻微。 不要根据主观重要性筛选发现项。 协调后由验证步骤筛选发现项。 不要报告与差异中记录的
baseline:区块相符的门禁失败。 阅读../cook/references/quality-gates.md,了解基线规则。 只报告新增或发生变化的失败。 -
逐项计算严重性(基础值 + 位置增幅 + 叠加增幅,最高为
blocker)。 按严重性分组发现项(## Blocker → ## High → ## Medium → ## Low)。 在每个严重性分组内按文件排序发现项。 在写入前,遵循references/fan-out.md完成验证和仅深度审查时执行的差距扫描。 -
将报告正文写入
.cheese/age/<slug>-body.md。 只写正文。不要将交接前言写入该文件。 不要自行写入.cheese/age/<slug>.md。由受门禁控制的写入器创建该文件。 先计算建议集合(参见## Handoff)。 如果该集合不为空,将<next>设为cure。 如果该集合为空,将<next>设为done。 将<artifact>设为第 2 步中的上游报告路径。只有在不存在上游报告时才使用""。 将<baseline>设为该上游交接记录中的基线区块。只有上游交接记录中没有基线时才省略--baseline。 运行python3 skills/age/scripts/age.pyz write-handoff-artifact --phase age [--base <base>] --slug <slug> --status ok --next <next> --artifact "<artifact>" --orientation "<one-line orientation>" --durable-flags "<none | one line per flag>" --baseline "<baseline>" --grounded <path[#start-end]> --body-file ".cheese/age/<slug>-body.md"。打印路径。 只有针对该 slug 的新审查包允许恢复;遵循
references/packet.md§ Late evidence。 其他变更都需要重新审查。 -
交接(参见下文的
## Handoff)。
子 Agent 扇出
/age 使用上下文 age 路由器(src/easy_cheese/shared/fanout/age_route.py)规划相互独立的审查主题。
机制说明见 references/fan-out.md、references/packet.md 和 references/sub-agent-gate.md。
通过共享的 code-intelligence-routing.md 契约调用每个源代码后端。
输出
跨领域的风格规范和引用格式请参阅 ../cheese/references/formatting.md。
本节定义问题报告的结构。
formatting.md 定义语气规则和脚注基本格式。
受门控的写入器会写入 .cheese/age/<slug>.md。
它会将最小交接 slug 放在顶部。
slug 包含 status、next、artifact、durable_flags、baseline 和一行概述。
通过第 5 步的命令提供每个值。
将下方正文写入 .cheese/age/<slug>-body.md,不要添加前言。
references/report-example.md § 正文顺序定义了章节顺序、确切的问题格式和完整模板。编写正文前请先阅读。
每个问题的 confidence: 请使用 voice-kernel 量表(参见 references/voice.md § 推理立场)。
对于 diff/代码阅读或命令输出中的直接证据,使用 certain。
对于根据间接信号得出的推断,使用 speculating。
不要将 don't know 评级作为问题条目提交。
请收集缺失的证据或删除该主张。
don't know 仅用于报告级别的 ## Confidence 行。
只有用户传入 --full 时,才将被抑制的低置信度项添加到修复选择表中。
审查完成时,设置 status: ok。
审查无法获取证据时,设置 status: halt: <reason>。
遵循交接契约。
根据 ## Handoff 计算出的推荐集合推导 next。
无论 next 的值是什么,都要在报告中保留每个问题。
默认将 durable_flags: 设为 none,与 cook 的门控一致。
如果计划或宿主限制了覆盖范围,请在 durable_flags 和 ## Confidence 中记录实际限制,而不是仅警告规模。
在正文的 ## Agent resolution 下记录已解析的工作器类型。
为每种拓扑记录调度元数据。使用 report-example.md 中的字段。
写入前,使用 scripts/age.pyz review-plan-check 检查已提供的调度观察结果;未提供的观察结果必须明确标记为未观察。
打印 Age report: .cheese/age/<slug>.md。
设置 press: skipped 时,打印以下警告:
Warning: no .cheese/press/<slug>.md. Re-run /cook or /press <slug>, or continue with /cure.
用户传入 --html 时,打印 html-report 返回的 HTML 路径。
渲染命令见 ## Inputs 下的 --html。
交接
流程: culture → mold → cook (⇄ press) → [age] → cure → plate
计算建议集合。 使用 all-medium, cheap 复合选项。
纳入中等严重度下限(blocker+high+medium)。
同时纳入每个 Low 且 fix-cost-now: contained 的问题。
决定采取行动还是询问。
这是唯一的选择。## Output 根据它推导 next。
包含受控低严重度问题且没有中等严重度问题的审查,也会得到非空集合。
此类审查将 next 设为 cure,并在报告中保留所有低严重度问题。
- 集合为空 — 将
next设为done。打印报告路径。停止。 - 有理由询问 — 如果集合成员的
fix-cost-now: sprawling或fix-cost-later: structural,则询问。 如果两个问题相互冲突,也要询问。 如果用户传入--safe,也要询问。 先阅读references/handoff-detail.md。 按../cheese/references/handoff-gate.md呈现决策关卡。 预先选择复合选项。标记每个高成本行。 - 否则 — 采取行动。宣布选择。按照
references/handoff-detail.md§ Dispatch 调用/cure。不要呈现决策关卡。
--auto 会替换为严重度下限选择及其专属链路。
运行 --auto 前,先阅读 references/handoff-detail.md § Auto mode。
该文件还定义了 /cook 的 fan 路径下的无链路覆盖规则。
规则
审查不是裁决。
说明该看哪里以及原因。
不要编辑生产文件。
第 1 步的审查锁会强制执行此规则。
/cure 会应用每项修复。
如果门禁失败与记录的 baseline: 块相符,不要据此提出问题。
默认采取行动。
自动选择建议集合。
无需决策关卡,直接调用 /cure。
只有确有理由或启用了 --safe 时才先询问。
将空的建议集合视为干净地停止,而不是提问。
不要捏造证据。
引用文件、差异、命令或不可用源的说明。
如果差异没有问题,就明确认可。
将空维度视为有效结果,而不是需要填补的缺口。
在报告和每项问题中使用定性置信度(certain | speculating | don't know)。
绝不使用数字评分。
为每项问题提供位置和建议。
按照 references/report-example.md 编写 recommendation: 和可选的 invariants:。
不要添加 JSON 伴随文件或锚定标签的修复载荷。
/cure 会直接读取 Markdown。
遵循 references/voice.md(输出规范、推理立场、置信度词汇)。
参考资料
- 阅读生成的命令清单:
references/commands.md。 - 对问题评级前,阅读
references/dimensions.md。 - 每次审查前,阅读
references/fan-out.md。 - 组装扇出上下文包前,阅读
references/packet.md。 - 派发子 Agent 前,阅读
references/sub-agent-gate.md。 - 进行选择决策或派发
/cure前,阅读references/handoff-detail.md。 - 撰写报告正文前,阅读
references/report-example.md§ Body order。 - 收集证据前,阅读
references/packet.md§ Evidence tools and fallbacks。 - 运行
--auto前,阅读references/handoff-detail.md§ Auto mode。 - 撰写报告前,阅读
references/voice.md。 - 对
deslop评级前,阅读适用的 Rust、TypeScript、Python、Shell 或 Go 目录。
Agent 解析
通过 ../cheese/references/agent-resolution.md 解析每位主题工作者和全新上下文审查者。
| 工作 | 首选类型 | 权限/隔离 | 最低能力 | 工作量 | 回退方案 |
|---|---|---|---|---|---|
| 审查差异或指定主题 | reviewer | 只读、全新上下文 | 强大 | 高 | 兼容的审查者,然后是通用类型 |
路由器会将每项任务的 effort 设为 low、medium 或 high。
将该任务值传递给工作者,而不是使用计划中的 quick、normal 或 deep 审查模式。
报告正文在 ## Agent resolution 下包含共享的 agent_resolution 块。