Expert Reviewer
审查外部提交的 Expert Marketplace 专家包是否符合上架规范,按「脚本确定性形状检查 + LLM 实时读规范判断」分层执行,输出对外可交付的 Markdown 审查报告。
执行原则
⚠️ 严格规则:所有「形状层」的确定性操作(目录骨架、JSON 解析、字段相等、文件存在、版本号格式、头像尺寸等)必须调用 Python 脚本,禁止 LLM 手动逐项检查。
⚠️ 严格规则:所有「规范层」的语义判断(主理人 prompt 是否含 TeamCreate 铁律、成员是否要求 SendMessage 回传、金融文案是否合规等)必须由 LLM 实时读取 CODEBUDDY.md 与 WorkBuddy专家开发规范.md 后再下结论。禁止凭印象、关键词或文件名臆断。
⚠️ 严格规则:每条 BLOCKER 必须有直接验证依据(读过的文件原文、命令输出、规范文档章节出处)。未验证不得断言——这是质量底线(参见 memory 82844461)。
⚠️ 严禁修改专家包业务内容:除 frontmatter 字段顺序归一与编码归一外,审查阶段不修改专家包的任何业务文件(agents/*.md、SKILL.md body、plugin.json 业务字段、头像等)。所有修改只在审查工作目录内进行,不触碰原始输入目录以外的任何文件。
⚠️ 报告范围:报告只输出「开发者需修复(BLOCKER)」和「建议优化(SUGGESTION)」。
审查流程(严格按顺序)
第零步:zip 解压(仅当输入为 .zip 文件时)
当用户提供的审查对象是 .zip 文件(如微信/邮件收到的压缩包)时,必须按以下标准做法解压,防止旧版文件残留导致审查结果失真:
# 1. 确定审查工作目录(放在 zip 同级的 .review-work/ 下)
$zipPath = "<zip文件路径>"
$pluginName = "<plugin-name>"
$workRoot = Join-Path (Split-Path -Parent $zipPath) ".review-work"
$cacheDir = Join-Path $workRoot ("$pluginName-review")
# 2. 如果同名目录已存在,先整体删除(PowerShell Expand-Archive -Force 只覆盖同名文件,不清理 zip 中不存在的旧文件)
if (Test-Path $cacheDir) {
Remove-Item -Recurse -Force $cacheDir
}
# 3. 解压到干净的目录
Expand-Archive -Path $zipPath -DestinationPath $cacheDir -Force
关键规则:
- 先删后解压:
Expand-Archive -Force的行为是「覆盖同名文件」,不会删除目标目录中 zip 里不存在的文件。如果旧版残留文件混入,会导致审查到已删除的文件或遗漏新增文件 - 审查工作目录命名:统一使用
<zip同级目录>/.review-work/<plugin-name>-review/(plugin-name 从 zip 文件名推断,去掉版本号后缀) - 解压后验证:解压完成后列出目录树,确认结构完整且无
__MACOSX/、.DS_Store等打包垃圾干扰判断(这些可在报告中列为 SUGGESTION) - 非 zip 输入跳过:如果用户直接提供的是专家包目录路径或已解压的目录,无需此步
第一步:确定审查对象
输入:
- 专家包路径(审查工作目录或已解压的专家包目录)
- 可选:用户指定的报告输出路径
前置动作 — 读取专家包基本信息:
LLM 必须先读取专家包 plugin.json,并向用户展示以下信息:
📋 专家包基本信息:
- 包名:<plugin name>
- 作者:<author.name>(<author.email>)
- 类型:<expertType>
第二步:读取规范文档(关键步骤,不可跳过)
LLM 必须用 read_file 读取本 skill 包内自带的两份规范副本:
<skill_base_dir>/references/standards/CODEBUDDY.md
<skill_base_dir>/references/standards/WorkBuddy专家开发规范.md
重点章节:
- CODEBUDDY.md §一 ~ §十一:基础规范(专家类型/目录/plugin.json/Agent MD/Skill/头像/分类)
- CODEBUDDY.md §十三:一致性约束 7 条
- CODEBUDDY.md §十六:外部提交审查原则(尊重作者命名与角色设定)
- CODEBUDDY.md §十七:交付前 Checklist(最权威的检查项总目录)
- CODEBUDDY.md §十八:金融类专家团合规要求
- WorkBuddy专家开发规范.md §5.2.1:团队协作铁律
第三步:调用 normalize.py — 前置规范化
python <skill_base_dir>/scripts/normalize.py <expert_dir> --output-file <output_path>
脚本自动完成:
- BOM 移除、UTF-8 编码归一、CRLF→LF 换行统一
- plugin.json 字段顺序按 §三 规范重排
- Agent MD frontmatter 字段顺序归一
LLM 职责:读取 output JSON 的 changes 列表,确认所有自动修改符合预期。
第四步:调用 review.py — 形状层确定性检查 + ai_actions 输出
python <skill_base_dir>/scripts/review.py <expert_dir> \
--output-file <json_path>
脚本输出结构(顶层字段):
| 字段 | 说明 |
|---|---|
expert_dir |
审查目录 |
plugin_name |
从 plugin.json 提取 |
expert_type |
agent / team / plugin |
| structure_findings[] | 脚本确定性检测结果(目录骨架、JSON 解析、字段相等、文件存在、版本格式、头像尺寸) |
| ai_actions[] | 让 LLM 读规范判断的项(每项含 reference_doc 指向规范出处) |
| finance_flag | 是否触发金融类合规检查 |
| report_skeleton | Markdown 报告骨架 |
LLM 职责:
- 读取 output JSON
- 把
structure_findings中severity=blocker的直接列入报告 BLOCKER 区 - 逐项执行 ai_actions(详见下一步)
- 填充
report_skeleton生成最终 Markdown 报告
第五步:执行 ai_actions(核心规范判断)
每个 ai_action 的处理流程:
1. 读取 action.reference_doc 指向的规范章节(已在第二步读完,对照即可)
2. 读取 action.target_file 的内容(如 agents/team-lead.md)
3. 按 action.instruction 的指令逐条对照规范判断
4. 输出结论:✅ 通过 / ❌ 不通过(写入 BLOCKER)/ ⚠️ 部分缺失(写入 SUGGESTION)
5. 把规范出处直接标在报告条目里:「规范依据:CODEBUDDY.md §4.4 / WorkBuddy专家开发规范.md §5.2.1」
ai_actions 类型清单(详见 references/ai-action-protocol.md):
| action_type | 检查内容 | 处理级别 |
|---|---|---|
team-rule-check |
主理人 prompt 是否含 TeamCreate 铁律、5 条红线、协作规则 | BLOCKER |
member-rule-check |
成员 prompt 是否含擅长领域、分析框架、输出模板;SendMessage 回传要求作为建议项 | BLOCKER / SUGGESTION |
prompt-completeness |
Agent MD frontmatter 是否含 displayName/profession 必填 | SUGGESTION |
display-text-quality |
displayDescription 字数、defaultInitPrompt 与 quickPrompts[0] 一致、描述不含与平台实际不符的技术承诺 | SUGGESTION |
platform-claim-check |
description/displayDescription/agent prompt 不得包含与平台运行方式不符的技术承诺 | BLOCKER |
finance-compliance |
§十八:决策类措辞、免责声明、数据来源披露 | BLOCKER / SUGGESTION |
security-hygiene-review |
凭据硬编码、危险命令、内网域名、个人路径、CDN @latest 等安全与通用性复核 | BLOCKER / SUGGESTION |
dependency-guide-check |
bin/scripts/环境变量/外部依赖的安装与配置引导完整性 | BLOCKER / SUGGESTION |
deep-quality-review |
专家包 11 维度语义质量评审 | SUGGESTION |
第六步:安全/依赖引导/深度质量评审(参考 skill-reviewer v3.7)
review.py 会额外输出三类 ai_action,LLM 必须执行后写入报告:
| action_type | 检查内容 | 输出级别 |
|---|---|---|
security-hygiene-review |
复核凭据硬编码、危险 shell、内网域名、个人路径、平台路径、CDN @latest 等安全与通用性问题 | 真实凭据硬编码 BLOCKER;其余按影响列 SUGGESTION |
dependency-guide-check |
当存在 bin/、scripts/、环境变量或外部工具依赖时,检查 README/SKILL/Agent 是否提供安装、版本、配置、验证说明 |
关键依赖完全无引导列 BLOCKER;部分缺失列 SUGGESTION |
deep-quality-review |
阅读核心 agents/README/skills,按 11 维度做语义质量评审 | 永远只列 SUGGESTION,不阻断 |
深度质量评审 11 维度:AI 可执行性、路由/触发清晰度、上下文效率、容错降级、角色边界、团队编排、用户体验、受众适配、可移植性、领域准确性、可维护性。
批量审查 ≥2 个专家包时,
security-hygiene-review、dependency-guide-check、deep-quality-review可使用code-explorersubagent 并行阅读,主 agent 负责合并结论和写报告。单个专家包审查时由主 agent 执行。
第七步:金融类专项检查(启发式触发)
review.py 自动识别(finance_flag=true 时):
categoryId为08-FinanceInvestment- 或 plugin 名含关键词
stock|trading|finance|fund|invest|equity|portfolio
触发后追加 finance-compliance 类型 ai_action,LLM 读 CODEBUDDY.md §十八 逐项核对:
- defaultInitPrompt 不含「能不能买/该买吗/推荐」等决策类措辞
- displayDescription、description 不暗示投资建议
- 输出末尾是否有 AI 生成 + 公开信息 + 不构成投资建议 + 不构成个股推荐 四要素声明
- 数据来源是否标注
第八步:生成审查报告
报告路径:<expert_dir>/审查报告-<plugin-name>.md 或用户指定路径。
报告结构:
# 专家包审查报告 - <plugin-name>
## 一、总体结论
**整体结论:<可上架 | 需修复后方可上架>**
- 阻断问题(BLOCKER):N 个
- 建议改进项(SUGGESTION):M 个
## 二、阻断问题(BLOCKER)— 必修
### B01 ❌ <一句话标题>
- **现状**:<引用文件原文>
- **规范依据**:CODEBUDDY.md §x.y / WorkBuddy专家开发规范.md §a.b
- **修复方案**:<具体可执行的修复步骤>
## 三、建议改进项(SUGGESTION)
(同上格式)
## 四、深度质量评审
| 维度 | 评级 | 判断 |
|------|------|------|
| AI 可执行性 | 优/良/待改进 | <一句话判断> |
| 路由/触发清晰度 | 优/良/待改进 | <一句话判断> |
| 上下文效率 | 优/良/待改进 | <一句话判断> |
| 容错降级 | 优/良/待改进 | <一句话判断> |
| 角色边界 | 优/良/待改进 | <一句话判断> |
| 团队编排 | 优/良/待改进 | <一句话判断> |
| 用户体验 | 优/良/待改进 | <一句话判断> |
| 受众适配 | 优/良/待改进 | <一句话判断> |
| 可移植性 | 优/良/待改进 | <一句话判断> |
| 领域准确性 | 优/良/待改进 | <一句话判断> |
| 可维护性 | 优/良/待改进 | <一句话判断> |
## 五、修复优先级表
| 优先级 | 编号 | 问题 | 工作量 |
## 六、亮点
(可选,体现专家包的优势)
第九步:交互式修复循环
- 对可机械修复的项(如 frontmatter 字段顺序、displayDescription 字数):AI 自决直接修改缓存目录,重跑 review.py 验证
- 对涉及业务内容的项(如主理人补铁律、成员补 SendMessage):在报告中给出具体修复建议,等用户决定是否由 AI 代修或作者自行修复
- 修复完成后重新运行 review.py,循环直至无 BLOCKER
ai_action 执行协议
核心原则:默认 AI 自决,仅在「会改业务内容 + 不可逆 + 选项不唯一」时弹窗。
一律 AI 自决(不弹窗)
- 形状层修复:字段顺序、编码归一、frontmatter 占位补全
- 翻译/字数精简:displayDescription 超字数、description 翻译
- 明显的规范违反:成员 SendMessage 缺失(修复方式唯一)
必须弹窗(关键岔路)
- 修改主理人/成员业务 prompt 内容:模板 1,给具体提案让用户确认
- 金融合规违反需改外露文案:模板 1
- 修复方式跨多个合理选项:模板 2,多选
弹窗模板(统一格式)
{
"title": "<plugin_name> - <决策点一句话>",
"questions": [{
"id": "<field>_<plugin_name>",
"question": "AI 建议: <提案>\n规范依据: <章节>\n请选择:",
"options": ["采纳并修复", "修改后采纳(请告诉我改什么)", "我手动处理", "跳过此项(报告标注)"],
"multiSelect": false
}]
}
输出位置约定
- normalize.py / review.py 的 JSON 输出:
<expert_dir>/.review-cache/<plugin-name>-<step>.json - 最终审查报告:
<expert_dir>/审查报告-<plugin-name>.md - zip 解压审查工作目录:
<zip同级目录>/.review-work/<plugin-name>-review/(重新审查新版时必须先删除旧目录再解压,见第零步)
参考文档
| 文件 | 说明 |
|---|---|
references/review-checklist.md |
检查项速查表(按 CODEBUDDY.md §十七 组织)+ Markdown 报告模板 |
references/ai-action-protocol.md |
ai_actions 类型定义 + 弹窗触发条件 |
自动化脚本
| 脚本 | 路径 | 说明 |
|---|---|---|
| review.py | scripts/review.py |
形状层确定性检查 + ai_actions 输出 + 金融类启发式识别 |
| normalize.py | scripts/normalize.py |
编码/换行/字段顺序归一 |
| review_utils.py | scripts/review_utils.py |
通用工具函数 |
脚本路径约定:
scripts/相对于本 skill 包根目录。调用时使用python <skill_base_dir>/scripts/xxx.py。
脚本 vs LLM 职责分工
| 操作 | 脚本(确定性) | LLM(规范/语义) |
|---|---|---|
| 编码/BOM/CRLF 归一 | ✅ normalize.py | — |
| 字段顺序排序 | ✅ normalize.py | — |
| 目录骨架检查 | ✅ review.py | — |
| JSON 可解析性 | ✅ review.py | — |
| 字段相等关系(agentName=name=文件名) | ✅ review.py | — |
| 头像尺寸/大小(Pillow) | ✅ review.py | — |
| 版本号格式 | ✅ review.py | — |
| 金融类启发式识别 | ✅ review.py | — | | 主理人 TeamCreate 铁律完整性 | — | ✅ team-rule-check | | 成员 SendMessage 回传要求 | — | ✅ member-rule-check | | 金融合规文案 | — | ✅ finance-compliance | | 安全启发式扫描 | ✅ 凭据/内网域名/路径/CDN/危险命令预提取 | ✅ security-hygiene-review 语义复核 | | 依赖引导上下文 | ✅ bin/scripts/环境变量/安装命令预提取 | ✅ dependency-guide-check 完整性判断 | | 深度质量评审上下文 | ✅ 文件统计/Markdown 结构/Agent 概览预提取 | ✅ deep-quality-review 11 维度评审 | | 规范出处标注 | — | ✅ 报告生成时标注 §n.m | | 报告生成与渲染 | ✅ 输出骨架 | ✅ 填充内容 |