CLI 将其配置存储在文档索引
在以下地址获取完整的文档索引:https://docs.langchain.org.cn/llms.txt
在进一步探索之前,请使用此文件发现所有可用页面。
~/.deepagents/ 目录中。主要的配置文件包括
| 文件 | 格式 | 目的 |
|---|---|---|
config.toml | TOML | 模型默认值、提供商设置、构造函数参数、配置文件覆盖、主题、更新设置、MCP 信任库 |
.env | Dotenv | 全局 API 密钥和机密 |
hooks.json | JSON | 外部工具对 CLI 生命周期事件的订阅 |
.mcp.json | JSON | 全局 MCP 服务器定义 |
环境变量
CLI 从 dotenv 文件加载环境变量,因此您不需要在 shell 配置中export API 密钥,也不需要在不同项目之间复制 .env 文件。
加载顺序和优先级
启动时会加载两个.env 文件
- 项目
.env— 当前工作目录中的.env文件(如果存在) - 全局
~/.deepagents/.env— 一个共享文件,作为所有项目的回退选项
.env > 全局 .env。已在 shell 中设置的值永远不会被覆盖——包括在执行 /reload 时。
DEEPAGENTS_CLI_ 前缀
所有 CLI 特有的环境变量都使用 DEEPAGENTS_CLI_ 前缀(例如,DEEPAGENTS_CLI_AUTO_UPDATE、DEEPAGENTS_CLI_DEBUG)。请参阅 CLI 环境变量参考 以获取完整列表。 该前缀也可作为 CLI 读取的任何环境变量(包括第三方凭据)的覆盖机制。CLI 会首先检查 DEEPAGENTS_CLI_{NAME},然后回退到 {NAME}:~/.deepagents/.env
/reload 时,CLI 会重新读取 .env 文件并获取带前缀的值,因此您无需重启即可更换密钥。
示例
在~/.deepagents/.env 中统一存储 API 密钥
.env 文件来按项目进行覆盖。
配置文件
~/.deepagents/config.toml 允许您自定义模型提供商、设置默认值以及向模型构造函数传递额外参数。
默认和最近使用的模型
[models].default 的优先级始终高于 [models].recent。/model 命令仅写入 [models].recent,因此您配置的默认值永远不会被会话中途的切换所覆盖。要删除默认值,请使用 /model --default --clear 或从配置文件中删除 default 键。
最近使用的 Agent
/agents 斜杠命令选择 Agent 会将名称写入 [agents].recent。下次直接启动 deepagents 时将自动恢复该 Agent。显式的 -a/--agent 始终具有最高优先级,而 -r/--resume 会绕过最近使用的条目,以便恢复线程原始的 Agent。请参阅 切换 Agent 以了解完整的优先级链。
提供商配置
每个提供商都是[models.providers] 下的一个 TOML 表
存放 API 密钥的环境变量名称(例如
"OPENAI_API_KEY"),而非密钥本身。CLI 在启动时从该环境变量读取凭据,以便在创建模型前验证访问权限。大多数聊天模型包会自动从默认环境变量读取。请参阅 提供商参考 表以了解每个提供商检查的变量。转发给模型构造函数的额外关键字参数。扁平键(例如
temperature = 0)适用于该提供商的每个模型。以模型为键的子表(例如 [params."gpt-4o"])仅覆盖该特定模型的值;合并是浅层的(冲突时以模型配置为准)。不要将凭据(例如 api_key)放在 params 中。请使用 api_key_env 指向环境变量。(高级) 覆盖模型运行时 Profile 中的字段(例如
max_input_tokens)。扁平键适用于该提供商的每个模型。以模型为键的子表(例如 [profile."claude-sonnet-4-5"])仅覆盖该特定模型的值;合并是浅层的(冲突时以模型配置为准)。这些覆盖在模型创建后应用,因此它们会对上下文限制显示、自动总结以及任何其他读取 Profile 的功能生效。用于 任意模型 提供商。格式为
module.path:ClassName 的完整限定 Python 类。设置后,CLI 将直接导入并实例化该类作为提供商 <name>。该类必须是 BaseChatModel 的子类。该提供商是否出现在
/model 选择器中。设置为 false 可隐藏从已安装包中自动发现的提供商(例如,您不希望在切换器中显示的传递依赖项)。您仍可以通过 /model provider:model 或 --model 直接使用已禁用的提供商。模型构造函数参数
任何提供商都可以使用params 表向模型构造函数传递额外参数
逐模型覆盖
如果特定模型需要不同的参数,请在params 下添加以模型为键的子表,以便覆盖单个值而无需复制整个提供商配置
ollama:qwen3:4b获取{temperature: 0.5, num_ctx: 4000}— 模型覆盖优先。ollama:llama3获取{temperature: 0, num_ctx: 8192}— 无覆盖,仅使用提供商级别的参数。
Profile 覆盖 (高级)
覆盖模型运行时 Profile 中的字段以更改 CLI 对模型能力的解释。最常见的用例是降低max_input_tokens 以更早触发自动总结——这对于测试或限制上下文使用非常有用
params 相同 — 冲突时模型级别的值优先
使用 --profile-override 覆盖 CLI Profile (高级)
要在运行时覆盖模型 Profile 字段而不编辑配置文件,请通过 --profile-override 传递 JSON 对象
--profile-override。 --profile-override 的值在会话中途执行 /model 热切换时依然有效 — 切换模型后会重新将覆盖应用于新模型。自定义基础 URL
一些提供商包接受base_url 以覆盖默认端点。例如,langchain-ollama 默认通过底层的 ollama 客户端连接到 https://:11434。要指向其他位置,请在配置中设置 base_url
兼容的 API
对于公开了与 OpenAI 或 Anthropic 线级兼容的 API 的提供商,您可以使用现有的langchain-openai 或 langchain-anthropic 包,并将 base_url 指向提供商的端点
提供商在官方规范之上添加的任何功能都将无法使用。如果提供商提供专门的 LangChain 集成包,请优先使用该包。
将模型添加到交互式切换器
某些提供商(例如langchain-ollama)不捆绑模型 Profile 数据(请参阅 提供商参考 获取完整列表)。在这种情况下,交互式 /model 切换器不会列出该提供商的模型。您可以通过在配置文件中为提供商定义 models 列表来填补这一空白
/model 切换器现在将包含一个列出这些模型的 Ollama 部分。 这完全是可选的。您始终可以通过直接指定完整名称来切换到任何模型:任意提供商
您可以使用class_path 使用任何 LangChain BaseChatModel 子类。CLI 会直接导入并实例化该类——不需要内置的提供商包。
api_key_env 和 base_url 是可选的。class_path 提供商预期在内部处理其自身的身份验证——当您的模型使用自定义认证(JWT 令牌、专有标头、mTLS 等)而非标准 API 密钥时,这非常有用
/model xyz:abc-xyz-1 或 --model xyz:abc-xyz-1 切换到该模型。
Deep Agents CLI 需要工具调用 (tool calling) 支持。如果您的自定义模型支持工具调用但 CLI 不知情,请在提供商 Profile 中声明它将
max_input_tokens 设置为您的模型支持的值,以启用准确的上下文长度跟踪和自动总结。deepagents-cli 相同的 Python 环境中
my_custom:my-model-v1(通过 /model 或 --model)时,模型名称 (my-model-v1) 将作为 model 关键字参数传递
<package>.data._profiles 的 _PROFILES 字典中提供模型 Profile,而不是在 models 键下定义它们。有关更多信息,请参阅 LangChain 模型 Profile。
Skill 额外允许的目录
默认情况下,当 CLI 加载 Skill 时,它会验证解析后的 Skill 文件路径是否保留在标准 Skill 目录 之一。这可以防止 Skill 目录内的符号链接读取根目录之外的任意文件。 如果您在非标准位置存储共享的 Skill 资产,并使用标准 Skill 目录中的符号链接引用它们,则可以将该位置添加到包含白名单中。这不会增加新的 Skill 发现位置:Skill 仍然只能从标准目录中发现。添加到 Skill 包含白名单的路径。支持
~ 扩展。DEEPAGENTS_CLI_EXTRA_SKILLS_DIRS 环境变量设置为以冒号分隔的列表
/reload 后生效。
主题
使用/theme 打开交互式主题选择器。在列表中导航以实时预览主题,按 Enter 将您的选择持久化到 config.toml。 CLI 附带了许多内置主题。默认主题是 langchain,这是一个带有 LangChain 品牌颜色的深色主题。所选主题将持久化在 [ui] 下:用户定义主题
在config.toml 的 [themes.<name>] 部分定义自定义主题。每个部分都需要 label (str)。如果省略,dark (bool) 默认为 false — 对于深色主题请设置为 true。所有颜色字段都是可选的 — 省略的字段将根据 dark 标志回退到内置的深色或浅色调色板。
/theme 选择器中。
覆盖内置主题颜色
要微调内置主题的颜色而不创建新主题,请使用[themes.<builtin-name>] 部分。仅读取颜色字段 — label 和 dark 继承自内置主题
[themes.*] 部分的更改在 /reload 后生效。自动更新
CLI 可以自动检查并安装更新。- 配置文件
- 环境变量
/update 斜杠命令手动检查并安装更新,这将绕过缓存并在线报告成功或失败。 升级后,CLI 将在下次启动时显示“新功能”横幅,并附带指向变更日志的链接。 在会话退出时,如果在会话期间检测到新版本,将显示更新横幅作为提醒。托管部署
安装脚本 支持以 root 身份运行,针对在极简 root 环境中执行脚本的 macOS MDM 工具(Kandji、Jamf 等)。 当id -u 为 0 时,脚本会:- 解析真实控制台用户的
HOME(通过/dev/console或/Users目录扫描) - 在每个安装步骤之后,将所有创建的文件
chown回目标用户
DEEPAGENTS_CLI_AUTO_UPDATE=1,或者将带有 [update] auto_update = true 的 config.toml 部署到 ~/.deepagents/config.toml。要完全抑制自动更新和更新检查,请设置 DEEPAGENTS_CLI_NO_UPDATE_CHECK=1。CLI 环境变量参考
所有 CLI 特有的环境变量都使用DEEPAGENTS_CLI_ 前缀。请参阅 DEEPAGENTS_CLI_ 前缀 了解该前缀如何作为第三方凭据的覆盖机制。
启用 CLI 自动更新(
1、true 或 yes)。启用详细调试日志记录到文件。接受
1、true、yes、on(不区分大小写)为启用;0、false、no、off、空字符串或未设置为禁用。启用后,每个会话的服务器日志文件在关闭时会保留,并将其路径打印到 stderr 以便排查。调试日志文件的路径。
添加到 Skill 包含白名单 的以冒号分隔的路径。
覆盖用于 Agent 追踪的 LangSmith 项目名称。请参阅 使用 LangSmith 进行追踪。
设置后禁用自动更新检查。
允许的以逗号分隔的 shell 命令(或
recommended / all)。将用户标识符附加到 LangSmith 追踪元数据中。
外部编辑器
按Ctrl+X 或输入 /editor 在外部编辑器中编写提示词。CLI 会依次检查 $VISUAL、$EDITOR,最后回退到 vi (macOS/Linux) 或 notepad (Windows)。GUI 编辑器(VS Code、Cursor、Zed、Sublime Text、Windsurf)会自动接收 --wait 标志,以便 CLI 阻塞直到您关闭文件。
挂钩
钩子 (Hook) 让外部程序能够对 CLI 生命周期事件做出反应。在~/.deepagents/hooks.json 中配置命令,每当事件触发时,CLI 就会通过管道将 JSON 有效负载传输到每个匹配命令的 stdin。 钩子在后台线程中以“即发即弃”的方式运行——它们永远不会阻塞 CLI,并且日志会记录失败情况而不会中断您的会话。设置
创建~/.deepagents/hooks.json
~/deepagents-events.log。
钩子 (Hook) 配置
配置文件包含一个hooks 数组。每个条目包含
要运行的命令和参数。无 shell 扩展:如果需要,请使用
["bash", "-c", "..."]。要订阅的事件名称。省略或留空以接收所有事件。
events 过滤器,因此它会接收 CLI 发出的每一个事件。
有效负载格式
每个钩子命令都会在 stdin 上收到一个 JSON 对象,其中包含"event" 键以及特定于事件的字段
事件参考
session.start
在 Agent 会话开始时触发(包括交互和非交互模式)。
会话线程标识符。
session.end
在会话退出时触发。
会话线程标识符。
user.prompt
在交互模式下,当用户提交聊天消息时触发。 无额外字段。input.required
当 Agent 需要人工输入时触发(人机回圈中断)。 无额外字段。permission.request
当一个或多个工具调用需要用户许可时,在审批对话框之前触发。
请求批准的工具名称。
tool.error
当工具调用返回错误时触发。
出错工具的名称。
task.complete
当 Agent 完成当前任务时触发(流式循环结束且无进一步中断)。
会话线程标识符。
context.compact
在 CLI 压缩(总结)对话上下文之前触发。 无额外字段。执行模型
- 后台线程:钩子子进程通过
asyncio.to_thread在线程中运行,因此主事件循环永远不会被阻塞。 - 并发调度:当多个钩子匹配一个事件时,它们会在线程池中并发运行。
- 5 秒超时:每个命令都有 5 秒的超时时间。超过此时间的命令将被杀死。
- 即发即弃:错误会按钩子进行捕获并记录在调试/警告级别。失败的钩子永远不会导致 CLI 崩溃或停滞。
- 延迟加载:配置文件在第一次事件调度时读取一次,并在会话的其余部分进行缓存。
- 无 shell 扩展:命令是直接执行的(不通过 shell)。如果您需要 shell 功能(如管道或变量扩展),请将其包装在
["bash", "-c", "..."]中。
钩子示例
将所有事件记录到文件
将所有事件记录到文件
任务完成时的桌面通知 (macOS)
任务完成时的桌面通知 (macOS)
Python 处理器
Python 处理器
编写一个从 stdin 读取 JSON 有效负载的处理器脚本
my_handler.py
~/.deepagents/hooks.json
安全注意事项
钩子遵循与 Git 钩子或 shell 别名相同的信任模型——任何可以写入~/.deepagents/hooks.json 的用户都可以执行任意命令。这是设计使然
- 无命令注入:有效负载数据仅以 JSON 形式流向 stdin,绝不会作为命令行参数。
json.dumps处理转义。 - 默认不使用 shell:命令在运行时
shell=False,防止 shell 注入。 - 配置错误:无效的 JSON 或意外类型会产生日志警告,而不是安全问题。
将这些文档连接到 Claude、VSCode 等,以获得实时答案。

