CLI 界面

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

:::tip Hermes 还附带一个现代化的 TUI,支持模态叠加层、鼠标选择和免阻塞输入。使用 hermes --tui 启动——请参阅 TUI 指南。 :::

运行 CLI

# 启动交互式会话(默认)
hermes
 
# 单次查询模式(非交互式)
hermes chat -q "Hello"
 
# 使用指定模型
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 "open a draft PR"
 
# 恢复之前的会话
hermes --continue             # 恢复最近的 CLI 会话 (-c)
hermes --resume <session_id>  # 按 ID 恢复指定会话 (-r)
 
# 详细模式(调试输出)
hermes chat --verbose
 
# 隔离 Git 工作树(用于并行运行多个 agent)
hermes -w                         # 交互模式 + 工作树
hermes -w -q "Fix issue #123"     # 单次查询 + 工作树

界面布局

Hermes CLI 布局的样式化预览,显示横幅、对话区域和固定输入提示。

Hermes CLI 横幅、对话流和固定输入提示以稳定文档图形形式呈现,而非脆弱的文本艺术。

欢迎横幅一目了然地显示你的模型、终端后端、工作目录、可用工具和已安装技能。

状态栏

一个持久的状态栏位于输入区域上方,实时更新:

 ⚕ claude-sonnet-4-20250514 │ 12.4K/200K │ [██████░░░░] 6% │ $0.06 │ 15m
元素说明
模型名称当前模型(超过 26 字符时截断)
Token 计数已使用的上下文 token / 最大上下文窗口
上下文条视觉填充指示器,带颜色编码阈值
费用估算的会话费用(未知/零价格模型显示 n/a
🗜️ N上下文压缩次数——当前会话被自动压缩的次数。首次压缩触发后出现。
▶ N活跃后台任务数——当前会话中仍在运行的 /background 提示数量。至少有一个任务在执行时出现。
持续时间已用会话时间
⚠ YOLOYOLO 模式警告——只要 HERMES_YOLO_MODE 开启(启动时 hermes --yolo 或会话中 /yolo 切换),就会显示。与横幅警告同步,提醒你处于自动批准模式。

状态栏会适应终端宽度——≥ 76 列时全布局,52–75 列时紧凑布局,低于 52 列时最小布局(模型 + 持续时间,以及 YOLO 标记(如有))。

上下文颜色编码:

颜色阈值含义
绿色< 50%空间充足
黄色50–80%逐渐饱满
橙色80–95%接近限制
红色≥ 95%即将溢出——考虑使用 /compress

使用 /usage 查看详细分解,包括按类别划分的费用(输入 token 与输出 token)。

会话恢复显示

恢复之前的会话(hermes -chermes --resume <id>)时,横幅和输入提示之间会出现一个”先前对话”面板,显示对话历史的紧凑摘要。详情和配置请参阅会话——恢复时的对话摘要

快捷键

按键操作
Enter发送消息
Alt+EnterCtrl+JShift+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+EEmacs 风格的外部编辑器备用绑定(行为同 Ctrl+G)。
Ctrl+C中断 agent(2 秒内双击强制退出)
Ctrl+D退出
Ctrl+Z将 Hermes 挂起到后台(仅 Unix)。在 shell 中运行 fg 恢复。
Tab接受自动建议(幽灵文本)或自动补全斜杠命令

多行粘贴预览。 当粘贴多行文本块时,CLI 会回显一个紧凑的单行预览([已粘贴:47 行,1,842 字符 — 按 Enter 发送]),而不是将全部内容倾泻到回滚缓冲区中。完整内容仍会被发送,这只是显示优化。

最终回复中的 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提高推理力度
/title My Session为当前会话命名
/status显示会话信息——模型/配置/token/持续时间——后跟本地会话摘要块(最近轮次数、使用最多的工具、接触的文件、最新用户提示 + 助手回复)。纯本地计算,无需 LLM 调用。
/sessions在经典 CLI 中打开交互式会话选择器(与 TUI 使用相同的界面)。输入过滤,方向键导航,Enter 恢复。

完整的 CLI 内置命令和消息列表,请参阅斜杠命令参考

设置、提供商、静音调整以及消息/Discord 语音使用,请参阅语音模式

:::tip 命令不区分大小写——/HELP/help 效果相同。已安装的技能也会自动成为斜杠命令。 :::

快捷命令

你可以定义自定义命令,无需调用 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。更多示例请参阅配置指南

启动时预加载技能

如果你已知道会话中需要哪些技能,可以在启动时传入:

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

Hermes 会在第一轮对话前将每个命名技能加载到会话提示中。该标志在交互模式和单次查询模式下均有效。

技能斜杠命令

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

/gif-search funny cats
/axolotl help me fine-tune Llama 3 on my dataset
/github-pr-workflow create a PR for the auth refactor

# 仅输入技能名称可加载它并让 agent 询问你需要什么:
/excalidraw

人格设定

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

/personality pirate
/personality kawaii
/personality concise

内置人格包括:helpfulconcisetechnicalcreativeteacherkawaiicatgirlpirateshakespearesurfernoiruwuphilosopherhype

你也可以在 ~/.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. 反斜杠续行——以 \\ 结束一行以继续:
❯ Write a function that:\
  1. Takes a list of numbers\
  2. Returns the sum

:::info 支持粘贴多行文本——使用上述换行键之一,或直接粘贴内容。 :::

Shift+Enter 兼容性

大多数终端默认发送与 Enter 相同的字节序列,因此应用无法区分它们。Hermes 仅在终端通过 Kitty 键盘协议或 xterm 的 modifyOtherKeys 模式发送不同序列时识别 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:

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

忙碌输入模式

display.busy_input_mode 配置键控制在 agent 工作时按 Enter 的行为:

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

"queue" 模式适用于你想准备后续消息而不意外取消进行中工作的场景。"steer" 模式适用于你想在任务进行中重定向 agent 而不中断的场景——例如在它编辑代码时说”顺便检查一下测试”。未知值回退为 "interrupt"

"steer" 有两种自动回退:如果 agent 尚未开始,或附加了图片,消息会回退为 "queue" 行为以确保内容不丢失。

你也可以在 CLI 内部切换:

/busy queue
/busy steer
/busy interrupt
/busy status

:::tip 首次提示 第一次在 Hermes 工作时按 Enter 时,Hermes 会打印一行提示,说明 /busy 设置(“(tip) 你的消息中断了当前运行……“)。每个安装仅触发一次——config.yaml 中的 onboarding.seen.busy_input_prompt 标记会锁定此提示。删除该键可再次看到提示。 :::

挂起到后台

在 Unix 系统上,按 Ctrl+Z 将 Hermes 挂起到后台——与任何终端进程相同。Shell 会打印确认信息:

Hermes Agent 已挂起。运行 `fg` 以恢复 Hermes Agent。

在 shell 中键入 fg 即可从断点处恢复会话。Windows 系统不支持此功能。

工具进度显示

CLI 在 agent 工作时显示动画反馈:

思考动画(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 会话时,会打印恢复命令:

使用以下命令恢复此会话:
  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 的 SQLite 状态数据库 ~/.hermes/state.db 中。数据库保存:

  • 会话元数据(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 Analyze the logs in /var/log and summarize any errors from today

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

🔄 后台任务 #1 已启动: "分析 /var/log 中的日志并摘要……"
   任务 ID: bg_143022_a1b2c3

工作原理

每个 /background 提示会在一个守护线程中生成一个完全独立的 agent 会话

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

结果

后台任务完成时,结果会以面板形式显示在终端中:

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

如果任务失败,你会看到错误通知。如果配置中启用了 display.bell_on_complete,任务完成时终端会响铃。

使用场景

  • 长时间研究——“后台研究量子纠错的最新进展”,同时你处理代码
  • 文件处理——“后台分析此仓库中的所有 Python 文件并列出安全问题”,同时你继续对话
  • 并行调查——启动多个后台任务,同时探索不同方向

:::info 后台会话不会出现在你的主对话历史中。它们是独立的会话,拥有各自的任务 ID(例如 bg_143022_a1b2c3)。 :::

安静模式

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

  • 抑制工具的详细日志输出
  • 启用卡哇伊风格的动画反馈
  • 保持输出干净、用户友好

调试输出:

hermes chat --verbose