Tokeny Skills 扩展指南:超越标准的能力增强
综合讨论Tokeny 在 Agent Skills 开放标准(agentskills.io)基础上,扩展了一系列实用字段,让技能作者能更精细地控制执行行为、资源管理和安全边界。本文介绍这些扩展字段的用法和最佳实践。
背景:Agent Skills 标准
Agent Skills 是由 Anthropic 发起的开放标准,定义了一种轻量级的技能打包格式——一个包含 SKILL.md 文件的目录。标准规定的 frontmatter 字段包括:
| 字段 | 必填 | 用途 |
|---|---|---|
name |
是 | 技能标识符(kebab-case,≤64 字符) |
description |
是 | 描述技能功能和触发条件 |
license |
否 | 许可证 |
compatibility |
否 | 环境要求说明 |
metadata |
否 | 任意键值对 |
allowed-tools |
否 | 预批准工具列表(实验性) |
这些字段足以描述"技能是什么",但对于"技能如何执行"缺乏控制力。Tokeny 的扩展正是为了填补这一空白。
Tokeny 扩展字段一览
---
name: my-skill
description: 技能描述...
# ── Tokeny 扩展字段 ──
copy-resources:
- scripts/
- templates/config.json
write-guards:
- pattern: "src/.*\\.tsx?$"
condition: require_subtask
message: "源码文件必须通过子任务委派写入"
allowed-tools:
- Read
- Write
- Bash(npm:*)
disable-model-invocation: false
user-invocable: true
argument-hint: "<topic>"
tags:
- frontend
- react
context: fork
model: deepseek-r1
---
下面逐一介绍每个扩展字段。
1. copy-resources — 声明式资源部署
解决什么问题
技能包中常常附带脚本、模板、配置文件等资源。标准做法是通过 ${SKILL_DIR} 变量让 Agent 读取这些文件,但这有几个局限:
- Agent 需要消耗工具调用和 token 来逐一读取文件
- 某些场景下用户需要在工作空间中直接使用这些文件(如运行脚本、引用模板)
- 大文件受
read_file行数限制,需要分段读取
用法
copy-resources:
- scripts/ # 复制整个目录
- templates/base.html
- assets/config.json
行为
- 时机:技能执行前自动完成(非加载时)
- 策略:基于 mtime 增量更新——只有源文件更新时才覆盖
- 安全:拒绝
..路径遍历和绝对路径,跳过符号链接
示例:数据分析技能
---
name: data-analysis
description: 对工作空间中的数据文件进行统计分析和可视化
copy-resources:
- scripts/analyze.py
- scripts/visualize.py
- templates/report.html
---
# 数据分析
使用 `scripts/` 目录下的 Python 脚本进行分析:
1. 运行 `python scripts/analyze.py <数据文件>` 生成统计摘要
2. 运行 `python scripts/visualize.py <数据文件>` 生成图表
3. 将结果填入 `templates/report.html` 生成报告
执行时,这三个文件会自动出现在用户的工作空间中,Agent 可以直接通过 bash 运行它们。
对比:不使用 copy-resources
如果不声明此字段,Agent 只能通过 ${SKILL_DIR} 引用技能安装目录中的文件(只读访问)。适合技能只需要"读取参考资料"而不需要"在工作空间中部署文件"的场景。
2. write-guards — 声明式写入守卫
解决什么问题
某些技能涉及复杂的多步骤工作流——比如先研究、再规划、最后才写代码。如果 Agent 跳过前置步骤直接写文件,可能产出质量低下的结果。write-guards 让技能作者强制 Agent 遵循预定流程。
用法
write-guards:
- pattern: "src/.*\\.tsx?$"
condition: require_subtask
message: "请先通过子任务完成研究和规划,再修改源码文件"
- pattern: ".*\\.sql$"
condition: require_subtask
message: "SQL 文件修改必须先通过子任务验证方案"
字段说明
| 属性 | 类型 | 说明 |
|---|---|---|
pattern |
正则表达式 | 匹配文件路径(大小写不敏感) |
condition |
枚举 | 目前仅支持 require_subtask |
message |
字符串 | 拦截时返回给 Agent 的错误提示 |
行为
当 Agent 尝试写入匹配 pattern 的文件时:
- 如果尚未启动子任务 → 返回
message,写入被拒绝 - 如果子任务已启动但未完成 → 提示等待子任务完成
- 如果子任务已完成 → 放行写入
这确保了 Agent 必须先通过 delegate_task 完成前置工作(如研究、方案设计),才能修改受保护的文件。
示例:前端组件开发技能
---
name: frontend-design
description: 设计并实现 React 前端组件,遵循研究-设计-实现流程
write-guards:
- pattern: "src/components/.*\\.tsx$"
condition: require_subtask
message: "组件实现前必须先完成设计方案(通过子任务研究现有组件模式和设计系统)"
---
# 前端组件开发流程
## 第一步:研究(子任务)
委派子任务研究:
- 现有组件库的设计模式
- 相关组件的 API 设计
- 设计系统的约束
## 第二步:实现
基于研究结果编写组件代码...
3. allowed-tools — 工具权限预批准
标准 vs Tokeny 增强
标准定义 allowed-tools 为空格分隔的字符串。Tokeny 在此基础上增强了:
- 支持 YAML 数组格式(更清晰)
- 支持作用域模式语法:
Bash(pattern:*) - 跨生态兼容(自动映射 Claude Code / OpenClaw / Tokeny 工具名)
用法
allowed-tools:
- Read
- Write
- Glob
- Grep
- Bash(git:*) # 仅允许 git 相关命令免审批
- Bash(npm:*) # 仅允许 npm 相关命令免审批
行为
声明在 allowed-tools 中的工具在技能执行期间跳过 HITL(人工审批),直接执行。这大幅提升了技能的自动化程度。
安全硬限制(无论如何声明都不会跳过审批):
delete_file— 删除文件始终需要确认- 无限制的
Bash(未指定模式)— 不会绕过审批
工具名映射
Tokeny 自动识别不同生态的工具命名:
| Tokeny | Claude Code | OpenClaw |
|---|---|---|
read_file |
Read |
read_file |
modify_file |
Write / Edit |
write_file |
bash |
Bash |
execute_command |
grep |
Grep |
grep |
glob |
Glob |
glob |
list_files |
LS |
list_files |
你可以使用任何一种命名,Tokeny 会自动解析。
4. disable-model-invocation — 禁止自动路由
用法
disable-model-invocation: true
行为
设为 true 时,该技能不会出现在 Agent 的自动路由列表中。LLM 无法通过 activate_skill 自动激活它,只能由用户手动通过 /技能名 触发。
适用场景
- 技能有副作用(如发送邮件、部署代码),不希望被意外触发
- 技能需要特定参数,自动路由可能传入不当参数
- 实验性技能,尚未准备好自动使用
5. user-invocable — 控制菜单可见性
用法
user-invocable: false # 默认 true
行为
设为 false 时,该技能不会出现在 /指令 自动补全菜单中。用户无法通过 UI 手动触发它。
适用场景
- 纯内部技能,仅供其他技能或系统调用
- 底层工具技能,不适合直接面向用户
与 disable-model-invocation 的组合
disable-model-invocation |
user-invocable |
效果 |
|---|---|---|
false |
true |
完全可用(自动 + 手动) |
true |
true |
仅手动 /指令 触发 |
false |
false |
仅自动路由触发 |
true |
false |
完全隐藏(仅系统内部调用) |
6. argument-hint — 参数提示
用法
argument-hint: "<topic> [--depth=deep|shallow]"
行为
在用户输入 /技能名 时,自动补全菜单中显示此提示文本,帮助用户了解需要提供什么参数。
示例
---
name: web-research
description: 对指定主题进行深度网络研究
argument-hint: "<研究主题>"
---
用户在输入框看到:/web-research <研究主题>
7. tags — 语义标签
用法
tags:
- frontend
- react
- component
也支持逗号分隔格式:
tags: frontend, react, component
当前用途
标签目前作为语义元数据存储,用于:
- 技能市场的分类和搜索
- 前端 UI 的标签展示和筛选
- 未来可能用于增强自动路由的匹配精度
8. context — 执行模式(规划中)
用法
context: fork # 或 inline(默认)
设计意图
| 模式 | 说明 |
|---|---|
inline |
技能指令注入当前 Agent 的系统提示词,共享对话上下文 |
fork |
创建隔离的子 Agent 执行,独立上下文,不污染主对话 |
fork 模式适合:
- 长时间运行的研究任务
- 需要大量工具调用的复杂流程
- 不希望技能执行过程干扰主对话的场景
注意:
fork模式目前处于规划阶段,当前所有技能均以inline模式执行。
9. model — 模型指定(规划中)
用法
model: deepseek-r1
设计意图
允许技能作者指定执行该技能时使用的 LLM 模型。适用于:
- 需要特定模型能力的技能(如需要强推理能力的代码审查)
- 成本优化(简单技能使用轻量模型)
注意:此字段目前处于规划阶段,技能执行时使用用户当前选择的模型。
完整示例:公众号文章工作室
下面是一个综合运用多个扩展字段的实际技能:
---
name: mp-article-studio
description: >
微信公众号文章创作工作室。从选题策划到排版输出的全流程辅助,
支持多种文章类型(深度分析、教程、观点评论)。
当用户需要撰写公众号文章时使用。
tags:
- writing
- wechat
- content
copy-resources:
- templates/
- scripts/format.py
- assets/styles.css
write-guards:
- pattern: "output/.*\\.html$"
condition: require_subtask
message: "最终排版文件必须在完成大纲审核(子任务)后才能生成"
allowed-tools:
- Read
- Write
- Glob
- Grep
- Bash(python:*)
argument-hint: "<文章主题> [--type=深度|教程|评论]"
---
# 公众号文章创作流程
## 资源说明
- `templates/` — 各类型文章的 Markdown 模板
- `scripts/format.py` — Markdown 转微信富文本排版工具
- `assets/styles.css` — 排版样式表
## 工作流程
### 1. 选题分析
分析用户提供的主题,确定文章类型和目标读者...
### 2. 大纲规划(子任务)
委派子任务完成:
- 竞品文章调研
- 关键论点梳理
- 结构大纲设计
### 3. 正文撰写
基于大纲逐段撰写...
### 4. 排版输出
运行 `python scripts/format.py output/article.md` 生成最终排版
变量替换
在技能指令(Markdown body)中,可以使用以下变量:
| 变量 | 说明 |
|---|---|
$ARGUMENTS / $1~$9 |
用户传入的参数 |
${SKILL_DIR} |
技能安装目录的绝对路径 |
${WORKSPACE} |
当前工作空间的绝对路径 |
${CWD} |
当前工作目录(等同于 ${WORKSPACE}) |
示例
参考 `${SKILL_DIR}/references/style-guide.md` 中的写作规范。
将输出文件保存到 `${WORKSPACE}/output/` 目录。
用户的需求是:$ARGUMENTS
最佳实践
何时使用 copy-resources
| 场景 | 推荐方式 |
|---|---|
| 技能需要运行脚本 | copy-resources — 脚本需要在工作空间中执行 |
| 技能需要参考文档 | ${SKILL_DIR} — 只读引用即可 |
| 技能需要输出模板 | copy-resources — 用户可能需要自定义模板 |
| 技能需要大型数据文件 | ${SKILL_DIR} — 避免复制大文件到工作空间 |
何时使用 write-guards
- 技能有明确的"先研究后实现"流程
- 需要防止 Agent 跳过关键步骤
- 输出文件质量依赖前置分析的完成度
allowed-tools 的安全建议
- 尽量使用作用域模式(如
Bash(git:*)而非Bash) - 只声明技能实际需要的工具
- 不要试图绕过
delete_file的审批保护
总结
| 扩展字段 | 类别 | 状态 | 核心价值 |
|---|---|---|---|
copy-resources |
资源管理 | 可用 | 零 token 消耗的资源部署 |
write-guards |
安全控制 | 可用 | 强制工作流程顺序 |
allowed-tools |
权限管理 | 可用 | 提升自动化程度 |
disable-model-invocation |
路由控制 | 可用 | 防止意外触发 |
user-invocable |
UI 控制 | 可用 | 控制菜单可见性 |
argument-hint |
UX 增强 | 可用 | 引导用户输入 |
tags |
元数据 | 可用 | 分类与搜索 |
context |
执行模式 | 规划中 | 隔离执行上下文 |
model |
模型控制 | 规划中 | 指定执行模型 |
这些扩展让 Tokeny 的技能系统在保持与 Agent Skills 标准兼容的同时,提供了更强大的控制能力。技能作者可以根据实际需求选择性使用这些字段,从简单的参数提示到复杂的工作流守卫,逐步增强技能的可靠性和用户体验。
评论与讨论
还没有评论,分享你的体验吧。