内容
<div align="center">
<img width="125" height="125" alt="image" src="https://github.com/user-attachments/assets/d0e5d020-38ce-44f7-9426-f7fb1b931130" />
# 代码更多
### 您的AI智能体阅读的静态分析工具
AI智能体快速交付代码 — 同时也快速引入漏洞。 CodeMore会扫描代码,然后为**编写代码的智能体**提供一份机器可读的报告,报告中包含确切的修复方法和验证标准。智能体可以自行关闭发现的问题。
[**官网**](https://codemore.tech) · [**文档**](https://codemore.tech/docs) · [**规则目录**](docs/rules) · [**报告模式**](docs/schema.md) · [**更新日志**](CHANGELOG.md)
[](https://www.npmjs.com/package/codemore)
[](LICENSE)
[](docs/rules)
[](docs/external-tools.md)
[](accuracy-report-2026-07-07.md)
[](accuracy-report-2026-07-07.md)
```bash
npx codemore@latest scan .
```
**59 条原生规则 · 8 个外部适配器 · 命令行界面 · MCP 服务器 · VS Code 扩展 · GitHub Actions — 一份报告,在每个表面上字节相同。**
</div>
---
## 目录
- [为什么选择 CodeMore](#why-codemore)
- [快速开始](#quick-start) — [命令行界面](#cli) · [MCP 服务器](#mcp-server--cursor-claude-code-codex-claude-desktop) · [VS Code 扩展](#vs-code-extension) · [GitHub Actions](#github-action) · [托管](#web-scanner-hosted)
- [它能检测到什么](#what-it-catches)
- [报告就是产品](#the-report-is-the-product)
- [智能体修复循环](#agentic-fix-loop)
- [准确性,诚实测量](#accuracy-measured-honestly)
- [CodeMore 不能检测到什么](#what-codemore-does-not-catch)
- [架构](#architecture)
- [开发](#development) · [贡献](#contributing) · [许可证](#license)
---
## 为什么选择 CodeMore
AI 辅助编码以可衡量的、不断增长的速度交付漏洞:
| 发现 | 来源 |
|---|---|
| **45%** 的 AI 生成代码包含 OWASP Top-10 漏洞 | Veracode 2025/26 |
| **98%** 的 1,072 个扫描的 vibe-coded 网站存在 ≥ 1 个安全漏洞 | Symbiotic |
| **70%** 的审计 Lovable 应用禁用了 Supabase RLS | DEV |
| **2 倍** 基线秘密泄漏率在 AI 工具辅助提交 | GitGuardian SOSS 2026 |
| **35 CVEs/月** 归因于 AI 生成代码(而在 1 月份为 6/月) | 2026 年 3 月 |
现有的扫描器(SonarQube、DeepSource、Snyk)针对的是坐在仪表板前的**人类审查者**。但这段代码不是由人类编写的 —— 编写它的 LLM 完全有能力修复自己的错误,**如果报告是为机器读取而设计的**。
这就是楔形。CodeMore 不是另一个 SAST 仪表板。 **它是扫描器和编码智能体之间的报告合同**:每个发现都带有 `suggestedFix` 和明确的 `verificationCriteria` — 不仅仅是“这里有一个问题”,而是“这里有一个问题,以及如何知道你已经修复了它”。
> **编写错误的智能体也可以编写修复程序 — 如果它能读懂报告。**
---
## 快速开始
### 命令行界面
```bash
npx codemore@latest scan .
```
发出 [`codemore-report.json`](docs/schema.md):每个发现都固定在 `file:line:column`,带有规则引用、修复模板和验证标准。将它输送给您的智能体,观察发现被关闭。
```bash
codemore scan . --fail-on BLOCKER # CI 门控:在任何 BLOCKER 上退出时返回非零
codemore scan . --external-tools ruff,biome # 选择加入外部工具
codemore scan . --external-tools all # ruff · golangci-lint · clippy · biome · bandit · gitleaks · npm-audit · pip-audit
codemore scan . --format sarif --out codemore.sarif # GitHub 代码扫描(upload-sarif)
codemore fix . --rule <id> --write # 从 CLI 进行智能体修复循环(需要 LLM API 密钥)
codemore baseline create # 在现有存储库中采用,无需沉溺于遗留发现
```
### MCP 服务器 — Cursor, Claude Code, Codex, Claude Desktop
```bash
npx codemore mcp # 打印配置片段 + 每个客户端的配置路径
npx codemore mcp install --client cursor # 合并到现有配置(首先备份,支持 --dry-run)
```
<details>
<summary>手动配置片段</summary>
```jsonc
{
"mcpServers": {
"codemore": {
"command": "npx",
"args": ["-y", "codemore@latest", "serve-mcp"]
}
}
}
```
</details>
公开了六种工具:`scan_project` · `scan_file` · `explain_issue` · `suggest_fix` · `apply_fix` · `validate_fix`.
### VS Code 扩展
```bash
npm run vsce:package # 构建 codemore-<version>.vsix
code --install-extension codemore-<version>.vsix
```
内联诊断;代码操作快速修复调用智能体循环(计划 → 生成 → 验证 → 重试,最多 3 次尝试)。市场列表即将推出 — 在此之前,请从打包的 `.vsix` 安装。
### GitHub Actions
```yaml
# .github/workflows/codemore.yml
on:
pull_request:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: abhinavteja123/codemore@v1
with:
fail-on: BLOCKER
```
PR 评论机器人;仅在提交的 `.codemore-baseline.json` **之后** 出现的新发现才会导致构建失败。一个完整的复制粘贴安全门控链,连接 CodeMore + Ruff + Biome + Bandit + Gitleaks + npm-audit + pip-audit + Checkov,位于 [`templates/.github/workflows/codemore-security-gate.yml`](templates/.github/workflows/codemore-security-gate.yml)([演练](docs/security-gate.md))。
### Web 扫描器(托管)
在 [**codemore.tech**](https://codemore.tech) 上登录,粘贴公共 GitHub URL 或上传 ZIP — 相同的报告,相同的指纹,无需安装。
---
## 它能检测到什么
**59 条原生规则**,涵盖 **6 个包**,每条规则都映射到一个 *引用的现实世界事件类* — 而不是假设:
| 包 | 规则 | 亮点 |
|---|---:|---|
| `core-security` | 20 | SQL 注入(concat),路径遍历,弱加密,不安全反序列化,`eval`,shell 注入,TLS-off,硬编码秘密模式,硬编码密码(B105 类) |
| `core-quality` | 22 | 未使用的变量/导入/导出,循环复杂度,死条件,剩余打印,异步无等待,不可达代码 |
| `vibe-frontend` | 5 | XSS(`dangerouslySetInnerHTML`),CORS-with-credentials,缺少速率限制,缺少 cookie 标志,文件上传验证 |
| `vibe-secrets` | 4 | 公共环境泄漏(`NEXT_PUBLIC_*` / `VITE_*` / `REACT_APP_*`),硬编码 JWT,MCP 配置秘密,CI/CD YAML 秘密 |
| `vibe-auth` | 3 | BOLA,缺少会话检查,身份验证颠倒 |
| `vibe-supabase` | 3 | RLS-off,RLS-permissive(`USING (true)`),anon-key 捆绑到客户端 |
| `vibe-llm` | 2 | LLM 输出 → eval/exec/SQL 接收,agent-tool-no-confirm |
**8 个外部适配器**(默认关闭,通过 `--external-tools` 选择加入):`ruff` · `golangci-lint` · `clippy` · `biome` · `bandit` · `gitleaks` · `npm-audit` · `pip-audit`。发现被命名为 `ext:<tool>:<rule-id>` — 与原生规则无冲突;缺少二进制文件时静默跳过而不是崩溃。
**遍历器捕获 `.gitignore` 隐藏的内容。** 当开发人员通过 gitignore 隐藏泄漏的秘密文件时,大多数扫描器都看不到它 — 但它仍然存在于磁盘上,在 tarball 中,在 Docker 镜像中。CodeMore 始终扫描秘密形状的文件名(`.env*`,`*.pem`,`*.key`,`firebase-adminsdk*.json`,`credentials.json`,`.npmrc`,`.pypirc`,...)即使被 gitignore。可以通过 `--respect-gitignore-fully` 退出。
每条规则的文档:[`docs/rules`](docs/rules) — 58 页,每条规则一页。
---
## 报告就是产品
每个表面都发出相同的模式稳定的 [`codemore-report.json`](docs/schema.md) — 在每个版本中通过 [`test/parity.test.ts`](test/parity.test.ts) 验证 **字节相同** (不包括时间戳和实例 ID):
```
CLI : issues=224 BLOCKER=5 fingerprint=sha256:7f95f2c62e0d3ecea6f23…
MCP : issues=224 BLOCKER=5 fingerprint=sha256:7f95f2c62e0d3ecea6f23…
Daemon : issues=224 BLOCKER=5 fingerprint=sha256:7f95f2c62e0d3ecea6f23…
```
**一脑,四皮。** 模式是 API;表面是可互换的。
<details>
<summary><b>完整的报告示例</b> — <code>codemore-report.json</code> v1.0.0</summary>
```jsonc
{
"schemaVersion": "1.0.0",
"tool": { "name": "codemore", "version": "0.2.6" },
"project": { "root": ".", "framework": "next.js", "language": "typescript",
"fingerprint": "sha256:7f95f2c62e0d3ecea6f23…" },
"summary": {
"issuesTotal": 42,
"bySeverity": { "BLOCKER": 2, "CRITICAL": 5, "MAJOR": 15, "MINOR": 18, "INFO": 2 },
"byCategory": { "security": 12, "bug": 7, "…": "…" },
"filesAnalyzed": 87,
"linesOfCode": 12450,
"technicalDebtMinutes": 1840
},
"issues": [
{
"id": "vibe-supabase-rls-disabled",
"ruleVersion": "1.2.0",
"instanceId": "01HZ…",
"severity": "BLOCKER",
"confidence": 0.95,
"category": "security",
"title": "Supabase 表没有 RLS 策略",
"evidence": {
"file": "supabase/migrations/001_init.sql",
"line": 14, "column": 1, "endLine": 14, "endColumn": 60,
"snippet": "create table profiles (id uuid primary key, …);",
"matchedPattern": "create-table-without-rls"
},
"whyItMatters": "公共 Supabase 客户端可以读写所有行。 70% 的 Lovable 应用通过此方式泄漏数据。",
"citation": "https://codemore.tech/rules/vibe-supabase-rls-disabled",
"suggestedFix": {
"type": "code-patch",
"instructions": "添加 `ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;` 加至少一个作用于认证用户的策略。",
"patchTemplate": "…",
"verificationCriteria": [
"迁移包含 ALTER TABLE … ENABLE ROW LEVEL SECURITY",
"至少存在一个 CREATE POLICY 针对该表",
"重新扫描不再报告 vibe-supabase-rls-disabled 对于此文件"
]
},
"suppression": {
"available": true,
"directive": "// codemore-ignore: vibe-supabase-rls-disabled",
"scope": "same-line | next-line | file"
}
}
],
"agentInstructions": {
"preamble": "您正在修复 CodeMore 发现的问题。一次应用一个补丁。在每个补丁后,通过 validate_fix 请求重新扫描。",
"orderingHint": "阻碍者 → 关键问题 → 主要问题",
"doNotTouch": ["node_modules/**", "*.lock", ".env*"],
"stopOn": "第一个验证器失败"
},
"meta": {
"rulesEnabled": 58,
"packsLoaded": ["core-security", "core-quality", "vibe-supabase", "…"],
"scanDurationMs": 4321
}
}
```
</details>
模式来源:[`shared/report/schema.json`](shared/report/schema.json)。突破性更改会增加 `schemaVersion` 主要版本,并提供迁移指南。
---
## 智能体修复循环
`apply_fix` 运行一个四阶段循环,对于每个发现最多重试 3 次 — 它在第一次通过时终止,并且 **从不静默保留失败的补丁**:
```
detect ──► plan ──► generate ──► validate
│
├──► (失败) → 重新计划,重试(≤ 3)
└──► (通过) → 应用补丁 · 下一个发现
```
- [`agenticFixer.ts`](daemon/services/agenticFixer.ts) — 协调器;读取发现 + 规则引用 + 框架上下文
- [`validatorHarness.ts`](daemon/services/validatorHarness.ts) — 在临时目录副本中应用补丁,重新运行规则,重新运行文件范围测试,返回 `pass | fail` + 诊断
- LLM 提供商插件:OpenAI · Anthropic · Gemini · 本地,可通过工作区设置(VS Code)或 `CODEMORE_LLM_PROVIDER` 环境变量(CLI)配置
---
## 准确性,诚实测量
合成基准测试是谎言;真正的代码库才是最真实的。每次发布版本,都会针对真实项目进行审计,并公布相关数据 — 包括不好的数据。
**2026-07-07 审计** ([完整报告](accuracy-report-2026-07-07.md)) — 7 个代码库(Python 应用,1.35M-LOC TS 集成开发环境,多语言 Rust,合成基准测试应用,自扫描):**100% 已种植漏洞被检测到**,一个生产 `.env` 中的真实 OpenAI 密钥,**~90% 阻碍者真实阳性率**,自扫描噪音在修复四个错误阳性类别后降低 85%。
**2026-06-12 审计** ([完整报告](accuracy-report-2026-06-12.md)) — 10 个真实代码库,综合 **~85% 阻碍者真实阳性率**,高于 DeepSource 的 ≥ 75% 生产基准:
<details>
<summary>每个项目的详细结果</summary>
| 项目 | 发现 | 阻碍者 | 真实阳性率 | 备注 |
|---|---:|---:|---:|---|
| EchoVault | 122 | 10 | **100%** | 真实 Supabase RLS 漏洞 |
| ProofSnap | 134 | 4 | **100%** | |
| AImentor | 224 | 5 | **100%** | 真实 OpenAI 密钥隐藏在 `.gitignore` 下 |
| Hackathonnn | 129 | 3 | **100%** | |
| shopsec | 113 | 5 | **100%** | |
| Senti | 155 | 8 | **100%** | |
| open-design | 8,615 | 101 | ~80% | |
| Gen ai | 63 | 4 | 75% | 真实 Firebase 管理 SDK 凭证 |
| codemore 自身 | 282 | 6 | 17% | 故意保留的演示数据 |
| **汇总(不包括自身)** | **9,755** | **140** | **~85%** | |
</details>
### CI 中的质量门控
- **100% TP / 100% FP** 在 116 个固定测试套件的回归测试套件中 — 每条规则都附带至少一个真实阳性和一个假阳性固定测试用例,位于 `corpus/rules/<rule-id>/{tp,fp}/`
- 生命周期门控:规则处于 `实验性` → `测试中` → `稳定` 状态,促销需要固定测试对和真实 FP 率证据,通过选择加入遥测;规则低于精度栏时被阻止在 `--enable-experimental` 后面或发布时具有降低的置信度,以便智能体给予较低的权重
| 生命周期 | 默认 | 促销标准 |
|---|---|---|
| `实验性` | 默认关闭 | 一个固定测试对 |
| `测试中` | 默认开启 | ≥ 3 个固定测试对 + 14 天 FP 率 < 15% |
| `稳定` | 默认打包 | 30 天 FP 率 < 5% + 参考应用干净 |
| `已弃用` | 警告,发布下一个主要版本时删除 | — |
---
## CodeMore 不能检测到什么
**按设计** 不在范围内 — 静态分析无法判断这些,智能体无法从源代码差异中自动修复:
弱密码策略 · 审计日志完整性 · 业务逻辑缺陷 · 比赛条件 · 公开 S3/GCS 存储桶 · DAST 发现 · MFA 存在。
完整列表及理由:[`docs/limitations.md`](docs/limitations.md)。将 CodeMore 与 OWASP ZAP、Burp Suite、`checkov` 或您的 IdP 合规仪表板配对使用这些。
---
## 遥测 - 仅限选择加入
默认关闭。通过 `--telemetry` 启用每扫描。收集:工具版本、哈希的项目指纹、表面、规则触发事件。**从未收集:** 文件路径、内容、代码片段、证据文本 — 端点强制执行 Zod `strict()` 模式,并拒绝任何包含这些键的负载,返回 HTTP 400。64 KB 载荷上限,每个指纹速率限制,RLS 拒绝所有读取。
---
## 架构
```
codemore/
├── shared/ ← 一个大脑,跨所有表面共享
│ ├── packs/ ← 58 个规则模块,跨 6 个包
│ ├── rules/ ← 注册表、生命周期门控、抑制、AST 帮助程序(TS + Python)
│ └── report/ ← codemore-report.json v1.0.0 模式 + 类型 + 编写器
├── daemon/
│ ├── cli/ ← CLI 入口 · 遍历器 · 忽略解析器 · 基线差异
│ ├── mcp/ ← MCP 服务器(6 个工具)
│ ├── external/ ← 8 个选择加入适配器,失败时大声报错的解析器
│ ├── services/ ← 智能体修复程序 · 验证器 · 扫描编排器
│ └── llm/ ← OpenAI · Anthropic · Gemini · 本地提供商插件
├── src/ ← VS Code 扩展(守护进程,渲染诊断)
├── web/ ← Next.js:登陆 · 仪表板 · 文档 · /api/遥测
├── corpus/rules/<id>/{tp,fp}/ ← 116 个 TP/FP 固定测试对,与规则目录一一对应
├── docs/ ← 模式 · 限制 · 安全门控 · 58 个规则页面
└── templates/ ← 复制粘贴 GitHub Actions 工作流
```
**一个大脑(`shared/`),四个皮肤(CLI,MCP,扩展,操作),一个报告模式** — 由一致性测试保持诚实,而不是口号。
---
## 开发
```bash
git clone https://github.com/abhinavteja123/codemore
cd codemore
CODEMORE_SKIP_BINARY_DOWNLOAD=1 npm ci # 在开发中跳过二进制下载
npx tsc -p tsconfig.publish.json # 类型检查可发布表面
npm run test:unit # 单元测试(mocha + ts-node)
npx mocha --require ts-node/register test/parity.test.ts # 表面一致性证明
node cli.js scan corpus/rules/vibe-no-rate-limit/tp --json --enable-experimental
cd web && npm ci && npm run dev # 登陆 + 仪表板 + 文档 → localhost:3000
```
VS Code 扩展:`F5` 在 VS Code 中,或 `npm run watch` + `code --extensionDevelopmentPath=.`
---
## 贡献
两种路径:
1. **新规则** — 阅读 [`CONTRIBUTING-RULES.md`](CONTRIBUTING-RULES.md)。PR 机器人控制每个提交:规则模块 + 真实性固定测试用例(必须触发)+ 假阳性固定测试用例(必须不触发)+ 文档页面 + 包注册。机器人是第一个审查者;人类在通过后审查。
2. **其他所有内容**(CLI,MCP,扩展,守护进程,网络,文档)— 阅读 [`CONTRIBUTING.md`](CONTRIBUTING.md)。
在打开 PR 之前:
```bash
npx tsc -p tsconfig.publish.json # 类型检查
node scripts/validate-rule-pr.js # 规则 PR 机器人等效(必须报告“通过”)
node scripts/measure-accuracy.js # 固定测试回归(必须保持 100% TP / 100% FP)
npm run test:unit # 完整单元测试套件
```
发现了假阳性? [打开规则假阳性报告](.github/ISSUE_TEMPLATE) — 假阳性报告直接馈入 beta→stable 提升管道。
**安全发现:** 不要公开发布问题 — 使用 GitHub 的私人漏洞报告流程 ([`SECURITY.md`](SECURITY.md))。
---
## 路线图
- VS Code 市场和 MCP 注册列表
- 演示视频:打开一个真正的 vibe 编码应用,扫描,将报告交给 Claude Code,观看所有 BLOCKER 关闭
- 50 应用基准测试研究,发布数据集
- 遥测驱动的规则自动降级(夜间工作流)
- JetBrains 插件 · 跨语言污点跟踪(研究)
详情:[`docs/roadmap.md`](docs/roadmap.md)。
---
## 许可证
MIT — 见 [LICENSE](LICENSE)。CodeMore 从第一行代码开始就是开源的,并且一直保持开源。楔形是报告合同,而不是门控。
---
<div align="center">
**您的 AI 智能体阅读的静态分析工具。**
[官网](https://codemore.tech) · [文档](https://codemore.tech/docs) · [规则](https://codemore.tech/docs/rules) · [模式](https://codemore.tech/docs/schema) · [npm](https://www.npmjs.com/package/codemore) · [行为准则](CODE_OF_CONDUCT.md)
</div>
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器