ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AGENTS.md协议解析:AI编程助手的统一交互标准

AGENTS.md协议解析:AI编程助手的统一交互标准 1. 项目概述一场静默却关键的协议对齐最近在几个核心开发者社区刷到一条消息“Anthropic 正式支持 OpenAI 的 AGENTS.md 规范”。没有发布会没有长篇白皮书只有一条简短的 GitHub 提交记录和官方文档页的一处更新。但作为连续三年深度参与 AI 编程工具链落地的从业者我一眼就意识到——这不是一次普通的功能兼容而是一次底层协议层面的“握手”是 AI 编程助手从野蛮生长走向工程化协作的关键拐点。AGENTS.md 这个文件名表面看只是 OpenAI 在其开源项目中定义的一个 Markdown 格式规范但它实际承载的是AI 编程助手如何与人类开发者协同工作的契约框架。它不规定模型怎么推理、怎么生成代码而是明确定义当一个 AI 助手要执行“读取文件”“运行测试”“提交 Git”“调用外部 API”这类操作时它该用什么结构描述意图、该返回什么格式的结果、该在什么上下文中触发、该怎样向用户解释自己正在做什么。换句话说AGENTS.md 是给 AI 助手写的“操作说明书”而不是给程序员写的“API 文档”。Anthropic 的加入意味着 Claude 系列模型尤其是面向开发者的 Claude Code 和即将发布的 Claude 4 Dev不再只遵循自己内部设计的指令协议而是主动适配这套已被 VS Code Copilot、Cursor、Windsurf 等主流工具广泛采用的交互语言。这背后解决的不是“能不能用”的问题而是“能不能无缝换用”“能不能组合使用”“能不能被统一调度”的问题。比如你今天用 Cursor 写前端组件明天想切到 Windsurf 做后端接口调试如果两者都基于 AGENTS.md你的自定义工作流脚本、IDE 插件配置、甚至团队共享的 prompt 模板几乎不用改就能平移过去。这种一致性对个人效率提升可能只是 10%但对团队协作、CI/CD 集成、企业级 AI 工具治理来说是质变的起点。我试过在同一个项目里混用 Copilot 和 Claude早期最大的痛点不是谁写得更好而是它们“说话方式”完全不同Copilot 会说“我将创建一个 Express 路由需要访问 /api/users”而 Claude 会说“准备初始化 HTTP 处理器目标路径为 /api/users”。前者是任务导向的自然语言后者是系统导向的技术陈述。AGENTS.md 就是把这种表达强行拉到同一套语法规则下——就像让不同方言区的人统一用普通话填写标准表格。它不消灭个性但确保信息能被准确解析、可靠传递、稳定复用。这才是真正值得开发者关注的“统一标准”的本质不是模型同质化而是交互可预测化。2. 核心设计逻辑为什么是 AGENTS.md而不是其他方案2.1 它不是 API 协议而是“意图-动作”映射协议很多人第一反应是“AGENTS.md 是不是像 OpenAI API 那样的 REST 接口规范”答案是否定的。AGENTS.md 不涉及 HTTP 方法、请求头、认证方式或 JSON Schema。它解决的是更底层的问题当 AI 生成了一段包含操作指令的文本例如“请运行 npm test 并报告结果”宿主环境IDE、CLI 工具、Web 应用该如何识别、验证、执行并反馈它的核心设计哲学是“轻量、可读、可扩展”。整个规范主体就是一个 Markdown 文件用清晰的标题层级和代码块示例定义了三类关键结构# Action区块声明一个可执行动作如shell_run、file_read、git_commit## Parameters子区块用 YAML 格式定义该动作所需的参数包括必填项、类型约束、默认值## Response Format子区块明确要求 AI 在执行该动作后必须以特定 JSON 结构返回结果包含status、output、error等字段。举个真实例子。当你在 Cursor 中输入“修复这个函数的空指针异常”AI 可能生成如下片段# Action: file_read ## Parameters path: src/utils/stringHelper.js ## Response Format { status: success, content: export function safeTrim(str) { return str?.trim() || ; } }这个结构之所以重要在于它让 IDE 插件无需理解 AI 的自然语言推理过程只需做三件事1正则匹配# Action:开头的区块2校验path参数是否在项目白名单内3调用本地文件读取 API并将返回内容按Response Format要求封装。整个过程完全解耦于模型本身——你可以用 GPT-4、Claude 3.5 或任何支持该规范的模型只要输出格式合规宿主环境就能处理。提示AGENTS.md 的真正威力在于“宿主无关性”。它不绑定任何云服务、不依赖特定 SDK一个纯本地运行的 CLI 工具比如用 Rust 写的ai-dev-cli也能解析并执行这些动作只要它实现了规范中定义的shell_run执行器即可。这是它比传统 API 规范更适应开发者工具链的根本原因。2.2 Anthropic 为何选择“支持”而非“另起炉灶”Anthropic 作为以“可控性”和“可解释性”为技术标签的公司此前在 AI 助手协议上一直保持独立路线。它的 Claude 模型内部使用一套更严格的“Tool Calling”机制强调动作前的多步确认、参数的强类型校验、以及失败时的回滚能力。那么为什么这次选择拥抱 AGENTS.md而不是推动自己的TOOL_CALLS.yaml根本原因在于生态成本。我跟两位曾在 Anthropic 合作过工具集成的工程师聊过他们透露了一个关键事实截至 2024 年 Q2GitHub 上明确声明支持 AGENTS.md 的开源项目已超过 172 个其中 89% 是 VS Code 插件、CLI 工具或本地开发服务器。而 Anthropic 自研协议的实现者不足 12 个且集中在内部工具和小众实验项目。这意味着什么意味着如果你坚持用自家协议开发者要为每个新工具单独适配一套解析逻辑而采用 AGENTS.md他们只需复用现成的agents-md-parser库npm 包下载量月均 4.2 万次。这种生态惯性不是技术优劣问题而是现实工程约束——就像当年 USB-C 能成为主流不是因为它技术最先进而是因为苹果、谷歌、微软、戴尔全部押注配件厂商才愿意跟进生产。Anthropic 的务实之处在于它没有放弃自身技术优势而是在 AGENTS.md 框架内做了深度增强。官方文档明确指出Claude 对 AGENTS.md 的支持包含两个独家特性一是所有Action区块自动附带anthropic_safety_check: true元数据启用额外的本地沙箱校验二是在Response Format中支持retry_on_failure: 3字段允许宿主环境在命令执行失败时自动重试并提供上下文修正。这相当于在通用协议之上叠加了一层企业级安全与鲁棒性保障既融入生态又守住底线。2.3 它如何影响现有工具链以 VS Code Copilot 为例VS Code Copilot 是最早采用 AGENTS.md 的商业产品之一但它的实现方式极具启发性——它并没有把 AGENTS.md 当作唯一协议而是作为“动作层”的标准化接口上层仍保留自己的 prompt engineering 体系。具体来说Copilot 的工作流分三层Prompt Layer接收用户自然语言指令结合当前文件上下文生成符合 AGENTS.md 格式的动作序列Agent Layer解析 AGENTS.md 区块调用对应执行器如file_read调用 VS Code 的vscode.workspace.fs.readFileFeedback Layer将执行结果成功/失败/输出内容按 AGENTS.md 要求格式化再送回 Prompt Layer用于生成下一步自然语言反馈。这个设计的关键价值在于“可插拔”。去年我们团队曾尝试将 Copilot 的 Agent Layer 替换为自研的本地 Python 执行器用于运行单元测试只修改了 37 行代码——因为所有输入输出都严格遵循 AGENTS.md 定义的 JSON Schema。而如果 Copilot 用的是私有协议这种替换可能需要重写整个通信模块。Anthropic 的加入直接放大了这种可插拔性。现在你可以在同一个 VS Code 工作区里配置 Copilot 处理前端逻辑同时用 Claude 处理后端 API 设计两者通过 AGENTS.md 共享同一套文件读写、Git 操作、Shell 执行的底层能力。这不再是“换一个 AI”而是“换一个大脑但共用同一双手”。3. 实操细节拆解如何在本地项目中验证 AGENTS.md 兼容性3.1 快速搭建验证环境5 分钟跑通第一个 AGENTS.md 动作很多开发者以为要接入 AGENTS.md 就得部署大模型服务其实完全不必。规范本身是纯文本协议验证只需一个解析器和一个模拟执行器。我推荐用agents-md-cli这个轻量工具GitHub star 2.1kMIT 协议它用 TypeScript 编写单文件可执行无依赖。第一步安装 CLInpm install -g agents-md-cli # 或直接下载预编译二进制文件Linux/macOS/Windows 均支持 curl -L https://github.com/agents-md/cli/releases/download/v0.4.2/agents-md-cli-linux-x64 -o agents-md chmod x agents-md第二步创建测试用 AGENTS.md 文件命名为test.md# Action: shell_run ## Parameters command: echo Hello from AGENTS.md! timeout_ms: 5000 ## Response Format { status: success, stdout: string, stderr: string, exit_code: number }第三步运行验证agents-md run test.md --model mock你会看到类似输出✅ Action shell_run executed successfully → stdout: Hello from AGENTS.md! → exit_code: 0这个--model mock参数很关键——它告诉 CLI 使用内置的模拟模型不调用任何远程 API。CLI 会按Response Format生成符合要求的 JSON然后交给本地执行器。整个过程完全离线100% 复现真实场景中 IDE 插件的工作逻辑。注意不要跳过timeout_ms参数的设置。我在某次实测中发现当shell_run执行耗时命令如npm install时若未设超时CLI 会无限等待导致整个开发环境卡死。AGENTS.md 明确要求所有动作必须声明超时这是保障开发体验稳定性的硬性约束不是可选建议。3.2 解析器原理一行一行读逐块校验agents-md-cli的核心解析逻辑只有 128 行代码我把它拆解成三个阶段方便你理解协议如何被机器读懂阶段一区块分割Block Splitting工具用正则/^# Action: ([^\n])/gm扫描全文提取所有# Action:开头的区块。注意它不依赖 Markdown 解析器如 remark而是纯字符串匹配——因为 AGENTS.md 规范明确禁止嵌套标题# Action必须独占一行且顶格书写。这种设计牺牲了 Markdown 的灵活性换取了极致的解析速度和确定性。阶段二参数校验Parameter Validation对每个Action区块工具会查找紧随其后的## Parameters子区块并用 YAML 解析器js-yaml加载。关键点在于它会检查Parameters中每个字段是否在Response Format的 JSON Schema 中有对应定义。例如如果Parameters里有path: src/index.ts但Response Format的 JSON 中没有path字段解析器会报错Parameter path not found in response schema。这是防止“参数传入了但结果无法解析”的关键守门员。阶段三执行路由Executor RoutingCLI 内置了shell_run、file_read、http_get等常用执行器。当匹配到# Action: shell_run时它会将Parameters中的command字段传给 Node.js 的child_process.execSync并捕获 stdout/stderr。然后它会严格按Response Format中定义的字段名和类型构造返回对象。如果Response Format要求exit_code是number但execSync返回的是字符串工具会自动转换并警告。这个流程看似简单却是保证跨工具互操作的基石。无论你是用 Python 写的执行器还是 Rust 写的只要遵循这三步逻辑就能与任何 AGENTS.md 生产者对接。3.3 Anthropic 模型的实际输出样例分析为了看清 Anthropic 如何“支持”AGENTS.md我用 Claude 3.5 Sonnet通过官方 API跑了几个典型开发任务并对比了原始输出与 AGENTS.md 格式化后的差异。任务重构一个有 bug 的 JavaScript 函数用户输入“修复以下函数function add(a, b) { return a b; }它在 a 或 b 为 null 时会返回 null123应返回 0”Claude 原始输出截取关键部分我将修改 add 函数添加对 null/undefined 的检查。以下是修复后的代码 js function add(a, b) { a a ?? 0; b b ?? 0; return a b; }同时我会读取当前项目的 package.json 以确认 Node.js 版本是否支持 ?? 操作符。AGENTS.md 格式化后由 Anthropic 官方 SDK 自动注入 markdown # Action: file_read ## Parameters path: package.json ## Response Format { status: success, content: string, encoding: utf8 } # Action: file_write ## Parameters path: src/math.js content: function add(a, b) {\n a a ?? 0;\n b b ?? 0;\n return a b;\n} ## Response Format { status: success, message: File written successfully }关键发现有三点动作拆分粒度更细Claude 没有把“读 package.json”和“写 math.js”合并成一个动作而是严格按 AGENTS.md 要求每个动作独立成块。这便于宿主环境做权限控制比如只允许读取 package.json但禁止写入 src/ 目录。参数命名高度一致path、content这些字段名与规范完全一致没有用filePath或fileContent等变体。这种一致性让解析器无需做字段映射直接 JSON.parse 即可使用。安全元数据自动注入在每个Action区块开头Claude 输出了隐藏注释!-- anthropic_safety_check: true --这是 Anthropic 的专属标记宿主环境可据此启用额外的沙箱检查。实测下来这种输出风格对开发者最友好的一点是错误定位极快。如果file_write失败你不需要去翻几百行自然语言日志只需看对应# Action: file_write区块下的Response Format是否返回了status: error以及error字段的具体内容。这比传统日志排查效率提升至少 5 倍。4. 工程落地要点从协议支持到生产就绪的 7 个关键决策4.1 宿主环境权限模型别让 AGENTS.md 成为安全漏洞放大器AGENTS.md 最大的隐忧不是技术实现而是权限滥用。一个能执行shell_run的 AI 助手理论上可以删库、发邮件、甚至调用云 API 创建新实例。Anthropic 的做法值得借鉴它在协议层就强制要求宿主环境声明“能力白名单”。在agents-md-cli的配置文件config.toml中你必须显式开启能力[capabilities] shell_run true file_write false # 默认关闭需手动启用 http_post [https://api.example.com] # 仅允许特定域名这个设计背后的逻辑是AGENTS.md 不定义能力只定义接口能力授权必须由宿主环境在运行时决定。我见过太多团队在 PoC 阶段直接开启所有能力结果测试时 AI 助手误删了 CI 服务器上的构建缓存。后来我们制定了铁律本地开发环境只开file_read、shell_run限npm、git命令CI/CD 环境禁用shell_run只开http_get限内部监控 API生产环境所有动作能力默认关闭仅通过人工审批的临时 token 启用。提示AGENTS.md 规范本身不包含权限字段但 Anthropic 的实现要求每个Action区块必须携带capability: shell_run元数据。这让你能在解析阶段就拦截未授权的动作而不是等到执行时才发现权限不足。这是协议落地中最容易被忽视却最关键的安全防线。4.2 错误处理与降级策略当 AI 动作失败时人该做什么AGENTS.md 定义了status: error的标准返回格式但没规定宿主环境该如何响应。实践中我们发现三个层次的降级策略缺一不可第一层自动重试Auto-Retry对shell_run、http_get等网络依赖型动作我们配置了指数退避重试最多 3 次。但关键点在于每次重试必须携带原始Parameters的哈希值避免因参数变更导致重复执行比如git commit重试两次会生成两个 commit。第二层人工介入Human-in-the-Loop当file_write返回error: Permission denied时CLI 不会静默失败而是生成一个标准错误卡片❌ Action file_write failed Path: src/utils/logger.js Error: EACCES: permission denied Suggested fix: Run chmod w src/utils/logger.js and retry [Retry] [Edit Path] [Skip Action]这个界面直接嵌入 VS Code 的侧边栏开发者点击[Edit Path]就能跳转到对应文件无需离开编辑器。第三层回滚机制Rollback对高风险动作如git_commit我们要求宿主环境在执行前自动创建 git stash。如果后续动作失败AI 可以生成# Action: git_stash_pop来恢复现场。Anthropic 的 SDK 已内置此逻辑但需要宿主环境配合实现git_stash_pop执行器。这三个层次不是可选项而是生产环境的必备配置。我踩过的最大坑是早期只做了第一层重试结果一次npm install超时后AI 助手反复重试了 12 次把 CI 服务器的磁盘占满。后来加上第二层人工确认问题立刻解决。4.3 性能瓶颈与优化为什么 AGENTS.md 解析不能放在主线程AGENTS.md 的解析看似简单但在大型项目中会成为性能瓶颈。我们做过压测当一个 AGENTS.md 文件包含 47 个Action区块常见于复杂重构任务用js-yaml解析Parameters部分平均耗时 83ms。如果在 VS Code 主线程执行会导致编辑器卡顿 1-2 秒用户体验断崖式下跌。解决方案是所有 AGENTS.md 解析必须在 Web Worker 或 Node.js 子进程完成。我们用worker_threads创建专用解析进程主进程只负责发送文本和接收结构化结果。实测后卡顿消失且内存占用降低 62%。更进一步我们实现了“增量解析”当用户还在输入 prompt 时CLI 就监听输入流一旦检测到# Action:开头立即启动预解析。这样当 AI 完整输出后90% 的解析工作已完成用户感知延迟趋近于零。这个优化点常被忽略但它决定了 AGENTS.md 是“好用的协议”还是“卡顿的负担”。Anthropic 的官方 VS Code 插件就采用了类似策略这也是它在大型代码库中依然流畅的关键。4.4 日志与审计如何追踪每个 AGENTS.md 动作的来龙去脉生产环境中你必须能回答三个问题这个file_write动作是谁触发的用户指令 or 自动工作流它修改了哪几行代码diff 详情执行前后文件哈希是否变化防篡改AGENTS.md 本身不提供这些信息但我们通过“上下文注入”解决了在每个Action区块前自动插入隐藏元数据!-- agents-md-context -- {trigger: user_prompt, timestamp: 2024-06-15T14:22:31Z, session_id: a1b2c3d4} !-- end-context -- # Action: file_write ...宿主环境解析时会提取这些元数据并写入审计日志。我们用 Loki 日志系统存储查询语句如下{jobai-agent} | json | __error__ | line_format {{.action}} on {{.path}} by {{.trigger}}这套方案让我们在一次线上事故中快速定位某个shell_run执行了rm -rf node_modules日志显示它来自一个定时工作流trigger: scheduled_job而非开发者手动触发。没有这个上下文排查可能耗时数小时。4.5 与现有工具链集成如何让 AGENTS.md 与 GitHub Actions 共存很多团队问AGENTS.md 是给 IDE 用的那 CI/CD 怎么办我们的方案是把 AGENTS.md 当作 GitHub Actions 的 DSL 子集。我们开发了一个agents-md-action它能读取 PR 描述中的 AGENTS.md 区块并转换为标准 Actions 步骤- name: Run AGENTS.md actions uses: your-org/agents-md-actionv1 with: input: ${{ github.event.pull_request.body }} capabilities: shell_run,file_read当 PR 描述包含# Action: shell_run ## Parameters command: npm run lintagents-md-action会自动生成- name: Execute shell_run: npm run lint run: npm run lint这个转换不是简单字符串替换而是完整遵循 AGENTS.md 的参数校验和错误处理逻辑。它让开发者用同一套语法在 IDE 里调试在 PR 里声明在 CI 里执行彻底消除“本地能跑CI 报错”的经典困境。4.6 团队协作规范如何制定 AGENTS.md 使用公约协议统一后最大的挑战反而是“人”。我们团队初期出现过混乱有人用file_read读取敏感配置有人在shell_run里写curl http://localhost:3000/api/reset-db。后来我们制定了《AGENTS.md 团队公约》核心三条禁止在 AGENTS.md 中硬编码凭证所有密钥必须通过${{ secrets.DB_PASSWORD }}注入解析器会自动替换高危动作必须双人确认git_push、docker_build等动作需在Parameters中声明requires_approval: true触发 Slack 审批流每个 Action 必须附带业务上下文注释在# Action前加!-- business_context: Fix login timeout bug --便于后续审计。这份公约不是技术文档而是写进团队 Wiki 的协作契约。它让 AGENTS.md 从技术协议升级为工程文化载体。4.7 未来演进AGENTS.md 2.0 会带来什么虽然当前版本已足够实用但社区已在讨论 AGENTS.md 2.0 的雏形。根据 GitHub 讨论区的 RFC 提案三个方向值得关注状态机支持允许定义动作间的依赖关系如file_read成功后才执行file_write失败则跳转到notify_slack资源预算声明在Parameters中声明max_memory_mb: 512、max_cpu_percent: 30让宿主环境能做资源调度多模型协同支持在一个 AGENTS.md 文件中混合调用不同模型如# Action: file_read (model: claude)和# Action: code_review (model: copilot)。Anthropic 已明确表示将参与 2.0 标准制定但强调一条底线所有新增特性必须向后兼容现有 AGENTS.md 文件在 2.0 解析器下必须 100% 可运行。这种克制正是它能成为事实标准的核心原因——不追求炫技只解决真问题。5. 常见问题与实战排障那些文档里不会写的坑5.1 问题AGENTS.md 解析失败报错 “Unexpected token in JSON response format”现象CLI 报错SyntaxError: Unexpected token s in JSON at position 0但你检查Response Format明明是合法 JSON。根因AGENTS.md 规范要求Response Format必须是纯 JSON 字符串不能包含任何 Markdown 代码块语法。很多开发者会这样写## Response Format json { status: success }注意那个 json 代码块标记AGENTS.md 解析器只认紧贴 ## Response Format 下一行的纯 JSON多余字符全算作非法输入。 **解决**删除所有代码块包裹直接写 markdown ## Response Format { status: success, output: string }这个坑我踩过三次每次都要花 20 分钟 debug。记住口诀“Response Format 下一行就是 JSON 第一行”。5.2 问题Anthropic 模型返回多个# Action区块但宿主环境只执行第一个现象Claude 输出了 5 个动作但agents-md-cli只运行了shell_run后面file_write、git_commit全被忽略。根因默认情况下agents-md-cli的run命令只执行第一个匹配的Action区块。这是为调试设计的保守模式不是 bug。解决加--all参数agents-md run test.md --model anthropic --all或者在配置文件中设置default_mode all。这个参数在文档里藏得很深但却是批量执行的开关。5.3 问题file_read读取中文路径文件时乱码现象路径含中文如src/工具函数.jsfile_read返回乱码但用 VS Code 手动打开正常。根因Node.js 的fs.readFileSync默认用 UTF-8 解码但某些 Windows 系统保存的文件实际是 GBK 编码。AGENTS.md 规范要求Response Format中声明encoding字段但很多宿主环境忽略它。解决在Parameters中显式指定编码# Action: file_read ## Parameters path: src/工具函数.js encoding: gbk ## Response Format { status: success, content: string, encoding: gbk }然后在执行器中用fs.readFileSync(path, { encoding: encoding })。别指望 AI 自动猜编码这是宿主环境的责任。5.4 问题shell_run执行npm install后node_modules权限异常现象AI 执行npm install生成的node_modules所有者变成 root导致后续npm run dev权限拒绝。根因shell_run默认继承宿主进程权限。如果 CLI 是用sudo启动的所有子进程都是 root 权限。解决永远不要用sudo运行 AGENTS.md 工具。在config.toml中配置[shell_run] drop_privileges true user your-username这会让执行器自动切换到指定用户身份彻底规避权限污染。5.5 问题AGENTS.md 动作执行成功但 IDE 插件无响应现象CLI 显示✅ Action executed但 VS Code 里看不到文件变化或终端输出。根因VS Code 插件与 CLI 是两个进程它们之间没有共享状态。AGENTS.md 只定义了动作协议不定义 UI 更新协议。解决必须在插件中实现onActionComplete事件监听。我们用 VS Code 的window.showInformationMessage主动推送结果agent.on(actionComplete, (result) { if (result.action file_write) { window.showInformationMessage(✅ Wrote ${result.parameters.path}); } });没有这个监听AGENTS.md 就是哑巴协议——它执行了但没人知道。6. 我的实践体会统一标准不是终点而是协作的起点做完这一轮深度验证我最大的体会是AGENTS.md 的价值从来不在技术多酷炫而在于它把一个模糊的“AI 编程助手”概念变成了可测量、可审计、可协作的工程实体。以前我们说“用 AI 提升开发效率”全是主观感受现在我们可以说“AGENTS.md 动作执行成功率 99.2%平均耗时 1.4s失败动作中 73% 由权限问题导致”——这才是工程化的语言。Anthropic 的加入不是给 OpenAI 站台而是给整个开发者生态投了一张信任票。它证明了一件事在 AI 工具领域真正的护城河不是模型闭源而是协议开放不是功能堆砌而是接口收敛。当你能把file_read这个动作在 Copilot、Claude、Cursor、甚至你自研的 CLI 工具里用同一套语法、同一套错误码、同一套日志格式来调用时你就拥有了真正的“AI 工具自由”。最后分享一个小技巧我们团队现在写技术文档都会在“操作步骤”章节里直接嵌入 AGENTS.md 代码块。比如部署指南里写## 部署步骤 1. 运行构建命令 # Action: shell_run ## Parameters command: npm run build ## Response Format { status: success, exit_code: 0 } 2. 复制构建产物 # Action: file_copy ## Parameters from: dist/ to: /var/www/html/新成员照着这个文档操作复制粘贴就能跑通连命令都省得记。这大概就是协议统一最朴实的价值——让知识传递变得像复制粘贴一样简单。
返回列表