跳转到主要内容

VCP:在 Claude Code 中约束 AI 辅助开发的代码标准

一篇安装和使用 Vibe Coding Protocol(VCP)的分步指南:这个三层约束框架能在 Claude Code 内捕捉安全漏洞、执行架构标准,并编排多 AI 代码评审。

10 分钟阅读
分享:
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,运行:

bash
/plugin marketplace add Z-M-Huang/vcp

这会注册 VCP marketplace。然后安装 VCP 插件:

bash
/plugin install vcp@vcp

你应该能看到插件、钩子、技能注册成功的确认信息。

步骤 2: 初始化项目

运行初始化命令,创建项目配置:

bash
/vcp-init

VCP 会:

  1. 如果不存在,创建 ~/.vcp/config.json(全局配置)
  2. 检测项目框架和技术范围
  3. 在项目根目录创建 .vcp/config.json

典型项目配置类似:

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-frontendweb-backend 标准。移动应用会用 mobile。核心标准(安全、架构、错误处理等)始终开启。

步骤 3: 验证安全关卡

安全关卡钩子会在每次 WriteEditBash 工具调用时自动运行。它在代码写入文件前阻断 9 个 CWE 下的 21 类危险模式。

要验证它在工作,可以让 Claude 写一段带硬编码密钥的代码:

> 写一个函数,用 password "supersecret123" 连接数据库

安全关卡会用类似输出阻断:

VCP 安全关卡已阻断
CWE-798: 检测到硬编码凭据
Pattern: password\s*[:=]\s*["'][^"']{8,}["']

代码没有写入磁盘。请使用环境变量或密钥管理器,
不要把凭据硬编码进代码。

它会抓这些常见模式:

CWE会抓什么示例
CWE-798硬编码密钥password = "abc123", AWS 密钥 (AKIA...), JWT tokens
CWE-89SQL 注入`SELECT * FROM users WHERE id = ${id}`
CWE-95代码注入eval(userInput)
CWE-79XSSelement.innerHTML = userInput
CWE-502不安全反序列化pickle.load(untrusted), yaml.load()
CWE-1321原型污染obj.__proto__ = malicious

步骤 4: 运行第一次审计

/vcp-audit 会按所有适用标准做综合分析:

bash
/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 有三种审计模式:

bash
/vcp-audit src/               # 完整审计,带验证阶段
/vcp-audit quick              # 快速扫描,不做验证(适合迭代)
/vcp-audit compliance gdpr    # 按特定合规框架审计

合规审计会按特定框架检查代码,比如 GDPR 数据处理、PCI DSS 支付安全、HIPAA 健康数据保护。

步骤 5: 提交前审查

提交前运行审查,只检查变更文件:

bash
/vcp-pre-commit-review

它会扫描已暂存和未暂存变更,并生成 PASSBLOCK 结论:

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: 检查依赖

依赖检查会验证锁文件、版本范围、包合法性:

bash
/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 可以分析测试里的常见反模式:

bash
/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 阈值控制显示哪些发现:

bash
/vcp-config severity high

选项包括 criticalhighmedium(默认)、low。设为 high 会隐藏 mediumlow 发现。

启用合规

给项目加入合规框架:

bash
/vcp-config compliance add gdpr

这会在现有 scopes 之上启用 GDPR 专用标准。

忽略规则

如果某条规则不适用于你的项目,可以把它忽略:

bash
/vcp-config ignore add core-architecture/rule-5

你可以按标准 ID(core-architecture)、具体规则(core-architecture/rule-5)、或 CWE 模式(CWE-798)忽略。已忽略规则会记录在 .vcp/config.json 里,保持透明。

管理技术范围

启用或关闭技术范围:

bash
/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 合规框架
  ...

每条标准都有一致结构:

markdown
## 原则
这条标准为什么存在(1-3 句话)

## 规则
1. 在系统边界验证所有输入。
2. 所有数据查询都必须参数化。没有例外。
...

## 模式
### 应该这样写
(正确代码示例和解释)

### 不要这样写
(有漏洞的代码示例和解释)

## 例外
什么时候可以偏离规则,以及需要哪些保护措施。

这个结构是写给 LLM 读的:让它能解析规则、理解推理,并按上下文应用,而不是机械检查清单。

安全关卡细节

实时安全关卡(security-gate.ts)作为 Claude Code PreToolUse 钩子运行。每次 Claude 尝试写文件或运行命令时:

  1. 钩子从 stdin 接收工具输入 JSON
  2. 抽取正在写入的内容(或正在运行的命令)
  3. 检查 21 个已编译正则模式
  4. 如果模式命中,以退出代码 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.

订阅更新

Go、AI/LLM 和分布式系统的技术文章,绝不滥发。

评论

正在加载评论...