神级编程
定位
不是"让 AI 猜代码",而是"先取证,再下判断"。
传统代码辅助技能只回一段提示词,模型看不到真实行号,容易编造问题。
神级编程内置一个纯标准库的本地分析引擎(scripts/analyzer.py),先把机器能确定的事实扫出来,
再把 文件:行号 证据注入给模型,让它只做"复核与决策"。
一句话:本地引擎负责"看得见",AI 负责"想得清"。
文档导航
| 你想知道 | 跳到 |
|---|---|
| 第一次用怎么开始 | 30 秒上手 |
| 我这情况该不该用、用哪条 | 什么时候用 / 不要用 · 场景 → 命令 |
| 有哪些命令、参数是什么 | 命令清单(32 条) |
| 哪些命令会真的改我的文件 | 会真正动手的命令 |
| 输出字段什么意思 | 字段速查 |
| 报错看不懂 | 常见问题(含报错对照表) |
| 凭什么信这些结论 | 探针自测(自证) |
| 能力边界在哪 | 已知限制汇总 |
| 凭什么信它 | 实测数据(六轮,真实项目) |
30 秒上手(第一次用就看这三行)
python scripts/main.py doctor # 1. 环境自检:确认解释器/工具链能跑
python scripts/main.py guide # 2. 场景决策表:你这种情况该用哪条命令
python scripts/main.py report --dir ./你的项目 # 3. 直接出一份 Markdown 审计报告
不需要联网、不需要装任何包(除 test-run 用本机 pytest)。
不确定该干什么时,只跑 guide:它会按"接手项目 / 上线前 / 单文件自查 / 安全 / 重构 / 格式 / 补测试 / 起项目 / 看影响面"
九种场景给出该敲的命令,以及明确写出什么时候不该用它。
什么时候用 / 什么时候不要用
| ✅ 适合用 | ❌ 不要指望它 |
|---|---|
| 接手陌生项目,10 秒摸清结构、技术栈、技术债 | 判断业务规则算得对不对(要跑测试/对账) |
| 上线前确认"能不能编译、能不能验证、能不能过安全" | 替代渗透测试、压测、等保/JCI 合规评审 |
| 改完一个文件立刻自查语法/安全/复杂度 | 证明并发没有竞态、权限模型没有越权 |
| 清死代码、找重复块、定位复杂度热点 | 自动重构业务逻辑(动结构必须有人审 diff) |
| 提交前统一格式(空白/Tab/BOM) | 争论代码风格口味(缩进宽度、命名习惯) |
| 零测试项目补 pytest 骨架并跑起来 | 生成带真实业务断言的高质量用例 |
| 从零起一个能跑的原型(5 套模板) | 复杂业务架构设计与技术选型 |
场景 → 命令(照抄即可)
| 你的目标 | 敲这条 |
|---|---|
| 刚拿到代码,先看全貌 | report --dir <项目>(一次出审计+质量+安全报告) |
| 判断能不能上线 | project-audit --dir <项目> → test-run --path <项目> → security-scan --path <项目> |
| 只改了一个文件 | code-review --file <文件> |
| 安全自查 | security-scan --path <目录> |
| 想重构但不知从哪下手 | complexity --path <目录> + dup-detect --path <目录> + dead-code --path <目录> |
| 格式太脏 | fix-format --path <目录> --apply(默认只预演,先看 diff) |
| 没有测试 | test-gen --file <文件> --out <目录> → test-run --path <目录> |
| 从零起项目 | scaffold --template fastapi --name demo --out <目录> |
| 改公共函数怕炸 | impact --path <项目> --symbol <函数名> |
口语化也行:直接说"帮我审一下这个项目"、"这文件有没有安全问题"、"上线前检查一遍",
技能会自动落到上表对应的命令,不用记参数。
会真正动手的命令
不是"给你一段建议再自己贴"——下面这些命令直接产出文件或直接改代码:
| 命令 | 实际动作 | 安全阀 |
|---|---|---|
report |
写出 Markdown 审计报告(默认 <项目>/.codebuddy/audit-report-<时间>.md) |
只新增文件,不动源码 |
fix-format --apply |
直接改行尾空白 / Tab 缩进 / BOM / 末尾换行 | 默认预演;--apply 才写;非 UTF-8 自动跳过;保留原换行风格 |
scaffold |
生成可运行项目骨架(5 套模板) | 不覆盖已有文件(需 --force) |
test-gen |
写出 pytest 用例骨架文件 | 同上 |
crawl-gen |
写出可运行的采集脚本 | 同上 |
skill-gen |
写出技能工程(SKILL.md + main.py + plugin.json) | 同上 |
其余命令是一次性分析,不改你的代码:跑完只返回 JSON,改不改由你决定。
探针自测(自证,不是自吹)
python scripts/main.py probe # 五维全跑,输出分数与失分项
python scripts/main.py probe --dim A --quiet # 只跑适用性这一维,只回总分
python scripts/main.py probe --md probe.md # 同时落盘 Markdown 证据报告
探针不靠"我觉得",每一项都真跑一次命令并取证(退出码 / JSON 字段 / 落盘文件字节):
| 维度 | 探针检查什么(举例) |
|---|---|
| T 可信任 | doctor 版本与文档一致;内置 4 条已知缺陷必须全命中;4 个误报陷阱必须 0 命中;引擎无网络库导入;零第三方依赖;语法错误必须判 fail 而非"看着还行" |
| R 可靠性 | 全部命令 --help 可执行;报错必带 hint + next;6 个命令输出必须是合法 JSON;缺工具时 skip 而非崩溃;同一输入两次结论一致 |
| A 适用性 | guide 给出上手三步/≥8 场景/≥4 条限制;--goal 能检索;文档必须有"什么时候不要用""已知限制""场景→命令";非 Python 项目也能出结论 |
| C 规范性 | skill-validate 满分;有导航/FAQ≥12/报错对照/字段速查;文档命令数与实际命令数一致;输出统一含 scenario |
| E 有效性 | report 真的落盘出报告;fix-format --apply 真的改好文件;scaffold/test-gen 真的落盘;植入缺陷→检出→修复→复验归零的端到端闭环 |
共 36 项检查(T 6 / R 7 / A 8 / C 8 / E 7),全部通过则五维各 5.00、总分 5.00(A+)。
当前 v1.6.0 在本机实测:total_score=5.0, grade=A+, gaps=[]。
自测口径说明:这是自评,用来证明"宣称的能力真的可执行"——检查项全部写在 scripts/probe.py,
任何人可以审阅、也可以自己加更严的项。平台 TRACE 分数由 SkillHub 独立评测,
不随版本自动重算,也没有手动重测入口;因此自评 5.0 不等于平台一定给 4.9。
核心设计(三条硬规则)
- 证据优先:任何结论都要能对上
file:line,扫不出来就不许编。 - 零依赖可跑:只用标准库(
ast/re/hashlib/subprocess),装完即用;
只有test-run会调用本机 pytest / npm,project-audit的编译闸口会调用本机 tsc / mvn / go。 - 低误报:字符串与注释先掩码再判语法问题;超长文本块(模板、文档串)不参与安全判定;规则定义行自身不报警;测试文件与文档不按生产代码标准判罚。
- 能不能跑优先:编译失败 →
code-review判 block、code-quality判 0 分 F、project-audit判 fail
(Python 走compile(),TS/Java/Go 走本机tsc/mvn/go,不再只看括号配对);
测试空集不判失败,但必须说清楚"为什么没收集到、该怎么跑"。
命令清单(32 条)
一、生成类(落盘可运行)
| 命令 | 说明 | 关键参数 |
|---|---|---|
skill-gen |
生成技能工程(SKILL.md 带 frontmatter + main.py + requirements + plugin.json) | --name --desc --slug --out |
skill-validate |
技能合规校验:frontmatter 齐全、slug/version 规范、argparse、JSON 输出、文档与命令一致 | --dir |
scaffold |
项目脚手架,5 套模板:python-cli / python-lib / fastapi / react-vite / node-cli |
--template --name --out |
crawl-gen |
生成可运行采集脚本(UA 池、指数退避、限速自动降档、JSON+CSV 落盘) | --url --target --out |
crawl-anti |
反爬分层分析:传输层/请求头/会话/行为节奏/频次/验证码/数据层,逐层给绕过方案与合规风险 | --url |
test-gen |
按"正常/边界/异常"三层生成 pytest 骨架(边界用例 skip,不会假红) | --file --out |
二、审查类(本地先行)
| 命令 | 说明 | 输出要点 |
|---|---|---|
code-review |
单文件深度审查,先出本地证据再给复核指令 | verdict: pass/warn/block + 证据包 |
security-scan |
22 条规则扫描(CWE 编号),支持文件或整目录;按代码上下文(prod / test / devtool / scratch)校准级别 | by_severity / by_severity_prod / by_context / 行级 findings |
bug-patterns |
9 类 AST 逻辑缺陷模式(可变默认参数/除零/深索引/比较陷阱/循环 return/句柄泄漏等) | 行级 findings + 置信度 |
git-review |
审查 git 变更:改动文件、增删行数、风险文件、删除测试 | risky_files + 阻断判断 |
三、质量类(可量化)
| 命令 | 说明 |
|---|---|
code-quality |
百分制 5 维评分(复杂度/文档/可维护性/结构/安全),A+~F;编译不过直接 0 分 |
complexity |
圈复杂度热点,列出超阈值函数(含行号、长度、复杂度) |
dead-code |
全项目调用图判死:未用 import / 死函数 / 未用变量(跨文件调用不算死) |
dup-detect |
滑动窗口哈希检测重复代码块,估算可合并行数 |
format-check |
行尾空白、Tab、超长代码行、全角标点、BOM、混合换行 |
todo-scan |
TODO/FIXME/HACK 台账(带行号,自动排除模板内部伪 TODO) |
deps-check |
依赖三向对账:Python(导入/已装/requirements)+ Node(package.json/import/node_modules) |
test-run |
按项目类型自动选运行器:pytest / npm test(vitest、jest)/无单测的 TS 项目退化为 tsc --noEmit 类型闸口 |
四、理解与优化类
| 命令 | 说明 |
|---|---|
doc-gen |
抽取 API 清单(签名/行号/复杂度),列出缺 docstring 的函数 |
impact |
符号影响面:定义点、引用点、涉及文件数、影响等级、回归建议 |
code-fix |
修复缺陷(本地问题清单作输入,要求每处对应 file:line) |
code-optimize |
性能/内存/可读性优化(先量化再改,只动最热的 20%) |
code-refactor |
结构重构(长函数拆分/降复杂度/抽取重复/命名语义化) |
code-benchmark |
生成基准脚本(timeit,按候选函数自动填充用例) |
五、项目与辅助类
| 命令 | 说明 |
|---|---|
project-audit |
项目全方位审计:结构、语言分布、技术栈、安全、依赖、重复、技术债、工程化缺口 + 跨语言编译闸口(Python compile / TS tsc --noEmit / Java mvn compile / Go go build,编译失败直接 fail) |
project-quality |
项目质量百分制(工程化/测试/安全/依赖健康/可维护性) |
report |
一次出交付物:审计+质量+编译+安全合并成 Markdown 落盘(默认 <项目>/.codebuddy/audit-report-<时间>.md),含 P0 清单与下一步 |
fix-format |
直接把格式修好:行尾空白 / Tab 缩进 / BOM / 文件末尾换行;默认预演(--apply 才写回),非 UTF-8 文件自动跳过 |
guide |
场景决策表:--goal 上线 返回该用哪些命令、什么时候不该用、有哪些限制 |
probe |
探针自测:TRACE 五维逐项实跑取证,输出分数与失分项(--dim A 只跑一维) |
doctor |
环境自检:Python 版本、pytest、git、数据目录可写、命令清单 |
history |
最近调用历史(本地 JSON,最多 300 条) |
逻辑缺陷检测(9 类模式)
bug-patterns 用 AST 判定,不靠关键词猜测:
| 编号 | 模式 | 典型后果 | 级别 |
|---|---|---|---|
| BUG001 | 可变默认参数 def f(x=[]) |
跨调用累积脏数据 | medium |
| BUG002 | 除零未防护 total / len(items) |
空列表直接崩 | low |
| BUG003 | 嵌套结构直接索引 d["a"]["b"] |
KeyError / TypeError | low |
| BUG004 | 用 == 比较 None |
自定义 __eq__ 骗过判断 |
low |
| BUG005 | 与布尔常量比较 flag == True |
冗余且掩盖三态值 | low |
| BUG006 | 循环体内提前 return |
只处理第一条就退出 | medium |
| BUG007 | open() 未用 with |
异常路径句柄泄漏 | medium |
| BUG008 | 浮点数等值比较 | 精度误差导致判断永假 | medium |
| BUG011 | 返回值语义不一致(值 + 裸 return) | 调用方拿到 None | low |
取舍原则:宁少不滥。BUG002/BUG003 在真实项目里大量出现(多为结构已确定的安全写法),
因此降为 low 只作提示;medium 的三类基本都能直接改成线上故障。
字符串 % 格式化、if total else 保护、if not items: return 保护都会自动排除,不误报。
上下文校准(同一条规则,不同位置不同分量)
security-scan 与 project-audit 的每条发现都带 context 字段,并在输出里按上下文分开计数:
| context | 判定 | 处理 |
|---|---|---|
prod |
产品代码(默认) | 按规则原始级别计,by_severity_prod 只统计这一类 |
test |
含 /tests/、test_*、*.spec.* 等 |
凭据类规则(SEC001/005/008/009)降为 low:测试口令本来就要写死 |
devtool |
位于 pipelines/ tools/ ci/ build/ .github/ deploy/ |
SEC002/003/004 降一级并标 modulated:本地/CI 脚本不对外暴露 |
scratch |
根目录临时探针(_e2e.py、check-db.js、verify-*.js) |
保留原始级别,但排到产品问题之后,单独用 scratch_findings 计数 |
目的只有一个:别让 14 条探针脚本的凭据把产品代码里那 1 条真风险淹掉,同时也不假装它们不存在。
降级只影响优先级,不删发现,modulated 字段会写清楚降级理由。
使用示例
例 1:接手陌生项目,先摸清底细
python scripts/main.py project-audit --dir ./my-project
python scripts/main.py project-quality --dir ./my-project
python scripts/main.py security-scan --path ./my-project
返回结构里 engineering_gaps 会直接告诉你缺 README / 缺 CI / 缺测试目录,
security.by_severity 给出 critical/high/medium/low 分布,tech_debt 给出 TODO 台账。
例 2:上线前卡口
python scripts/main.py code-review --file src/pay.py
python scripts/main.py code-quality --file src/pay.py
code-review 的 verdict 只有三种:block(有 critical)、warn(有 high 或格式问题超标)、pass。
可以直接接进 CI:非 pass 即阻断。
例 3:改一个公共函数前评估影响面
python scripts/main.py impact --dir . --symbol build_parser
输出定义位置、引用次数、受影响文件清单与影响等级(low/medium/high),
advice 直接列出必须回归的文件。
例 4:从零起一个能跑的项目
python scripts/main.py scaffold --template fastapi --name order-api --out ./order-api
python scripts/main.py scaffold --template react-vite --name order-web --out ./order-web
fastapi 模板带 /health 接口,react-vite 模板带可直接 npm install && npm run dev 的最小工程。
例 5:安全自查
python scripts/main.py security-scan --path ./src
检出类别覆盖:硬编码凭据、eval/exec、命令注入、SQL 注入、不安全反序列化、
关闭证书校验、弱哈希、私钥/云密钥泄漏、裸 except、assert 生产校验、不安全随机数、
调试开关、CORS 通配、临时文件竞态、XXE、前端 XSS 汇聚点、路径穿越、JWT 校验关闭、
敏感信息入日志、权限过宽、HTTP 无超时。每条带 CWE 编号、行号、原文片段、修复建议。
例 6:查"能跑但会出错"的逻辑缺陷
python scripts/main.py bug-patterns --path ./src
输出按级别排序:medium 的三类(可变默认参数、循环内提前 return、句柄未用 with、浮点判等)基本都会变成线上故障,
low 的(除零提示、嵌套索引)结合业务判断。
例 7:交付前跑三道闸口
python scripts/main.py project-audit --dir . # syntax_errors 为空 且 build.verdict != fail
python scripts/main.py test-run --path ./tests # 必须有真实通过用例
python scripts/main.py security-scan --path ./src # 不能有 critical/high
编译闸口说明:build.checked 里是真实跑过的编译器(tsc/mvn/go)与错误数,
build.verdict=skip 表示本机缺工具(如未 npm i、无 mvn),必须写明"未实测编译",不能当通过。
只想快速看结构时用 --no-build 跳过。
输出规范
- 统一 JSON,字段
ok表示命令是否成功执行(业务判定在verdict/grade)。 - 失败也是 JSON,且必须能自解释(不让人猜):
{"ok": false, "error": "错在哪", "hint": "为什么会这样", "next": ["可以直接复制的下一条命令"]} - 审查类命令额外给
instruction字段:这是给模型的作业单,已把本地证据与硬性要求写进去。
字段速查
| 字段 | 出现在 | 含义 |
|---|---|---|
ok |
所有命令 | 命令本身是否执行成功(不代表代码没问题) |
verdict |
审查/审计/扫描类 | pass / warn / block / fail |
grade / total |
code-quality project-quality |
百分制分数与等级(A+~F,编译失败直接 0/F) |
build.verdict |
project-audit report |
pass / fail / skip(缺工具)/ inconclusive(超时) |
runner |
test-run |
pytest / npm / tsc(无单测时的类型闸口) |
by_severity / by_severity_prod |
安全类 | 全部发现 / 仅产品代码(门禁看后者) |
context |
安全 findings | prod / test / devtool / scratch |
file:line |
所有 findings | file + line 即精确位置,可直接跳转 |
instruction |
审查类 | 下一步该做什么(给 AI 或人的作业单) |
report_path |
report |
落盘的 Markdown 报告路径 |
实测数据(多轮交叉,真实项目)
第一轮:带标准答案的缺陷农场
在一份刻意埋雷的项目里放 31 个已知缺陷(14 类安全 + 9 类逻辑 + 死代码 + 重复 + 格式),
外加 5 个陷阱(测试里的 assert、README 的全角标点、参数化 SQL、参数列表 subprocess、跨文件被调用的函数):
| 指标 | 结果 |
|---|---|
| 应检出 | 31 条 |
| 实际命中 | 31 条(100%) |
| 陷阱误报 | 0 条 |
第二轮:真实项目信噪比
| 项目 | 指标 | 结果 |
|---|---|---|
bid-fill-engine(Python 产品) |
安全 / 逻辑缺陷 | 0 / 0(噪音清零) |
bid-fill-engine |
死代码 | 4 个函数 + 3 个未用 import,逐个 grep 确认全项目仅定义处出现 1 次 |
ai-biaoshuzus(23 个 py) |
逻辑缺陷 | 首版 26 条 medium → 收紧后 7 条全 low(均为嵌套索引提示) |
med-feijian-system(TS,60k 行) |
安全 | 5 条 high:3 处硬编码 admin/123456、2 处 dangerouslySetInnerHTML 直插,逐条核对属实 |
med-feijian-system |
审计耗时 / 重复检测耗时 | 13.6 s → 1.36 s / 10.3 s → 0.47 s |
med-feijian-system |
嵌套项目 | 根目录无 package.json,自动下钻 projects/,识别 86 声明依赖 / 55 实际引用 |
第三轮:能不能跑的破坏-修复闭环
| 动作 | 结果 |
|---|---|
| 在真实项目副本植入语法错误 | project-audit → verdict fail,精确报出 audit.py:116 invalid syntax |
同一文件 code-review |
verdict block,不再是"没扫出漏洞就 pass" |
同一文件 code-quality |
0 分 / F,注明"无法编译,其余维度不计分" |
| 修复后复跑 | 恢复 warn,syntax_errors 归零 |
真实项目自测(脚本式 python tests/test_engine.py) |
PASS,铁律审计通过,与审查结论一致 |
对脚本式自测跑 test-run |
识别为"pytest 收集 0 用例"→ 判 ok(不是失败),并提示改用 python <文件> 或迁移为 def test_xxx() |
第四轮:从零交付闭环(脚手架 → 业务 → 测试 → 起服务)
scaffold --template fastapi生成工程 → 补service.py(领域逻辑)+main.py(HTTP 层)- 用技能自审:
code-review两个文件 pass、security-scan0、bug-patterns0、code-quality90/A+ test-run:7 passed(幂等、库存不足、422、404、取消回补库存全覆盖)- 真实
uvicorn起服务 + HTTP 冒烟:9/9 通过(含金额计算 3×12.50=37.50、幂等返回同一单、409/422/404 错误码、取消后库存回补)
第五轮:三个已开发真实系统的端到端闸口(v1.3.0 的直接来源)
对三套已上线的自研系统跑同一套闸口(project-audit → test-run → security-scan):
| 系统 | 技术栈 | 审计结论 | 关键实测发现 |
|---|---|---|---|
AI 获客系统 ai-customer-acquisition |
Vue3 + Spring Boot + FastAPI | warn,build pass(admin tsc 0 错误 / 1.6 s) |
7 条安全:2 high(v-html 直插生成内容、默认账号 admin/admin123 写死)+ 5 medium(4 处 CORS *、1 处裸 except),逐条打开原文件核实属实 |
医保自查飞检系统 med-feijian-system |
Next 16 + Prisma(6 万行 TS) | fail,build fail 9 个 TS 错误 |
改造前只报 warn 且 syntax_errors: [](假通过);改造后精确定位 src/lib/integration/scheduler.ts:117、src/app/api/suspects/[id]/recheck/route.ts:16 等 9 处,与手工 tsc 输出一致;test-run 同步从"无 pytest 用例/ok"变为 runner=tsc, ok=false |
视觉识别系统 vision-ocr |
Python + PyTorch(4.4 万文件) | warn,build skip(无构建系统,已显式标注) |
改造前统计被 3454 张 jpg 挤满 4000 上限,报告谎称"没有 Python 代码";改造后 277 代码文件 / 40 个 .py 正常入账,安全 10 条(3 medium 裸 except、7 low 宽泛 except/eval 提示) |
本轮暴露并修掉的真缺陷(全部有复现证据):
| # | 缺陷 | 证据 | 修复 |
|---|---|---|---|
| 1 | 编译闸口只覆盖 Python,TS/Java 项目永远"能编译" | 医保项目 9 个 TS 错误仍判 warn |
build_check():tsc / mvn / go 真实编译,失败直接 fail,缺工具显式 skip |
| 2 | test-run 只认 pytest,Node 项目一律"空集通过" |
医保项目 runner 从空变成 tsc、ok=false |
自动分流 pytest / npm test / tsc --noEmit,输出统一 runner 字段 |
| 3 | 统计口径被图片/日志/浏览器缓存挤爆,源码被截断 | 视觉项目 by_ext 无 .py,却有 3454 张 jpg |
图片/权重/日志/浏览器数据只计 asset_files,源码单独计量并标记 truncated |
| 4 | TODO 把注释里的占位路径 /api/batch/xxx 当 XXX 待办 |
获客系统 mock.ts:157 误报 1 条 |
XXX 改为大小写敏感,TODO/FIXME 仍容小写 |
| 5 | 依赖对账把 sys.path 注入的本地包当"缺包" |
获客系统误报 core、platforms 未安装 |
识别项目内可 import 的本地包目录 |
| 6 | 大数据目录拖慢审计 | 视觉项目首轮 7 s 全花在图片上 | 运行期数据目录跳过,审计 7 s → 结构扫描只跑源码 |
第六轮:电子档案系统 + 传染病院感系统(v1.4.0 的直接来源)
| 系统 | 技术栈 | 审计结论 | 关键实测发现 |
|---|---|---|---|
电子档案系统 rf-digital-archive |
Java 97 + Vue 29(152 代码文件 / 1.0 万行) | warn,build skip(本机无可用 mvn) |
15 条安全里 14 条集中在根目录探针脚本(_e2e.py、_sec.py、_probe_p0.py 硬编码 admin/123456),产品代码只有 1 条 high:frontend/src/views/Login.vue:59 演示账号一键填充弱口令。改造前这 15 条混在一起,"真正要改的那一条"被淹没 |
传染病院感系统 his-infection-control |
Java 241 + Vue 79(469 文件 / 5.3 万行) | 改造前 fail(2 条 critical)→ 校准后 warn |
2 条 critical 都落在 pipelines/ 的 CI 编排脚本:run_cmd(cmd, shell=True) 包装器无外部输入;2 条 high 是产品页 v-html 直插(report/newsletter/index.vue:85、surveillance/infection-case/timeline.vue:155)。test-run 在仓库根被 test_full.py/test_routes.py 两个联调脚本拖到超时 |
本轮暴露并修掉的 4 个真缺陷:
| # | 缺陷 | 证据 | 修复 |
|---|---|---|---|
| 7 | 探针脚本凭据与产品代码同级,噪音淹没真问题 | 档案系统 15 条里 14 条是临时脚本 | 新增 context 分类(prod/test/devtool/scratch)+ by_severity_prod,产品问题排最前 |
| 8 | 同一规则不分位置:CI 脚本里的 shell=True 判 critical 导致"不可交付" |
院感系统 2 条 critical 全在 pipelines/ |
pipelines/tools/ci/build 下的 SEC002/003/004 降一级,并标 modulated 说明原因 |
| 9 | 测试文件里的测试口令按生产标准判 high | 院感 tests/e2e/his-e2e.spec.js:77 |
test 上下文的凭据类规则降为 low |
| 10 | pytest 超时只回"超时",不给可执行下一步 | 院感根目录联调脚本挂住 180 s | 超时返回点名可疑脚本 + 建议 --path <测试目录>,并说明"超时不能当通过" |
校准的反向教训(同样实测暴露):最初把 scripts/ 也当 dev 目录,结果视觉识别系统的 10 条发现被整体降噪成 0 条 medium —
很多 Python 项目主代码就在 scripts/,因此 devtool 目录只保留 pipelines/tools/ci/build/.github/deploy。
误报治理(均为实测暴露后修掉的真问题)
- 测试文件里的
assert/ 裸except不再按生产标准报风险 README.md等文档不再按代码标准判"全角标点/超长行"- 名为
exec的函数定义不再被误判为动态代码执行 - 模板字符串、规则定义行不参与扫描(自指误报归零)
zip-tmp、vendor、.pnpm-store等临时/第三方目录默认跳过- TS 路径别名(
@/、~/)不再被误判为未声明的 npm 包 "password": "xxx"这类 JSON/dict 形式硬编码凭据现在能抓到(原先只认password = "xxx")- 字符串
%格式化不再被当成取模、if total else保护不再被当成除零风险 - 注释里的路径占位
/api/batch/xxx不再被当成XXX待办(XXX改为大小写敏感) sys.path注入后可 import 的本地包(core、platforms)不再被报"未安装的第三方包"- 图片/模型权重/日志/浏览器缓存不再计入代码文件数与语言占比,只算
asset_files - 根目录探针脚本、测试文件、CI 脚本里的同类问题不再与产品代码同级(
by_severity_prod只算产品代码) scripts/不当 dev 目录(很多 Python 项目主代码就在这里),避免整体降噪
常见问题
Q:第一次用,从哪开始?
A:三条命令,按顺序敲:doctor(环境能不能跑)→ guide(我这种情况用哪条)→ report --dir <项目>(直接出报告)。
不要一上来背 32 条命令,guide 就是给你做这个决策的。
Q:我不会敲参数,只会说人话,能用吗?
A:能。直接说"帮我审一下这个项目""这文件有没有安全问题""上线前检查一遍""格式太乱帮我清一下",
技能会落到对应命令;参数由它自己补默认值,只有路径需要你给。
Q:报错了看不懂怎么办?
A:失败返回里一定有 error(错在哪)、hint(为什么)、next(可直接复制的下一条命令)。
常见对照:
| 你看到的 | 真实含义 | 怎么办 |
|---|---|---|
目录不存在: xxx |
路径拼错或用了相对路径 | 换绝对路径重跑;Windows 注意反斜杠 |
build.verdict = skip |
本机缺 tsc/mvn/go,没验证过编译 | 装依赖或 npm i 后重跑;别当成通过 |
build.verdict = inconclusive |
编译超时,没有结论 | 加大 --build-timeout,或先单独跑 tsc |
runner = pytest, collected 0 |
没收集到用例(不是失败) | 补 def test_xxx(),或 python <脚本> 直接跑 |
测试超时(180s) |
根目录联调脚本被 pytest 收集后去连服务 | 用 --path <测试目录> 缩小范围 |
未安装 pytest |
本机没有 pytest | pip install pytest,或改用 test-gen 先落骨架 |
编码 gbk 非 UTF-8(fix-format) |
改写有乱码风险,已主动跳过 | 先转码再修,或手工处理 |
Q:为什么我的项目被判 fail?
A:只有三种情况判 fail:①编译不过(syntax_errors 或 build.verdict=fail);②存在 critical 安全;
③security-scan 里 critical 命中。warn 表示"能交付但有阻塞项要清",不是失败。
Q:build=skip 是不是等于通过?
A:不等于。skip 表示本机缺工具(没装 mvn / 没 npm i),编译根本没验证。
报告里必须写"未实测编译",不能写成通过——这是设计上的硬约束。
Q:结果说我有安全问题,但我觉得是误报?
A:每条发现都带 file:line 和原文片段,先打开那一行看。确认误报时看 context:
测试文件(test)、CI 脚本(devtool)、探针脚本(scratch)本来就分级处理,产品代码(prod)才是门禁口径。
Q:大项目扫得动吗?
A:实测过 13 万文件、4.4 万资源文件的仓库。引擎自动跳过依赖/构建/缓存目录,图片/模型/日志只计体积,
源码单独计量;超出上限会标 truncated,不会假装扫全了。
Q:生成的东西不想要,怎么撤销?
A:scaffold/test-gen/crawl-gen 默认不覆盖已有文件;fix-format 默认只预演,加 --apply 才写回;
report 只写一个新的 .md。删掉生成的文件即可,不会动你原有代码。
Q:怎么知道这次改完可以交付了?
A:跑 report --dir <项目>,P0 清单清零 + verdict 不是 fail + by_severity_prod 无 critical/high,就算过闸。
Q:和 eslint / sonarqube / 依赖安装器有什么区别?
A:它们各管一段(JS 规范、全语言规则、依赖安装);本技能把"编译 → 测试 → 安全 → 质量分 → 交付报告"
串成一条本地流水线,且默认零依赖、不联网、结果能对上 file:line。不是替代品,是编排层。
Q:为什么有些文件扫不出结果?
A:引擎跳过依赖与构建目录(node_modules、.git、venv、dist、target 等),
单文件上限 2MB,只认源码扩展名。二进制文件不解析。
Q:非 Python 项目能用吗?
A:能用,但能力分层:安全规则(22 条)、格式、重复块、TODO、项目评分、依赖对账(含 Node)、
编译闸口(tsc / mvn / go)、测试闸口(npm test)都跨语言;
AST 级复杂度、死代码调用图、逻辑缺陷模式、docstring 覆盖率仅 Python 精确。遇到纯前端/Java 项目时,
这些命令会返回 note 明确告诉你"未覆盖 + 建议改用 eslint / gocyclo / knip",不会静默给你一个空结果。
Q:能发现业务逻辑 bug 吗?
A:能发现"模式级"缺陷(9 类 AST 模式:默认参数污染、除零、深索引、比较陷阱、循环提前 return、
句柄泄漏、浮点判等、返回值不一致),但业务规则算错这类问题只能靠测试和真实运行。
所以落地顺序是:先让静态检查把"必然出错"的写法清掉,再用测试与真实服务冒烟锁住业务规则。
Q:怎么判断"开发完能不能上线"?
A:三道闸口,全部自动给结论:①project-audit 的 syntax_errors 为空且 build.verdict != fail(能编译,
TS/Java/Go 也都真实跑编译器);②test-run 有真实通过的用例或类型检查通过(能验证);
③security-scan 无 critical/high(能过安全)。任一不过,verdict 直接 fail/block,不给"看起来还行"的通过。
Q:test-run 显示 collected 0,是测试失败吗?
A:不是。pytest 空集返回码 5,技能判为 ok 并给出提示。真实项目常用脚本式自测
(if __name__ == "__main__": main() + assert),pytest 不会收集——技能会点名是哪个文件,
并建议先用 python <文件> 跑通,再把断言迁移成 def test_xxx() 以便进 CI。
Node/TS 项目不会走到 pytest:有 npm test 就跑它(runner=npm),没有单测但有 tsconfig.json
就退化为 tsc --noEmit 类型闸口(runner=tsc),并把类型错误按 file:line 列出来。
Q:我的仓库根目录只是个沙盒,真正代码在子目录里怎么办?
A:引擎会自动在两层内查找含依赖清单(package.json / requirements.txt / pyproject.toml / pom.xml / go.mod 等)
的子项目作为真实工程根,project-audit 的 subprojects 与 deps-check 的 node.subproject 会标出下钻位置。
Q:这是静态分析,能不能替代人工审查?
A:不能。它能给出"确定的事实"和"确定的问题位置",业务语义、并发正确性、权限模型仍需人判断。
技能的设计目标就是让 AI 只在这些事实之上做判断,而不是凭空发挥。
Q:数据写到哪里?
A:只在技能目录的 scripts/data/history.json 记录调用摘要;生成类命令写到你 --out 指定的目录,
默认不覆盖已有文件(需显式 --force)。
边界与承诺
- 改动可控:修复类命令(
code-fix/code-refactor)只输出方案与代码块;
唯一会写源码的fix-format默认预演,必须显式--apply,且非 UTF-8 文件自动跳过。 - 不联网、不上传:全部本地计算,不发任何代码内容出去。
- 不伪造结论:缺工具就
skip,超时就inconclusive,空测试集就说明"为什么没收集到"。 - 采集脚本遵守目标站 robots.txt 与用户协议,仅采集公开数据,控制访问频率。
已知限制汇总(一次性说清)
| 能力 | 覆盖 | 不覆盖 |
|---|---|---|
| 语法/编译 | Python(compile)、TS(tsc)、Java(mvn)、Go(go build) |
需要专有 SDK 的私有框架编译 |
| 安全规则 | 22 条 CWE 级规则,跨语言 | 0day、逻辑越权、运行时绕过 |
| 逻辑缺陷 | 9 类 AST 模式(仅 Python) | 业务规则算错、并发竞态 |
| 测试 | pytest / npm test / tsc 类型闸口 | 生成带业务断言的高质量用例 |
| 复杂度/死代码 | Python 精确;其他语言给 linter 指引 | 反射/动态调用的引用分析 |