上次没敢写的4个 Hermes 进阶配置,这次全给你

Hermes Agent 4个进阶配置详解:Shell Hooks 用脚本拦截AI操作、Quick Commands 零Token快捷命令、模型别名一句话切模型、凭据池轮换多Key自动切换。附完整配置代码和实战示例。

上一篇发了8个必改配置,反响不错。结尾提到4个进阶功能,很多人追着问。这次翻完源码,一个个给你讲透——配置拿来就能用,不是画饼。

先说结论

上次那8个是"装完就改"的基础配置。这次4个是真正拉开差距的进阶玩法:

配置一句话难度最低版本
Shell HooksAI每次执行命令前,先跑你的检查脚本⭐⭐v2026.4.23
Quick Commands输入 /status 直接跑系统命令,不经过AI,不花Tokenv2026.3.12
模型别名输入 /model opus 一键切模型,不用改配置文件v2026.3.23
凭据池轮换多个API Key自动轮换,被限流也不怕⭐⭐⭐v2026.4.3

⚠️ 版本要求:这4个功能都是近几个月新增的,老版本不支持。查看你的版本:hermes --version。如果低于上表中的最低版本,先 hermes update 升级。当前最新版是 v0.13.0 (v2026.5.7)

一个一个说。

1. Shell Hooks:用Shell脚本拦截AI的操作

类比:你在公司,AI是你的助理。默认情况下它想干嘛干嘛——删文件、跑命令、改配置,你管不了。Shell Hooks就是给助理装了个"门禁":每次它要执行操作,先过你的检查脚本。不合格的直接拦下来。

实际用途

  • AI要执行 rm -rf?拦住
  • AI刚写了Python文件?自动跑black格式化
  • 每次AI开始思考前,自动注入当前git状态

配置方法

~/.hermes/config.yaml 中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
hooks:
  pre_tool_call:                    # AI执行工具前触发
    - matcher: "terminal"           # 正则匹配工具名
      command: "~/.hermes/agent-hooks/block-dangerous.sh"
      timeout: 5                    # 超时秒数,默认60,最大300
  post_tool_call:                   # AI执行工具后触发
    - matcher: "write_file|patch"   # 写文件后自动格式化
      command: "~/.hermes/agent-hooks/auto-format.sh"
  pre_llm_call:                     # AI每次思考前注入上下文
    - command: "~/.hermes/agent-hooks/inject-git-status.sh"

实战示例:拦截危险命令

创建目录和脚本:

1
mkdir -p ~/.hermes/agent-hooks

脚本1:拦截危险命令(保存为 ~/.hermes/agent-hooks/block-dangerous.sh

1
2
3
4
5
6
7
8
#!/usr/bin/env bash
payload="$(cat -)"
cmd=$(echo "$payload" | jq -r '.tool_input.command // empty')
if echo "$cmd" | grep -qE 'rm[[:space:]]+-rf?[[:space:]]+/'; then
  printf '{"decision": "block", "reason": "blocked: rm -rf / is not permitted"}\n'
else
  printf '{}\n'
fi

脚本2:自动格式化(保存为 ~/.hermes/agent-hooks/auto-format.sh

1
2
3
4
5
#!/usr/bin/env bash
payload="$(cat -)"
path=$(echo "$payload" | jq -r '.tool_input.path // empty')
[[ "$path" == *.py ]] && command -v black >/dev/null && black "$path" 2>/dev/null
printf '{}\n'

脚本3:注入git状态(保存为 ~/.hermes/agent-hooks/inject-git-status.sh

1
2
3
4
5
6
7
8
#!/usr/bin/env bash
cat - >/dev/null   # 丢弃stdin
if status=$(git status --porcelain 2>/dev/null) && [[ -n "$status" ]]; then
  jq --null-input --arg s "$status" \
     '{context: ("Uncommitted changes:\n" + $s)}'
else
  printf '{}\n'
fi

别忘了加执行权限:

1
chmod +x ~/.hermes/agent-hooks/*.sh

工作原理

脚本通过JSON管道跟Hermes通信:Hermes把工具调用的详细信息(工具名、参数、会话ID等)通过stdin传给你的脚本,你的脚本通过stdout返回JSON结果。

stdin 示例(脚本收到的数据):

1
2
3
4
5
6
7
{
  "hook_event_name": "pre_tool_call",
  "tool_name": "terminal",
  "tool_input": {"command": "rm -rf /"},
  "session_id": "sess_abc123",
  "cwd": "/home/user/project"
}

stdout 返回(脚本要输出的数据):

1
{"decision": "block", "reason": "blocked: rm -rf / is not permitted"}

返回空 {} 就是不拦截,放行。

支持的所有钩子事件

事件触发时机能做什么
pre_tool_callAI执行工具前拦截危险操作
post_tool_callAI执行工具后自动格式化、记录日志
pre_llm_callAI开始思考前注入额外上下文(如git状态)
post_llm_callAI思考完成后日志记录
subagent_stop子代理完成时记录多代理协调日志
on_session_start会话开始初始化操作
on_session_end会话结束清理操作
on_session_reset会话重置状态清理
transform_terminal_output终端输出时过滤/压缩输出内容
transform_tool_result工具返回结果时过滤敏感信息

首次运行提示

第一次用Shell Hooks时,Hermes会弹窗问你是否信任这个脚本。同意后会记住(存在 ~/.hermes/shell-hooks-allowlist.json),以后不再问。

如果你是在Gateway(微信/Telegram等)或Cron定时任务中使用,没交互界面,需要在配置中加:

1
hooks_auto_accept: true    # 自动信任新脚本

或者启动时加 --accept-hooks 参数。

检查和维护

1
2
3
hermes hooks list          # 查看所有已配置的hooks
hermes hooks doctor        # 健康检查(权限、状态、执行时间)
hermes hooks test pre_tool_call --for-tool terminal   # 测试某个hook

2. Quick Commands:零Token快捷命令

类比:你跟AI说"帮我查下GPU状态",AI要理解你的意思、调用工具、返回结果——走完整流程,花Token。Quick Commands就是给你设了个快捷键:输入 /gpu 直接执行命令,不经过AI,Token消耗为零。

实际用途

  • /gpu → 直接看GPU状态
  • /ip → 直接查IP
  • /dn → 看今天的笔记
  • /status → 一键查系统状态

配置方法

~/.hermes/config.yaml 中:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
quick_commands:
  gpu:
    type: exec
    command: "nvidia-smi --query-gpu=name,utilization.gpu,memory.used --format=csv,noheader"
  ip:
    type: exec
    command: "curl -s ifconfig.me"
  status:
    type: exec
    command: "echo \"CPU: $(top -bn1 | grep '%Cpu' | awk '{printf \"%.0f\", 100-$8}')%\" && echo \"MEM: $(free -h | awk '/^Mem:/{print $3 \"/\" $2}')\" && echo \"DISK: $(df -h / | awk 'NR==2{print $5}')\""
  dn:
    type: exec
    command: "cat ~/notes/$(date +%Y-%m-%d).md"

两种模式

type行为示例
exec直接执行shell命令,输出结果/gpu → 跑nvidia-smi
alias重写到另一个斜杠命令/sc → 等同于 /model sonnet --provider openrouter

alias模式示例:

1
2
3
4
5
6
7
quick_commands:
  sc:
    type: alias
    target: "/model sonnet --provider openrouter"
  local:
    type: alias
    target: "/model qwen3.5 --provider custom"

注意事项

  • exec模式不支持参数模板(比如 {args}),就是固定命令
  • alias模式会自动传递用户输入的额外参数
  • 命令超时30秒自动终止
  • 执行优先级:内置命令 > Quick Commands > Skill命令
  • Gateway(微信/Telegram等)也能用,直接输入 /gpu 即可

3. 模型别名:一句话切模型

类比:你有一堆门钥匙(不同AI模型),每次开锁都要翻半天找。模型别名就是给每把钥匙贴了标签——喊"opus"就知道用哪把。

实际用途

  • /model opus → 切到Claude Opus处理复杂代码
  • /model sonnet → 切到Claude Sonnet做日常对话
  • /model ds → 切到DeepSeek省钱
  • /model glm → 切到国产GLM模型

配置方法

方式一:完整格式(在 ~/.hermes/config.yaml 中)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
model_aliases:
  opus:
    model: claude-opus-4-6
    provider: anthropic
  sonnet:
    model: claude-sonnet-4-20250514
    provider: anthropic
  ds:
    model: deepseek-chat
    provider: deepseek
  glm:
    model: glm-5.1
    provider: zai
    base_url: "https://open.bigmodel.cn/api/coding/paas/v4"
  local:
    model: qwen3.5:397b
    provider: custom
    base_url: "http://localhost:11434/v1"

方式二:简写格式(provider/model格式)

1
2
3
4
model:
  aliases:
    ds-flash: deepseek/deepseek-v4-flash
    local-qwen: qwen3.5:397b

使用方法

在聊天中直接输入:

1
2
3
/model opus          # 切到Claude Opus(仅当前会话)
/model sonnet        # 切到Claude Sonnet
/model --global glm  # 全局切换到GLM(所有会话生效)

内置别名(不用配就能用)

Hermes自带了一批模型目录别名,输入关键词就能匹配到该厂商最新版本:

别名对应模型家族
sonnetClaude Sonnet系列
opusClaude Opus系列
haikuClaude Haiku系列
gpt5GPT-5系列
o3 / o4OpenAI推理模型
geminiGoogle Gemini系列
deepseekDeepSeek系列
glm智谱GLM系列
qwen通义千问系列
kimiKimi(月之暗面)

这些是模糊匹配——输入"sonnet"会自动找到Anthropic最新的Sonnet版本。你自己的别名(model_aliases)优先级更高,会覆盖内置的。

切换逻辑

当你输入 /model opus 时:

  1. 先查你的 model_aliases 配置(精确匹配)
  2. 再查 model.aliases 配置(简写格式)
  3. 最后查内置目录别名(模糊匹配,自动找最新版本)

4. 凭据池轮换:多个API Key自动切换

类比:你一个人去自助餐厅,只有一个盘子,每次拿菜都要排队。凭据池就是给你发了多个盘子——一个被限流了(排队的厨师说"你等会儿"),自动换下一个。不耽误吃饭。

实际用途

  • OpenRouter单个Key被限流?自动换下一个
  • Claude API额度用完?切到备用Key继续
  • 多个provider混用?自动选最优

添加凭据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 添加API Key类型的凭据
hermes auth add openrouter                    # 交互式输入API Key
hermes auth add anthropic --type api_key      # 指定类型
hermes auth add openrouter --label "主号"     # 加标签方便管理

# 查看已有凭据
hermes auth list
hermes auth list openrouter                   # 查看某个provider的凭据

# 移除凭据
hermes auth remove openrouter 0               # 按序号移除
hermes auth remove openrouter my-label        # 按标签移除

# 重置限流状态(Key被标记为exhausted后手动恢复)
hermes auth reset openrouter

轮换策略配置

~/.hermes/config.yaml 中:

1
2
3
4
5
credential_pool_strategies:
  anthropic: round_robin      # 轮询:挨个用,雨露均沾
  openrouter: random          # 随机:随便挑一个
  openai-codex: least_used    # 最少使用:挑调用次数最少的
  # 不配 = fill_first(默认)
策略行为适用场景
fill_first用第一个直到用完,再换下一个有主备Key的场景
round_robin轮着用,每次选下一个均匀分摊用量
random随机选一个不在乎分布,只要不被限流
least_used选调用次数最少的想最大化利用每个Key

限流自动恢复

不用你管,Hermes会自动处理:

错误类型冷却时间恢复方式
401(认证失败)5分钟自动跳过,用其他Key
429(限流)1小时自动跳过,用其他Key
402(余额不足)1小时自动跳过

冷却期过了之后,Key会自动恢复到可用状态。

支持的Provider

OAuth类型(浏览器授权):anthropic、nous、openai-codex、qwen-oauth、google-gemini-cli

API Key类型(直接填Key):openrouter、deepseek、zai、kimi、stepfun、moonshot、minimax、xai、gemini、copilot、bedrock、nvidia等

Custom类型custom:名称,从你的custom_providers配置自动生成

完整配置示例

一个真实的多Key配置长这样:

1
2
3
4
5
6
credential_pool_strategies:
  anthropic: round_robin
  openrouter: random

# 凭据存在 ~/.hermes/auth.json,不要手动编辑
# 用 hermes auth 命令管理

然后:

1
2
3
4
5
6
7
8
# 添加3个OpenRouter Key
hermes auth add openrouter --label "OR-主号"
hermes auth add openrouter --label "OR-备用1"
hermes auth add openrouter --label "OR-备用2"

# 添加2个Anthropic Key
hermes auth add anthropic --type api_key --label "AN-主号"
hermes auth add anthropic --type api_key --label "AN-备用"

配完之后,hermes auth list 看一眼:

1
2
3
4
5
6
7
8
OpenRouter:
  [0] OR-主号    (ok)       requests: 847
  [1] OR-备用1   (ok)       requests: 823
  [2] OR-备用2   (exhausted, resets in 23min)  requests: 891

Anthropic:
  [0] AN-主号    (ok)       requests: 156
  [1] AN-备用    (ok)       requests: 148

被限流的Key会标 (exhausted),倒计时结束自动恢复。你什么都不用做。


4个配置怎么搭着用

我自己的搭配:

场景配置组合
日常开发Quick Commands查状态 + 模型别名随时切模型
重要操作Shell Hooks拦截危险命令 + 自动格式化
长时间跑任务凭据池轮换防限流 + Hooks记录操作日志
团队协作pre_tool_call Hook统一检查 + 凭据池共享Key池

改完之后最明显的变化

Shell Hooks:之前AI偶尔会跑一些我不确定的命令,现在危险操作自动拦截,格式化自动执行,省心了。

Quick Commands:以前查个GPU状态要跟AI说一句话,花几百Token。现在 /gpu 两个字搞定,零成本。

模型别名:以前切模型要改配置文件重启。现在 /model opus 一行搞定,复杂任务用贵的,日常用便宜的,省钱又灵活。

凭据池:这个最香。之前单个Key被限流就得干等,现在配了3个OpenRouter Key轮着用,基本没遇到429了。

写在最后

4个配置,按需选用。不需要一次全上——先从Quick Commands和模型别名开始,这两个最简单、最直觉。等熟悉了再加Shell Hooks和凭据池。

配置文件位置:~/.hermes/config.yaml,照着上面改就行。

关注 varkm,一起学习,一起成长。

上一篇8个基础配置还没改的,先去改那个。基础不牢,进阶白搭。