Skip to content

Hermes Agent 的命令行界面 (CLI) 使用指南

Hermes Agent 的 CLI 是一个完整的终端用户界面 (TUI) —— 而非 Web UI。它具有多行编辑、斜杠命令自动补全、会话历史、中断与重定向以及流式工具输出等功能。专为常驻终端的用户而打造。

Terminal window
# 开启交互式会话(默认)
hermes
# 单次查询模式(非交互式)
hermes chat -q "你好"
# 使用特定模型
hermes chat --model "anthropic/claude-sonnet-4"
# 使用特定服务商
hermes chat --provider nous # 使用 Nous Portal
hermes chat --provider openrouter # 强制使用 OpenRouter
# 使用特定的工具集
hermes chat --toolsets "web,terminal,skills"
# 启动时预载一个或多个技能
hermes -s hermes-agent-dev,github-auth
hermes chat -s github-pr-workflow -q "开启一个草稿 PR (draft PR)"
# 恢复之前的会话
hermes --continue # 恢复最近一次 CLI 会话 (-c)
hermes --resume <session_id> # 通过 ID 恢复特定会话 (-r)
# 详细模式(调试输出)
hermes chat --verbose
# 隔离的 Git 工作树(用于并行运行多个 Agent)
hermes -w # 在工作树中开启交互模式
hermes -w -q "修复 issue #123" # 在工作树中执行单次查询

Hermes CLI 的横幅、对话流和固定输入提示符均以稳定的文档图示呈现,而非易碎的文本字符画。

欢迎横幅能让你一眼扫清当前模型、终端后端、工作目录、可用工具以及已安装的技能。

输入区域上方设有一个持久化的状态栏,并进行实时更新:

⚕ claude-sonnet-4-20250514 │ 12.4K/200K │ [██████░░░░] 6% │ $0.06 │ 15m
元素描述
模型名称当前使用的模型(超过 26 个字符将被截断)
Token 计数已使用的上下文 Token / 最大上下文窗口
上下文进度条带有颜色编码阈值的视觉填充指示器
费用估算的会话费用(未知或零价模型显示为 n/a
时长会话已持续的时间

状态栏会根据终端宽度自动适配 —— 宽度 $\ge$ 76 列时显示全量布局,52–75 列显示紧凑布局,低于 52 列显示极简布局(仅保留模型和时长)。

上下文进度条颜色编码:

颜色阈值含义
绿色< 50%空间充裕
黄色50–80%空间占用中
橙色80–95%接近限制
红色$\ge$ 95%接近溢出 —— 建议使用 /compress

使用 /usage 可查看详细的费用细项,包括按类别划分的成本(输入与输出 Token)。

当恢复之前的会话(使用 hermes -chermes --resume <id>)时,在欢迎横幅和输入提示符之间会出现一个 “历史对话 (Previous Conversation)” 面板,显示会话历史的紧凑回顾。详见 会话 —— 恢复时的对话回顾 以获取细节和配置方法。

按键动作
Enter发送消息
Alt+Enter, Ctrl+J, 或 Shift+Enter换行(多行输入)。Shift+Enter 需要能将其与 Enter 区分开的终端 —— 详见下文。在 Windows Terminal 上,Alt+Enter 会被终端捕获(用于全屏切换);请改用 Ctrl+EnterCtrl+J
Alt+V从剪贴板粘贴图像(需终端支持)
Ctrl+V粘贴文本并择机附加剪贴板中的图像
Ctrl+B启用语音模式时开始/停止录音(voice.record_key,默认:ctrl+b
Ctrl+G$EDITOR(如 vim/nvim/nano/VS Code 等)中打开当前输入缓冲区。保存并退出后,编辑的文本将作为下一条提示词发送 —— 非常适合长篇、多段落的提示词。
Ctrl+X Ctrl+E外部编辑器的 Emacs 风格备用绑定(行为与 Ctrl+G 相同)。
Ctrl+C中断 Agent(2 秒内双击可强制退出)
Ctrl+D退出
Ctrl+Z将 Hermes 挂起到后台(仅限 Unix)。在 Shell 中运行 fg 可恢复。
Tab接受自动建议(虚幻文字)或自动补全斜杠命令

多行粘贴预览:当你粘贴多行内容块时,CLI 会回显一个紧凑的单行预览([pasted: 47 lines, 1,842 chars — press Enter to send]),而不是将全部内容直接倾倒在屏幕上。实际发送的仍是完整内容;这仅仅是为了显示上的美化。

最终回复中的 Markdown 剥离:CLI 会从 Agent 的 最终 回复中剥离冗长的 Markdown 栅栏以及 粗体 / 斜体 包裹符,使其渲染为可读性更强的终端文本而非原始源码。代码块和列表将被保留。这不会影响网关平台或工具结果 —— 它们会保留 Markdown 以供原生渲染。

输入 / 即可查看自动补全下拉列表。Hermes 支持大量的 CLI 斜杠命令、动态技能命令以及用户自定义的快捷命令。

常用示例:

命令描述
/help显示命令帮助
/model显示或更改当前模型
/tools列出当前可用的工具
/skills browse浏览技能中心和官方可选技能
/background <prompt>在独立的后台会话中运行提示词
/skin显示或切换当前的 CLI 皮肤
/voice on启用 CLI 语音模式(按 Ctrl+B 进行录音)
/voice tts切换 Hermes 回复的语音播放开关
/reasoning high提高推理力度 (Reasoning Effort)
/title My Session为当前会话命名
  • 有关完整的内置 CLI 和消息平台命令列表,详见 斜杠命令参考
  • 有关设置、服务商、静音调节以及消息平台/Discord 语音的使用,详见 语音模式

你可以定义自定义命令,从而在不调用 LLM 的情况下立即运行 Shell 命令。这些命令在 CLI 和消息平台(Telegram、Discord 等)中均可使用。

~/.hermes/config.yaml
quick_commands:
status:
type: exec
command: systemctl status hermes-agent
gpu:
type: exec
command: nvidia-smi --query-gpu=utilization.gpu,memory.used --format=csv,noheader
restart:
type: alias
target: /gateway restart

定义完成后,在任何聊天界面中输入 /status/gpu/restart 即可执行。更多示例请参阅 配置指南

如果你已经明确知道会话中需要激活哪些技能,可以在启动时通过参数传入:

Terminal window
hermes -s hermes-agent-dev,github-auth
hermes chat -s github-pr-workflow -s github-auth

Hermes 会在首轮对话开始前,将每个指定的技能加载到会话提示词中。该标志位在交互模式和单次查询模式下均有效。

安装在 ~/.hermes/skills/ 中的每个技能都会自动注册为斜杠命令。技能名称即为命令名:

Terminal window
/gif-search funny cats
/axolotl 帮我用我的数据集微调 Llama 3
/github-pr-workflow auth 重构创建一个 PR
# 仅输入技能名称会加载该技能,并允许 Agent 询问你的具体需求:
`/excalidraw`

设置预定义的人格来改变 Agent 的语气:

Terminal window
/personality pirate
/personality kawaii
/personality concise

内置人格包括:helpful (助人), concise (简洁), technical (技术), creative (创意), teacher (教师), kawaii (可爱), catgirl (猫娘), pirate (海盗), shakespeare (莎士比亚), surfer (冲浪者), noir (黑色电影), uwu, philosopher (哲学家), hype (气氛组)。

你也可以在 ~/.hermes/config.yaml 中定义自定义人格:

personalities:
helpful: "You are a helpful, friendly AI assistant."
kawaii: "You are a kawaii assistant! Use cute expressions..."
pirate: "Arrr! Ye be talkin' to Captain Hermes..."
# 在此处添加你的人格!

输入多行消息有两种方式:

  1. Alt+EnterCtrl+JShift+Enter —— 插入新行
  2. 反斜杠续行 —— 在行尾使用 \ 以继续输入:
❯ 编写一个函数:\
1. 接收一个数字列表\
2. 返回它们的总和

大多数终端默认情况下为 EnterShift+Enter 发送相同的字节序列,因此应用程序无法区分它们。只有当终端通过 Kitty 键盘协议 或 xterm 的 modifyOtherKeys 模式发送不同的序列时,Hermes 才能识别 Shift+Enter

终端状态
Kitty, foot, WezTerm, Ghostty默认启用独立的 Shift+Enter
iTerm2 (近期版本), Alacritty, VS Code 终端, Warp在设置中启用 Kitty 协议后支持
Windows Terminal Preview 1.25+在设置中启用 Kitty 协议后支持
macOS Terminal.app, 原生 Windows Terminal (稳定版)不支持 —— Shift+EnterEnter 无法区分

在终端无法区分它们的情况下,Alt+EnterCtrl+J 在任何地方依然有效。特别是在 Windows Terminal 上,Alt+Enter 会被终端捕获(用于切换全屏)而无法到达 Hermes —— 请直接使用 Ctrl+Enter(以 Ctrl+J 形式传递)或 Ctrl+J 来换行。

你可以在任何时刻中断 Agent:

  • 在 Agent 工作时输入新消息 + Enter —— 这将中断当前操作并处理你的新指令。
  • Ctrl+C —— 中断当前操作(2 秒内按两次可强制退出)。
  • 进行中的终端命令会被立即终止(先发送 SIGTERM,1 秒后发送 SIGKILL)。
  • 中断期间输入的多个消息将被合并为一个提示词。

配置项 display.busy_input_mode 控制当你按下 Enter 而 Agent 正在工作时的行为:

模式行为
"interrupt" (默认)你的消息会中断当前操作并立即被处理
"queue"你的消息会静默排队,并在 Agent 完成当前轮次后作为下一轮发送
"steer"你的消息通过 /steer 注入当前运行,在下一次工具调用后送达 Agent —— 不中断,不开启新轮次
~/.hermes/config.yaml
display:
busy_input_mode: "steer" # 或 "queue" 或 "interrupt" (默认)

"queue" 模式在你想要准备后续消息而不想意外取消正在进行的工作时非常有用。"steer" 模式在你想要在不中断任务的情况下重定向 Agent 时非常有用 —— 例如在它还在编辑代码时说 “事实上,也检查一下测试”。未知值将回退到 "interrupt"

"steer" 有两个自动回退机制:如果 Agent 尚未开始工作,或者附带有图像,消息将回退到 "queue" 行为,以确保不会丢失任何内容。

你也可以在 CLI 内部更改它:

Terminal window
/busy queue
/busy steer
/busy interrupt
/busy status

在 Unix 系统上,按 Ctrl+Z 可以像处理任何终端进程一样将 Hermes 挂起到后台。Shell 会打印一条确认信息:

Hermes Agent has been suspended. Run `fg` to bring Hermes Agent back.

在 Shell 中输入 fg 即可从你离开的地方恢复会话。Windows 不支持此功能。

当 Agent 工作时,CLI 会显示动画反馈:

思考动画(进行 API 调用时):

◜ (。•́︿•̀。) pondering... (1.2s)
◠ (⊙_⊙) contemplating... (2.4s)
✧٩(ˊᗜˋ*)و✧ got it! (3.1s)

工具执行流

┊ 💻 terminal `ls -la` (0.3s)
┊ 🔍 web_search (1.2s)
┊ 📄 web_extract (2.1s)

使用 /verbose 可以循环切换显示模式:off (关闭) → new (仅新增) → all (全部) → verbose (详细)。该命令也可以在消息平台中启用 —— 详见 配置

配置项 display.tool_preview_length 控制工具调用预览行(如文件路径、终端命令)中显示的最高字符数。默认值为 0,表示不限制 —— 即显示完整路径和命令。

~/.hermes/config.yaml
display:
tool_preview_length: 80 # 将工具预览截断至 80 字符 (0 = 不限制)

这在狭窄的终端窗口中,或者当工具参数包含极长文件路径时非常有用。

当你退出 CLI 会话时,系统会打印一条恢复命令:

Resume this session with:
hermes --resume 20260225_143052_a1b2c3
Session: 20260225_143052_a1b2c3
Duration: 12m 34s
Messages: 28 (5 user, 18 tool calls)

恢复选项:

hermes --continue —— 恢复最近一次 CLI 会话
hermes -c —— 简写形式
hermes -c "my project" —— 恢复一个命名的会话(该谱系中的最新会话)
hermes --resume 20260225_143052_a1b2c3 —— 通过 ID 恢复特定会话
hermes --resume "refactoring auth" —— 通过标题恢复
hermes -r 20260225_143052_a1b2c3 —— 简写形式

恢复操作会从 SQLite 中还原完整的对话历史。Agent 会看到所有之前的消息、工具调用和回复 —— 就像你从未离开过一样。

在聊天中使用 /title My Session Name 可以为当前会话命名,或者在命令行执行 hermes sessions rename <id> <title>。使用 hermes sessions list 可浏览历史会话。

CLI 会话存储在 ~/.hermes/state.db 下的 SQLite 状态数据库中。数据库保存以下内容:

  • 会话元数据(ID、标题、时间戳、Token 计数器)
  • 消息历史
  • 压缩/恢复会话间的谱系关系
  • session_search 使用的全文本搜索索引

部分消息平台适配器还会在数据库旁保留各平台的转录文件,但 CLI 本身是从 SQLite 会话存储中恢复的。

当接近上下文限制时,长对话会自动进行摘要:

# 在 ~/.hermes/config.yaml 中
compression:
enabled: true
threshold: 0.50 # 默认在上下文限制达到 50% 时进行压缩
# 在 auxiliary 下配置摘要模型:
auxiliary:
compression:
model: "" # 留空以使用主聊天模型(默认)。或者指定一个廉价且快速的模型,例如 "google/gemini-3-flash-preview"。

当触发压缩时,中间轮次会被摘要,而首 3 轮和最后 20 轮对话将始终被完整保留。

在继续使用 CLI 进行其他工作的同时,可以在独立的后台会话中运行提示词:

/background 分析 /var/log 中的日志并总结今天的任何错误

Hermes 会立即确认任务并将提示符交还给你:

🔄 后台任务 #1 已启动:"分析 /var/log 中的日志并总结..."
任务 ID: bg_143022_a1b2c3`

每个 /background 提示词都会在一个守护线程中派生一个 完全独立的 Agent 会话

  • 隔离对话 —— 后台 Agent 不了解你当前会话的历史记录。它仅接收你提供的提示词。
  • 相同配置 —— 后台 Agent 继承当前会话的模型、服务商、工具集、推理设置和回退模型。
  • 非阻塞 —— 你的前台会话保持完全交互。你可以聊天、运行命令,甚至启动更多后台任务。
  • 多任务处理 —— 你可以同时运行多个后台任务。每个任务都会获得一个数字编号的 ID。

当后台任务完成时,结果会以面板形式出现在你的终端中:

╭─ ⚕ Hermes (后台任务 #1) ─────────────────────────╮
│ 在今天的系统日志中发现了 3 个错误: │
│ 1. 03:22 触发 OOM killer — 终止了 nginx 进程 │
│ 2. 07:15 /dev/sda1 发生磁盘 I/O 错误 │
│ 3. 14:30 来自 192.168.1.50 的 SSH 登录尝试失败 │
╰───────────────────────────────────────────── ───╯

如果任务失败,你会看到错误通知。如果你在配置中启用了 display.bell_on_complete,任务完成时终端会发出提示音。

  • 耗时调研 —— 在你编写代码时,执行 "/background 调研量子纠错领域的最新进展"
  • 文件处理 —— 在你继续对话时,执行 "/background 分析此仓库中所有的 Python 文件并列出任何安全问题"
  • 并行调查 —— 同时启动多个后台任务,从不同角度进行探索。

默认情况下,CLI 以静默模式运行,该模式会:

  • 抑制来自工具的详细日志
  • 启用 Kawaii 风格的动画反馈
  • 保持输出整洁且用户友好

如需调试输出,请运行:

hermes chat --verbose
-
0:000:00