技能系统
创建和使用可复用技能来扩展代理的能力
技能是您的代理加载到记忆中的知识(就像参考指南)。要将工作委托给单独的代理,请参阅子代理。
Letta Code 实现了开放的 Agent Skills 标准。技能可在 Cursor、Claude Code、VS Code 和其他兼容代理之间移植。
技能是包含指令和资源的目录,您的代理可以在相关时加载它们。把它们想象成您的代理在处理专门任务时查阅的参考指南——API 模式、测试工作流程、部署程序。
与记忆块(持久存在于代理上下文中)不同,技能由代理通过工具调用按需加载。您的代理看到有哪些技能可用,只有在处理匹配任务时才会拉取完整内容。
为什么技能很重要
Letta Code 代理是有状态的且模型无关的。这为技能创造了独特的机会:
- 团队可以通过版本控制共享技能,构建集体专业知识
- 从一个编程会话中学到的技能会传递到未来的会话
- 使用 Claude 的代理创建的技能可以被 GPT-5 代理稍后使用
关于 Context-Bench 的研究表明,技能可以显著提高任务完成率。当代理从自己的经验中学习技能时,收益更大(Skill Learning 博客文章)。
互操作性
Letta Code 技能遵循开放的 Agent Skills 标准。这意味着您创建的技能可以在多个代理产品中使用:
- OpenCode、Amp、Goose 等
- OpenAI Codex - OpenAI 的编程代理
- VS Code - GitHub Copilot
- Claude Code - Anthropic 的编程代理
- Cursor - AI 代码编辑器
在 Letta Code 中创建一次技能,将其提交到您的仓库,任何兼容技能的代理都可以使用它。这使技能成为捕获团队知识的可移植方式,而不会锁定到单一工具。
结构
每个技能是一个包含 SKILL.md 文件的目录。技能可以存在于多个位置:
| 位置 | 范围 | 描述 |
|---|---|---|
.skills/ |
项目 | 特定于此项目的技能(版本控制) |
~/.letta/agents/{id}/skills/ |
代理 | 特定于一个代理的技能(个性化) |
~/.letta/skills/ |
全局 | 在此机器上所有代理共享的技能 |
| (内置) | 内置 | Letta Code 附带的技能 |
示例项目技能结构:
.skills/
├── testing/
│ └── SKILL.md
├── api-client/
│ ├── SKILL.md
│ └── references/
│ └── endpoints.md
└── deployment/
├── SKILL.md
└── scripts/
└── deploy.sh
技能如何被发现
当您启动 Letta Code 时,它会扫描所有技能目录,并通过对话中的系统提醒消息将可用技能显示给代理。具有相同 ID 的技能按优先级解析——项目技能覆盖代理技能,代理技能覆盖全局,全局覆盖内置。
优先级顺序(从高到低):
- 项目(
.skills/)- 仅当前项目 - 代理(
~/.letta/agents/{id}/skills/)- 特定于此代理的技能 - 全局(
~/.letta/skills/)- 此机器上所有代理共享 - 内置 - Letta Code 内置
创建技能
手动编写
创建 .skills/my-skill/SKILL.md:
---
name: My Skill
description: When and why to use this skill
---
# My Skill
Instructions here...
description 字段需要清楚地传达技能的内容,因为它始终对代理可用。代理需要知道是否应该加载该技能。
从经验中学习
完成任务后,运行 /skill 将有效的做法提取为可复用技能:
> /skill "Database migration patterns"
当被要求创建技能时,代理会反思最近的消息。它会审查成功的方法、遇到的陷阱和验证策略。然后代理会编写一个捕获该知识的技能。
技能学习允许代理随时间改进。详情请参阅我们的 Skill Learning 博客文章。
技能中放什么
SKILL.md 文件包含基本指令、工作流程、约定和指导。好的技能是具体和可操作的:
## Git workflow
Always create feature branches from main:
git checkout main && git pull && git checkout -b feature/TICKET-123-description
Run lint before committing:
npm run lint && npm run test
Commit messages follow conventional commits: feat:, fix:, docs:, etc.
示例:完整的技能
这是一个简单但完整的技能,展示了正确的结构:
---
name: Hello World
description: Conventions for greeting messages and welcome text. Use when writing user-facing welcome messages, onboarding copy, or greeting notifications.
---
# Hello World Conventions
When writing greeting messages for this project, follow these patterns:
## Welcome messages
Use a friendly, concise tone:
- "Welcome to [Product]! Let's get started."
- "Hey [Name], good to see you!"
Avoid:
- Overly formal greetings ("Dear valued customer...")
- Exclamation overload ("Welcome!!! So excited!!!")
## Onboarding copy
First-time user messages should:
1. State what the product does in one sentence
2. Offer a single clear next action
3. Provide a way to get help
Example:
"[Product] helps you [value prop]. Click 'New Project' to begin, or visit our docs if you need help."
这个技能展示了清晰的描述编写(解释了什么和何时)、有组织的章节以及可操作的做法和注意事项。
捆绑资源
技能可以包含 SKILL.md 之外的额外文件。代理只有在明确引用时才会加载这些文件,因此您可以捆绑全面的资源而不会预先消耗上下文。
.skills/api-client/
├── SKILL.md # 主指令(技能触发时加载)
├── references/
│ ├── endpoints.md # API 端点文档
│ ├── error-codes.md # 错误处理参考
│ └── schemas/
│ └── user.json # 数据模式
├── scripts/
│ ├── auth.py # 认证辅助脚本
│ └── validate.py # 请求验证
└── examples/
└── pagination.md # 示例模式
在您的 SKILL.md 中引用这些:
## Authentication
Use the auth helper script for token management:
Run `scripts/auth.py refresh` to get a new token.
For the full list of endpoints, see `references/endpoints.md`.
For error handling patterns, see `references/error-codes.md`.
代理只有在需要当前任务的端点详细信息时才会读取 references/endpoints.md。如果只是刷新令牌,它会运行脚本而不加载参考文档。
捆绑内容的类型
- 参考文档(
references/):代理按需查阅的详细文档——API 规范、数据库模式、配置指南。这些可以很大;只有在读取时才消耗 token。 - 脚本(
scripts/):代理直接运行的可执行代码。比让代理重新生成代码更可靠,脚本源码永远不会进入上下文——只有输出会。 - 示例(
examples/):代理可以引用或复制的示例代码、模板或模式。用于展示首选方法。 - 资源(
assets/):代理可能需要读取或复制的配置文件、模板或数据文件。
使用技能
创建新代理时会自动发现技能。代理在系统提醒消息中看到列出的可用技能,并在相关时调用它们。您也可以使用斜杠命令语法直接调用技能:
> /commit
> /review-pr 123
Skill 工具
代理使用 Skill 工具直接调用技能。该工具接受技能名称和可选参数:
skill(skill='commit')
skill(skill='review-pr', args='123')
skill(skill='pdf')
调用时,Letta Code 读取技能的 SKILL.md 内容并将其作为上下文注入到对话中。技能内容被包装在与技能名称匹配的 XML 标签中(例如 <commit>...</commit>),以便代理可以检测已加载的技能。
技能在对话的系统提醒消息中列出。代理将用户请求与可用技能匹配并自动调用它们。您也可以使用 /<skill-name> 作为简写直接调用技能。
自定义位置
使用不同的技能目录:
letta --skills ~/my-global-skills
内置技能
Letta Code 包含自动可用的内置技能:
| 技能 | 描述 |
|---|---|
acquiring-skills | 从外部仓库发现和安装技能 |
creating-skills | 创建有效技能的指南 |
defragmenting-memory | 清理和重组记忆块(备份、编辑、恢复) |
finding-agents | 在同一服务器上查找其他代理 |
initializing-memory | 初始化代理记忆的指南(由 /init 使用) |
messaging-agents | 向您服务器上的其他代理发送消息 |
migrating-memory | 在代理之间迁移记忆块 |
searching-messages | 搜索过去的消息以回忆上下文 |
working-in-parallel | 与其他代理协调并行工作的指南(git worktrees) |
技巧
- 有关技能设计和研究的深入探讨,请参阅 Context-Bench Skills。
- 选择正确的范围:项目(
.skills/)用于团队共享、仓库特定的知识;代理(~/.letta/agents/{id}/skills/)用于特定于一个代理的个人工作流程;全局(~/.letta/skills/)用于您希望在所有代理中使用的个人技能 - 将
.skills/加入版本控制以与团队共享。 - 编写具体的指令,而不是一般性的建议。"运行
npm test -- --watch" 比 "确保测试您的代码" 更好。 - 保持技能专注——每个技能一个领域。将大型技能拆分为较小的技能。
资源
- 示例技能 - Anthropic 维护的技能示例
- Letta 的技能仓库 - 用于通用代理学习的社区技能
- Agent Skills 标准 - 可移植技能的开放规范