ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Claude Code Workspace:AI工程队的运行时与MCP协同架构

Claude Code Workspace:AI工程队的运行时与MCP协同架构

1. 这不是“AI助手”,而是一支可调度、有分工、能闭环的虚拟工程队

“一个人带一队 AI 干活”——这句话在刚看到时,我下意识以为是营销话术。直到我把 Claude Code 工作区真正跑起来、配置好三类 Skill、把 MCP 协议打通、让本地 LLM 和远程服务协同响应不同任务类型,才意识到:它确实不是“一个会写代码的聊天框”,而是一个可编排、可隔离、可审计的轻量级 AI 工程协作系统。

核心关键词里反复出现的Claude Code、MCP、Skill、Workspace,不是孤立概念,而是构成这套协作体系的四根支柱。其中,“Workspace”不是指 VS Code 里的工作区文件夹,而是指 Claude Code 启动后构建的运行时上下文容器——它自带进程隔离、协议路由、能力注册与状态快照功能;“Skill”不是插件或命令,而是被明确定义了输入契约(Input Schema)、输出契约(Output Schema)和执行边界(Execution Context)的原子化能力单元;“MCP”(Model Communication Protocol)不是某种加密传输协议,而是一套面向 AI Agent 能力调用的标准化接口规范,类似 REST 之于 Web API,但专为模型间协作设计;而 “Claude Code” 本身,是目前唯一将这三者深度集成、开箱即用的客户端实现。

我最初踩的第一个坑,就是把它当成“Claude 的 VS Code 插件”来装。结果安装完发现报错failed to start claude’s workspace,查日志全是virtual machine platform not available。后来才明白:Claude Code 的 Workspace 本质是一个轻量级沙盒运行时,它需要 Windows Hypervisor Platform(WHPX)或 Linux KVM 支持,不是为了跑虚拟机,而是为了给每个 Skill 创建独立的、可销毁的执行环境——就像 Docker 容器之于应用,这个沙盒之于 AI 能力。它要隔离的是模型调用上下文、临时文件、网络出口、甚至 GPU 显存分配策略,而不是模拟完整操作系统。

所以,当你看到热搜里有人搜“claude code 安装失败”“workspace routing discovery timeout”,问题往往不出在安装包本身,而出在你没意识到自己正在部署一个微型 AI 编排平台,而非安装一个编辑器扩展。它对底层运行时的要求,接近于一个轻量 Serverless Runtime,而不是传统 IDE 插件。这也是为什么 Ubuntu 配置成功率远高于 Windows(KVM 默认启用),而 Windows 用户必须手动开启“虚拟机平台”并重启——这不是兼容性补丁,而是架构刚需。

我现在的 Workspace 里常驻着 7 个 Skill:两个本地 LLM 调度器(一个接 LMStudio 的 Qwen2.5-Coder,一个接 Ollama 的 DeepSeek-Coder)、一个 Git 操作代理、一个数据库 Schema 解析器、一个 Postman 风格的 API 测试生成器、一个 Markdown 文档结构校验器,还有一个自定义的“需求-用例-测试用例”三元组生成器。它们不共享内存,不共用模型实例,彼此之间只通过 MCP 协议交换 JSON-RPC 请求。我作为“队长”,只做三件事:定义任务目标、选择 Skill 组合、审核最终交付物。中间所有推理、调用、重试、回滚,全部由 Workspace 自动协调。

这已经不是“我写提示词,AI 回答”的线性关系,而是“我发指令,AI 工程队自动拆解、分派、执行、整合、验证”的闭环流程。真正的价值不在单点智能,而在多 AI 协同的确定性与可追溯性——每个 Skill 的输入输出都被 Workspace 记录,每次失败都有明确的错误码和上下文快照,你可以像调试微服务一样,逐层排查是 Skill 实现问题、MCP 路由问题,还是 Workspace 状态管理问题。

提示:不要试图用传统插件思维去理解 Claude Code。它不提供“一键生成 React 组件”这种功能,而是提供“如何让一个 Skill 专门负责组件生成、另一个 Skill 负责 Props 类型推导、第三个 Skill 负责 ESLint 规则校验,并确保三者输出一致”的基础设施。它的门槛不在使用,而在建模——你得先想清楚,你的“AI 工程队”里,每个成员该干什么、怎么交接、出错了谁兜底。

2. Workspace 不是文件夹,而是运行时状态机:从启动失败到稳定运行的底层逻辑

failed to start claude’s workspace这个报错,几乎成了新手第一道门槛。但如果你只把它当作“Windows 功能没开”来处理,就错过了理解整个系统架构的关键入口。Claude Code 的 Workspace,本质上是一个基于状态机驱动的 AI 协作运行时(Runtime),它的启动过程不是加载配置文件那么简单,而是一系列严格的状态跃迁:

INIT → PROVISIONING → ROUTING_DISCOVERY → SKILL_REGISTRATION → READY

每一个状态都对应一组可验证的系统条件。而failed to start实际上是状态机卡在某个环节的通用提示,具体原因必须看日志中的state transition failed at [xxx]字段。

2.1 INIT 阶段:验证基础运行时环境

这是最常被忽略的阶段。Workspace 启动前会执行三项硬性检查:

  1. 虚拟化支持检测:

    • Windows:检查HypervisorPlatform服务是否启用(非 Hyper-V,而是更底层的 WHPX)。命令行验证:systeminfo | findstr "Hyper-V"返回空,但Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All必须显示Enabled。很多人开了 Hyper-V 却没开 WHPX,导致失败。
    • Linux:检查/dev/kvm是否可读写,且当前用户在kvm组中。Ubuntu 22.04+ 默认启用,但若用 WSL2,则需额外配置wsl --update+wsl --shutdown+ 在.wslconfig中添加kernelCommandLine = "systemd.unified_cgroup_hierarchy=1"。
    • macOS:依赖 Apple Virtualization Framework,仅支持 macOS 13.3+,且需在“系统设置 > 隐私与安全性 > 完全磁盘访问”中授权 Claude Code。
  2. 端口可用性检测:
    Workspace 默认监听localhost:3000(MCP 通信)和localhost:3001(内部管理 API)。如果被 Docker、其他开发服务器占用,会直接失败,且错误日志中不会明确提示端口冲突,只会显示PROVISIONING timeout。实测下来,lsof -i :3000或netstat -ano | findstr :3000是最快定位手段。

  3. 存储路径权限检测:
    Workspace 需要在~/.claude-code/workspace(Linux/macOS)或%LOCALAPPDATA%\ClaudeCode\workspace(Windows)创建沙盒目录。如果路径包含中文、空格或符号(如C:\Users\张三\Documents),部分版本会因路径编码问题卡在 INIT。解决方案:在启动参数中显式指定英文路径,例如claude-code --workspace-root "C:\claude-workspace"。

2.2 ROUTING_DISCOVERY 阶段:MCP 协议栈的握手与拓扑构建

这才是真正体现“多 AI 协作”本质的阶段。Workspace 启动后,会主动向本地所有已注册的 MCP 兼容服务发起mcp://discovery探测请求。这个过程不是简单的 ping,而是三次握手:

  1. 发送{"jsonrpc":"2.0","method":"mcp.discovery","id":1}
  2. 接收响应必须包含capabilities字段,声明支持的tools(Skill 列表)、resources(数据源)、protocols(支持的 MCP 版本)
  3. Workspace 根据响应构建内部路由表,决定后续请求该转发给哪个 endpoint

常见失败场景:

  • workspace routing discovery timeout:说明至少有一个 Skill 服务未响应。可能原因:

    • Skill 服务未启动(如 LMStudio 未运行)
    • Skill 服务监听地址不是localhost:3002(默认)而是127.0.0.1:3002(IPv4/6 差异)
    • Skill 服务返回的capabilities缺少必需字段(如漏掉tools)
  • MCP protocol version mismatch:Workspace 当前要求 MCP v0.5,但某些旧版 Skill(如早期 Altium Designer AI 接口)只支持 v0.3。此时需升级 Skill 或降级 Workspace(不推荐)。

我自己的解决方案是:为每个 Skill 建立独立的健康检查脚本。例如,对 LMStudio 的 Skill,我写了一个 Python 脚本定期发送探测请求:

import requests import time def check_mcp_health(): try: resp = requests.post( "http://localhost:3002", json={"jsonrpc":"2.0","method":"mcp.discovery","id":1}, timeout=2 ) if resp.status_code == 200 and "capabilities" in resp.json(): return True except: pass return False while not check_mcp_health(): print("Waiting for LMStudio MCP service...") time.sleep(1)

这个脚本在启动 Workspace 前运行,确保所有依赖服务就绪。它比单纯等待timeout更可靠,也更容易定位是哪个 Skill 拖慢了整个启动流程。

2.3 SKILL_REGISTRATION 阶段:能力注册与沙盒初始化

当路由拓扑建立后,Workspace 开始为每个发现的 Skill 创建沙盒实例。这里的关键是:每个 Skill 都运行在独立的、资源受限的进程中。Workspace 会为每个沙盒分配:

  • 内存上限:默认 1GB,可在skill-config.yaml中修改memory_limit_mb
  • CPU 核心数:默认绑定 1 个逻辑核,避免模型推理抢占主线程
  • 文件系统视图:沙盒只能访问workspace/skill-name/下的子目录,无法越界读写
  • 网络出口:默认禁用外网访问,如需调用外部 API,必须在 Skill 配置中显式声明allowed_hosts: ["api.github.com"]

这就是为什么vscode this extension has been disabled because the current workspace is not这类错误会出现——VS Code 的原生插件机制无法感知 Claude Code 的沙盒上下文,它看到的是“一个未激活的、无权限的扩展”。正确做法是:所有 Skill 必须通过 MCP 协议注册,而非 VS Code Extension API 注册。VS Code 只作为前端 UI,真正的能力调度完全由 Workspace 独立完成。

我曾遇到一个 Bug:某个 Skill 在注册时反复失败,日志显示sandbox init failed: permission denied on /tmp。排查发现,该 Skill 内部使用了tempfile.mkstemp(),而 Workspace 的沙盒默认挂载/tmp为只读。解决方案不是改 Skill 代码,而是在其配置中添加:

sandbox: mounts: - source: /tmp target: /tmp type: tmpfs options: "size=100M"

这体现了 Workspace 的核心设计哲学:不修改 Skill 代码,而是通过运行时配置适配其行为。它像一个精密的“AI 能力路由器”,而不是一个“万能胶水”。

注意:Workspace 的状态机是严格单向的。一旦卡在某个状态,手动修改配置文件不会触发重试——必须完全退出进程,清空~/.claude-code/state.json(记录当前状态),再重启。这是为了保证状态一致性,避免半途而废的中间态。

3. Skill 不是插件,而是契约化能力单元:从零开始构建一个可复用的 Git 操作 Skill

搜索热词里频繁出现的skill编码193、skill编码247、workbuddy skill,暗示很多人把 Skill 当成“预设功能编号”来调用。但实际并非如此。Skill 的本质是一份明确定义了能力契约(Capability Contract)的 JSON Schema 文件 + 一个符合 MCP 协议的 HTTP 服务。它的价值不在于“能做什么”,而在于“如何被可靠地调用”。

以我自建的git-skill为例,它解决的是“让 AI 代理安全执行 Git 操作”这一高频需求。市面上很多 AI 工具直接调用git commit -m "auto",风险极高——它无法判断当前分支是否干净、是否有未追踪文件、是否与远程存在冲突。而一个合格的 Skill,必须把所有这些隐含前提,变成显式的输入契约。

3.1 定义 Skill 的能力契约(Capability Contract)

在git-skill/capabilities.json中,我定义了三个核心工具(Tool):

{ "tools": [ { "name": "git_status", "description": "获取当前仓库状态,包括已暂存、未暂存、未追踪文件列表", "input_schema": { "type": "object", "properties": { "include_untracked": {"type": "boolean", "default": true} } } }, { "name": "git_commit", "description": "执行 git commit,仅在工作区干净且暂存区有变更时允许", "input_schema": { "type": "object", "required": ["message"], "properties": { "message": {"type": "string", "minLength": 5}, "allow_empty": {"type": "boolean", "default": false} } } }, { "name": "git_push", "description": "推送当前分支到 origin,仅在本地分支与远程同名且无差异时允许", "input_schema": { "type": "object", "required": ["branch"], "properties": { "branch": {"type": "string"}, "force": {"type": "boolean", "default": false} } } } ] }

关键点在于:

  • 每个 Tool 都有input_schema:不是简单传字符串,而是强制校验结构。例如git_commit要求message至少 5 字符,防止 AI 生成"fix"这种无意义提交信息。
  • 描述中明确约束条件:git_commit的 description 写明“仅在工作区干净且暂存区有变更时允许”,这告诉 Workspace:如果前置检查失败,应直接拒绝调用,而非让 Skill 自己处理错误。
  • 没有git_checkout这类高危操作:Skill 设计原则是“最小权限”。checkout 可能丢失未提交代码,必须由人工确认,不放入自动化 Skill。

3.2 实现 Skill 的 MCP 服务端

Skill 服务端只需一个轻量 HTTP 服务,监听POST /,处理 JSON-RPC 请求。我用 Python + Flask 实现:

from flask import Flask, request, jsonify import subprocess import os import json app = Flask(__name__) @app.route('/', methods=['POST']) def handle_mcp(): data = request.get_json() method = data.get('method') # 验证 MCP 协议基础字段 if not all(k in data for k in ['jsonrpc', 'method', 'id']): return jsonify({"jsonrpc":"2.0","error":{"code":-32600,"message":"Invalid Request"},"id":data.get('id')}), 400 try: if method == "git_status": result = _run_git_command(["git", "status", "--porcelain", "-z"]) files = [] for line in result.strip('\x00').split('\x00'): if line: status, path = line[:2], line[3:] files.append({"status": status, "path": path}) return jsonify({ "jsonrpc": "2.0", "result": {"files": files}, "id": data['id'] }) elif method == "git_commit": input_data = data.get('params', {}) message = input_data.get('message') if len(message) < 5: raise ValueError("Commit message too short") # 关键:前置检查 status = _run_git_command(["git", "status", "--porcelain"]) if status.strip(): raise RuntimeError("Working directory is not clean") _run_git_command(["git", "commit", "-m", message]) return jsonify({ "jsonrpc": "2.0", "result": {"success": True, "message": f"Committed: {message}"}, "id": data['id'] }) else: raise NotImplementedError(f"Unknown method: {method}") except Exception as e: return jsonify({ "jsonrpc": "2.0", "error": {"code": -32000, "message": str(e)}, "id": data['id'] }), 200 def _run_git_command(cmd): try: result = subprocess.run( cmd, capture_output=True, text=True, cwd=os.environ.get('GIT_REPO_PATH', '.'), timeout=30 ) if result.returncode != 0: raise RuntimeError(f"Git command failed: {result.stderr}") return result.stdout except subprocess.TimeoutExpired: raise RuntimeError("Git command timeout")

这个实现的关键细节:

  • 所有 Git 命令都加了超时(30秒):防止git status在巨型仓库中卡死,拖垮整个 Workspace。
  • 前置检查逻辑内置于 Skill:git_commit在执行前主动检查工作区状态,而不是依赖 Workspace 传递“安全标志”。因为 Workspace 不懂 Git,它只懂 MCP 协议。
  • 错误码遵循 MCP 规范:-32000表示“服务器端错误”,-32600表示“无效请求”,便于 Workspace 统一处理重试策略。

3.3 在 Workspace 中注册并测试 Skill

将 Skill 服务启动后(python git-skill-server.py),只需在 Workspace 的skills.yaml中添加:

- name: "git-skill" endpoint: "http://localhost:3003" capabilities_file: "./git-skill/capabilities.json" enabled: true sandbox: memory_limit_mb: 256

然后重启 Workspace。它会自动发现并注册该 Skill。测试方法很简单:在 Workspace 的调试控制台(DevTools Console)中执行:

// 调用 git_status await mcpClient.call("git_status", {include_untracked: true}); // 尝试危险操作(会失败) await mcpClient.call("git_commit", {message: "fix"}); // 返回 error: "Working directory is not clean" // 安全操作 await mcpClient.call("git_commit", {message: "feat: add user authentication flow"});

整个过程不需要重启 VS Code,不需要安装任何插件,只需要一个符合契约的 HTTP 服务。这就是 Skill 的威力:它把 AI 能力解耦为可独立开发、可单独测试、可按需组合的标准化模块。你完全可以把git-skill打包成 Docker 镜像,部署在公司内网,让所有团队共享同一个受控的 Git 操作入口。

实操心得:不要试图在一个 Skill 里塞进所有功能。我最初把git checkout、git merge全部放进git-skill,结果一次误操作导致同事本地分支被覆盖。后来拆分为git-safe-skill(只读+安全写)和git-admin-skill(需二次确认),并通过 Workspace 的 Skill 权限矩阵控制谁能调用哪个。这才是工程化思维。

4. MCP 协议:AI Agent 间的“普通话”,不是技术选型而是协作基建

热搜词里反复出现的mcp协议、altium designer ai接口 mcp、unreal 5.8 mcp,揭示了一个重要趋势:MCP 正在成为 AI Agent 互操作的事实标准。但它不是某种新技术,而是一套精巧的“最小公约数”设计——它不规定模型怎么推理,不规定数据怎么存储,只约定“能力如何被发现、如何被调用、如何被描述”。

理解 MCP,关键要抓住它的三个设计锚点:

4.1 发现(Discovery):让 AI “看见”彼此,而不是硬编码地址

传统方案中,AI 工具之间协作靠硬编码 URL:curl http://localhost:5000/api/generate。这导致两个问题:

  • 拓扑僵化:换一台机器就得改所有配置
  • 能力黑盒:调用方不知道对方能做什么,只能靠文档或试错

MCP 的mcp.discovery方法解决了这个问题。它要求每个服务返回结构化的capabilities,例如:

{ "capabilities": { "tools": [ { "name": "generate_sql", "description": "根据自然语言描述生成 SQL 查询", "input_schema": { "type": "object", "properties": { "question": {"type": "string"}, "schema": {"type": "string"} } } } ], "resources": [ { "name": "customer_db", "type": "sql_database", "description": "客户主数据表,包含 id, name, email 字段" } ] } }

Workspace 启动时,会收集所有capabilities,构建一张“能力地图”。当你下达“分析客户地域分布”指令时,Workspace 不是随机选一个 Skill,而是:

  1. 解析指令语义,识别需要generate_sql工具和customer_db资源
  2. 查询能力地图,找到同时提供这两者的 Skill(比如db-skill)
  3. 将customer_db的连接信息注入generate_sql的调用上下文

这个过程完全自动化,无需人工配置路由规则。它让 AI 协作从“点对点直连”升级为“服务发现驱动”。

4.2 调用(Invocation):JSON-RPC 之上,增加语义化上下文

MCP 的调用方法mcp.invoke看似只是 JSON-RPC 的封装,但它增加了关键的context字段:

{ "jsonrpc": "2.0", "method": "mcp.invoke", "params": { "tool": "generate_sql", "arguments": {"question": "北京用户占比多少?"}, "context": { "resource_references": ["customer_db"], "task_id": "task-2024-08-15-001", "user_intent": "business_analysis" } }, "id": 1 }

context的价值在于:

  • 资源绑定:resource_references告诉 Skill:“你要用的数据库是这个”,而不是让 Skill 自己猜或硬编码。
  • 任务溯源:task_id让 Workspace 能追踪一个复杂任务(如“生成报告”)下所有子调用,便于审计和重试。
  • 意图对齐:user_intent告诉 Skill:“这不是技术查询,而是业务分析”,影响其输出风格(比如是否加百分比、是否附带解读)。

我曾用这个机制解决一个棘手问题:同一个generate_sqlSkill,在“开发调试”模式下返回原始 SQL,在“生产报告”模式下返回带注释的 SQL + 执行计划。只需在context.user_intent为debug时,Skill 返回{"sql": "SELECT ...", "explain": true},为business_analysis时,返回{"sql": "SELECT ...", "summary": "北京用户占总用户32.5%"}。调用方(Workspace)完全不用改代码,只改context。

4.3 资源(Resources):数据主权的声明式管理

MCP 的resources字段,是它区别于其他协议的核心。它不是让 Skill 去“访问数据库”,而是让 Skill “声明自己能操作哪些资源”,并由 Workspace 统一授权:

"resources": [ { "name": "sales_data_2024", "type": "csv_file", "uri": "file:///workspace/data/sales.csv", "schema": {"columns": ["date", "product", "revenue"], "format": "utf-8"} } ]

Workspace 在调用 Skill 前,会检查:

  • 该 Skill 是否被授权访问sales_data_2024(基于 Workspace 的权限策略)
  • uri是否在 Workspace 的沙盒白名单内(防止 Skill 读取/etc/passwd)
  • schema是否匹配当前任务需求(比如需要revenue字段,但资源 schema 中没有)

这实现了真正的“数据最小权限”。例如,gis-skill可以声明访问geo_boundaries.shp,但 Workspace 可以配置:只有admin角色的任务才能触发此资源访问。普通用户任务即使调用了gis-skill,也会被拦截。

我公司的实践是:所有敏感数据资源(如客户 PII)都注册为 MCP Resource,并设置access_level: "confidential"。Workspace 的全局策略规定:任何 Skill 调用confidential资源,必须伴随人工审批流(通过 Slack Bot 发起)。这比在每个 Skill 里写审批逻辑,要安全和可控得多。

关键认知:MCP 不是让你“多学一个协议”,而是帮你建立 AI 协作的基础设施层。就像 TCP/IP 让不同厂商的电脑能联网,MCP 让不同厂商的 AI 模型能协作。你不必自己实现 MCP,只需确保你的 Skill 服务响应mcp.discovery和mcp.invoke,剩下的路由、发现、安全,都交给 Workspace。

5. 从“一个人干活”到“一支队协作”:我的 Workspace 日常工作流拆解

标题说“一个人带一队 AI 干活”,但真正落地时,关键不是“带”,而是“编排”。我每天的工作流,已经固化为五个标准阶段,每个阶段由不同的 Skill 组合承担,Workspace 全程自动调度:

5.1 需求澄清阶段:用req-skill+doc-skill生成结构化输入

当产品经理甩来一段模糊需求:“做个登录页,要好看,支持微信扫码”,我不会直接丢给 AI 写代码。而是先启动req-skill(需求解析 Skill):

# 在 Workspace 控制台执行 mcp invoke req-skill.parse --input "做个登录页,要好看,支持微信扫码" \ --context '{"project_phase": "requirements"}'

req-skill返回结构化 JSON:

{ "functional_requirements": [ {"id": "FR-001", "description": "用户可通过手机号+密码登录"}, {"id": "FR-002", "description": "用户可通过微信扫码登录"}, {"id": "FR-003", "description": "登录成功后跳转至首页"} ], "non_functional_requirements": [ {"id": "NFR-001", "description": "页面加载时间 < 1s", "metric": "LCP"}, {"id": "NFR-002", "description": "支持 Chrome/Firefox/Safari 最新两版", "metric": "browser_support"} ], "design_constraints": ["使用 Ant Design 组件库", "遵循公司品牌色 #2563eb"] }

接着,doc-skill(文档生成 Skill)自动将此 JSON 转为 Confluence 格式的需求文档草稿,并附上可点击的原型链接(由figma-skill生成)。整个过程 12 秒完成,比人工整理快 5 倍,且零遗漏。

5.2 技术方案阶段:用arch-skill+db-skill生成可评审的设计

有了结构化需求,arch-skill(架构设计 Skill)被触发。它会:

  • 查询db-skill获取当前用户表结构(mcp invoke db-skill.describe_table --name users)
  • 查询api-skill获取微信开放平台 API 文档(mcp invoke api-skill.fetch_spec --provider wechat)
  • 综合生成技术方案,包括:
    • 前端组件树(LoginForm、WeChatQRCode)
    • 后端接口契约(POST /api/v1/login的 request/response schema)
    • 数据库变更(新增wechat_openid字段)

关键点在于:arch-skill不是凭空想象,而是基于真实数据源和 API 规范的推理。它返回的方案,每一行都有依据,可直接进入技术评审。

5.3 代码生成阶段:用coder-skill+test-skill+lint-skill形成闭环

这是最体现“多 AI 协作”的阶段。我下达指令:“实现登录页前端”,Workspace 自动编排:

  1. coder-skill(基于 Qwen2.5-Coder)生成 React 组件代码
  2. test-skill(基于 Jest + RTL)为该组件生成单元测试
  3. lint-skill(基于 ESLint + Prettier)检查代码风格和潜在 bug

三者并行执行,但test-skill的输入依赖coder-skill的输出,lint-skill的输入依赖前两者。Workspace 通过task_id关联它们,并在任一环节失败时暂停后续步骤。例如,lint-skill发现coder-skill生成的代码用了any类型,会返回:

{ "issues": [ {"line": 42, "rule": "no-explicit-any", "severity": "error"}, {"line": 15, "rule": "react-hooks/exhaustive-deps", "severity": "warning"} ] }

Workspace 会自动将此反馈注入coder-skill的下一轮调用上下文,要求其修复。这个“生成-测试-修复”循环,平均 3 轮收敛,产出代码质量远超单次生成。

5.4 集成验证阶段:用e2e-skill+perf-skill模拟真实场景

代码合并前,e2e-skill(端到端测试 Skill)启动 Playwright,模拟真实用户流:

  • 打开登录页
  • 输入测试手机号
  • 点击微信扫码(e2e-skill会调用mock-wechat-skill模拟扫码成功)
  • 验证跳转至首页

同时,perf-skill(性能分析 Skill)在后台录制 Lighthouse 报告,检查是否满足NFR-001(LCP < 1s)。如果失败,它会定位瓶颈(如某个第三方 SDK 加载过慢),并建议优化方案。

5.5 知识沉淀阶段:用wiki-skill+changelog-skill自动归档

最后,wiki-skill将本次实现的技术要点、踩坑记录、性能优化方案,自动更新至内部 Wiki。changelog-skill生成符合 Conventional Commits 规范的 CHANGELOG 条目,并关联 Jira Issue。所有这些,都不需要我手动复制粘贴。

整个工作流,我只做了三件事:

  1. 输入原始需求文本
  2. 审核req-skill输出的结构化需求(确认无歧义)
  3. 审核最终代码和测试报告(确认符合预期)

中间所有技术决策、代码生成、测试验证、文档编写,全部由 Workspace 调度 Skill 自动完成。我不是在“用 AI”,而是在“指挥 AI 工程队”。这支队伍的每个成员,职责清晰、契约明确、能力可验证、错误可追溯。

最后分享一个小技巧:我给每个 Skill 都配置了log_level: "debug",并在 Workspace 的日志中过滤task_id。当某个任务出问题时,我只需复制task_id,就能在日志中看到从需求解析到代码生成的完整调用链,精确到毫秒级。这比翻几十个分散的日志文件,高效太多。真正的生产力提升,不在于 AI 多聪明,而在于整个协作过程是否可观察、可调试、可优化。

返回列表