技能系统

创建和使用可复用技能来扩展代理的能力

技能是您的代理加载到记忆中的知识(就像参考指南)。要将工作委托给单独的代理,请参阅子代理

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 的技能按优先级解析——项目技能覆盖代理技能,代理技能覆盖全局,全局覆盖内置。

优先级顺序(从高到低):

  1. 项目(.skills/)- 仅当前项目
  2. 代理(~/.letta/agents/{id}/skills/)- 特定于此代理的技能
  3. 全局(~/.letta/skills/)- 此机器上所有代理共享
  4. 内置 - 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" 比 "确保测试您的代码" 更好。
  • 保持技能专注——每个技能一个领域。将大型技能拆分为较小的技能。

资源