🤖HermesBlog
Hermes 官方教程 · 第14篇2026/8/9· Easy Understand Hermes Agent

一人多分身——Profiles 配置档案详解

Hermes Agent 官方教程第十四篇:Profiles 配置档案,一台机器上跑多个独立 AI 助手。

Profiles:一人多分身

一人多分身——Profiles 配置档案详解

你有没有想过,让同一个 Hermes 同时扮演好几个角色?比如一个帮你写代码,一个帮你查资料,还有一个专门陪你唠嗑。Profiles(配置档案) 就是干这个用的——它让你在一台机器上跑多个互相独立的 Hermes 智能体,每个都有自己的配置、API 密钥、记忆、会话、技能,甚至网关状态,互不干扰。

Profiles 是啥?

简单说,一个 Profile 就是一个独立的 Hermes 小天地。每个 Profile 都有自己的目录,里面装着它专属的 config.yaml.envSOUL.md、记忆、会话、技能、定时任务和状态数据库。你可以把 coding 助手、个人机器人、研究助手分别放在不同的 Profile 里,它们各过各的日子,谁也不会弄乱谁的“房间”。

顺带一提,Hermes 只认那些带着“身份文件”的目录——config.yaml.envSOUL.mdprofile.yamlauth.jsonstate.db 里至少有一个,才算一个正经 Profile。光是被日志或定时任务随手建出来的空目录,profile list、网关和 -p 都会直接无视。

⚠️ 重要提醒:千万别让两个 agent 进程同时指向同一个 Profile!因为两边都会自动写记忆,还会把对方的写入加载到自己的系统提示里,最后状态会乱成一锅粥。Profiles 就是专门为了防止这种情况的。如果你真的需要共享记忆,请用外部记忆提供者(external memory provider)。

几个容易混的词

  • Profile:一个助手配置和数据的“家”,跨对话、跨重启都保持同一份状态。
  • Agent:跑起来的 Hermes 助手本身,用的就是某个 Profile 的配置和状态。
  • Bot Mode 机器人:桌面端 Bot Mode 名单里的一个条目,有头像、有常驻的 Bot Chat。每个 Bot 都是一个 Profile,但不是每个 Profile 都是 Bot——只有被加进名单、存了展示信息(标题、头像、分区、隐藏状态)并固定了 Bot Chat 的才算。
  • 消息机器人:Telegram、Discord、Slack 这类平台上的账号,通过网关连到 Hermes,靠 bot token 认身份。
  • 子智能体(Subagent):由 delegate_task 临时拉起来干活的子助手,对话是新的,但它不是独立 Profile。

快速上手

创建 Profile 超简单,而且创建完它立马就变成一个命令

hermes profile create coder       # 创建 profile + "coder" 命令别名
coder setup                       # 配置 API 密钥和模型
coder chat                        # 开聊!

就这么简单,coder 现在就是一个拥有自己配置、记忆和状态的独立 Hermes 了。

💡 想一步到位?在新 Profile 里跑 hermes setup --portal,模型和工具一次配齐。

创建 Profile 的几种姿势

1. 空白档案

hermes profile create mybot

创建全新 Profile,自带基础技能。然后跑 mybot setup 配置 API 密钥和模型就行。

如果你想让它当看板工人(kanban worker),创建时加个 --description 描述它的专长:

hermes profile create researcher --description "Reads source code and external docs, writes findings."

2. 只克隆配置(--clone

hermes profile create work --clone

复制当前 Profile 的 config.yaml.envSOUL.md、技能,以及精选记忆文件 memories/MEMORY.mdmemories/USER.md——记忆被当作 agent 身份的一部分,和 SOUL.md 一样。会话、state.db、定时任务以及其他所有东西都是全新的。如果你连记忆也想要空白,那就别加 --clone 创建,或者创建后把这两个文件删掉;当它们不存在时,agent 绝不会回退去读别的 Profile 的记忆。想改密钥就去 ~/.hermes/profiles/work/.env,想换性格就改 SOUL.md

想让克隆体继续同步导入的 agent 配置?加 --sync-imports:如果源 Profile 跑过 hermes import-agent,它的 import-sync.json 记录了从哪些 Claude Code / Codex 目录导入过东西。--clone 默认不带这个清单,克隆体只拿到一次性的技能和记忆副本。加上 --sync-imports 就能把清单也带过去:

hermes profile create work --clone --sync-imports
hermes -p work import-agent --sync        # 从同一个 ~/.claude / ~/.codex 拉取变化

这是显式、可选、单向的,而且只连到外部 agent 目录,绝不连回源 Profile——两个 Profile 依旧是互不干扰的孤岛。

3. 全部克隆(--clone-all

hermes profile create backup --clone-all

所有东西都复制过来——配置、密钥、性格、全部记忆、技能、插件,一个不落。注意:会话历史、state.db、备份这些大文件不会被复制(它们可能有好几个 GB);从默认 Profile 克隆时,本地模型运行时目录(models/runtimes/node/,都是按需重新下载的东西)也会跳过。定时任务也不会被克隆:它们是绑定在源 Profile 及其投递渠道上的计划任务,如果克隆继承了它们,每个任务都会跑两遍(两个网关、同一批 job id)。新 Profile 的 cron/ 目录是空的。想要连历史和定时任务一起完整备份,请用 hermes profile exporthermes backup

📝 OAuth 登录从不复制:Anthropic(Claude Pro/Max)、OpenAI Codex 和 xAI 的 OAuth 登录用的是一次性刷新令牌——复制一份并不是第二份凭证,而是同一份凭证有了两个主人,谁先刷新谁就会让其他副本失效。所以 --clone-all(以及仪表盘的凭证镜像)会把这些 OAuth 记录从克隆中剔除。静态 API 密钥照常复制。想让新 Profile 自己登录 OAuth 提供方,在它里面运行 hermes -p <name> auth add <provider>(或者 hermes -p <name> model)。

4. 从指定 Profile 克隆

hermes profile create work --clone-from coder

直接从 coder 这个 Profile 复制配置。想全量复制就加上 --clone-all

hermes profile create work-backup --clone-from coder --clone-all

5. 消息渠道默认不克隆(要保留就加 --clone-channels

所有克隆方式——--clone--clone-from--clone-all,以及仪表盘 / Desktop / TUI 里的“从 Profile 克隆”选项——复制源 Profile 时都不带它的消息渠道:机器人令牌和允许列表(TELEGRAM_BOT_TOKENDISCORD_ALLOWED_USERSWHATSAPP_ENABLEDAPI_SERVER_KEYWEBHOOK_SECRET 等)、config.yaml 里的 platforms: / telegram: / discord: 段落、gateway.multiplex_profiles / profile_routes,以及(对 --clone-all 而言)配对存储、WhatsApp 会话等每个机器人独有的状态。Provider 和工具的 API 密钥、模型配置、记忆设置、技能和 SOUL.md 照常复制。命令会打印出哪些平台被留下了。

原因是:一个机器人只能属于一个 Profile——两个独立网关拿着同一个令牌会争抢它的长轮询,而多路复用网关会把重复的适配器挂起(hermes gateway migrate --multiplex 也会因为每个平台一个重复凭证而拒绝执行)。用 hermes -p <name> setup 或仪表盘的 Messaging 页面给新 Profile 配置它自己的机器人。

hermes profile create twin --clone --clone-channels   # 仍然保留源 Profile 的机器人

如果已经有正在运行的多路复用网关在服务源 Profile,--clone-channels 会被拒绝(副本会立刻被挂起,CLI、仪表盘、TUI 都一样);否则它会打印一条警告,列出现在与源 Profile 共享的平台。单独用 --clone-channels 而不带克隆标志会直接报错。hermes profile list 也会对任何机器人凭证与默认 Profile 逐字节相同的现有 Profile 打印同样的警告,这样老的克隆会在出问题前先暴露出来。

💡 Honcho 记忆 + Profiles:启用 Honcho 时,克隆操作会自动为新 Profile 创建一个专属的 AI peer,同时共享同一个用户工作区。每个 Profile 构建自己的观察和身份。

每个 Profile 管好自己的凭证

命名 Profile 只从它自己的 auth.json.env 里解析 provider,不会继承根 Profile 的登录或 API 密钥,Profile 里做的令牌刷新也不会写回根目录。如果某个 Profile 自己没有配 provider,它会提示你去配(hermes -p <name> modelhermes -p <name> auth add <provider>),而不是悄悄借用别人的。hermes update 会列出所有没配 provider 的 Profile,免得哪个机器人悄无声息地哑掉。

怎么用 Profile?

命令别名:每个 Profile 都会在 ~/.local/bin/ 下生成一个同名命令:

coder chat                    # 和 coder 聊天
coder setup                   # 配置 coder
coder gateway start           # 启动 coder 的网关
coder doctor                  # 检查 coder 健康状况
coder config set model.default anthropic/claude-sonnet-4

-p 参数:任何命令都能用 -p 指定 Profile:

hermes -p coder chat
hermes --profile=coder doctor
hermes chat -p coder -q "你好"

设置默认 Profile

hermes profile use coder
hermes chat                   # 现在默认就是 coder
hermes profile use default    # 切回默认

就像 kubectl config use-context 一样方便。

随时知道自己在哪:CLI 会一直显示当前 Profile——提示符变成 coder ❯,启动横幅显示 Profile: coderhermes profile 命令也会显示当前状态。

Profiles vs 工作区 vs 沙箱

这三个概念容易搞混,但它们是不同的东西:

  • Profile:给 Hermes 自己的状态目录(配置、记忆、会话等)
  • 工作区/工作目录:终端命令从哪里启动,由 terminal.cwd 控制
  • 沙箱:限制文件系统访问的东西。Profile 不做沙箱!

在默认的 local 终端后端下,agent 的文件系统权限和你自己的用户账号一样大。Profile 并不会阻止它访问 Profile 目录以外的文件夹。所以,别把 Profile 当安全沙箱用,它只是帮你“分家”而已。

📖 官方文档

本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/profiles