一个 ZCode skill = 一个含 SKILL.md 的目录,frontmatter 至少 name + description,可选 references/、scripts/、assets/。规范见 skill-creator-plugin/skills/skill-creator/SKILL.md 与 docs/skills-product.md。
发现目录与优先级
skill-creator/SKILL.md:41-48 给出优先级:
<project>/.zcode/skills/<name>/SKILL.md ← 最高
<project>/.agents/skills/<name>/SKILL.md
~/.zcode/skills/<name>/SKILL.md
~/.agents/skills/<name>/SKILL.md ← 最低(与其它工具共享位置)实现 adapters/src/skills/roots.ts 的 resolveDefaultSkillRoots():
- workspace skills 从
workingDirectory沿 git worktree 根逐级向上遍历,每层都合并.zcode/skills与.agents/skills(同层.zcode优先),而不是找到.zcode/skills就跳过.agents。 - 优先级:extraRoots(project)→ user → project 各级 → extraResolvedRoots。
- 含
~/展开与相对路径处理。
扫描实现:packages/services/src/skills/skillDiscoveryWalk.ts(深度优先、跳过 node_modules 与点目录、限制深度、软链 realpath 去重);CLI 侧对应 adapters/src/skills/scan.ts。扫描策略常量收敛在 @zcode/shared,桌面与 agent 端共用。
加载(NodeSkillAdapter)
adapters/src/skills/index.ts:
- 渐进披露三层:元数据(name+description)始终在 context → SKILL.md body 命中后才加载 →
references/scripts/assets按需读取。 discoverSkills():解析每个SKILL.md的 frontmatter,产出SkillMetadata;按路径去重,路径才是安装项身份(同名不同路径并存)。parseSkill():无 frontmatter 时按目录名加载;description 上限 1024;safeToAutoLoad仅在 frontmatter key 全属{name, description, when_to_use, license, metadata}时为 true。- 插件贡献的 skill 加限定名
<plugin>:<skill>,向上最多 5 层找.zcode-plugin/.claude-plugin/.codex-plugin/.cursor-plugin/plugin.json解析 pluginName。 - 禁用:
disabledPaths(config.json的skill.<path>.enable=false),动态工作流灰度即用此机制。 - 技能门控:
CreateWorkflow/AmendWorkflow/FillWorkflowHole/SaveWorkflow/EvalWorkflowSnippet在dynamic-workflows技能加载前拒绝运行。
bundled-skills(系统内置技能包)
apps/zcode-cli/packages/bundled-skills/(无 package.json,仅 README.md + skills/):
- 不是插件:不进官方市场、无启停、不可卸载、不出现在设置页与
$引用面板。 - 作为
source:"bundled",scope:"system"的技能根被每会话发现。 - 当前唯一技能:
dynamic-workflows(SKILL.md+patterns.md+examples.md),服务CreateWorkflow。详见 dynamic-workflow。 - 三种运行形态:dev/Electron 原地读取;SEA 二进制内嵌到
zcode-bundled-skills/前缀,首启按内容 hash 解压到~/.zcode/cli/bundled-skills/<hash>/;远端由prepare-prebuilds.mjsstage 到远端zcode.cjs旁。 - 解析器
bootstrap/src/app/bundled-skills.ts:BUNDLED_SKILL_ROOT_PRIORITY = 1_000_000(排所有插件根之后,用户/项目/插件同名技能可覆盖)。
skill-creator-plugin
提供 skill-creator 技能(SKILL.md 159 行),“创作-试用-迭代”循环:捕获意图 → 撰写 SKILL.md → 2–3 个真实测试 prompt → 与用户一起看输出 → 改进 → 循环。要点:description 是主触发信号(“write descriptions a little bit pushy”)、渐进披露、避免 ALL-CAPS 硬规则、把重复 helper 脚本沉淀到 scripts/。当前 ZCode 不并行 spawn 评测 subagent。
.agents/skills/(仓库根)
ZCode 自身开发用的 workspace 技能目录(同时被运行时发现),共 10 个:agent-browser、ai-elements、architecture-governance、dep-refs、dogfood、e2e-case-lifecycle、electron、feature-boundary-planner、react-best-practices、zcode-large-task-fixture。CLI 子目录另有 apps/zcode-cli/.agents/skills/(opentui、vercel-react-best-practices、vercel-react-view-transitions)。
skills-lock.json 锁定其中 4 个外部技能来源与内容 hash:agent-browser、ai-elements、dogfood(均 vercel-labs/agent-browser 或 vercel/ai-elements)+ electron。
ZCode skill vs Claude Code skill
| 维度 | ZCode | Claude Code |
|---|---|---|
| Manifest | .zcode-plugin/plugin.json(兼容 .claude-plugin / .codex-plugin / .cursor-plugin) | .claude-plugin/plugin.json |
| 目录 | .zcode/skills + .agents/skills(workspace/user 双层,逐级向上合并) | .claude/skills 等 |
| 限定名 | 插件技能为 <plugin>:<skill> | 无此限定 |
| frontmatter | name/description 必填;when_to_use/license/metadata 白名单内才 safeToAutoLoad | name/description 为主 |
| 发现策略 | 与桌面端共用 @zcode/shared 扫描策略 | 各自实现 |
| 导入 | 设置页”从外部 Agent 导入”支持 16 个来源(Claude/Codex/OpenCode/OpenClaw/Augment/Continue/Goose/Qwen/Trae/Kiro/Roo/CodeBuddy…),软链或复制 | 无对应 |
| 内置技能 | bundled-skills 不可卸载、不进市场 | 无此机制 |
| 商店 | 官方市场 + CDN zip + Personal Source | Marketplace 机制不同 |
safeToAutoLoad 的保守判断意味着带扩展 frontmatter 的旧技能仍可加载但不自动注入。
相关页面
- plugin-system — 插件市场与 manifest
- dynamic-workflow — bundled-skills 里唯一的系统技能
- mcp-integration — 插件技能常与 MCP 组合