- 开源框架:MIT 许可,适用于 Python 和 TypeScript
- AGENTS.md:代理指令的开放标准
- Agent Skills:代理知识和动作的开放标准
- 任何模型,任何沙箱:无提供商锁定
- 开放协议:MCP、A2A、Agent 协议
- 可自托管:LangSmith 部署可以自托管,因此记忆保留在您的基础设施中
与 Claude Managed Agents 比较
您正在部署什么
deepagents deploy 打包您的代理配置并将其部署为 LangSmith 部署。您使用几个参数配置您的代理:
| 参数 | 描述 |
|---|---|
model | 要使用的 LLM。任何提供商均可 — 请参阅 支持的模型。 |
AGENTS.md | 系统提示词,在每次会话开始时加载。 |
skills | 用于专业知识和动作的 Agent Skills。技能会同步到沙箱中,以便代理在运行时执行它们。请参阅 技能文档。 |
user/ | 每用户可写记忆。如果 user 文件夹中存在 AGENTS.md 模板,代理会为每个用户种子化该模板(如果文件夹为空,代理会创建一个空的 AGENTS.md)。运行时可写。通过记忆中间件预加载到代理的上下文中。 |
mcp.json | MCP 工具 (HTTP/SSE)。请参阅 MCP 文档。 |
subagents/ | 主代理可以委托给的专用 子代理。每个子目录包含其自己的 deepagents.toml、AGENTS.md 和可选的 skills 文件夹。请参阅 子代理。 |
sandbox | 可选执行环境。线程范围的沙箱按线程配置,如果服务器重启将重新创建。如果您需要跨线程持久化的沙箱状态,请使用 scope = "assistant"。请参阅 沙箱提供商。 |
安装
安装 CLI 或直接用uvx 运行:
用法
deepagents deploy 在当前目录中查找 deepagents.toml。传递 --config 以使用不同的路径:
deepagents deploy 在每次调用时完全重建并创建新修订版。使用 deepagents dev 进行本地迭代。
deepagents init
搭建一个新代理项目:
| 文件 | 用途 |
|---|---|
deepagents.toml | 代理配置 — 名称、模型、可选沙箱 |
AGENTS.md | 会话开始时加载的系统提示词 |
.env | API 密钥模板 (GOOGLE_API_KEY、LANGSMITH_API_KEY 等) |
mcp.json | MCP 服务器配置 (默认为空) |
skills/ | Agent Skills 目录,包含一个示例 review 技能 |
AGENTS.md 并运行 deepagents deploy。可选地添加一个 user/ 目录,包含每用户记忆模板 — 请参阅 用户记忆。
项目布局
部署命令使用基于约定的项目布局。将以下文件与您的deepagents.toml 放在一起,它们会被自动发现:
| 文件/目录 | 用途 | 必需 |
|---|---|---|
AGENTS.md | 代理的 记忆。提供持久上下文(项目约定、指令、偏好),总是在启动时加载。运行时只读。 | 是 |
skills/ | 技能 定义目录。每个子目录应包含一个 SKILL.md 文件。运行时只读。 | 否 |
user/ | 每用户可写记忆。如果 user 文件夹中存在 AGENTS.md 模板,代理会为每个用户种子化该模板(如果文件夹为空,代理会创建一个空的 AGENTS.md)。运行时可写。通过记忆中间件预加载到代理的上下文中。 | 否 |
subagents/ | 主代理可以委托给的 子代理。每个子目录必须包含 deepagents.toml、AGENTS.md 和可选的 skills 文件夹。打包时自动发现。 | 否 |
mcp.json | MCP 服务器配置。在部署环境中仅支持 http 和 sse 传输。 | 否 |
.env | 环境变量 (API 密钥、密钥)。放置在项目根目录的 deepagents.toml 旁边。 | 否 |
配置文件
deepagents.toml 配置代理的身份和沙箱环境。仅 [agent] 部分是必需的。[sandbox] 部分是可选的,默认为无沙箱。
[agent]
(必需)
核心代理身份。有关模型选择和提供商配置的更多信息,请参阅 支持的模型。
已部署代理的名称。用作 LangSmith 中的助手标识符。
deepagents.toml
name 字段是整个配置文件中唯一必需的值。其他所有内容都有默认值。- 技能:打包器递归扫描
skills/,跳过隐藏点文件,并打包其余文件。 - 用户记忆:如果
user/存在,单个AGENTS.md作为每用户记忆打包(如果存在则来自user/AGENTS.md,否则为空)。在运行时,每个用户获得自己的副本(首次访问时初始化,从不覆盖)。代理可以读取和写入此文件。 - 子代理:如果
subagents/存在,打包器扫描有效的子目录(每个必须包含deepagents.toml和AGENTS.md)。主代理接收一个task工具,按名称将工作委托给每个子代理。请参阅 子代理。 - MCP 服务器:如果
mcp.json存在,它包含在部署中,并且langchain-mcp-adapters作为依赖项添加。仅支持 HTTP/SSE 传输(stdio 在打包时被拒绝)。 - 模型依赖:
model字段中的provider:前缀确定所需的langchain-*包(例如,google_genai->langchain-google-genai)。这包括子代理配置中指定的模型。 - 沙箱依赖:
[sandbox].provider值映射到其配套包(例如,daytona->langchain-daytona)。
[sandbox]
配置代理运行代码的隔离执行环境。沙箱提供一个带有文件系统和 Shell 访问的容器,因此不受信任的代码不会影响主机。有关支持的提供商和高级沙箱配置,请参阅 沙箱。
当省略或设置为 provider = "none" 时,沙箱被禁用。如果您需要代码执行或技能脚本执行,请使用沙箱。
沙箱提供商。确定容器运行的位置。支持的值:
"none"、"daytona"、"modal"、"runloop"、"langsmith" (私人测试版)。请参阅 沙箱集成 获取提供商详情。沙箱环境的提供商特定模板名称。
沙箱容器的基础 Docker 镜像。
沙箱生命周期范围。
"thread" 为每次对话创建一个沙箱。"assistant" 为同一助手的所有对话共享一个沙箱。"thread"(默认):每次对话获得自己的沙箱。不同的线程获得不同的沙箱,但同一线程在各轮次中重用其沙箱。当每次对话应以干净环境开始时使用此选项。"assistant":所有对话共享一个沙箱。文件、已安装的包和其他状态在对话之间持久化。当代理维护一个长寿命的工作区(如克隆的仓库)时使用此选项。
.env
将 .env 文件与 deepagents.toml 放在一起,包含您的 API 密钥:
沙箱提供商
在deepagents.toml 中设置 [sandbox].provider 并将必需的 env vars 添加到 .env。有关可用提供商,请参阅 沙箱集成。有关生命周期模式和 SDK 用法,请参阅 沙箱。
部署端点
已部署的服务器提供:示例
一个具有每用户偏好的内容写作代理,代理可以更新该偏好:deepagents.toml
deepagents.toml
用户记忆
用户记忆为每个用户提供自己的可写AGENTS.md,该文件在对话之间持久化。要启用它,请在项目根目录创建一个 user/ 目录:
user/ 目录存在(即使为空),每个用户在 /memories/user/AGENTS.md 获得自己的 AGENTS.md。如果您提供 user/AGENTS.md,其内容用作初始模板;否则种子化为一个空文件。
在运行时,用户记忆通过自定义认证 (runtime.server_info.user.identity) 按用户范围划分。当用户第一次与代理交互时,他们的命名空间用模板种子化。后续交互重用现有文件 — 代理的编辑持久化,重新部署从不覆盖用户数据。
工作原理
- 打包时 — 打包器读取
user/AGENTS.md(或使用空字符串)并将其包含在种子负载中。 - 运行时 (首次访问) — 当代理第一次看到
user_id时,它将AGENTS.md模板写入该用户命名空间下的存储。现有条目从不被覆盖。 - 预加载 — 用户
AGENTS.md传递给记忆中间件,因此代理在每次对话开始时在上下文中看到其内容。 - 可写 — 代理可以使用
edit_file工具更新它。共享的AGENTS.md文件和技能文件夹是只读的。
权限
| 路径 | 可写 | 范围 |
|---|---|---|
/memories/AGENTS.md | 否 | 共享 (助手范围) |
/memories/skills/** | 否 | 共享 (助手范围) |
/memories/user/** | 是 | 每用户 (user_id 范围) |
/memories/subagents/<name>/** | 仅子代理 | 每子代理 (隔离) |
用户身份
user_id 通过 runtime.user.identity 从自定义认证解析。平台自动注入已认证用户的身份 — 无需通过 configurable 传递。如果不存在已认证用户,用户记忆功能在该调用中被优雅跳过。
子代理
子代理允许主代理将专业化任务委托给隔离的子代理。每个子代理都有自己的系统提示词、可选技能和可选 MCP 工具。主代理接收一个task 工具,按名称将工作分发给子代理。
有关子代理为何有用以及它们在 SDK 级别如何工作的背景,请参阅 子代理。
目录结构
在项目根目录创建一个subagents/ 目录。每个子目录是一个子代理:
| 文件 | 用途 |
|---|---|
deepagents.toml | 子代理配置,包含 [agent].name 和 [agent].description |
AGENTS.md | 子代理的系统提示词 |
| 文件 | 用途 |
|---|---|
skills/ | 子代理特定技能 (包含 SKILL.md 文件) |
mcp.json | MCP 服务器配置 (仅限 HTTP/SSE;stdio 被拒绝) |
子代理配置
子代理的唯一标识符。必须在所有子代理中唯一。
此子代理的作用。主代理使用此来决定何时委托。必须非空。
provider:model 格式的模型覆盖。省略以继承主代理的模型。subagents/researcher/deepagents.toml
继承
子代理默认从主代理继承一些属性:| 属性 | 继承 | 备注 |
|---|---|---|
| 模型 | 是 | 在子代理的 deepagents.toml 中使用 model 覆盖 |
| 工具 | 是 | 通过将 mcp.json 添加到子代理目录来覆盖 |
| 技能 | 否 | 在子代理自己的 skills/ 目录中显式声明 |
记忆隔离
每个子代理在/memories/subagents/<name>/ 获得专用的隔离记忆命名空间。子代理的 AGENTS.md 和技能在部署时种子化到此命名空间中。
| 路径 | 主代理 | 子代理 |
|---|---|---|
/memories/AGENTS.md | 读取 | 无访问权限 |
/memories/skills/** | 读取 | 无访问权限 |
/memories/user/** | 读取 + 写入 | 无访问权限 |
/memories/subagents/<name>/** | 读取 | 读取 + 写入 |
示例
一个将研究委托给专业化子代理的 go-to-market 代理:deepagents.toml
subagents/researcher/deepagents.toml
subagents/researcher/AGENTS.md
限制
- MCP:仅限 HTTP/SSE。 Stdio 传输在打包时被拒绝。
- 无自定义 Python 工具。 使用 MCP 服务器暴露自定义工具逻辑。
通过 MCP 将 这些文档 连接到 Claude、VSCode 等,以获取实时答案。

