VCP:在 Claude Code 中约束 AI 辅助开发的代码标准
一篇安装和使用 Vibe Coding Protocol(VCP)的分步指南:这个三层约束框架能在 Claude Code 内捕捉安全漏洞、执行架构标准,并编排多 AI 代码评审。
AI 驱动 · 每小时限 20 次请求
AI 生成代码发布得更快,但数字不好看:相比人类写的代码,漏洞率高 2.74x(CodeRabbit 2025),45% 的 AI 代码含有安全缺陷(Veracode 2025),代码重复增加 8x(GitClear 2024)。当你下一个迭代周期都在修 AI 引入的问题时,速度收益会很快消失。
Vibe Coding Protocol (VCP) 是一个开源 Claude Code 插件,用来执行 40 条安全、架构、质量标准,覆盖 12 个技术范围。它不是事后才跑的 linter,而是一个三层系统,在坏代码落盘前就尽量拦住它。
下面会讲如何安装 VCP、配置项目、使用主要命令,并附上实际输出示例。
VCP 做什么
VCP 有三层,每一层抓另一层抓不到的东西:
| 层级 | 触发时机 | 做什么 |
|---|---|---|
| 主动上下文 | 会话开始 | 把适用规则注入 Claude 上下文,让它从一开始就写得更好 |
| 实时阻断 | 每次写文件 | 安全关卡钩子检查 9 个 CWE 下的 21 个正则模式,在代码落盘前阻断危险内容 |
| 按需扫描 | 你要求时 | 10 个技能做更深的 AI 分析:审计、提交前审查、依赖检查、测试质量审查 |
标准覆盖 OWASP Top 10:2025、CWE Top 25:2024、OWASP API Security Top 10,以及合规框架(GDPR、PCI DSS、HIPAA)。每条标准都有可执行规则、代码示例(应该这样写 / 不要这样写)和记录清楚的例外情况。
前置条件
- Claude Code (CLI)
- Bun 运行时(VCP 钩子是 TypeScript,用 Bun 执行)
步骤 1: 安装 VCP 插件
在你的项目目录打开 Claude Code,运行:
/plugin marketplace add Z-M-Huang/vcp这会注册 VCP marketplace。然后安装 VCP 插件:
/plugin install vcp@vcp你应该能看到插件、钩子、技能注册成功的确认信息。
步骤 2: 初始化项目
运行初始化命令,创建项目配置:
/vcp-initVCP 会:
- 如果不存在,创建
~/.vcp/config.json(全局配置) - 检测项目框架和技术范围
- 在项目根目录创建
.vcp/config.json
典型项目配置类似:
{
"version": "1.0",
"scopes": {
"core": true,
"web-frontend": true,
"web-backend": true,
"database": true,
"devops": true
},
"compliance": [],
"frameworks": ["nextjs", "react", "tailwindcss", "go", "postgresql"],
"exclude": ["node_modules/**", "dist/**", ".next/**"],
"severity": "medium",
"ignore": []
}scopes 控制哪些标准生效。React + Go 项目会拿到 web-frontend 和 web-backend 标准。移动应用会用 mobile。核心标准(安全、架构、错误处理等)始终开启。
步骤 3: 验证安全关卡
安全关卡钩子会在每次 Write、Edit、Bash 工具调用时自动运行。它在代码写入文件前阻断 9 个 CWE 下的 21 类危险模式。
要验证它在工作,可以让 Claude 写一段带硬编码密钥的代码:
> 写一个函数,用 password "supersecret123" 连接数据库安全关卡会用类似输出阻断:
VCP 安全关卡已阻断
CWE-798: 检测到硬编码凭据
Pattern: password\s*[:=]\s*["'][^"']{8,}["']
代码没有写入磁盘。请使用环境变量或密钥管理器,
不要把凭据硬编码进代码。它会抓这些常见模式:
| CWE | 会抓什么 | 示例 |
|---|---|---|
| CWE-798 | 硬编码密钥 | password = "abc123", AWS 密钥 (AKIA...), JWT tokens |
| CWE-89 | SQL 注入 | `SELECT * FROM users WHERE id = ${id}` |
| CWE-95 | 代码注入 | eval(userInput) |
| CWE-79 | XSS | element.innerHTML = userInput |
| CWE-502 | 不安全反序列化 | pickle.load(untrusted), yaml.load() |
| CWE-1321 | 原型污染 | obj.__proto__ = malicious |
步骤 4: 运行第一次审计
/vcp-audit 会按所有适用标准做综合分析:
/vcp-audit src/VCP 会扫描指定路径,并生成结构化报告。简化输出类似:
VCP 审计报告 — src/
已应用标准: 24(core: 12, web-frontend: 4, web-backend: 6, 数据库: 2)
严重度阈值: medium
严重
[core-security/rule-1] src/api/users.ts:42
SQL 查询使用字符串拼接,而不是参数化查询。
修复: 使用参数化查询 — db.query("SELECT * FROM 用户 WHERE id = $1", [id])
[core-security/rule-4] src/config/database.ts:8
数据库密码被硬编码在源文件里。
修复: 从环境变量读取 — process.env.DB_PASSWORD
高
[web-backend-security/rule-7] src/api/auth.ts:15
/api/admin/* 端点缺少授权检查。
修复: 在路由处理器前添加身份认证中间件。
[core-error-handling/rule-1] src/services/payment.ts:67
空 catch 块静默吞掉 PaymentError。
修复: 记录错误,并重新抛出或返回类型化错误响应。
中
[core-architecture/rule-1] src/api/users.ts:1-180
Handler 同时包含业务逻辑、数据库查询和响应格式化。
修复: 把业务逻辑抽到服务层,把数据库访问抽到 repository。
[core-code-quality/rule-3] src/utils/validate.ts + src/helpers/check.ts
两个文件里有重复的 email 验证逻辑。
修复: 合并到单个验证模块。
摘要: 2 个严重, 2 个高, 2 个中, 0 个低
结论: 需要修复审计变体
VCP 有三种审计模式:
/vcp-audit src/ # 完整审计,带验证阶段
/vcp-audit quick # 快速扫描,不做验证(适合迭代)
/vcp-audit compliance gdpr # 按特定合规框架审计合规审计会按特定框架检查代码,比如 GDPR 数据处理、PCI DSS 支付安全、HIPAA 健康数据保护。
步骤 5: 提交前审查
提交前运行审查,只检查变更文件:
/vcp-pre-commit-review它会扫描已暂存和未暂存变更,并生成 PASS 或 BLOCK 结论:
VCP 提交前审查
已审查文件: 3
M src/api/auth.ts
M src/services/user.ts
A src/middleware/rate-limit.ts
发现:
[PASS] src/middleware/rate-limit.ts
未发现问题。
[PASS] src/services/user.ts
未发现问题。
[BLOCK] src/api/auth.ts
core-security/rule-6: JWT token 验证缺少 audience check。
修复: 在 jwt.verify() options 里添加 { audience: "your-app" }。
结论: BLOCK(提交前有 1 个发现需要修复)步骤 6: 检查依赖
依赖检查会验证锁文件、版本范围、包合法性:
/vcp-dependency-check示例输出:
VCP 依赖检查
锁文件: bun.lock(存在,已提交)
已分析依赖: 147
警告:
[version-range] express: "^4.18.0" — 范围过宽,允许 minor 版本更新,
可能带来破坏性变更。考虑固定到 "4.18.2"。
[typosquat-risk] lodahs (devDependencies)
可能是 "lodash" 的拼写仿冒包。确认这确实是你想安装的包。
[no-lockfile-entry] @internal/utils
包在 dependencies 里,但锁文件中缺失。
运行: bun install
PASS: 未发现严重依赖问题。步骤 7: 审查测试质量
VCP 可以分析测试里的常见反模式:
/vcp-review-tests src/__tests__/VCP 测试质量审查 — src/__tests__/
[需要处理] auth.test.ts
- 过度模拟: 7 次 mock 搭建调用。测试验证的是 mock 状态,
不是真实逻辑。考虑使用更少 mock 的集成测试。
- 同义反复式断言(第 45 行): 断言 mock 返回的正是它被配置返回的内容。
这测试的是 mock 框架,不是你的代码。
[良好] rate-limit.test.ts
- 用最少 mock 测试真实状态。
- 覆盖边界情况: 零请求、边界值、时钟翻转。
[需要处理] user.test.ts
- 缺少边界情况: 没有测试空输入、null 值或并发访问。
- 所有断言只检查正常路径。
摘要: 1 个良好, 2 个需要处理, 0 个需要重写配置 VCP
调整严重度
用 severity 阈值控制显示哪些发现:
/vcp-config severity high选项包括 critical、high、medium(默认)、low。设为 high 会隐藏 medium 和 low 发现。
启用合规
给项目加入合规框架:
/vcp-config compliance add gdpr这会在现有 scopes 之上启用 GDPR 专用标准。
忽略规则
如果某条规则不适用于你的项目,可以把它忽略:
/vcp-config ignore add core-architecture/rule-5你可以按标准 ID(core-architecture)、具体规则(core-architecture/rule-5)、或 CWE 模式(CWE-798)忽略。已忽略规则会记录在 .vcp/config.json 里,保持透明。
管理技术范围
启用或关闭技术范围:
/vcp-config scope enable agentic-ai # 构建 AI agents?加入这些标准
/vcp-config scope disable mobile # 不是移动项目底层怎么工作
标准架构
VCP 的 40 条标准是 GitHub 上的 Markdown 文件,通过 manifest 系统在运行时拉取:
manifest.json (根目录)
→ scopes/core.json → 12 标准 (始终启用)
→ scopes/web-frontend.json → 4 标准
→ scopes/web-backend.json → 6 标准
→ scopes/database.json → 2 标准
→ scopes/devops.json → 4 标准
→ scopes/智能体式-ai.json → 5 标准
→ scopes/compliance-*.json → 3 合规框架
...每条标准都有一致结构:
## 原则
这条标准为什么存在(1-3 句话)
## 规则
1. 在系统边界验证所有输入。
2. 所有数据查询都必须参数化。没有例外。
...
## 模式
### 应该这样写
(正确代码示例和解释)
### 不要这样写
(有漏洞的代码示例和解释)
## 例外
什么时候可以偏离规则,以及需要哪些保护措施。这个结构是写给 LLM 读的:让它能解析规则、理解推理,并按上下文应用,而不是机械检查清单。
安全关卡细节
实时安全关卡(security-gate.ts)作为 Claude Code PreToolUse 钩子运行。每次 Claude 尝试写文件或运行命令时:
- 钩子从 stdin 接收工具输入 JSON
- 抽取正在写入的内容(或正在运行的命令)
- 检查 21 个已编译正则模式
- 如果模式命中,以退出代码 2 退出;Claude Code 会把这解释为阻断,并拒绝写入代码
文档文件(.md、.mdx、.txt、.rst)会豁免,这样你可以写安全漏洞说明,而不会触发关卡。
模式有意保持保守。它们抓最常见、最危险的问题,比如硬编码密码、SQL 字符串拼接、带变量的 eval(),而不想用误报淹没你。需要跨变量和函数追踪数据流时,用 /vcp-audit。
更大的图景
AI 写代码快,但没有标准的速度会变成技术债。传统 linters 能抓语法问题,却抓不到架构违规、安全反模式、测试缺口。
VCP 和 linters 的区别在于:规则在代码写出前注入,而不是写出后检查。标准会解释 为什么,让 AI 可以做判断,而不是死跟检查清单。没有单层能抓住一切,但三层合起来覆盖面更大。你也只需要启用项目真正需要的技术范围和合规框架。
快速参考
| 命令 | 作用 |
|---|---|
/vcp-init | 初始化项目配置 |
/vcp-context | 重新注入规则(上下文压缩后) |
/vcp-audit [path] | 完整标准审计 |
/vcp-audit quick | 快速审计,无验证阶段 |
/vcp-audit compliance gdpr | 按合规框架审计 |
/vcp-pre-commit-review | 审查变更文件(PASS/BLOCK) |
/vcp-dependency-check | 验证锁文件、版本和包合法性 |
/vcp-review-tests [path] | 分析测试质量和反模式 |
/vcp-coverage-gaps [path] | 找未测试函数和缺失边界情况 |
/vcp-test-plan [path] | 生成结构化测试计划 |
/vcp-root-cause-check | 验证缺陷修复是否解决根因 |
/vcp-config [command] | 管理 scopes、合规、severity、ignore 规则 |
源代码和完整文档在 GitHub。
许可
Article text © 2026 Mark Huang. Licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) unless otherwise noted. 文章文本可在非商业场景下分享或翻译,但需标注原文 URL。商业使用需事先取得书面许可,并清楚引用原始来源。
代码片段、截图、第三方素材和网站源码可能适用单独条款。
建议署名: Based on "VCP:在 Claude Code 中约束 AI 辅助开发的代码标准" by Mark Huang, originally published at https://markhuang.ai/zh/blog/vcp-enforce-code-standards-with-claude-code.
相关文章

5 分钟试用 Dense-Mem 托管演示
一篇快速教程:使用托管的 Dense-Mem 测试实例,把 Claude Code 和 Codex 接到同一份临时记忆,并观察共享上下文如何让 AI 更聪明地工作。
阅读文章
Dense-Mem 快速开始:让 Claude Code 和 Codex 使用同一份记忆
一篇面向初学者的教程:启动本地 Dense-Mem 服务器,创建第一把 memory key,并把 Claude Code 和 Codex 接到同一个共享 AI 记忆大脑。
阅读文章
用 Traefik 在 Vultr 上安全部署 Dense-Mem
一篇非技术读者也能跟上的 walkthrough:在 Vultr 云服务器上启动 Dense-Mem,配置 Traefik、HTTPS、私有控制台访问,以及给个人、家庭或工作 AI 工具使用的共享记忆。
阅读文章订阅更新
Go、AI/LLM 和分布式系统的技术文章,绝不滥发。
评论
正在加载评论...