🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

openclaw-code-review-skill

by @cdapic

对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查

Versionv1.0.1
Downloads445
TERMINAL
clawhub install openclaw-code-review-skill

📖 About This Skill


name: Code Review description: 对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查

Code Review Skill

对 Pull Request 进行结构化代码审查,模拟 Claude Code /code-review 插件的工作流。多 Agent 并行从不同角度审查,置信度 ≥80 的问题才输出,过滤误报。

适用场景

  • PR 合并前需要审查
  • 本地 Diff 需要评审
  • 审查自己写完的代码
  • Code Review 流程规范建立

  • 工作流程(7步)

    第1步:确认审查对象

    优先级顺序: 1. 如果用户提供了 PR 链接 → 直接使用 2. 如果用户在代码仓库中 → 用 gh pr list --author @me --state open 查找自己开的 PR 3. 如果用户提供了 Diff 内容 → 直接审查 Diff 4. 其他情况 → 询问用户提供

    跳过检查(发现以下情况直接终止):

  • PR 已关闭 → 跳过
  • PR 是 Draft → 跳过
  • PR 是自动化创建的trivial变更 → 跳过
  • Claude 已经审查过此 PR → 跳过(检查 gh pr view --comments
  • > 注意:Claude 生成的 PR 仍需审查


    第2步:收集上下文

    并行执行:

    A. 获取 PR 详情

    gh pr view  --json title,body,files,additions,deletions,changedFiles,author,createdAt
    

    B. 查找仓库中的 CLAUDE.md

    # 根目录
    gh api repos/:owner/:repo/contents/CLAUDE.md --jq '.content' 2>/dev/null

    子目录(与变更文件同目录的)

    用变更文件路径推断需要的 CLAUDE.md

    C. 获取变更文件列表

    gh pr diff 
    


    第3步:总结 PR 变更

    用一句话总结:

  • 这个 PR 改了什么(功能/修复/重构)
  • 涉及多少文件、+多少行/-多少行
  • 作者的目的是什么(从 PR 描述推断)
  • 格式:

    📋 PR 概览
    
  • 标题:xxx
  • 作者:xxx
  • 变更范围:x 个文件,+x 行/-x 行
  • 摘要:xxx

  • 第4步:启动并行审查(3个 Agent)

    使用 sessions_spawn 工具并行启动 3 个独立审查 Agent:

    #### Agent 1:CLAUDE.md 合规检查(Sonnet) Prompt:

    你是代码审查专家,负责检查此 PR 是否违反了项目 CLAUDE.md 中的规范。

    背景:

  • PR 标题:</li> <li style="color:#94a3b8;margin:3px 0">PR 描述:<description></li> <li style="color:#94a3b8;margin:3px 0">项目规范在 CLAUDE.md 中列出</li></p><p style="margin:8px 0">任务: 1. 阅读 PR 变更的文件内容和 CLAUDE.md 规范 2. 检查变更是否违反了 CLAUDE.md 中的任何明确规则 3. 只标记<strong style="color:#e5e7eb">明确违反</strong>的规则(你能引用 CLAUDE.md 中的具体文字)</p><p style="margin:8px 0">置信度评分(0-100): <li style="color:#94a3b8;margin:3px 0">0:误报,规范未要求</li> <li style="color:#94a3b8;margin:3px 0">25:可能是问题,但不确定</li> <li style="color:#94a3b8;margin:3px 0">50:确实违反,但影响较小</li> <li style="color:#94a3b8;margin:3px 0">75:明确违反,影响较大</li> <li style="color:#94a3b8;margin:3px 0">100:完全确定,直接影响功能</li></p><p style="margin:8px 0">只报告置信度 ≥75 的问题。</p><p style="margin:8px 0">输出格式: 问题列表,每条包含: <li style="color:#94a3b8;margin:3px 0">置信度</li> <li style="color:#94a3b8;margin:3px 0">违反的规则(引用原文)</li> <li style="color:#94a3b8;margin:3px 0">违反的文件和行号</li> <li style="color:#94a3b8;margin:3px 0">简要说明</li> </code></pre></p><p style="margin:8px 0">#### Agent 2:Bug 和逻辑错误检查(Opus) <strong style="color:#e5e7eb">Prompt:</strong> <pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">你是资深代码审查专家,负责在此 PR 变更中发现明显的 Bug 和逻辑错误。</p><p style="margin:8px 0">背景: <li style="color:#94a3b8;margin:3px 0">PR 标题:<title></li> <li style="color:#94a3b8;margin:3px 0">PR 描述:<description></li></p><p style="margin:8px 0">任务: 只检查 Diff 本身,不要引入 Diff 之外的上下文。</p><p style="margin:8px 0"><strong style="color:#e5e7eb">标记标准(高信号问题):</strong> <li style="color:#94a3b8;margin:3px 0">会导致编译失败或运行时 panic 的错误(类型错误、缺少 import、引用错误)</li> <li style="color:#94a3b8;margin:3px 0">无论输入如何都会产生错误结果的逻辑错误</li> <li style="color:#94a3b8;margin:3px 0">安全隐患(注入、泄露、硬编码凭证)</li></p><p style="margin:8px 0"><strong style="color:#e5e7eb">不标记:</strong> <li style="color:#94a3b8;margin:3px 0">代码风格问题</li> <li style="color:#94a3b8;margin:3px 0">依赖特定输入才能触发的问题</li> <li style="color:#94a3b8;margin:3px 0">主观改进建议</li> <li style="color:#94a3b8;margin:3px 0">Linter 会捕获的问题</li> <li style="color:#94a3b8;margin:3px 0">PR 之前就存在的问题</li></p><p style="margin:8px 0">置信度评分(0-100): 只报告置信度 ≥80 的问题。</p><p style="margin:8px 0">输出格式: 问题列表,每条包含: <li style="color:#94a3b8;margin:3px 0">置信度</li> <li style="color:#94a3b8;margin:3px 0">问题类型(bug/security/logic)</li> <li style="color:#94a3b8;margin:3px 0">文件和行号</li> <li style="color:#94a3b8;margin:3px 0">简要说明</li> <li style="color:#94a3b8;margin:3px 0">预期行为 vs 实际行为</li> </code></pre></p><p style="margin:8px 0">#### Agent 3:Git 历史上下文分析(Sonnet) <strong style="color:#e5e7eb">Prompt:</strong> <pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">你是代码审查专家,负责通过 Git 历史为此 PR 提供上下文。</p><p style="margin:8px 0">背景: <li style="color:#94a3b8;margin:3px 0">PR 标题:<title></li> <li style="color:#94a3b8;margin:3px 0">PR 描述:<description></li> <li style="color:#94a3b8;margin:3px 0">变更的文件:<files></li></p><p style="margin:8px 0">任务: 1. 对变更的关键文件运行 <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">git blame</code> 和 <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">git log</code> 2. 检查: - 是否有文件最近被大规模重构过,这次 PR 是否与之冲突 - 变更是否绕过了已有的测试或保护措施 - 是否有相关的历史 issue 或 PR 上下文 3. 提供有价值的上下文,帮助理解此次变更的风险</p><p style="margin:8px 0">只报告高置信度(≥75)的风险点。</p><p style="margin:8px 0">输出格式: 风险点列表,每条包含: <li style="color:#94a3b8;margin:3px 0">置信度</li> <li style="color:#94a3b8;margin:3px 0">历史上下文</li> <li style="color:#94a3b8;margin:3px 0">潜在风险</li> <li style="color:#94a3b8;margin:3px 0">相关文件</li> </code></pre></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">第5步:置信度验证</h4></p><p style="margin:8px 0">对 Agent 2(Bug检查)发现的每个问题,启动一个子 Agent 验证: <li style="color:#94a3b8;margin:3px 0">重新阅读相关代码</li> <li style="color:#94a3b8;margin:3px 0">确认问题确实存在</li> <li style="color:#94a3b8;margin:3px 0">排除误报</li></p><p style="margin:8px 0"><strong style="color:#e5e7eb">过滤掉置信度 <80 的问题。</strong></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">第6步:输出审查结果</h4></p><p style="margin:8px 0"><strong style="color:#e5e7eb">Chat 输出格式:</strong></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">## 🔍 Code Review</p><p style="margin:8px 0"><strong style="color:#e5e7eb">PR</strong>:<title> <strong style="color:#e5e7eb">作者</strong>:<author> <strong style="color:#e5e7eb">变更</strong>:<x> 个文件,+<x> 行 / -<x> 行</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">发现的问题(按严重程度排序)</h4></p><p style="margin:8px 0">#### 🔴 高风险(需修复) 1. <strong style="color:#e5e7eb">[Bug]</strong> <问题描述> - 文件:<code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">src/foo.ts</code> - 位置:第 23-27 行 - 原因:<简要说明> - 置信度:92</p><p style="margin:8px 0">#### 🟡 中风险(建议处理) ...</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">✅ 通过检查</h4> <li style="color:#94a3b8;margin:3px 0">CLAUDE.md 合规性:通过</li> <li style="color:#94a3b8;margin:3px 0">安全性:未见明显漏洞</li> <li style="color:#94a3b8;margin:3px 0">测试覆盖:变更区域有测试</li></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">📝 总体评价</h4> <一句话总结></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"> 审查完成。如需将此审查发布为 GitHub PR 评论,请说「发布评论」。 </code></pre></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">第7步:(可选)发布 GitHub PR 评论</h4></p><p style="margin:8px 0">如果用户说「发布评论」:</p><p style="margin:8px 0"><strong style="color:#e5e7eb">使用 <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">gh pr comment</code>:</strong> <pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">gh pr comment <PR> --body "## 🔍 Code Review</p><p style="margin:8px 0">发现 <N> 个问题..."</p><p style="margin:8px 0"><h2 style="color:#f3f4f6;margin:20px 0 10px;font-size:1.15em">如需逐行评论用:</h2> gh pr comment <PR> --body "<strong style="color:#e5e7eb">文件:src/foo.ts#L23-27</strong> <Brief issue description>" </code></pre></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">误报过滤器(内置,不报告以下情况)</h3></p><p style="margin:8px 0"><li style="color:#94a3b8;margin:3px 0">PR 之前就存在的问题</li> <li style="color:#94a3b8;margin:3px 0">看起来是 Bug 但实际是正确的代码</li> <li style="color:#94a3b8;margin:3px 0">吹毛求疵的 nitpick</li> <li style="color:#94a3b8;margin:3px 0">Linter 会自动捕获的问题</li> <li style="color:#94a3b8;margin:3px 0">笼统的代码质量问题(除非 CLAUDE.md 明确要求)</li> <li style="color:#94a3b8;margin:3px 0">通过 lint ignore 注释显式忽略的问题</li></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">命令</h3></p><p style="margin:8px 0">| 输入 | 行为 | |------|------| | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">/code-review <PR-URL></code> | 审查指定 PR | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">/code-review --comment</code> | 审查 + 发布 GitHub 评论 | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">/code-review</code> | 在当前仓库查找自己最新的 Open PR | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">帮我 review 这个 diff</code> | 审查提供的 Diff 内容 |</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">注意事项</h3></p><p style="margin:8px 0"><li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">先问清楚再动手</strong>:如果 PR 信息不足(缺少描述、变更范围不明确),先问用户</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">只报告高置信度问题</strong>:宁可漏报,不要误报</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">引用具体规则</strong>:CLAUDE.md 问题必须引用原文</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">GitHub CLI 优先</strong>:用 <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">gh</code> 而非 Web Fetch</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">链接格式</strong>:GitHub 链接必须用完整 SHA:<code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">https://github.com/owner/repo/blob/<full-sha>/path#Ln</code></li> </p></div></section></div><div class="two-col-side"></div></div></div><script> document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn => { btn.addEventListener('click', () => { const cmd = btn.getAttribute('data-cmd'); if (!cmd) return; navigator.clipboard.writeText(cmd).then(() => { const orig = btn.textContent; btn.textContent = 'Copied!'; setTimeout(() => btn.textContent = orig, 1500); }).catch(() => {}); }); }); </script><!--$--><!--/$--></main><footer style="background:var(--bg-primary);border-top:1px solid var(--border-secondary);margin-top:60px"><div style="border-top:1px solid var(--border-light);max-width:1200px;margin:0 auto;padding:24px 20px"><div style="display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-bottom:24px"><div><div style="font-weight:700;color:var(--text-muted);margin-bottom:8px">BytesAgain</div><div style="color:var(--text-muted3);font-size:.82em;max-width:200px">Discover the best AI agent skills for your workflow.</div></div><div><div style="color:var(--text-muted);font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Explore</div><div style="margin-bottom:6px"><a href="/skills" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Skills</a></div><div style="margin-bottom:6px"><a href="/articles" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Articles</a></div><div style="margin-bottom:6px"><a href="/use-case" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Cases</a></div></div><div><div style="color:var(--text-muted);font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Company</div><div style="margin-bottom:6px"><a href="/about" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">About</a></div><div style="margin-bottom:6px"><a href="/contact" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Contact</a></div><div style="margin-bottom:6px"><a href="/privacy-policy" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Privacy Policy</a></div><div style="margin-bottom:6px"><a href="/terms" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Terms</a></div><div style="margin-bottom:6px"><a href="/feedback" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Feedback</a></div></div></div><div style="border-top:1px solid var(--border-light);padding-top:16px"><div style="color:var(--text-muted4);font-size:.8em;margin-bottom:8px">© <!-- -->2026<!-- --> BytesAgain. All rights reserved.</div><div style="color:var(--text-muted5);font-size:.75em;line-height:1.6;max-width:720px">BytesAgain is an independent skill directory. We index and link to third-party content (ClawHub, GitHub, LobeHub, Dify, etc.) for informational purposes only. All trademarks, skill names, and content are the property of their respective owners. BytesAgain does not claim ownership of any indexed content.</div></div></div></footer><button style="position:fixed;bottom:28px;right:28px;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,#667eea,#00d4ff);color:#fff;font-size:1.3em;box-shadow:0 4px 20px #667eea66;display:flex;align-items:center;justify-content:center;transition:transform .2s">💬</button><script src="/_next/static/chunks/0ze4gu236oq96.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[62894,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"LangProvider\"]\n3:I[89220,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"ThemeProvider\"]\n4:I[16988,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\ne:I[68027,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\",1]\n:HL[\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"style\"]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:Td5e,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"description\":\"Search 60,000+ verified AI agent skills via MCP API or REST. Supports 7 languages. Free, no auth required.\",\"inLanguage\":[\"en\",\"zh\",\"es\",\"fr\",\"de\",\"ja\",\"ko\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://bytesagain.com/skills?q={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://bytesagain.com/og-image.png\"},\"description\":\"AI agent skill directory. Search 60,000+ skills, 1,000+ use cases, and community requests.\",\"foundingDate\":\"2026\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Global\"},\"sameAs\":[\"https://x.com/bytesagain\",\"https://github.com/bytesagain/ai-skills\",\"https://clawhub.ai/profile/bytesagain\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"hello@bytesagain.com\",\"contactType\":\"customer support\"},\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":1}},{\"@context\":\"https://schema.org\",\"@type\":\"WebApplication\",\"name\":\"BytesAgain AI Skills Search\",\"url\":\"https://bytesagain.com\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"Web\",\"description\":\"Search engine and MCP API for 60,000+ AI agent skills. Semantic search, role recommendations, and use case packs.\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"featureList\":[\"Search 60,000+ AI agent skills\",\"Role-based recommendations for developers, creators, and traders\",\"1,000+ curated use case packs\",\"Free MCP API and REST API\",\"Multi-language search (EN, ZH, ES, FR, DE, JA, KO)\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":\"https://bytesagain.com/skills?q={search_term_string}\",\"query-input\":\"required name=search_term_string\"},\"dateModified\":\"2026-07-18\"},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BytesAgain is a curated directory of 60,000+ AI agent skills from ClawHub, GitHub, LobeHub, and Dify. Search skills by keyword in 7 languages, browse by role (developer, creator, trader, marketer) or by use case.\"}},{\"@type\":\"Question\",\"name\":\"How do I find AI skills on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use the search bar on BytesAgain.com to search by keyword in 7 languages. You can also browse by role (developer, creator, trader, marketer) or by use case. Each skill shows install instructions for Claude, Cursor, OpenClaw, Continue, and more.\"}},{\"@type\":\"Question\",\"name\":\"Is BytesAgain free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, BytesAgain is completely free. No registration required for searching skills. The MCP API is also free with rate limits.\"}},{\"@type\":\"Question\",\"name\":\"Does BytesAgain have an API for AI agents?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! BytesAgain provides a free MCP SSE endpoint at /api/mcp/sse for AI agents, plus a REST API at /api/mcp?action=search\u0026q=\u003cquery\u003e. No authentication needed.\"}},{\"@type\":\"Question\",\"name\":\"Can I request a new AI skill on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Visit the Requests page on BytesAgain.com to submit a skill request. Your request will be visible to the community and notified to the site admin.\"}}]}]"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"skill\",\"openclaw-code-review-skill\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skill\",{\"children\":[[\"slug\",\"openclaw-code-review-skill\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"llms\",\"href\":\"/llms.txt\"}],[\"$\",\"link\",null,{\"rel\":\"llms-full\",\"href\":\"/llms-full.txt\"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-3C1MM9FWYF\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'G-3C1MM9FWYF');\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_9e050971-module__05dp7a__className\",\"style\":{\"margin\":0},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":\"100%\",\"background\":\"var(--bg-subscribe)\",\"borderBottom\":\"1px solid var(--border-primary)\",\"padding\":\"8px 20px\",\"textAlign\":\"center\",\"fontSize\":\".82em\",\"color\":\"#818cf8\"},\"children\":[\"🎁 \",[\"$\",\"strong\",null,{\"style\":{\"color\":\"var(--text-primary)\"},\"children\":\"Get the FREE AI Skills Starter Guide\"}],\" — \",[\"$\",\"a\",null,{\"href\":\"/register\",\"style\":{\"color\":\"#00d4ff\",\"textDecoration\":\"underline\"},\"children\":\"Subscribe →\"}]]}],[\"$\",\"$L4\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$5\"}}],\"$L6\",\"$L7\",\"$L8\"]}]}]}]]}]]}],{\"children\":[\"$L9\",{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,\"$@c\"]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[\"$Lf\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:I[39756,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n11:I[37457,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n12:I[22016,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0ka051yepewro.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"\"]\n13:I[90940,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n14:I[16397,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n16:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"OutletBoundary\"]\n17:\"$Sreact.suspense\"\n1a:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"ViewportBoundary\"]\n1c:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"main\",null,{\"children\":[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"main\",null,{\"style\":{\"minHeight\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"background\":\"#050611\",\"color\":\"#e5e7eb\"},\"children\":[[\"$\",\"style\",null,{\"children\":\"\\n .nf-box { text-align: center; padding: 60px 32px; }\\n .nf-code { font-size: 6rem; font-weight: 900; color: #22d3ee; line-height: 1; margin: 0; }\\n .nf-title { font-size: 1.8rem; font-weight: 800; margin: 12px 0 8px; }\\n .nf-desc { color: var(--text-muted2); font-size: 1rem; margin-bottom: 32px; max-width: 440px; }\\n .nf-link { display: inline-block; padding: 12px 28px; background: linear-gradient(135deg,#34d399,#22d3ee); color: #000; font-weight: 900; border-radius: 12px; text-decoration: none; }\\n \"}],[\"$\",\"div\",null,{\"className\":\"nf-box\",\"children\":[[\"$\",\"p\",null,{\"className\":\"nf-code\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"nf-title\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"nf-desc\",\"children\":\"The skill or page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"$L12\",null,{\"className\":\"nf-link\",\"href\":\"/\",\"children\":\"Back to BytesAgain\"}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"$L13\",null,{}]\n8:[\"$\",\"$L14\",null,{}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$L15\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@18\"}]}]]}]\n19:[]\nc:\"$W19\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L1a\",null,{\"children\":\"$L1b\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1c\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1d\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\nf:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"1b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1e:I[27201,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"IconMark\"]\n18:null\n"])</script><script>self.__next_f.push([1,"1d:[[\"$\",\"title\",\"0\",{\"children\":\"openclaw-code-review-skill — AI Agent Skill | BytesAgain | BytesAgain\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"4\",{\"name\":\"llms-txt\",\"content\":\"https://bytesagain.com/llms.txt\"}],[\"$\",\"meta\",\"5\",{\"name\":\"llms-full-txt\",\"content\":\"https://bytesagain.com/llms-full.txt\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://bytesagain.com/skill/openclaw-code-review-skill\"}],[\"$\",\"meta\",\"7\",{\"name\":\"baidu-site-verification\",\"content\":\"codeva-0evUqX1TFs\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"openclaw-code-review-skill — AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://bytesagain.com/skill/openclaw-code-review-skill\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"BytesAgain\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"openclaw-code-review-skill — AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1e\",\"23\",{}]]\n"])</script><script>self.__next_f.push([1,"1f:T1562,"])</script><script>self.__next_f.push([1,"\n .skill-page { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n .two-col { display: flex; gap: 32px; align-items: flex-start; }\n .two-col-main { flex: 1; min-width: 0; }\n .two-col-side { width: 300px; flex-shrink: 0; }\n @media (max-width: 860px) {\n .two-col { flex-direction: column; }\n .two-col-side { width: 100%; }\n }\n .breadcrumb { font-size: .82em; color: var(--text-muted2); margin-bottom: 28px; }\n .breadcrumb a { color: #818cf8; text-decoration: none; }\n .breadcrumb a:hover { text-decoration: underline; }\n .skill-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: 20px; padding: 28px; margin-bottom: 24px; }\n .skill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }\n .skill-badges { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n .skill-top-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }\n .badge { display: inline-flex; align-items: center; gap: 5px; font-size: .75em; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid transparent; }\n .skill-title { font-size: 1.6em; font-weight: 800; color: var(--text-primary); margin: 0 0 4px; line-height: 1.2; }\n .skill-owner { font-size: .82em; color: var(--text-muted2); margin: 0 0 14px; }\n .skill-owner span { color: #818cf8; }\n .skill-desc { font-size: .92em; color: var(--text-secondary); line-height: 1.65; margin: 0 0 16px; }\n .skill-meta { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid var(--border-card); }\n .meta-item { display: flex; flex-direction: column; gap: 2px; }\n .meta-label { font-size: .7em; color: var(--text-muted5); text-transform: uppercase; letter-spacing: 1px; font-weight: 600; }\n .meta-value { font-size: .92em; color: var(--text-muted2); font-weight: 600; }\n .tags-row { display: flex; gap: 6px; flex-wrap: wrap; }\n .tag { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 3px 10px; text-decoration: none; }\n .tag:hover { background: #6366f125; }\n .install-box { background: var(--bg-deep); border: 1px solid var(--border-card); border-radius: 12px; overflow: hidden; margin-bottom: 24px; }\n .install-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; border-bottom: 1px solid var(--border-card); }\n .install-dots { display: flex; gap: 6px; }\n .dot { width: 10px; height: 10px; border-radius: 50%; }\n .install-label { font-size: .72em; color: var(--text-muted5); font-family: monospace; letter-spacing: 1px; }\n .install-body { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .install-cmd { color: var(--text-code);\n font-family: 'Courier New', monospace; font-size: 1em; }\n .copy-btn { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 5px 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }\n .copy-btn:hover { background: #6366f125; }\n .btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 24px; background: transparent; border: 1px solid var(--border-card); border-radius: 10px; color: #6b7280; text-decoration: none; font-weight: 600; font-size: .95em; transition: all .15s; }\n .btn-secondary:hover { border-color: #818cf8; color: #818cf8; }\n .ours-badge { display: inline-flex; align-items: center; gap: 6px; font-size: .72em; font-weight: 700; color: #22d3ee; background: #22d3ee10; border: 1px solid #22d3ee30; border-radius: 999px; padding: 4px 14px; }\n .section-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: 16px; padding: 22px 24px; margin-bottom: 20px; }\n .section-title { color: var(--text-primary); font-size: 1.08em; font-weight: 800; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }\n /* Script box */\n .script-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; background: var(--bg-input); border-bottom: 1px solid var(--border-card); }\n .script-filename { font-size: .72em; color: var(--text-muted2); font-family: 'Courier New', monospace; }\n .script-copy-btn { font-size: .72em; color: #6366f1; background: none; border: 1px solid #6366f130; border-radius: 4px; padding: 2px 10px; cursor: pointer; }\n .script-copy-btn:hover { background: #6366f115; }\n .script-body { padding: 14px 16px; font-family: 'Courier New', monospace; font-size: .82em; line-height: 1.6; color: var(--text-code); overflow-x: auto; max-height: 420px; overflow-y: auto; white-space: pre; }\n /* Articles */\n .article-card { display: block; background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: border-color .15s; }\n .article-card:hover { border-color: #6366f1; }\n @media (max-width: 600px) {\n .skill-card { padding: 20px; }\n .skill-title { font-size: 1.5em; }\n }\n "])</script><script>self.__next_f.push([1,"15:[[\"$\",\"style\",null,{\"children\":\"$1f\"}],\"$L20\",\"$L21\"]\n"])</script><script>self.__next_f.push([1,"22:I[78297,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n23:T46af,"])</script><script>self.__next_f.push([1,"\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\nname: Code Review\ndescription: 对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查\n\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eCode Review Skill\u003c/h2\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e对 Pull Request 进行结构化代码审查,模拟 Claude Code \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e/code-review\u003c/code\u003e 插件的工作流。多 Agent 并行从不同角度审查,置信度 ≥80 的问题才输出,过滤误报。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e适用场景\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 合并前需要审查\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e本地 Diff 需要评审\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e审查自己写完的代码\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCode Review 流程规范建立\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e工作流程(7步)\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第1步:确认审查对象\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e优先级顺序:\u003c/strong\u003e\n1. 如果用户提供了 PR 链接 → 直接使用\n2. 如果用户在代码仓库中 → 用 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh pr list --author @me --state open\u003c/code\u003e 查找自己开的 PR\n3. 如果用户提供了 Diff 内容 → 直接审查 Diff\n4. 其他情况 → 询问用户提供\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e跳过检查\u003c/strong\u003e(发现以下情况直接终止):\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 已关闭 → 跳过\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 是 Draft → 跳过\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 是自动化创建的trivial变更 → 跳过\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eClaude 已经审查过此 PR → 跳过(检查 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh pr view \u003cPR\u003e --comments\u003c/code\u003e)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003e 注意:Claude 生成的 PR 仍需审查\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第2步:收集上下文\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e并行执行:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eA. 获取 PR 详情\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003egh pr view \u003cPR\u003e --json title,body,files,additions,deletions,changedFiles,author,createdAt\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eB. 查找仓库中的 CLAUDE.md\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# 根目录\ngh api repos/:owner/:repo/contents/CLAUDE.md --jq '.content' 2\u003e/dev/null\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e子目录(与变更文件同目录的)\u003c/h2\u003e\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e用变更文件路径推断需要的 CLAUDE.md\u003c/h2\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eC. 获取变更文件列表\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003egh pr diff \u003cPR\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第3步:总结 PR 变更\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e用一句话总结:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e这个 PR 改了什么(功能/修复/重构)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e涉及多少文件、+多少行/-多少行\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e作者的目的是什么(从 PR 描述推断)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e格式:\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e📋 PR 概览\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e标题:xxx\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e作者:xxx\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e变更范围:x 个文件,+x 行/-x 行\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e摘要:xxx\u003c/li\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第4步:启动并行审查(3个 Agent)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e使用 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esessions_spawn\u003c/code\u003e 工具并行启动 3 个独立审查 Agent:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e#### Agent 1:CLAUDE.md 合规检查(Sonnet)\n\u003cstrong style=\"color:#e5e7eb\"\u003ePrompt:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e你是代码审查专家,负责检查此 PR 是否违反了项目 CLAUDE.md 中的规范。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e背景:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 标题:\u003ctitle\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 描述:\u003cdescription\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e项目规范在 CLAUDE.md 中列出\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e任务:\n1. 阅读 PR 变更的文件内容和 CLAUDE.md 规范\n2. 检查变更是否违反了 CLAUDE.md 中的任何明确规则\n3. 只标记\u003cstrong style=\"color:#e5e7eb\"\u003e明确违反\u003c/strong\u003e的规则(你能引用 CLAUDE.md 中的具体文字)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e置信度评分(0-100):\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e0:误报,规范未要求\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e25:可能是问题,但不确定\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e50:确实违反,但影响较小\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e75:明确违反,影响较大\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e100:完全确定,直接影响功能\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e只报告置信度 ≥75 的问题。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e输出格式:\n问题列表,每条包含:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e置信度\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e违反的规则(引用原文)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e违反的文件和行号\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e简要说明\u003c/li\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e#### Agent 2:Bug 和逻辑错误检查(Opus)\n\u003cstrong style=\"color:#e5e7eb\"\u003ePrompt:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e你是资深代码审查专家,负责在此 PR 变更中发现明显的 Bug 和逻辑错误。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e背景:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 标题:\u003ctitle\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 描述:\u003cdescription\u003e\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e任务:\n只检查 Diff 本身,不要引入 Diff 之外的上下文。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e标记标准(高信号问题):\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e会导致编译失败或运行时 panic 的错误(类型错误、缺少 import、引用错误)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e无论输入如何都会产生错误结果的逻辑错误\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e安全隐患(注入、泄露、硬编码凭证)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e不标记:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e代码风格问题\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e依赖特定输入才能触发的问题\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e主观改进建议\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLinter 会捕获的问题\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 之前就存在的问题\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e置信度评分(0-100):\n只报告置信度 ≥80 的问题。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e输出格式:\n问题列表,每条包含:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e置信度\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e问题类型(bug/security/logic)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e文件和行号\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e简要说明\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e预期行为 vs 实际行为\u003c/li\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e#### Agent 3:Git 历史上下文分析(Sonnet)\n\u003cstrong style=\"color:#e5e7eb\"\u003ePrompt:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e你是代码审查专家,负责通过 Git 历史为此 PR 提供上下文。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e背景:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 标题:\u003ctitle\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 描述:\u003cdescription\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e变更的文件:\u003cfiles\u003e\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e任务:\n1. 对变更的关键文件运行 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit blame\u003c/code\u003e 和 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egit log\u003c/code\u003e\n2. 检查:\n - 是否有文件最近被大规模重构过,这次 PR 是否与之冲突\n - 变更是否绕过了已有的测试或保护措施\n - 是否有相关的历史 issue 或 PR 上下文\n3. 提供有价值的上下文,帮助理解此次变更的风险\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e只报告高置信度(≥75)的风险点。\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e输出格式:\n风险点列表,每条包含:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e置信度\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e历史上下文\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e潜在风险\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e相关文件\u003c/li\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第5步:置信度验证\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e对 Agent 2(Bug检查)发现的每个问题,启动一个子 Agent 验证:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e重新阅读相关代码\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e确认问题确实存在\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e排除误报\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e过滤掉置信度 \u003c80 的问题。\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第6步:输出审查结果\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eChat 输出格式:\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e## 🔍 Code Review\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003ePR\u003c/strong\u003e:\u003ctitle\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003e作者\u003c/strong\u003e:\u003cauthor\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003e变更\u003c/strong\u003e:\u003cx\u003e 个文件,+\u003cx\u003e 行 / -\u003cx\u003e 行\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e发现的问题(按严重程度排序)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e#### 🔴 高风险(需修复)\n1. \u003cstrong style=\"color:#e5e7eb\"\u003e[Bug]\u003c/strong\u003e \u003c问题描述\u003e\n - 文件:\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esrc/foo.ts\u003c/code\u003e\n - 位置:第 23-27 行\n - 原因:\u003c简要说明\u003e\n - 置信度:92\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e#### 🟡 中风险(建议处理)\n...\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e✅ 通过检查\u003c/h4\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCLAUDE.md 合规性:通过\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e安全性:未见明显漏洞\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e测试覆盖:变更区域有测试\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e📝 总体评价\u003c/h4\u003e\n\u003c一句话总结\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\n审查完成。如需将此审查发布为 GitHub PR 评论,请说「发布评论」。\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e第7步:(可选)发布 GitHub PR 评论\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e如果用户说「发布评论」:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e使用 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh pr comment\u003c/code\u003e:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003egh pr comment \u003cPR\u003e --body \"## 🔍 Code Review\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e发现 \u003cN\u003e 个问题...\"\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e如需逐行评论用:\u003c/h2\u003e\ngh pr comment \u003cPR\u003e --body \"\u003cstrong style=\"color:#e5e7eb\"\u003e文件:src/foo.ts#L23-27\u003c/strong\u003e\n\u003cBrief issue description\u003e\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e误报过滤器(内置,不报告以下情况)\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePR 之前就存在的问题\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e看起来是 Bug 但实际是正确的代码\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e吹毛求疵的 nitpick\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLinter 会自动捕获的问题\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e笼统的代码质量问题(除非 CLAUDE.md 明确要求)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e通过 lint ignore 注释显式忽略的问题\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e命令\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| 输入 | 行为 |\n|------|------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e/code-review \u003cPR-URL\u003e\u003c/code\u003e | 审查指定 PR |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e/code-review --comment\u003c/code\u003e | 审查 + 发布 GitHub 评论 |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e/code-review\u003c/code\u003e | 在当前仓库查找自己最新的 Open PR |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e帮我 review 这个 diff\u003c/code\u003e | 审查提供的 Diff 内容 |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e注意事项\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e先问清楚再动手\u003c/strong\u003e:如果 PR 信息不足(缺少描述、变更范围不明确),先问用户\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e只报告高置信度问题\u003c/strong\u003e:宁可漏报,不要误报\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e引用具体规则\u003c/strong\u003e:CLAUDE.md 问题必须引用原文\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eGitHub CLI 优先\u003c/strong\u003e:用 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egh\u003c/code\u003e 而非 Web Fetch\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e链接格式\u003c/strong\u003e:GitHub 链接必须用完整 SHA:\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehttps://github.com/owner/repo/blob/\u003cfull-sha\u003e/path#Ln\u003c/code\u003e\u003c/li\u003e\n\u003c/p\u003e"])</script><script>self.__next_f.push([1,"20:[\"$\",\"div\",null,{\"className\":\"skill-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"openclaw-code-review-skill\\\",\\\"description\\\":\\\"对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查\\\",\\\"url\\\":\\\"https://bytesagain.com/skill/openclaw-code-review-skill\\\",\\\"applicationCategory\\\":\\\"requires-oauth-token\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"BytesAgain\\\",\\\"url\\\":\\\"https://bytesagain.com\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"children\":\"BytesAgain\"}],\" › \",[\"$\",\"a\",null,{\"href\":\"/skills\",\"children\":\"Skills\"}],\" › \",\"openclaw-code-review-skill\"]}],[\"$\",\"div\",null,{\"className\":\"two-col\",\"children\":[[\"$\",\"div\",null,{\"className\":\"two-col-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-badges\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge\",\"style\":{\"color\":\"#818cf8\",\"background\":\"#818cf822\",\"borderColor\":\"#818cf844\"},\"children\":[\"🦀\",\" \",\"ClawHub\"]}],false]}],[\"$\",\"div\",null,{\"className\":\"skill-top-actions\",\"children\":[\"$\",\"$L22\",null,{\"slug\":\"openclaw-code-review-skill\"}]}]]}],[\"$\",\"h1\",null,{\"className\":\"skill-title\",\"children\":\"openclaw-code-review-skill\"}],[\"$\",\"p\",null,{\"className\":\"skill-owner\",\"children\":[\"by \",[\"$\",\"span\",null,{\"children\":[\"@\",\"cdapic\"]}]]}],[\"$\",\"p\",null,{\"className\":\"skill-desc\",\"children\":\"对 Pull Request 或代码 Diff 进行结构化审查,使用多 Agent 并行审查 + 置信度评分过滤误报。触发:/code-review、审查 PR、代码审查\"}],[\"$\",\"div\",null,{\"className\":\"skill-meta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Version\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"v\",\"1.0.1\"]}]]}],[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Downloads\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":\"445\"}]]}],false,false,false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"style\":{\"flexDirection\":\"row\",\"gap\":6,\"alignItems\":\"center\"},\"children\":[[\"$\",\"a\",\"crypto-defi\",{\"href\":\"/?q=crypto-defi\",\"className\":\"tag\",\"children\":[\"#\",\"crypto-defi\"]}],[\"$\",\"a\",\"security\",{\"href\":\"/?q=security\",\"className\":\"tag\",\"children\":[\"#\",\"security\"]}],[\"$\",\"a\",\"legal\",{\"href\":\"/?q=legal\",\"className\":\"tag\",\"children\":[\"#\",\"legal\"]}]]}]]}],[\"$\",\"div\",null,{\"style\":{\"marginTop\":6},\"children\":[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/cdapic/openclaw-code-review-skill\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"btn-secondary\",\"style\":{\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"borderRadius\":8,\"background\":\"transparent\",\"border\":\"1px solid var(--border-card)\",\"color\":\"var(--text-muted2)\",\"textDecoration\":\"none\",\"whiteSpace\":\"nowrap\"},\"children\":[\"View on \",\"ClawHub\",\" →\"]}]}]]}],[\"$\",\"div\",null,{\"className\":\"install-box\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-dots\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#ef4444\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#eab308\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#22c55e\"}}]]}],[\"$\",\"span\",null,{\"className\":\"install-label\",\"children\":\"TERMINAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"install-body\",\"style\":{\"flexWrap\":\"wrap\"},\"children\":[[\"$\",\"code\",null,{\"className\":\"install-cmd\",\"children\":\"clawhub install openclaw-code-review-skill\"}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install openclaw-code-review-skill\",\"style\":{\"fontWeight\":700},\"children\":\"Copy\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"📖 About This Skill\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$23\"}}]]}],null,null,null,null,null,null,null,false,false]}],\"$L24\"]}]]}]\n"])</script><script>self.__next_f.push([1,"21:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn =\u003e {\\n btn.addEventListener('click', () =\u003e {\\n const cmd = btn.getAttribute('data-cmd');\\n if (!cmd) return;\\n navigator.clipboard.writeText(cmd).then(() =\u003e {\\n const orig = btn.textContent;\\n btn.textContent = 'Copied!';\\n setTimeout(() =\u003e btn.textContent = orig, 1500);\\n }).catch(() =\u003e {});\\n });\\n });\\n \"}}]\n"])</script><script>self.__next_f.push([1,"25:I[71521,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n24:[\"$\",\"div\",null,{\"className\":\"two-col-side\",\"children\":[\"$\",\"$L25\",null,{\"category\":\"requires-oauth-token\",\"currentSlug\":\"openclaw-code-review-skill\",\"name\":\"openclaw-code-review-skill\",\"tags\":[\"crypto-defi\",\"security\",\"legal\"]}]}]\n"])</script></body></html>