ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Claude Code Skills + MCP 工程化实践:从裸用到可编排AI协作者

Claude Code Skills + MCP 工程化实践:从裸用到可编排AI协作者 1. 项目概述这不是一个插件安装教程而是一次工作流重构实践“从‘裸用’到工程化”——这个标题里的“裸用”我太熟悉了。去年初我还在用 Claude Code 做单点任务在 VS Code 里右键选一段 JS 代码让它“优化一下”或者粘贴个 SQL 片段让它“加个注释”。每次操作都像在便利店买瓶水扫码、付款、拿走用完就扔。没有上下文记忆没有状态保存没有错误回滚更谈不上复用。直到某天我连续三次把同一个数据库连接配置写错第四次改完又忘了提交 Git第五次发现前端调用的 API 路径和后端实际暴露的不一致——我才意识到问题不在模型能力而在我的使用方式本身太“裸”。所谓“工程化”不是给工具套个壳而是让 AI 成为可编排、可验证、可追踪、可协作的开发环节。Claude Code Skills MCPModel Communication Protocol正是这个转变的关键支点。Skills 不是功能按钮而是封装了领域逻辑的可注册、可组合、可版本管理的原子能力单元MCP 不是通信协议而是让这些 Skills 能跨 IDE、跨语言、跨环境被统一调度的“操作系统内核”。它让 Claude 不再是“会写代码的聊天机器人”而成了你本地开发环境里一个可编程、可调试、可审计的协作者。这个项目适合三类人第一类是每天和数据库、API、前后端联调打交道的全栈或后端开发者你们最痛的点是重复性数据操作和接口适配第二类是正在搭建内部低代码平台或 DevOps 自动化流水线的技术负责人需要把 LLM 能力纳入现有系统架构第三类是刚接触 Claude Code 但已经厌倦了“复制-粘贴-试错”模式的进阶使用者——你不需要懂 MCP 协议细节但必须理解“为什么要把技能拆成函数而不是写成提示词”。全文不讲概念定义只讲我踩过的坑、调通的链路、压测的数据、上线后的实际提效比。所有配置项、命令行参数、JSON Schema 示例全部来自我生产环境的真实记录。2. 核心设计思路为什么必须放弃“提示词即一切”的思维惯性2.1 “裸用”模式的三大结构性缺陷我花两周时间做了个对照实验用纯提示词方式完成 10 个典型开发任务如“根据 Swagger 文档生成 TypeScript 接口定义”、“将 MySQL 表结构同步到 PostgreSQL”记录每个任务的耗时、返工次数、交付质量。结果很扎心平均返工率 3.7 次/任务主要卡在上下文丢失。比如第一次让 Claude 写一个数据库迁移脚本它能生成基础 SQL但当我追加“加上事务回滚逻辑”它完全忘了之前写的表名和字段再问“用 pg_dump 导出这个表”它又开始重新猜表结构。知识孤岛严重团队共享的 API 响应格式规范、内部数据库命名约定、微服务间调用链路图全靠人工在提示词里反复粘贴。一次规范更新要手动改 20 个常用提示模板。无法集成到 CI/CD最致命的是所有操作都在 IDE 界面里完成没法写成脚本跑在 Jenkins 或 GitHub Actions 上。想做自动化 SQL 审计只能人工点开每个 PR 的 diff 手动检查。这些问题根源在于提示词本质是“一次性指令”而工程化开发需要的是“可复用契约”。就像你不会把整个 Spring Boot 启动逻辑写在 main 方法里也不该把数据库连接池配置、字段校验规则、错误码映射表全塞进一条提示词。2.2 Skills 的本质把领域知识编译成可执行函数Skills 不是高级提示词模板。以我实现的dbx-query-executor这个 Skill 为例它的核心价值体现在三个层面输入契约化它只接受严格定义的 JSON Schema 输入{ type: object, properties: { connection_id: {type: string, enum: [prod-mysql, staging-postgres]}, sql: {type: string, minLength: 1}, timeout_ms: {type: integer, minimum: 1000, maximum: 30000} }, required: [connection_id, sql] }这意味着前端调用时IDE 插件会自动生成带下拉菜单的表单connection_id只能选预设值SQL 输入框有语法高亮和自动补全超时时间用滑块调节——用户根本不可能传入非法参数。执行沙箱化Skill 运行在独立进程里通过mcp-server-std启动。它加载的是预编译的 Python 3.11 环境内置pymysql和psycopg2-binary但禁止访问/etc/passwd或执行os.system()。所有数据库连接都走连接池管理每个请求强制设置max_allowed_packet64MB和wait_timeout300——这些底层参数在提示词里永远说不清。输出标准化无论 SQL 是SELECT还是INSERTSkill 固定返回{ status: success | error, data: { /* 查询结果或影响行数 */ }, metadata: { execution_time_ms: 128, rows_affected: 0, query_hash: a1b2c3d4... } }这个结构让上层应用能统一处理前端展示表格、CI 流水线校验影响行数、审计系统提取query_hash做去重。提示Skills 的边界感比想象中更重要。我最初把“生成 SQL”和“执行 SQL”写在一个 Skill 里结果测试时发现当用户想预览 SQL 而不执行时Skill 只能返回“请确认是否执行”破坏了原子性。后来拆成sql-generator和sql-executor两个 Skill前者纯文本输出后者带执行副作用——这才是符合 Unix 哲学的设计。2.3 MCP 的真实作用解决“谁来管调度”的元问题网上很多文章把 MCP 说成“LLM 通信协议”这容易误导。它真正的价值是提供了一套运行时契约Runtime Contract。举个具体例子当我在 VS Code 里点击“同步数据库表结构”按钮时背后发生了什么VS Code 插件MCP Client向本地mcp-server-std发送list-tools请求Server 返回已注册的 Skills 列表其中包含db-schema-syncer并附带其input_schema和output_schema插件根据 Schema 渲染 UI 表单用户填写源库mysql://...和目标库postgres://...插件构造标准 MCP 请求体发送call-tool指令Server 将请求路由给db-schema-syncer进程进程执行后返回标准 MCP 响应插件解析响应若status success则自动打开 diff 视图若status error则高亮显示error_code: CONNECTION_REFUSED。这个过程里VS Code 插件不需要知道db-schema-syncer是用 Python 还是 Rust 写的Server 不需要关心前端用的是 VS Code 还是 JetBrains IDESkill 本身也不依赖任何 IDE API。MCP 就像 USB-C 接口标准Type-C 线缆Client、充电器Server、手机Skill各自按规范实现就能即插即用。注意MCP 的tool-call机制天然支持异步。我实测过当db-schema-syncer需要对比 200 张表时Server 会先返回{status: running, task_id: abc123}前端可轮询get-task-result获取进度。这比传统 REST API 的长轮询优雅得多——因为 MCP 规范里明确要求 Server 必须实现task-status和cancel-task方法。3. 实操落地从零搭建可运行的 Skills MCP 工作流3.1 环境准备与工具链选型我坚持“最小可行验证”原则所有组件都选社区维护活跃、文档清晰、二进制包开箱即用的方案。避开了需要编译、需要 Docker、需要配置复杂反向代理的选项——毕竟目标是让团队成员 30 分钟内跑通第一个 Skill。MCP Server选用官方推荐的mcp-server-stdv0.5.2。它用 Rust 编写单二进制文件直接下载解压即可运行。不选mcp-server-python是因为其依赖管理太重Python 环境冲突频发不选mcp-server-go是因为其对 Windows 支持不完善我们团队有 30% Win 用户。IDE 客户端VS Code 插件mcp-client-vscodev0.4.1。关键优势是它支持“离线模式”当本地 MCP Server 暂时不可用时插件会缓存最近 5 次 Skill 调用记录并允许用户手动重放——这对网络不稳定的办公区至关重要。Skills 开发框架Python 生态的mcp-skill-sdkv0.3.0。虽然 Rust SDK 性能更好但 Python 的pydantic对 JSON Schema 验证、asyncpg对异步数据库操作的支持更成熟。且团队里 90% 开发者都会 Python。数据库工具链dbx数据库管理工具v2.8.1作为 Skills 的底层驱动。它原生支持 MySQL/PostgreSQL/SQLite 的 DDL 解析、差异计算、SQL 生成比手写正则表达式解析SHOW CREATE TABLE可靠 10 倍。特别注意必须用dbx的 CLI 模式dbx diff --formatjson而非 GUI 模式——Skills 需要的是结构化输出。安装命令macOS/Linux# 下载并安装 mcp-server-std curl -L https://github.com/modelcontextprotocol/mcp-server-std/releases/download/v0.5.2/mcp-server-std-v0.5.2-x86_64-apple-darwin.tar.gz | tar xz sudo mv mcp-server-std /usr/local/bin/ # 初始化 Skills 开发目录 mkdir claude-skills cd claude-skills python3 -m venv venv source venv/bin/activate pip install mcp-skill-sdk0.3.0 dbx-cli2.8.1 # 安装 VS Code 插件手动 # 在 VS Code 扩展市场搜索 MCP Client for VS Code安装 v0.4.1实操心得mcp-server-std默认监听localhost:3000但 VS Code 插件默认连localhost:3001。这个端口不匹配是新手最常见的“连不上”问题。解决方案不是改插件配置而是启动 Server 时指定端口mcp-server-std --port 3001。我把这条命令写进了项目根目录的start-server.sh团队新人双击就能运行。3.2 开发第一个 Skilldbx-query-executor这个 Skill 的目标很明确让用户在 IDE 里安全地执行任意 SQL无需切换到数据库客户端。它要解决的核心痛点是——开发时频繁查数据但又怕误删。Step 1定义输入输出 Schema在skills/dbx_query_executor/schemas.py中from pydantic import BaseModel, Field, validator from typing import List, Optional, Dict, Any class QueryInput(BaseModel): connection_id: str Field( ..., description预配置的数据库连接标识符, enum[dev-mysql, test-postgres, local-sqlite] ) sql: str Field(..., description待执行的 SQL 语句) is_readonly: bool Field( defaultTrue, description是否只读模式禁用 INSERT/UPDATE/DELETE ) class QueryOutput(BaseModel): status: str Field(..., enum[success, error]) data: Optional[Dict[str, Any]] Field(None, description查询结果或影响行数) error_message: Optional[str] Field(None, description错误详情) execution_time_ms: float Field(..., description执行耗时毫秒) rows_affected: int Field(0, description影响行数仅写操作)Step 2实现核心逻辑在skills/dbx_query_executor/main.py中import asyncio import time from mcp_sdk import ToolResult, ToolError from .schemas import QueryInput, QueryOutput from dbx_cli import DBXClient # 预配置连接池避免每次调用都新建连接 CONNECTION_POOL { dev-mysql: DBXClient(mysql://rootlocalhost:3306/dev_db), test-postgres: DBXClient(postgresql://test:testlocalhost:5432/test_db), local-sqlite: DBXClient(sqlite:///./local.db) } async def execute_query(input_data: QueryInput) - ToolResult: start_time time.time() # 1. 参数校验Schema 已做基础校验这里做业务校验 if input_data.is_readonly and input_data.sql.strip().upper().startswith((INSERT, UPDATE, DELETE)): raise ToolError(只读模式下禁止执行写操作) # 2. 获取连接 try: client CONNECTION_POOL[input_data.connection_id] except KeyError: raise ToolError(f未知连接标识符: {input_data.connection_id}) # 3. 执行 SQLdbx-cli 的 execute 方法返回标准 dict try: result await client.execute(input_data.sql) execution_time_ms (time.time() - start_time) * 1000 return ToolResult( outputQueryOutput( statussuccess, dataresult.get(data), execution_time_msround(execution_time_ms, 2), rows_affectedresult.get(rows_affected, 0) ) ) except Exception as e: execution_time_ms (time.time() - start_time) * 1000 return ToolResult( outputQueryOutput( statuserror, error_messagestr(e), execution_time_msround(execution_time_ms, 2) ) )Step 3注册为 MCP Skill在skills/dbx_query_executor/__init__.py中from mcp_sdk import Tool, ToolResult from .main import execute_query from .schemas import QueryInput, QueryOutput # MCP 要求的 Skill 注册入口 def get_tools() - list[Tool]: return [ Tool( namedbx-query-executor, description在预配置数据库连接上安全执行 SQL 查询, input_schemaQueryInput.model_json_schema(), output_schemaQueryOutput.model_json_schema(), handlerexecute_query ) ]Step 4启动并注册创建run_skill_server.pyimport asyncio from mcp_sdk import run_skill_server from skills.dbx_query_executor import get_tools if __name__ __main__: # 启动 Skill Server监听 localhost:3002 asyncio.run( run_skill_server( toolsget_tools(), hostlocalhost, port3002, # 关键告诉 MCP Server 这个 Skill 的地址 server_urlhttp://localhost:3002 ) )然后在终端启动# 终端 1启动 MCP Server mcp-server-std --port 3001 # 终端 2启动 Skill Server cd skills/dbx_query_executor python run_skill_server.py此时mcp-server-std会自动发现http://localhost:3002上的 Skill 并注册。打开 VS Code按CmdShiftPMac或CtrlShiftPWin输入MCP: List Tools就能看到dbx-query-executor出现在列表里。实操心得第一次调试时我遇到 Skill Server 启动后mcp-server-std日志显示Failed to fetch tool list from http://localhost:3002。排查发现是run_skill_server默认启用 HTTPS而本地开发用 HTTP。解决方案是在run_skill_server调用中添加use_httpsFalse参数。这个细节官网文档没写是我在 GitHub Issues 里翻了 3 页才找到的。3.3 构建复合 Skillapi-spec-to-typescript单个 Skill 解决单点问题但工程化价值在于组合。这个 Skill 的目标是输入 OpenAPI 3.0 YAML 文件路径输出可直接导入项目的 TypeScript 接口定义文件。组合逻辑Step 1用file-readerSkill官方提供的基础 Skill读取 YAML 文件内容Step 2用openapi-parserSkill我们自研解析 YAML提取 paths、schemas、responsesStep 3用typescript-generatorSkill 生成.ts文件Step 4用file-writerSkill官方写入磁盘。关键在于MCP 的tool-call链式调用。在skills/api-spec-to-typescript/main.py中async def generate_typescript(input_data: SpecInput) - ToolResult: # 1. 读取文件 file_content await call_tool( file-reader, {file_path: input_data.spec_path} ) # 2. 解析 OpenAPI openapi_data await call_tool( openapi-parser, {yaml_content: file_content[content]} ) # 3. 生成 TS ts_code await call_tool( typescript-generator, { openapi_data: openapi_data[parsed_data], output_format: axios } ) # 4. 写入文件 await call_tool( file-writer, { file_path: input_data.output_path, content: ts_code[generated_code] } ) return ToolResult( output{ status: success, output_path: input_data.output_path, generated_lines: len(ts_code[generated_code].split(\n)) } )注意call_tool是mcp-skill-sdk提供的异步函数它会自动将请求转发给mcp-server-std再由 Server 路由到对应 Skill。这意味着你的复合 Skill 代码里完全不用关心其他 Skill 的部署位置、协议类型、认证方式——MCP 层帮你屏蔽了所有复杂性。3.4 配置 Claude Code 与 Skills 的深度集成Claude Code 本身不原生支持 MCP需要通过claude-code-extension的custom-tools配置。在 VS Code 的settings.json中{ claudeCode.customTools: [ { name: dbx-query-executor, description: 在预配置数据库连接上执行 SQL 查询, inputSchema: { type: object, properties: { connection_id: {type: string, enum: [dev-mysql, test-postgres]}, sql: {type: string}, is_readonly: {type: boolean} } } }, { name: api-spec-to-typescript, description: 根据 OpenAPI 规范生成 TypeScript 接口定义, inputSchema: { type: object, properties: { spec_path: {type: string, description: OpenAPI YAML 文件路径}, output_path: {type: string, description: 生成的 .ts 文件路径} } } } ], claudeCode.mcpServerUrl: http://localhost:3001 }配置生效后在 Claude Code 的聊天窗口输入“帮我把src/api/openapi.yaml生成到src/types/api.ts”它会自动识别出这是api-spec-to-typescript的调用意图并弹出表单让你确认路径——而不是像以前那样它自己瞎猜路径、瞎写文件名。4. 效果验证与性能压测数据比口号更有说服力4.1 量化提效10 个典型场景的耗时对比我选取了团队日常高频的 10 个任务分别用“裸用模式”纯提示词和“SkillsMCP 模式”执行每项任务重复 5 次取平均值。测试环境MacBook Pro M1 Max32GB RAMClaude Sonnet 3.5本地部署模型权重加载在 GPU 上。任务描述裸用模式平均耗时SkillsMCP 模式平均耗时耗时降低关键改进点生成 MySQL 表的 CRUD 存储过程4.2 分钟28 秒91.7%Schema 输入自动补全 语法校验根据 Swagger JSON 生成 Axios API 调用代码3.5 分钟41 秒89.2%OpenAPI 解析 Skill 处理了 12 种 edge case比较两个数据库的表结构差异并生成迁移 SQL6.8 分钟1.2 分钟82.4%dbx diff命令比人工SHOW CREATE TABLE对比快 5 倍将 JSON Schema 转换为 TypeScript Interface2.1 分钟15 秒88.1%json-schema-to-tsSkill 内置了nullable、optional映射规则修复 ESLint 报错的 TypeScript 代码1.8 分钟33 秒81.7%eslint-fixerSkill 直接调用本地 ESLint 配置生成数据库连接池配置HikariCP3.3 分钟22 秒93.3%预设模板 环境变量注入dev/staging/prod从 Git Commit Message 生成 Conventional Commits 格式1.5 分钟18 秒88.0%commit-linterSkill 集成了团队规范 JSON Schema将 Markdown 文档转为 HTML 并嵌入 CSS 主题2.7 分钟39 秒85.9%md-to-htmlSkill 调用本地marked库支持自定义 renderer解析 CSV 文件并生成 Pandas DataFrame 读取代码3.9 分钟47 秒88.2%csv-analyzerSkill 自动检测分隔符、编码、header 行生成 React 组件的 Jest 测试用例5.1 分钟1.4 分钟72.5%jest-generatorSkill 基于组件 props 和 hooks 调用链分析结论平均提效 86.3%但更重要的是稳定性提升。裸用模式下10 次任务中有 3 次因模型幻觉导致生成的 SQL 有语法错误Skills 模式下0 次——因为所有 SQL 都经过dbx-cli的语法解析器校验。4.2 稳定性压测并发 50 请求下的表现用k6对dbx-query-executorSkill 做压力测试本地环境k6 run -u 50 -i 1000 stress-test.jsstress-test.js内容import http from k6/http; import { sleep } from k6; export const options { vus: 50, iterations: 1000, }; export default function () { const url http://localhost:3001/call-tool; const payload { tool: dbx-query-executor, arguments: { connection_id: dev-mysql, sql: SELECT COUNT(*) FROM users WHERE created_at 2024-01-01;, is_readonly: true } }; const params { headers: { Content-Type: application/json } }; http.post(url, JSON.stringify(payload), params); sleep(0.1); }压测结果成功率99.98%1000 次请求中 2 次超时原因为 MySQL 连接池满非 Skill 问题P95 延迟218ms含网络传输、MCP Server 路由、Skill 执行、数据库查询CPU 占用峰值MCP Server 12%Skill 进程 8%MySQL 服务器 35%内存占用MCP Server 稳定在 180MBSkill 进程 95MB实操心得压测时发现 P99 延迟高达 1.2s远高于 P95。深入排查发现是dbx-cli的连接池默认大小为 550 并发瞬间打满。解决方案是修改 Skill 代码在CONNECTION_POOL初始化时指定max_connections50。这个参数在dbx-cli文档里藏得很深属于“只有压测才会暴露”的坑。4.3 工程化收益不只是速度更是可维护性Git 可追溯所有 Skills 的代码、Schema、配置都存放在 Git 仓库。当dbx-query-executor的 SQL 执行逻辑需要升级比如增加慢查询日志只需提交一个 PRCI 流水线自动构建新镜像、滚动更新 Skill Server——开发者完全感知不到后端变化。权限可管控在mcp-server-std的配置文件中可以为不同 Skill 设置访问策略。例如dbx-query-executor的prod-mysql连接只允许devops团队的 IDE 调用普通开发者只能用dev-mysql。这比在提示词里写“不要连生产库”可靠一万倍。监控可接入mcp-server-std提供/metrics端点输出 Prometheus 格式指标mcp_tool_calls_total{tooldbx-query-executor,statussuccess} 1248 mcp_tool_calls_duration_seconds{toolapi-spec-to-typescript} 0.428 mcp_server_errors_total{error_typetool_not_found} 3我们把它接入 Grafana设置了“单个 Skill 错误率 5%”的告警——这是提示词时代完全做不到的运维能力。5. 常见问题与独家避坑指南那些文档里不会写的细节5.1 “Skills 列表为空”问题排查速查表这是新手遇到最多的报错。按以下顺序逐项检查检查项检查方法典型症状解决方案MCP Server 是否启动ps aux | grep mcp-server-stdVS Code 插件报Connection refused执行mcp-server-std --port 3001确认无报错Skill Server 地址是否注册正确查看mcp-server-std启动日志末尾日志显示No tools registered在run_skill_server中确认server_urlhttp://localhost:3002与 Skill Server 监听地址一致Skill 的get_tools()是否导出在 Skill 目录运行python -c from myskill import get_tools; print(get_tools())报ModuleNotFoundError或返回空列表确保__init__.py存在且正确导入get_toolsVS Code 插件是否启用VS Code 状态栏右下角是否有MCP: Ready状态栏显示MCP: Disconnected重启 VS Code或在扩展面板中禁用再启用MCP Client防火墙是否拦截telnet localhost 3002连接超时macOSsudo pfctl -d临时关闭防火墙Windows检查 Windows Defender 防火墙入站规则独家技巧如果以上都正常但MCP: List Tools仍为空试试在 VS Code 设置中添加mcp.client.debug: true然后打开开发者工具Help Toggle Developer Tools在 Console 里看详细的网络请求和错误堆栈。我曾因此发现是 VS Code 插件缓存了旧的 Skills 列表清空~/.vscode/extensions/mcp-client-vscode-*/out/目录后解决。5.2 数据库连接泄漏的静默杀手dbx-cli的连接池在 Skill 进程退出时不会自动释放连接。如果 Skill Server 频繁重启比如开发时热重载会导致 MySQL 的max_connections被占满新连接全部拒绝。现象mcp-server-std日志出现Failed to connect to tool at http://localhost:3002但curl http://localhost:3002/health返回 200。根因dbx-cli的DBXClient对象持有连接而 Python 的atexit钩子在进程异常退出时可能不触发。解决方案在 Skill 的main.py中显式管理连接生命周期import atexit from dbx_cli import DBXClient # 全局连接池 CONNECTION_POOL {} def init_connection_pool(): global CONNECTION_POOL CONNECTION_POOL { dev-mysql: DBXClient(mysql://...), test-postgres: DBXClient(postgresql://...) } def cleanup_connections(): for client in CONNECTION_POOL.values(): try: client.close() # dbx-cli 提供的关闭方法 except: pass # 注册退出清理 atexit.register(cleanup_connections) # 在 Skill 启动时初始化 init_connection_pool()5.3 OpenAPI 解析的 3 个隐藏陷阱openapi-parserSkill 在处理真实项目 Swagger 时暴露出三个文档没提的坑Trap 1$ref循环引用某些 Swagger 文件里components/schemas/User引用了components/schemas/Address而Address又引用了User。openapi-validator库默认会无限递归最终 OOM。解法用jsonschema.RefResolver的max_depth参数限制递归深度resolver RefResolver.from_schema(schema, max_depth5)。Trap 2x-nullablevsnullableSwagger 2.0 用x-nullable: trueOpenAPI 3.0 用nullable: true但很多生成器混用。openapi-spec-validator会报错。解法在解析前预处理 YAML统一替换yaml_content yaml_content.replace(x-nullable:, nullable:)。Trap 3example字段类型不匹配Swagger 里example: 2024-01-01但 schema 定义为type: string, format: dateopenapi-core会尝试把字符串转成date对象失败。解法禁用 example 验证validate_spec(spec, skip_example_validationTrue)。5.4 VS Code 插件的“表单渲染失效”问题有时 Skills 的input_schema里定义了enum但 VS Code 插件渲染的下拉菜单为空白。原因mcp-client-vscode对enum的支持依赖于json-schema的enum字段必须是字符串数组且不能有null值。如果 Schema 里写了enum: [null, dev-mysql]插件会跳过整个字段。验证方法在 VS Code 里按CmdShiftP输入Developer: Inspect Editor Tokens and Scopes点击表单输入框看右侧schema属性是否包含正确的enum数组。修复确保enum定义严格# ✅ 正确 connection_id: str Field(..., enum[dev-mysql, test-postgres]) # ❌ 错误包含 None connection_id: Optional[str] Field(None, enum[None, dev-mysql, test-postgres])6. 后续演进从工作流自动化到智能开发助理这个项目目前止步于“自动化”但它的架构天然支持向“智能助理”演进。我已在内部 PoC 了两个方向上下文感知的 Skill 推荐当用户打开一个user.service.ts文件时Claude Code 不再被动等待指令而是主动弹出卡片“检测到 Angular Service是否生成对应的 Jest 测试是否同步更新 OpenAPI 规
返回列表