Internal preview

WeHub Research Blog

这是一篇暂时内部分享的技术博客预览。请输入团队预览口令。

Runtime deep dive

OpenCode:为什么 terminal agent 需要 skill tool 与 `permission.skill`

OpenCode:为什么 terminal agent 需要 skill tool 与 `permission.skill`。Agent Skills portable core / runtime adapter deep dive.

2026-06-06Internal previewAgent Skills · Runtime Adapter

OpenCode:为什么 terminal agent 需要 skill tool 与 permission.skill

OpenCode 的设计很清楚:skill 是 terminal coding agent 可按需加载的 reusable instructions。它不会假设所有 skill 都应该自动进入上下文,而是让 agent 先看到可用 skill 列表,再通过 native skill tool 加载完整内容。

OpenCode 支持标准 SKILL.md 文件夹,也兼容 .claude/skills.agents/skills。这让它成为一个很好的“生态收敛”证据:同一个 skill 外壳正在从 Claude/Codex 扩散到 terminal agent。

它解决的 runtime 问题

OpenCode 要回答的是:在终端 coding agent 里,怎样既发现可复用 workflow,又不让每个 skill 无条件污染上下文。

它的关键机制是 native skill tool。模型先在工具描述中看到 <available_skills>,包括 skill name 和 description;当任务匹配时再调用 skill({ name }) 读取正文。这是 progressive disclosure 在 terminal agent 里的直接实现。

另一个关键机制是 permission.skill。OpenCode 可以按 pattern 把 skill 设置为 allowdenyask,也可以按 agent override。这个设计说明 OpenCode 不把 skill 当成普通 Markdown,而是当成会影响 agent 行为边界的能力入口。

为什么这样设计合理

Terminal agent 的上下文和权限压力都很真实。用户可能同时有很多本地 skill:release、debug、review、docs、incident、infra。全部塞进系统提示会浪费 token,也会让模型误触发。用 skill tool 延迟加载,可以让 skill 既可发现,又不常驻。

权限层也合理:某些 skill 可能涉及公司内部流程、危险命令或敏感工具。deny 隐藏,ask 让用户确认,allow 直接加载,这比把“请小心使用”写在正文里更可靠。

迁移时要剥离什么

  • .opencode/skills~/.config/opencode/skills 等发现路径。
  • permission.skill 的 allow/deny/ask 策略。
  • OpenCode agent override。
  • native skill tool 的调用方式。
  • .opencode/commands.opencode/agents 的 terminal-specific 边界。

Adapter 应该写什么

OpenCode adapter 应该写 skill 放置路径、是否兼容 .agents/skills、默认权限策略、哪些 agent 可以加载、是否需要禁用 skill tool、和 commands/agents 的边界。portable core 不应该提 OpenCode 的 tool 名或 permission JSON。

Sources

继续阅读