AI agent skill · by @TheSyart
Code Audit
Audit a whole project for code quality, architecture, security, performance, and engineering maturity. Use when the user asks to "audit the project", "code review", "review the codebase", produce a technical-debt report, or fill an audit template. Works for Python / TS / Go / Rust monorepos including agent projects.
Archived 2026-10-23 · Source updated 2026-08-12 · License: MIT. Check the original repository for the latest version.
SKILL.md instructions
# Code Audit 按"先证据、后判断、再路线图"的顺序产出一份能落地的审计报告。 --- ## 工作铁律 1. **不要凭印象填表**。每次开工先跑 `scripts/recon.sh` 拿硬数据,所有评分必须有命令输出 / 文件:行号兜底。 2. **每个问题三件套**:`file:line` + 代码片段(≤ 6 行)+ 修复 patch(伪代码或具体 diff)。少一件就不算合格。 3. **风险 = 缺陷 × 部署上下文**。同一个 `shell=True`,CLI 个人脚本 = 低;暴露端口的 WebUI = 极高。审计前先问清楚"打算给谁用 / 怎么部署"。 4. **三段式路线图**,不开扁平 todo:P0 止血(安全 / 数据正确性) → P1 提质(测试 / 日志 / 工程化) → P2 升级(架构 / 商业化)。 5. **诚实打分,不调和**。0 测试给 0/10;后面写"作为个人项目可接受"的语境注脚就行。 6. **节省 round-trip**。Bash 调用尽量串多条命令;同一个文件优先 outline(grep `def`/`class`)再按行号 sed。 --- ## 五阶段流程 ### 阶段 0 · 定调(≤ 30 秒,一次到位) 跟用户或当前上下文确认三件事,三件都不知道就**先问再做**: - 项目类型:Web 前端 / 后端 / 全栈 / Agent / 库 / CLI 工具 - 部署上下文:纯本地脚本?SaaS?多租户?开源给极客? - 审计目的:拿来评 PR / 准备发版 / 决定是否商业化 / 接手二开 定调决定后续每个评分的语义。**没有部署上下文就给安全打分是没意义的。** ### 阶段 1 · 侦察(≤ 5 分钟,跑脚本) 调用 [scripts/recon.sh](scripts/recon.sh)。它一次性产出: - 顶层目录 + 工程化文件存在性(pyproject、Dockerfile、CI、lint 配置 …) - LoC 排序前 15 文件(god class 嫌疑) - 总代码量 - 测试文件计数 - print / logger / except 计数 - 依赖文件原文(requirements / package.json / go.mod 等) - git 基本信息(提交数、贡献者、热点文件、最近 90 天 churn) - 危险代码 pattern grep(`shell=True`、`eval(`、`exec(`、`pickle.loads`、明文密钥模式) 把脚本输出整段贴到草稿区,**全部审计结论从这里取证**。脚本输出本身不直接进最终报告,是工作底稿。 ### 阶段 2 · 定向探查(按发现深入) 根据侦察结果挑 ≤ 5 个最可疑点深读,每点用 `Read`/`grep -n` 拿到精确 file:line。常见入口: - 最大文件 → outline 是否单一职责 - 安全敏感文件(auth/security/shell/filesystem/upload)→ 围栏检查 - 配置回传路径(config payload / bootstrap API)→ 密钥脱敏检查 - 异常处理热区 → 是否吞 traceback - 公网入口(HTTP/WS handler)→ 鉴权 + 输入校验 **每点产出一段笔记**:现状代码片段 + 问题机制 + 影响 + 修复 sketch。 ### 阶段 3 · 填表(按用户提供模板或 [templates/audit-report.md](templates/audit-report.md)) 把第 1–2 阶段的笔记填进模板。规矩: - 每个"分析"段落 ≤ 5 行;超 5 行说明在塞水。 - 每个评分给一行依据:`X/10 —— 因为 [证据]`。 - "解决方案"必须给具体 patch(10–30 行内),不写"建议加日志"这种废话。 - 最后"下一步最优先 3 件事"按工时估算(4h / 半天 / 1 天),让用户能立即排期。 ### 阶段 4 · 自检(提交前) 读自己的报告一遍,碰到这些信号就退回去补: - 出现"建议提高 / 加强 / 优化"等动词无宾语 → 改成具体动作 - 出现整段没有 `file:line` 或代码块 → 加证据 - 评分跨度 < 4 分(全 6/10)→ 多半在和稀泥,重新盘 - 路线图扁平没分阶段 → 拆 P0/P1/P2 - 安全章节没"如果在公网会怎样"的反例 → 补 --- ## 红旗目录(按出现频率排) 详见 [references/red-flags.md](references/red-flags.md)。最常见 10 项: 1. `subprocess.run(..., shell=True)` 无 `timeout` / 无 `cwd` 限制 → RCE 2. `Path(user_input).resolve()` 无 `relative_to(workspace)` → 路径穿越 3. `/api/config` 等返回 `config.raw` 含 apiKey → 密钥泄露 4. `except Exception` + 仅 `print(exc)` → 吞 traceback 5. `print()` 满天飞 + 已声明 logger 依赖未用 → 工具配置半成品 6. `requirements.txt` 钉死全部传递依赖(`pip freeze` 风格)→ 升级矩阵爆炸 7. 直接依赖列在 deps 里但代码 0 import → 死依赖 8. 单文件 > 500 LoC、单函数 > 80 LoC → god class / god function 9. `tests/` 不存在 → 直接 0/10 10. CI 不存在 + lint 不存在 + pre-commit 不存在 → 工程化 ≤ 2/10 --- ## 评分尺(重要) 详见 [references/scoring-rubric.md](references/scoring-rubric.md)。核心准则: - **0/10**:完全没有(0 测试、0 logger、0 类型注解) - **3/10**:尝试过但本质不可用(写了 print 当日志、TODO 留了一堆) - **5/10**:能跑但不可演进(无回归保护、维护靠记忆) - **7/10**:日常使用稳定,重构无安全网但 review 能挡 - **9/10**:可商业化、多人协作、有完整监控 - **10/10**:业内标杆 **不允许给 8.5/10 这种**。整数即可,少装精确。 --- ## 反模式(写报告时必须避免) - ❌ "代码质量较低,建议改进" → 没量化、没动作 - ❌ "应该使用 [框架 X]" → 不给现状失败的证据 - ❌ "整体良好" + 同时存在 RCE → 自相矛盾 - ❌ 全维度均匀打 6/10 → 没分辨力 - ❌ 列 30 个 P1 → 等于没排序 - ❌ 给"上层抽象"建议但不给落地代码 → 等于没说 --- ## 资源索引 - [scripts/recon.sh](scripts/recon.sh) —— 侦察脚本,第 1 阶段必跑 - [references/red-flags.md](references/red-flags.md) —— 完整反模式目录 - [references/scoring-rubric.md](references/scoring-rubric.md) —— 8 维评分尺 - [references/recon-cookbook.md](references/recon-cookbook.md) —— 侦察命令速查 - [templates/audit-report.md](templates/audit-report.md) —— 默认审计模板(用户没给模板时用这个)