Skill 目录结构怎么组织:scripts、references、assets 与渐进式披露,脚本怎么写

Skill 文件夹里除了 SKILL.md 还能放什么?按 Agent Skills 官方规范讲清 scripts、references、assets 三个目录的分工、渐进式披露的三层加载、文件引用的写法,以及给智能体调用的脚本要满足哪些要求。

NNathaniel bigo··原创首发·AI 辅助撰写
9 分钟读完
资料核对于 2026-10-11 · 依据官方文档与公开资料整理 免费账号 账号
本文根据 Agent Skills 开放规范(agentskills.io)的《Specification》《Using scripts in skills》《Best practices for skill creators》整理,资料核对于 2026-10-11。SKILL.md 本身的写法见《SKILL.md 怎么写》。

适用于谁

  • 搜「skill 目录结构」「claude skill 目录结构」「skill 如何调用脚本」「skill python 脚本」的人;
  • SKILL.md 越写越长,想拆分又不知道怎么拆的人;
  • 想让 Skill 带上脚本、模板,让智能体直接执行而不是每次重写的人。

结论先说

  1. 一个 Skill 就是一个文件夹,必须有 SKILL.md,另外约定了三个可选目录:scripts/(可执行代码)、references/(按需阅读的文档)、assets/(模板和静态资源)。
  2. 加载分三层:启动时只读所有 Skill 的名称和描述(每个约 100 token);启用时读整份 SKILL.md;其余文件用到时才读。这就是「渐进式披露」。
  3. SKILL.md 控制在 500 行以内,详细资料拆到单独的文件,并写清「什么情况下读哪个文件」。
  4. 文件引用用相对路径、只引一层,不要让参考文件再去引用别的参考文件。
  5. 给智能体用的脚本不能有交互式输入。这是硬性要求:智能体在非交互的终端里运行,等待输入的脚本会一直卡住。

一、官方约定的目录结构

skill-name/
├── SKILL.md          # 必需:元数据 + 说明
├── scripts/          # 可选:可执行代码
├── references/       # 可选:文档
├── assets/           # 可选:模板、资源
└── ...               # 其他文件或目录

规范说明,除了 SKILL.md 之外可以放任何文件和目录,上面三个只是推荐的组织方式。

目录放什么官方的要求或建议
scripts/智能体可以运行的代码自包含或写清依赖;报错信息要有用;妥善处理边界情况
references/需要时才读的补充文档,如详细技术参考、表单模板、按领域拆分的资料每个文件聚焦一个主题;文件越小,占用上下文越少
assets/静态资源:文档模板、配置模板、示意图、查找表、schema较长的输出模板放这里,在 SKILL.md 里引用

二、渐进式披露:三层各放什么

规范原文给出的三层:

  1. 元数据(约 100 token):name 和 description,启动时为所有 Skill 加载;
  2. 说明(建议少于 5000 token):SKILL.md 正文,启用该 Skill 时加载;
  3. 资源(按需):scripts/、references/、assets/ 里的文件,只在需要时加载。

由此得出的写法:

  • 每次执行都要用到的核心步骤,放 SKILL.md;
  • 只在某些情况下才需要的细节(某个接口的错误码表、某一类文档的特殊处理),放 references/;
  • 「注意事项」留在 SKILL.md 里。官方的理由是:这类不明显的坑,智能体在遇到之前并不知道自己需要去读,放进单独文件很可能读不到。

拆出去的文件要告诉智能体何时去读。官方的对比很清楚:

  • 有用的写法:「如果接口返回非 200 状态码,阅读 references/api-errors.md」;
  • 没用的写法:「详见 references/ 目录」。

三、怎么引用文件

在 SKILL.md 里引用其他文件时,用从 Skill 根目录出发的相对路径:

markdown
See [the reference guide](references/REFERENCE.md) for details.

Run the extraction script:
scripts/extract.py

规范的两条要求:

  • 只引用一层:从 SKILL.md 直接指向目标文件;
  • 避免层层嵌套的引用链:A 引 B、B 再引 C,智能体很容易半路停下。

代码块里的脚本路径同样相对于 Skill 根目录,因为智能体是在那里执行命令的;这条约定在 references/*.md 里也适用。

四、不写脚本:直接调用现成的包

如果已有的工具包就能完成任务,可以在 SKILL.md 里直接写命令,不需要 scripts/ 目录。官方列出了几种能在运行时自动解决依赖的方式:

工具来自说明
uvx随 uv 提供在隔离环境里运行 Python 包,缓存积极,需要单独安装 uv
pipx可通过系统包管理器安装同样在隔离环境里运行 Python 包,是较成熟的替代方案
npx随 Node.js 的 npm 提供按需下载并运行 npm 包,不需要额外安装
bunx随 Bun 提供Bun 环境里对应 npx 的命令
deno run随 Deno 提供访问文件或网络需要显式的权限参数
go runGo 自带直接编译并运行 Go 包

官方示例(npx 与 pipx):

bash
npx eslint@9 --fix .
pipx run 'black==24.10.0' .

三条建议:

  • 锁定版本,这样命令的行为不会随时间变化;
  • 在 SKILL.md 里写明前置条件(如「需要 Node.js 18+」),运行环境层面的要求写进 frontmatter 的 compatibility 字段;
  • 命令复杂到很难一次写对时,改成脚本。只带几个参数的调用适合直接写命令。

五、把脚本放进 scripts/

先在 SKILL.md 里列出有哪些脚本,让智能体知道它们存在:

markdown
## Available scripts

- **`scripts/validate.sh`** — Validates configuration files
- **`scripts/process.py`** — Processes input data

再在流程里写明怎么运行:

bash
bash scripts/validate.sh "$INPUT_FILE"
python3 scripts/process.py --input results.json

让脚本自带依赖声明。 这样智能体一条命令就能运行,不需要单独的清单文件和安装步骤。Python 用 PEP 723 的内联元数据,官方示例:

python
# /// script
# dependencies = [
#   "beautifulsoup4",
# ]
# ///

from bs4 import BeautifulSoup

然后用 uv run scripts/extract.py 运行,uv 会创建隔离环境并安装声明的依赖。官方还给了 Deno(npm: 导入)、Bun(导入路径里写版本)、Ruby(bundler/inline)的同类写法。

什么时候值得写脚本。 官方的判断方法是看执行记录:如果智能体每次都在重新实现同一段逻辑(画图、解析某种格式、校验输出),就把它写成一个经过验证的脚本放进 scripts/。

六、给智能体用的脚本,接口怎么设计

智能体靠读标准输出和标准错误来决定下一步,所以脚本的接口设计直接影响成功率。

1. 不要有交互式提示(硬性要求)。 所有输入通过命令行参数、环境变量或标准输入传入。缺参数时应该立刻报错并给出用法,而不是停下来等输入:

Error: --env is required. Options: development, staging, production.
Usage: python scripts/deploy.py --env staging --tag v1.2.3

2. 用 --help 说明用法。 这是智能体了解脚本接口的主要途径,写清简介、参数和示例,保持简短。

3. 报错信息要能指导下一步。 说明哪里错了、期望什么、收到了什么。「Error: invalid input」这种信息只会白白浪费一轮。

4. 输出用结构化格式。 JSON、CSV、TSV 优于对齐的纯文本。数据走标准输出,进度和警告走标准错误。

5. 其他建议

  • 幂等:智能体可能重试,「不存在则创建」比「重复就报错」安全;
  • 对含糊的输入直接拒绝,不要猜;
  • 有破坏性的操作提供 --dry-run 预览,并考虑要求显式的确认参数;
  • 不同失败类型用不同的退出码,并写进 --help;
  • 控制输出体积:很多工具会截断过长的输出,默认只输出摘要,需要更多时再用参数翻页。

常见问题

Q:三个目录名必须叫这个吗?

规范把它们称为「推荐的约定」,不是强制。但沿用约定的名字,别人和其他工具更容易看懂。

Q:脚本会自动执行吗?

不会无条件执行。智能体按 SKILL.md 的说明决定何时运行,能否运行还要看所用工具的权限设置。也正因为 Skill 可以带脚本,安装别人的 Skill 前要先看一遍 scripts/ 里的内容,见《MCP 服务器怎么选、装之前怎么审》里的同类检查思路。

Q:模板放 SKILL.md 里还是 assets/ 里?

短模板直接写在 SKILL.md;较长的、或只在某些情况下才用的模板放 assets/,在 SKILL.md 里引用,这样不用时不占上下文。

Q:参考文件可以很多吗?

可以,按需加载意味着没被读到的文件不占上下文。前提是 SKILL.md 里写清了每个文件对应什么情况。

参考资料

  • Specification(Agent Skills 官方规范):https://agentskills.io/specification
  • Using scripts in skills:https://agentskills.io/skill-creation/using-scripts
  • Best practices for skill creators:https://agentskills.io/skill-creation/best-practices
需要开通或续费?Claude Pro 充值 →

Nathaniel 的更多内容

  1. 01

    promptfoo 使用教程:对比提示词和模型、写断言自动评测(安装与配置)

    promptfoo 是什么、怎么使用?按官方 README 和入门文档讲清它的用途、三种安装方式、用示例项目起步、promptfooconfig.yaml 里提示词、模型和测试用例三部分怎么写、常用断言类型的含义、eval 与 view 两条命令,以及把它放进日常改提示词流程的方法。

    ChatGPT其他 AI 工具0
  2. 02

    Kimi API怎么用:API Key获取、Python调用、K3价格与429报错处理

    Kimi API Key 在哪里获取、怎么用 Python 调用 K3、价格怎么算、429 和 401 报错怎么办?本文按 Kimi API 开放平台官方文档讲清注册认证、创建 Key、base_url 与模型名、计费规则和常见错误排查。

    Kimi0
  3. 03

    Cursor Agent 模式怎么用:Agent、Plan、Ask 三种模式,检查点回滚与消息排队

    Cursor Agent 模式是什么、和 Plan / Ask 模式怎么选?按官方文档讲清 Agent 能调用哪些工具、Shift+Tab 切换模式、Plan 模式先出方案再动手、用检查点撤销改动、任务进行中排队或插话,以及 /goal 长目标。

    Cursor0
  4. 04

    Gemini 聊天记录怎么导出:导出到文档 / 表格、生成 PDF 与用 Takeout 批量导出完整对话

    Gemini 没有「一键导出全部对话」的按钮,但有三条官方路径:单条回答导出到 Google 文档、Gmail、表格;让 Gemini 直接生成 PDF、Word、Markdown 文件;用 Google Takeout 批量下载全部活动记录。本文给出每种方法的步骤和限制。

    Gemini0
  5. 05

    ChatGPT 生成图片中文乱码、文字错误怎么办:7 个按顺序试的办法

    让 ChatGPT 做海报、封面、信息图,中文总是缺笔画、错字、乱码?本文按 OpenAI 官方图像提示指南,给出从写法、字数、局部修改、质量档位到后期排版的 7 个办法,以及什么时候干脆别让 AI 写字。

    ChatGPT0
  6. 06

    OpenCode Skills 使用指南:技能目录、命名规则、权限配置与不加载排查

    OpenCode 的 Skills 放在哪个目录、怎么控制哪些技能能用?按 OpenCode 官方文档讲清六个扫描位置、name 的正则规则、skill 工具的工作方式、在 opencode.json 里用 allow / deny / ask 配置权限、按智能体覆盖,以及技能不出现时的五项检查。

    其他 AI 工具0

同产品的其他教程

  1. 01

    Cursor、Claude Code、Codex、GitHub Copilot 有什么区别:按形态、账号、计费和规则文件对比

    Cursor 和 Claude Code 的区别是什么、和 Codex、GitHub Copilot 怎么选?只用各家官方文档的事实对比:产品形态、用什么账号、怎么计费、能选哪些模型、规则文件与 MCP、权限模式、代码审查;不做「谁更强」的排名,给出按场景选择的思路。

    ClaudeCursor0
  2. 02

    如何让大模型稳定输出 JSON:结构化输出、JSON 模式与提示词写法(OpenAI / Claude)

    怎么让大模型稳定输出 JSON?本文按 OpenAI 和 Anthropic 官方文档讲清只靠提示词、JSON 模式、结构化输出三种做法的可靠程度,两家的写法与 Schema 限制,以及拒答和截断两种例外。

    ChatGPTClaude0
  3. 03

    MinerU 是什么、怎么用:把 PDF 等文档解析成 Markdown(4.0 的安装、四档解析与命令)

    MinerU 是什么、怎么安装使用?按官方中文 README 讲清 4.0 版本的定位、支持的输入与输出格式、flash / basic / standard / advanced 四档解析各适合什么、pip 安装命令、mineru-kit 与 mineru 两个命令的分工和常用写法,以及从旧版升级要注意什么。

    其他 AI 工具0
  4. 04

    npx skills add 怎么用:从 GitHub 安装 Skill、skills.sh 是什么与常用命令

    网上的 Skill 安装命令大多是 npx skills add 开头,它是什么、装到哪去了?按官方 README 讲清 skills 命令行工具支持的来源写法、项目与全局两种范围、-a 指定工具、list / find / update / remove 等命令、软链接与复制的区别,以及怎么关掉遥测。

    Claude其他 AI 工具0
  5. 05

    即梦首尾帧怎么用:两张图生成过渡视频(在哪里、提示词、不能用怎么办)

    即梦首尾帧在哪里、怎么用?本文讲清首尾帧入口、哪些模型支持、两张图的比例要求、过渡提示词怎么写,以及「首尾帧不见了 / 不能用了」「画面跳变」的原因和解决办法。

    其他 AI 工具0
  6. 06

    提示词里的角色设定有用吗:「你是一位专家」该怎么写才有效(官方文档怎么说)

    提示词开头写「你是一位资深专家」到底有没有用?本文按 Anthropic、OpenAI、Google 官方文档讲清角色设定管什么、不管什么,一句话角色和详细人设各自适合什么场景,角色应该放在哪里,以及比「你是专家」更有效的四个写法。

    ChatGPTClaude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~