ARTICLE DETAIL

资讯详情

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

Cherry Studio 中基于 SKILL.md 的 OpenCode 非交互式编码代理调用指南

Cherry Studio 中基于 SKILL.md 的 OpenCode 非交互式编码代理调用指南 Cherry Studio 中基于 SKILL.md 的 OpenCode 非交互式编码代理调用指南【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址: https://gitcode.com/CherryHQ/cherry-studio本文以 Cherry Studio 仓库内置的 Code Mate 技能文件 SKILL.md 为核心讲解如何让 Cherry Studio 的智能体以非交互headless方式调用 OpenCode CLI 完成仓库分析与编码任务。读完本文你将掌握该技能文件定义的调用协议opencode run JSON 事件流、权限与认证约束以及其在 Cherry Studio 主进程中的落地实现与配置文件路径。技能文件是什么Code Mate 技能目录中的 OpenCode 条目在 Cherry Studio 中Code Mate 是一套把外部编码代理 CLIClaude Code、Codex、OpenCode、Gemini CLI、Qwen Code、Kimi Code 等接入智能体生态的能力。每一种 CLI 对应仓库内置的一份技能描述文件统一存放在 resources/code-cli-skills 目录下code-mate-opencode/SKILL.md 就是其中针对 OpenCode 的一份。该文件头部使用 YAML frontmatter 声明技能的元信息--- name: code-mate-opencode description: Runs OpenCode non-interactively for repository analysis and coding tasks. Use when the user asks to delegate work to OpenCode or compare OpenCode with another coding agent. ---name为技能唯一标识code-mate-opencode与 codeCliTools.ts 中 preset 的skillFolderName: code-mate-opencode一一对应description是触发条件说明当用户要求把工作委派给 OpenCode或要求将 OpenCode 与其他编码代理对比时智能体应优先选用本技能。这意味着该技能本质上是一份给智能体看的操作说明书由智能体在合适的场景下自动加载并遵循。运行流程三步完成一次非交互式 OpenCode 调用技能文件在## Run一节定义了智能体调用 OpenCode 的标准流程共三步1. 设定工作目录与超时将 Bash 工作目录设置为用户指定的确切项目目录并设置一个有限的超时时间正常情况下为 10 分钟。这保证了 OpenCode 在正确的仓库上下文中运行且不会因任务卡死而无限期占用资源。2. 校验 CLI 可用性先执行command -v opencode检查命令是否存在。若缺失立即停止并请用户在 Code Mate 中安装 OpenCode而不是尝试自行下载或使用不存在的可执行文件。3. 单任务运行并解析 JSON 事件流以单任务模式运行 OpenCode任务结束后进程即退出opencode run prompt --format json关键约束包括prompt 必须作为一个带引号的完整参数传入避免 shell 分词破坏提示词将 stdout 解析为JSON 事件流逐事件读取执行进度与最终结果出现error 事件或非零退出码即判定任务失败绝不启动 OpenCode 的交互式 UI也绝不触发认证流程。技能文件同时给出一个典型应用示例当用户要求检查一个失败测试而不修改代码时智能体应在该仓库目录下执行上述命令最后总结最终的 content 事件与所有工具错误信息。这体现了分析只读、修改需显式授权的边界。认证与权限headless 模式下的安全底线## Authentication And Permissions一节定义了技能的安全契约凭据不越权若 OpenCode 报告缺少 provider 或凭据立即停止并请用户在 Code Mate 中完成 OpenCode 配置智能体不得请求、读取、打印或复制任何凭据。保持默认拒绝headless 模式默认拒绝权限提示该行为在分析类任务中必须保留。只有当用户明确请求工作区变更时才允许启用完成任务所需的最小工具集。禁止滥用--auto不得仅仅为了避免一次权限被拒而给命令追加--auto参数——权限被拒本身就是安全设计的一部分绕过它违背了本技能的安全约束。这一契约与 Cherry Studio 主进程对 CLI 工具的通用处理策略一致CodeCliService.ts 在启动前会校验 provider 与 model 是否齐备缺失时直接返回失败信息而非尝试凭据注入。源码级落地技能如何被安装、同步与启动SKILL.md 并非孤立文件它在 Cherry Studio 主进程中有完整的生命周期管理技能安装与同步CodeCliService.ts 的reconcileCliSkills在应用就绪onAllReady时运行对每个 Code CLI preset 查询二进制可用性快照若工具可用则调用installCliSkill将内置技能同步到技能库若工具已卸载则调用uninstallBuiltinSkill清理。技能源路径来自feature.code_cli.skills.builtin经 asar 解包路径 解析最终由 SkillService.syncBuiltinSkill 安装到{dataPath}/Skills/{folderName}/并镜像到CLAUDE_CONFIG_DIR/skills供 Agent SDK 发现。OpenCode 的 preset 定义codeCliTools.ts 中 OpenCode 的注册信息defineCodeCliTool({ id: CodeCli.OPEN_CODE, executable: opencode, skillFolderName: code-mate-opencode, packageName: opencode-ai, install: registry })即可执行文件名为opencodenpm 包名为opencode-ai通过 registry 方式安装其技能文件夹正是本文讨论的code-mate-opencode。启动时的特殊处理CodeCliService.run 对 OpenCode 有两点针对性逻辑设置OPENCODE_DISABLE_AUTOUPDATEtrue在本次启动会话中禁用 OpenCode 自身的自动更新避免后台更新干扰运行OpenCode 的 provider 与默认模型从配置流程写入的opencode.json读取顶层model: providerKey/modelId字段因此启动命令本身不携带模型参数。opencode.json 配置文件OpenCode 的文件配置目标在 cliConfig.ts 与 L58 中定义路径~/.config/opencode/opencode.jsontarget idopencode-configJSON 格式Code Mate 的配置界面通过code_cli.write_configIPC 事务性写入该文件主进程按 target 白名单校验渲染进程无法直接发送任意文件路径从机制上防止了越权写文件。与其他 Code Mate 技能的异同在 resources/code-cli-skills 目录下Claude Code、Codex、Gemini、Qwen Code、Kimi Code 等均有结构一致的 SKILL.md遵循相同的frontmatter 元信息 Run 运行流程 认证与权限约束模板。OpenCode 技能的独特之处在于通过--format json输出结构化事件流便于智能体精确解析结果这与部分以纯文本输出为主的 CLI 技能形成对比模型与 provider 完全由opencode.json配置驱动启动命令保持最小化安全面更小明确要求 headless 模式保持默认拒绝权限且禁止以--auto规避权限检查是权限约束最严格的技能文件之一。总结code-mate-opencode/SKILL.md是一份结构清晰、约束明确的编码代理调用说明书三步运行流程保证了可复现的非交互式执行JSON 事件流保证结果可解析认证与权限条款保证了凭据与工作区安全。结合 Cherry Studio 主进程的 preset 注册、技能同步、启动环境注入与配置文件管理读者既能理解智能体如何调用 OpenCode也能在 CodeCliService.ts 与 codeCliTools.ts 中找到对应的实现依据便于在此基础上扩展或审计自己的 Code Mate 技能。【免费下载链接】cherry-studio Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端项目地址: https://gitcode.com/CherryHQ/cherry-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表