1. 为什么你的 Hermes Agent 用了一周还是“陌生人”
Hermes Agent 是少数自带学习闭环的开源 Agent 框架,它能从每次任务里提炼 Skills(程序性记忆),也能把关于你和环境的事实写进 Memory(声明性记忆)。但很多人装完就发现:它并没有变聪明,甚至每次都在重复问“你用 npm 还是 pnpm”。问题不在模型,而在自进化链路没有真正跑通——Skills 目录没挂对、Memory 写入被静默跳过、Honcho 的 peer 配置和 profile 对不上,后台审查代理自然学不到东西。
这篇是系列第三篇,聚焦落地配置。我会把config.toml和settings.json的骨架直接给你,然后完整演示一次“技能注册 → 记忆写入 → 行为验证”的动作,让你能亲眼看到 Agent 从“失忆”变成“记得你”的过程。适合已经跑通 Hermes 基础对话、想进一步把它养成专属帕鲁的开发者。全程只需要一个可用的模型接入点,我用 TaoToken 做演示,因为它的 API 兼容 OpenAI 格式,接 Hermes 的config.toml很省事。
先明确三个概念,后面配置才不会晕:Skills 是“怎么做”的方法论,存在~/.hermes/skills/下,每个技能一个目录带SKILL.md;Memory 是“是什么”的事实库,分MEMORY.md(环境)和USER.md(用户偏好);Honcho 是跨会话用户建模层,让多个 profile 共享对你的认知但各自发展人格。三者串起来,才叫自进化闭环。
2. 前置:TaoToken 接入点与 Hermes 环境准备
Hermes 的模型调用走标准 OpenAI 兼容接口,所以接入点只需要 base_url 和 api_key。TaoToken 的 API 地址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接填进配置即可。如果你还没有 key,去控制台创建一个:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,创建后在 API Keys 页面复制:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。
环境侧确认三件事:Hermes 版本 ≥ 0.8(hermes --version),Python 虚拟环境已激活,~/.hermes/目录存在。如果目录不存在,先跑一次hermes init让它生成默认结构。我试过在干净的 Ubuntu 22.04 上从零配,最容易踩的坑是~/.hermes/skills/权限不对导致后台审查写入失败,建议先chmod 755 ~/.hermes再继续。
模型选择上,后台审查代理会额外消耗 token,因为它要跑最多 8 次迭代来判断“值不值得学”。所以别用最贵的模型做审查,用中等能力的就够。TaoToken 的模型列表里挑一个性价比合适的,填进config.toml的model字段。如果你还想在配置前先验证模型对话是否正常,可以用模型对话页快速测一句:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite 。
3. 可复制配置:config.toml 与 settings.json 骨架
Hermes 的主配置在~/.hermes/config.toml,Honcho 和部分运行时开关在settings.json。下面这份骨架可以直接抄,改掉 api_key 和 peerName 就能用。
# ~/.hermes/config.toml [model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model = "你的模型名" max_tokens = 4096 temperature = 0.3 [agent] max_iterations = 30 quiet_mode = false [learning] # 技能学习触发间隔:每 N 次工具调用后触发后台审查 skill_nudge_interval = 10 # 记忆学习触发间隔(秒) memory_nudge_interval = 300 # 后台审查代理最大迭代次数 review_max_iterations = 8 # 是否允许 Agent 自动创建/更新技能 auto_skill_manage = true [skills] # 内置技能目录 builtin_dir = "~/.hermes/skills" # 外部技能目录,可挂多个 external_dirs = [ "~/my-skills", "~/shared-skills" ] [memory] # 记忆存储目录 store_dir = "~/.hermes/memories" # 会话开始时冻结快照,防止中途注入 freeze_snapshot = true # 写入前安全扫描 security_scan = true [honcho] enabled = true # Honcho 服务地址,本地部署填 localhost endpoint = "http://localhost:8000" workspace = "zhang-san"settings.json负责 profile 与 peer 的映射,放在~/.hermes/settings.json:
{ "defaultProfile": "default", "hosts": { "hermes.default": { "aiPeer": "default", "peerName": "你的名字", "workspace": "zhang-san", "observation": { "user": { "observeMe": true, "observeOthers": true }, "ai": { "observeMe": true, "observeOthers": true } } }, "hermes.work": { "aiPeer": "work", "peerName": "你的名字(工作)", "workspace": "zhang-san", "observation": { "user": { "observeMe": true, "observeOthers": false }, "ai": { "observeMe": true, "observeOthers": false } } } } }两个文件的关系要理清:config.toml管“怎么学”,settings.json管“谁在学、学到的归谁”。workspace相同意味着多个 profile 共享对你的认知,aiPeer不同意味着它们各自发展独立人格。工作 profile 把observeOthers关掉,避免把生活场景的偏好带进工作上下文。
注意:
base_url结尾不要加/v1,Hermes 会自己拼路径。加了会变成/v1/v1/chat/completions直接 404。
4. 完整动作演示:技能注册 → 记忆写入 → 行为验证
配置改完先重启 Hermes 让config.toml生效。然后我们走一遍完整链路,每一步都有可观察的结果。
4.1 技能注册:手动创建一个可被加载的技能
先手动建一个技能,确认目录结构和加载机制正常。创建~/.hermes/skills/taotoken-api-check/SKILL.md:
--- name: taotoken-api-check description: 验证 TaoToken 接入点是否可用,检查 base_url 与密钥配置 category: devops --- ## 触发条件 当用户怀疑模型接入点配置错误,或需要验证 API 连通性时。 ## 执行步骤 1. 读取 ~/.hermes/config.toml 中的 base_url 和 model 字段 2. 用 curl 发送一次最小对话请求: curl -s https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"你的模型名","messages":[{"role":"user","content":"ping"}]}' 3. 检查返回 JSON 是否包含 choices 字段 4. 如果返回 401,提示用户检查 api_key 5. 如果返回 404,提示用户检查 base_url 是否误加了 /v1 ## 已知问题 - base_url 结尾加 /v1 会导致 404 - 密钥过期会返回 401,需重新生成 ## 验证方法 返回 JSON 中有 choices[0].message.content 即视为成功。保存后跑hermes skills list,应该能看到taotoken-api-check出现在列表里。如果没出现,检查config.toml的builtin_dir路径是否指向了正确目录,以及SKILL.md的 frontmatter 是否有语法错误(YAML 对缩进敏感)。
4.2 记忆写入:让 Agent 记住一条偏好
启动 Hermes 对话,直接告诉它一条关于你的偏好:
记住:我所有的 API 密钥都放在 ~/.hermes/.env 里,不要建议我把密钥写进代码或配置文件。Hermes 会调用 memory 工具写入。写入后,检查~/.hermes/memories/USER.md,应该能看到类似内容:
§ 用户的 API 密钥统一存放在 ~/.hermes/.env,不要建议将密钥硬编码进代码或配置文件如果没写进去,看两个地方:一是config.toml里security_scan是否把这条内容误判拦截了(密钥相关词汇容易触发扫描),二是后台审查是否还在跑(memory_nudge_interval默认 300 秒,可以临时调小到 30 秒方便调试)。
4.3 行为验证:确认记忆真的生效
这一步最关键。退出当前会话,重新启动 Hermes,然后问一个会触发记忆的问题:
我要调用一个外部 API,密钥应该放哪里?如果记忆生效,Hermes 会直接回答“放在~/.hermes/.env”,而不是泛泛地说“用环境变量”。这就是冻结快照注入的效果——会话一开始,USER.md的内容就被拼进系统提示,Agent 不需要你重复交代。
再验证技能:新开会话,输入“帮我检查一下 TaoToken 接入点是否正常”。Hermes 应该加载taotoken-api-check技能并按步骤执行,而不是从零开始摸索。如果它没加载技能,检查SKILL.md的description是否足够明确——触发匹配靠的是语义相似度,描述太模糊会匹配不上。
4.4 观察后台审查:让 Agent 自己进化
上面三步是手动验证。真正体现自进化的是后台审查。做一次稍微复杂的任务,比如“帮我把这个项目部署到 Vercel”,过程中会有多次工具调用。任务完成后等 10 次工具调用的阈值触发,后台审查代理会静默启动。
观察方法:看~/.hermes/skills/下是否多出了新目录,或者已有技能的SKILL.md是否被 patch 过。也可以临时把quiet_mode设为false,审查代理的输出会打到终端。审查代理的判断逻辑是:如果这次任务有试错、有非平凡方法、用户表达了不同期望,就创建或更新技能;否则输出 “Nothing to save.” 然后停止。它不会为了学习而学习,这点设计很克制。
5. 本篇常见错排查
配置跑不通,九成是下面几个问题。逐个对照。
报错401 Unauthorized:api_key 填错或过期。去 API Keys 页面重新生成:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。注意config.toml里密钥不要加引号以外的空格。
报错404 Not Found:base_url 写成了https://taotoken.net/api/v1。改成https://taotoken.net/api,Hermes 自己会拼/chat/completions。
技能不加载:SKILL.md的 frontmatter 缺name或description,或者 YAML 缩进用了 Tab。YAML 只认空格。另外确认external_dirs里的路径是绝对路径或~开头,相对路径不认。
记忆写不进去:security_scan拦截。密钥、token、authorized_keys 这类词容易触发。调试时可以先在config.toml里把security_scan设为false,确认链路通了再打开。
Honcho 连接失败:endpoint填错,或者 Honcho 服务没启动。本地部署的话先确认http://localhost:8000/health能返回 200。如果不用 Honcho,把enabled设为false,不影响 Skills 和 Memory 的核心功能。
后台审查不触发:skill_nudge_interval设太大,或者任务工具调用次数没到阈值。调小到 5 方便观察。另外确认auto_skill_manage是true。
多 profile 记忆串了:settings.json里两个 profile 的workspace相同但aiPeer也相同,导致人格没隔离。检查aiPeer字段是否各自唯一。
6. 把闭环跑顺之后
Skills、Memory、Honcho 三件套配好之后,Hermes 的行为会明显不一样:它开始记得你的工具偏好,开始复用解决过的问题,开始在不同 profile 之间保持一致的“对你的认知”但发展出各自的专长。这套闭环的价值不在于某一次对话变聪明,而在于用得越久、积累越厚。
如果你打算长期跑编码类任务或 Agent 工作流,可以考虑 Coding Plan,后台审查和技能维护会持续消耗 token,包月比按量更可控:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 。接入文档里有完整的参数说明和更多配置示例:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。如果你用 Claude Code 做主力编码工具,Anthropic 兼容接入的配置也在文档里:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude-code-anthropic&utm_campaign=rewrite 。
最后给一个实用技巧:定期跑hermes skills list和cat ~/.hermes/memories/USER.md,看看 Agent 都学了什么。发现过时的技能就hermes skills disable,发现记错的偏好就手动改USER.md。自进化不等于放任自流,你仍然是这只帕鲁的训练师。