Skills 是你提交到代码仓库中的 SKILL.md 文件,用来教 Devin 如何对你的应用进行端到端测试——如何启动服务、本地运行应用、在浏览器中验证变更,以及在打开 PR (pull request,合并请求) 之前确认一切正常工作。它们遵循开放的 Agent Skills 标准,因此同一套 Skill 文件可以在多个 AI 编码工具之间通用。
请在代码仓库中将 Skill 文件放在 .agents/skills/<skill-name>/SKILL.md 路径下。Devin 会自动在所有已连接的代码仓库中发现这些文件。完整的文件格式参考请参见 Agent Skills 规范。
如果没有 Skills,Devin 每次会话都必须从头开始弄清楚如何运行和测试你的应用。有了 Skills,Devin 就清楚地知道该如何:
- 启动本地开发环境 — 要运行哪些服务、使用哪些端口、如何准备/填充测试数据
- 在浏览器中验证改动 — 要检查哪些页面、什么样才算“正确”、哪些异常需要标记出来
- 运行合适的测试套件 — 要执行哪些命令、通过时的输出应该是什么样
Devin 可以为你自动推荐技能。在一次会话过程中,当 Devin 测试完你的应用,或是对你的环境有了新的了解之后,它会建议创建或更新一个 skill,以将这些 Knowledge 固化下来。你会在会话时间轴中看到一个建议,其中包括:
- 学到内容的摘要 (例如 “how to start the backend with Docker” 或 “如何使用 Docker 启动后端”)
- 建议的
SKILL.md 文件内容
- 一个用于将该 skill 提交到代码仓库的 “Create PR” 按钮
随着时间推移,Devin 会在你的代码仓库中逐步构建起一套关于如何运行和测试你的应用的技能库。
一个用于指示 Devin 如何测试 Next.js 应用的技能:
---
name: test-before-pr
description: Run the local dev server and verify pages before opening any PR that touches frontend code.
---
## Setup
1. Install dependencies: `npm install`
2. Start the database: `docker-compose up -d postgres`
3. Run migrations: `npx prisma migrate dev`
4. Start the dev server: `npm run dev`
5. Wait for "Ready on http://localhost:3000"
## Verify
1. Read the git diff to identify which pages changed
2. Open each affected page in the browser
3. Check for: console errors, layout issues, broken links
4. Screenshot each page at desktop (1280px) and mobile (375px) widths
## Before Opening the PR
1. Run `npm run lint` and fix any issues
2. Run `npm test` and confirm all tests pass
3. Include screenshots in the PR description
Devin 会从两个来源中发现技能,并在每次会话开始时将它们合并:
- 已建立索引的代码库 (indexed repos) — Devin 的后端会在与你的组织连接的所有代码库中为
SKILL.md 文件建立索引。这些技能在会话开始时即可立即使用,此时还未克隆任何代码库。
- 已克隆的代码库 (cloned repos) — 当代码库被克隆到会话使用的机器上时,Devin 会在磁盘上扫描其中的
SKILL.md 文件。通过磁盘扫描发现的技能会更新或覆盖来自同一代码库的任何匹配的索引技能,确保 Devin 始终使用当前正在处理分支上的最新版本。
当某个代码库在会话中途完成克隆时,Devin 会自动重新扫描该代码库,从而在无需重启的情况下识别到新添加或已修改的技能。
Devin 会在以下所有目录中搜索 SKILL.md 文件:
.agents/skills/<skill-name>/SKILL.md (推荐)
.github/skills/<skill-name>/SKILL.md
.claude/skills/<skill-name>/SKILL.md
.cursor/skills/<skill-name>/SKILL.md
.codex/skills/<skill-name>/SKILL.md
.cognition/skills/<skill-name>/SKILL.md
.windsurf/skills/<skill-name>/SKILL.md
在每个代码仓库中都会扫描上述六个路径。
当发现某个技能时,Devin 会解析 YAML frontmatter (顶部的 --- 块) 并提取:
| Field | Purpose |
|---|
name | 标识该技能。如果省略,则回退到父目录名称。 |
description | 在技能列表中显示的简短摘要,让 Devin (以及你) 知道该技能的作用。 |
allowed-tools | 限制技能处于激活状态时 Devin 可以使用哪些工具。 |
除了标准规范外,Devin 还支持以下额外的 frontmatter 字段:
| Field | Purpose |
|---|
argument-hint | 与技能名称一起显示的提示文本,用于描述预期的参数。 |
triggers | 控制谁可以调用该技能——默认是 ["user", "model"]。将其设置为 ["user"] 可以阻止 Devin 自动激活该技能。 |
frontmatter 之后的所有内容都是技能主体——当技能被调用时,Devin 会按照其中的分步指令执行。
完整的文件格式参考请参见 Agent Skills specification。
除了标准规范外,Devin 还在技能主体中支持两种在调用时处理的动态内容:
$ARGUMENTS —— 替换为调用技能时传入的完整参数字符串 (例如通过 @skills:deploy staging prod) 。你也可以按索引访问单个参数:第一个参数用 $ARGUMENTS[0] 或 $0,第二个参数用 $ARGUMENTS[1] 或 $1,依此类推。参数按空白字符拆分。
!`command` —— 在仓库根目录执行该命令,并用其标准输出替换,从而让技能可以包含分支名、端口号等动态值。
例如,一个部署技能可能会像这样使用参数:
---
name: deploy
description: Deploy the app to a target environment.
argument-hint: <environment>
---
1. Check out the `$ARGUMENTS` branch
2. Run `./scripts/deploy.sh $0`
3. Verify the deployment at `https://$0.example.com`
调用 @skills:deploy staging 时,会用 staging 替代 $ARGUMENTS 和 $0。
在每次会话开始时,Devin 会看到所有可用技能的列表 (名称 + 描述) 。当某个技能被调用时,Devin 会读取完整的 SKILL.md 文件,并将其正文作为系统级指令注入到当前上下文中。这意味着在接下来的任务中,Devin 会主动遵循该技能中的步骤——它不仅仅是一个参考,而是直接引导 Devin 的行为。
Devin 可以通过多种方式使用技能:
当 Devin 判断某个技能与当前任务相关时,会自动调用它。比如,如果你让 Devin 修复前端代码中的一个 bug,并且存在一个 test-before-pr 技能,Devin 会在打开 PR 之前先激活它。若要禁止对只希望显式触发的技能进行自动调用,请在 frontmatter 中设置 triggers: ["user"]。
你可以在消息中加入 @skills:skill-name 来让 Devin 使用某个特定技能:
Fix the login bug on the /auth page @skills:test-before-pr
你还可以传入参数:
在技能主体中,凡是出现 $ARGUMENTS、$ARGUMENTS[0]、$1 等的地方,都会被替换为对应的参数值。
Devin 在同一时间只能有一个技能处于激活状态。调用一个新技能会替换掉之前的技能。技能被激活时,Devin 会按照该技能的步骤依次执行,完成每一步后再继续进行下一步。
如果 Devin 需要在会话中途找到合适的技能,它可以按关键词或目录搜索技能。你也可以让 Devin 列出可用技能,或在你向技能文件推送更改后重新加载这些技能。
- 全局 / 组织级技能 — 目前,技能只存在于各个代码仓库中。对于组织范围的技能,可以创建一个专门的「skills」仓库作为变通方案。我们正在探索对适用于所有仓库的组织级技能提供原生支持。
- 组合多个技能 — 当前一次只能激活一个技能。我们正在开发对工作流串联与组合的支持。
Skills 和 playbooks 都为 Devin 提供可复用的指令,但它们的工作方式不同:
| Skills | Playbooks |
|---|
| 存放位置 | 在你的代码仓库中,作为 SKILL.md 文件——与代码一起纳入版本控制 | 在 Devin web 应用中——通过 UI 管理 |
| 触发方式 | Devin 会自动发现并调用,或者你可以在任意 prompt 中通过 @skills:name 显式引用 | 在启动会话时手动附加到该会话 |
| 作用范围 | 作用于单个代码仓库——Devin 会根据与任务相关的仓库自动选用合适的 skills | 作用于整个组织——任何团队成员都可以在任意会话中附加任意 playbook |
| 自动建议 | Devin 在测试你的应用或学到新内容后,会建议创建新的 skills | 由团队成员手动创建 |
| 最适合用于 | 测试流程、本地开发环境配置、部署检查清单、与仓库紧密相关的工作流 | 可复用的 prompt 模板、跨仓库任务模式、入职/上手指南 |
我应该用哪一个? 如果你的指令与某个特定代码仓库强相关——比如如何运行、测试或部署——请使用 skill。如果你的指令是适用于多个仓库或团队的通用型 prompts,目前可以使用 playbooks,但我们计划未来将一切统一到 skills 中。Skills 是更强大的基础单元:它们受版本控制、可自动发现,并支持参数、shell 执行等动态内容。随着时间推移,我们会把让 playbooks 有价值的特性 (例如组织级作用范围和 UI 管理) 直接加到 skills 上。
如果你已经有运行良好的 playbooks,并不需要着急迁移——它们会继续可用。但对于新的指令内容,我们推荐从 skills 开始。