uvwt/skill-authoring
创建、设计、修改、升级、重构和验证 AgentDock Skill 时使用;负责可移植核心、文档、引用、辅助脚本、测试、版本和本地安装验证。
npx skills add https://github.com/uvwt/agentdock --skill skill-authoring
用于创建或维护 AgentDock 第一方 Skill。Skill 的本体是模型可读取的说明文档;工具负责真实检查、编辑、命令执行、打包、安装和验证。
目标 Skill 应由两部分构成:
可移植核心契约
+
可选的宿主适配说明
移除 AgentDock 专属适配说明后,Skill 的业务流程、包内引用、环境变量契约和辅助脚本仍应完整可用。
使用本 Skill 处理:
不要使用本 Skill 处理第三方 Skill 的正式安全审查、真实凭据配置或已安装版本回滚。这些属于 skill-installation。
SKILL.md;只有确有需要时才增加引用、脚本或测试。lint,不能只通过包安装校验。完整规范见包内 references/skill-package-spec.md。
先明确:
不要用“管理某能力全生命周期”这类宽泛描述。description 必须让模型能稳定判断何时选中它。
正文至少说明:
一个 Skill 应围绕一个稳定能力边界组织。需求已经跨越独立职责时,应拆成多个 Skill。
普通第一方和社区 Skill 默认放在独立的 agentdock-skills 仓库:
skills/<skill-name>/
只有随 AgentDock 安装包自举、与运行时版本强绑定的核心 Skill 才放在 AgentDock 主仓库:
core-skills/<skill-name>/
按需选择结构:
skills/<skill-name>/
└── SKILL.md
skills/<skill-name>/
├── SKILL.md
├── references/
├── scripts/
└── tests/
skills/<skill-name>/
├── SKILL.md
├── run.py
└── tests/
不要为了形式创建空目录,也不要把普通集成重新放回 AgentDock 主仓库。
当前 AgentDock 正式解析:
---
name: example-skill
description: 清楚说明何时使用、解决什么问题
version: 1.0.0
---
要求:
name 使用稳定、简短、全小写的连字符名称;description 同时覆盖触发场景和能力边界;version 使用语义化版本;目标 Skill 的正文和脚本默认只假设:
有根目录脚本时,通用执行示例应写成:
printf '%s' '{"skill_action":"status"}' | python3 run.py
不得把以下内容作为核心运行前提:
~/.agentdock/skill-store/installed/...;AGENTDOCK_DIR、AGENTDOCK_HOME 或 AGENTDOCK_SKILL_DIR 用于定位包内脚本或私有数据;skill_env、exec_command 或 skill://;source AgentDock 私有环境文件。AgentDock 工具调用可以出现在单独的“AgentDock 适配/验证”说明中,但删除该部分后,Skill 仍必须可用。
每个需要配置的目标 Skill 都必须在正文中明确声明变量:
## 环境变量
| 变量 | 类型 | 必填 | 说明 |
|---|---|---:|---|
| EXAMPLE_BASE_URL | config | 是 | 服务地址 |
| EXAMPLE_API_KEY | secret | 是 | API Key |
类型至少区分 config 和 secret,并说明缺失变量时哪些能力不可用。
目标 Skill 只声明变量名和用途,不声明 AgentDock 私有保存路径,不保存真实值。辅助脚本只从当前进程环境读取变量。
在 AgentDock 本地验证时,环境值由 skill_package env_set/env_unset/env_list 管理,并由 exec_command 的 skill 上下文注入本次子进程。环境不会写入 AgentDock 主进程或系统环境。
适合放入 references/ 的内容包括:
目标 SKILL.md 使用包内相对路径,例如:
references/api.md
不要把 skill://<name>/... 写成核心引用契约,也不要依赖另一个 Skill 的安装目录。AgentDock 在验证当前激活包时可通过 read_file skill://<name>/... 读取资源。
辅助脚本只是可选资源,不是 Skill 本体。需要脚本时:
skill_action;code 和可读 message;推荐输入:
{
"skill_action": "status"
}
通用执行在 Skill 包根目录运行:
python3 run.py
AgentDock 验证时使用 exec_command 的 skill: "<skill-name>" 绑定当前激活目录与独立环境,不手工解析版本目录。
本 Skill 的 run.py 提供:
status:报告 lint 版本和规则数量;lint:检查目标 Skill 的可移植核心和宿主绑定问题。输入示例:
{
"skill_action": "lint",
"source": "/path/to/agentdock-skills/skills/example-skill"
}
结果包含:
portable;error_count;warning_count;code、severity、文件、行号、说明和修复建议。硬编码已安装版本目录、依赖 AgentDock 专属目录变量、主动读取 AgentDock 环境文件和固定用户绝对路径属于 error。AgentDock 专属工具或 URI 出现在目标 SKILL.md 中属于 warning,需要确认它们只存在于可选适配说明。
对已安装目录运行 lint 时,会忽略包根目录下由 AgentDock 安装器生成的 .agentdock-install.json。该文件属于宿主安装回执,不是 Skill 包内容;同名文件出现在包内其他目录时仍会正常扫描。
在 AgentDock 中,安装新版 skill-authoring 后可这样运行:
exec_command
skill: skill-authoring
cmd: python3 run.py
stdin: {"skill_action":"lint","source":"/path/to/source"}
创建或修改第一方 Skill 时,portable 必须为 true;warning 必须逐项修复或说明为什么属于可选宿主适配。
测试覆盖真实风险,至少考虑:
skill_action 明确失败;提交前检查:
.env、缓存、数据库、截图、下载文件和运行结果;__pycache__、*.pyc、node_modules 或编译产物;明确禁止生成或恢复:
agentdock.yaml;skill_run;skill_env_manage;AGENTDOCK_OPERATION;PLUGIN_* 旧协议;operation 或 entrypoint 清单;设备私有状态和 AgentDock 环境值只属于宿主,不进入包。
安装前比较当前已安装版本和新源码。不得用相同版本覆盖不同内容。
至少完成:
skill-authoring lint,确认 portable=true 并审查 warning;skill_package validate 校验包级合法性;skill_package install 安装并激活;agentdock_context 验证名称和描述进入轻量索引;read_file skill://<name>/SKILL.md 验证当前激活正文;10. 有引用时读取至少一份引用;
11. 有辅助脚本时,用 exec_command skill=<name> 对当前激活版本运行只读 status;
12. 运行一个代表性低风险动作,无法运行时记录真实原因。
skill_package validate 负责包能否合法安装;本 Skill 的 lint 负责第一方创作质量和可移植性,两者不能互相替代。
本 Skill 自身不需要环境变量。它要求被编写的目标 Skill 声明业务变量,并由运行宿主注入当前子进程。
只有同时满足以下条件才算完成:
skill-authoring lint 返回 portable=true,warning 已逐项处理;skill_package validate 通过;agentdock_context 和 skill:// 读取的是新版本;Take uvwt/skill-authoring from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.