惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
P
Proofpoint News Feed
Hacker News: Ask HN
Hacker News: Ask HN
T
Threatpost
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
S
SegmentFault 最新的问题
月光博客
月光博客
Latest news
Latest news
博客园 - Franky
T
Threat Research - Cisco Blogs
有赞技术团队
有赞技术团队
博客园_首页
T
The Exploit Database - CXSecurity.com
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
C
Cybersecurity and Infrastructure Security Agency CISA
S
Schneier on Security
Simon Willison's Weblog
Simon Willison's Weblog
爱范儿
爱范儿
Security Latest
Security Latest
Scott Helme
Scott Helme
博客园 - 聂微东
T
Tor Project blog
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
G
Google Developers Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AWS News Blog
AWS News Blog
Jina AI
Jina AI
Vercel News
Vercel News
小众软件
小众软件
T
Tenable Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Forbes - Security
Forbes - Security
aimingoo的专栏
aimingoo的专栏
O
OpenAI News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
AI
AI

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第17章:与 Qt VTK Python pythonOCC 生态集成 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第十章:定时任务与自动化(Cron) 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第六章:工具系统与终端后端
我才是银古 · 2026-05-04 · via 博客园 - 我才是银古

第六章:工具系统与终端后端

如果说"模型"是 Hermes 的脑,那"工具"就是它伸出去的手。Hermes 内置 68 个工具、52 个 toolset、6 大类后端——本章把工具体系完整拆解:什么工具、怎么按平台启用、怎么换执行环境(local/docker/ssh/daytona/modal/singularity)、怎么用 execute_code 把多步流水线压成一次推理、以及最重要的——怎么安全地让它在你电脑上敲命令。

6.1 工具体系总览

Hermes 工具体系有三层概念:

工具(Tool)          ← 一个具体的可调用函数(read_file、terminal、web_search…)
  └─ 工具集(Toolset) ← 工具的逻辑分组(web、file、terminal、browser、memory…)
       └─ 平台预设      ← 不同入口默认开哪几组(hermes-cli / hermes-telegram / …)

每次启动一个会话,Hermes 会把"当前平台 → 启用 toolset → 收集工具 schema"流水线跑一遍,把工具列表和 schema 发给模型。

6.2 全部工具按用途分类

下面这张表是从官方 reference/tools-reference.md 抽出的核心摘要,按"在工作中真正用得到的语义类目"重组:

类目 工具 描述
Web 搜索 / 提取 web_search 多后端搜索(Tavily / Brave / Bing / DuckDuckGo / Tool Gateway)
web_extract 抓某个 URL,转 Markdown
文件 read_file 读文件(自动检测大小/二进制)
write_file 整文件写入
patch 类似 git apply 的精确补丁
search_files ripgrep 高速文本搜索
list_files 列目录
终端 terminal 在选定后端跑 shell
process 后台进程注册表(启停、查看输出)
浏览器 browser_navigatebrowser_snapshotbrowser_visionbrowser_clickbrowser_typebrowser_formbrowser_select_optionbrowser_screenshotbrowser_press_keybrowser_extract 全套浏览器操作(10 个)
媒体 vision_analyze 多模态视觉描述
image_generate 文生图(FAL.ai 后端,9 个模型可选)
text_to_speech TTS 投递(10 个 provider)
智能编排 todo 维护当前会话 todo 列表
clarify 主动反问"信息不足时"
execute_code Python 沙箱,可在脚本里通过 RPC 调 Hermes 工具
delegate_task 启动并行子代理
记忆与回溯 memory 读写 MEMORY.md / USER.md(add / replace / remove)
session_search 跨历史会话 FTS5 检索
自动化与投递 cronjob 增删改查定时任务
send_message 出站发消息(Telegram/Discord/邮件等)
集成 ha_call_serviceha_get_state Home Assistant
mcp_*(动态注册) 任何 MCP server 暴露的工具
rl_* RL 训练辅助(trajectory 提交)
kanban_* Kanban 任务板(仅 kanban 工作模式)

内置 68 个数字会随版本演进;工具最权威列表请以 hermes tools listreference/tools-reference.md 为准。

6.3 Toolset:把工具分组并按平台启用

每个 toolset 大概对应一类能力。常见 toolset 名称:

web, search, terminal, file, browser, vision, image_gen, moa, skills, tts, todo, memory, session_search, cronjob, code_execution, delegation, clarify, homeassistant, messaging, spotify, discord, discord_admin, debugging, safe, rl, kanban

6.3.1 平台预设

不同入口需要的工具不同:

平台预设 默认 toolset 集合
hermes-cli web、terminal、file、browser、vision、skills、memory、session_search、todo、clarify、code_execution、delegation、cronjob
hermes-telegram web、search、terminal、file、vision、skills、memory、todo、send_message
hermes-discord 上述 + discord(频道操作)+ tts
hermes-slack 上述 + slack 专属工具
hermes-wecom / hermes-feishu / hermes-dingtalk 安全偏紧的子集(不默认开 terminal)
hermes-acp 偏 IDE 的:file、terminal、search_files、code_execution、delegation
hermes-batch 训练数据生成场景,按需

6.3.2 配置方式:hermes tools

最简单:

hermes tools

进入交互菜单,按"平台"维度勾选启用哪些 toolset;保存后写到 config.yaml

toolsets:
  hermes-cli:
    - web
    - terminal
    - file
    - browser
    - skills
    - memory
    - session_search
    - todo
    - clarify
    - code_execution
    - delegation
    - cronjob
  hermes-telegram:
    - web
    - file
    - skills
    - memory
    - todo
    - send_message
  hermes-wecom:
    - web
    - file
    - skills
    - memory

6.3.3 临时覆盖

hermes chat --toolsets "web,terminal,file"

只本次会话生效。

6.3.4 安全/限制 toolset:safe / debugging

  • safe:只保留只读 / 不写盘 / 不执行命令的工具,适合演示或公网 bot;
  • debugging:开启 /debug 风格更详细日志的工具。

6.4 终端工具与 6 种后端

terminal 是日常最重要的工具。Hermes 把它做成抽象接口,可挂在 6 种后端之一(外加内嵌 tmux 视图):

Backend 描述 适用场景 关键设置
local 本地 shell 个人开发机 默认
docker 本地 / 远程 docker 沙箱、隔离 镜像、read_onlycap_dropnetwork_mode
ssh 远端 SSH 操控生产/服务器 host、user、key、密码
daytona Daytona Serverless 工作空间 长期持久 + 空闲零成本 daytona token、workspace 名
modal Modal Serverless 同上 modal token
singularity HPC Singularity 容器 高校/超算 image 路径、bind

切换只需一行:

hermes config set terminal.backend docker

或在 TUI /terminal docker(如 plugin 已加)。

6.4.1 Docker 后端(推荐用于生产)

terminal:
  backend: docker
  docker:
    image: ghcr.io/nousresearch/hermes-sandbox:latest
    read_only: true
    network_mode: bridge
    cap_drop:
      - ALL
    user: "1000:1000"
    working_dir: /workspace
    binds:
      - "${HOME}/code:/workspace:rw"
      - "${HOME}/.hermes:/hermes:ro"
    env_passthrough:
      - GITHUB_TOKEN
      - OPENROUTER_API_KEY

Hermes 会在每条 terminal 调用前后做两件事:

  1. 启动一个短生命周期 / 长生命周期容器(按 terminal.docker.persistent 配置);
  2. 通过 tools/credential_files.py 把临时凭据文件挂入 /run/secrets/,避免 env 泄漏。

6.4.2 SSH 后端

terminal:
  backend: ssh
  ssh:
    host: ops.example.com
    user: deploy
    identity_file: ~/.ssh/id_ed25519
    port: 22
    request_pty: true
    keep_alive: 30

Hermes 会自动复用一个长连 SSH 会话,避免每条命令都建连。hermes doctor 会检测连通性。

6.4.3 Daytona / Modal Serverless

这两个是 Hermes 的"杀手特性"之一:你可以让 Hermes 在云端"长寿命且空闲零成本"的环境中跑命令——你的笔记本关掉它依然在工作。

terminal:
  backend: daytona
  daytona:
    workspace: my-hermes
    api_url: https://app.daytona.io
    region: us-east-1
terminal:
  backend: modal
  modal:
    app: hermes-sandbox
    image: hermes/sandbox:latest
    cpu: 4
    memory_mb: 8192
    timeout_idle_seconds: 600

第一次使用前需要:

daytona auth login        # 或 modal token new
hermes config set DAYTONA_API_TOKEN ...
hermes config set MODAL_TOKEN_ID ...  # 等

6.4.4 Singularity(HPC)

学院/超算环境常见:

terminal:
  backend: singularity
  singularity:
    image: /scratch/$USER/hermes.sif
    binds:
      - /scratch/$USER:/work

6.5 命令审批与白名单:approval.py

Hermes 默认对"危险命令"启用审批(用户需在 TUI 里按 y):

  • rm -rf /rm -rf ~mkfsdd of=/dev/...chmod -R 777 /curl ... | sudo bash 等;
  • sudo 的任何命令;
  • 跨网络发数据的 curl/scp/rsync 到外部 host 等。

可在 config.yaml 自定义:

approval:
  always_allow:
    - "^ls( |$)"
    - "^git (status|diff|log)"
  always_deny:
    - "rm -rf /"
  require_confirmation:
    - "^sudo "
    - "^mkfs"
    - "^dd "

Gateway 模式下,审批可以走 DM 配对(gateway/pairing.py):让 Hermes 在 Telegram DM 里等你点 ✅。

6.6 process 工具:长进程管理

terminal 适合一次性命令;如果是 web 服务、watch 编译这种"持续运行"的进程,用 process 工具:

process(action="start", name="api", cmd="uvicorn main:app --port 8000")
process(action="logs", name="api", tail=100)
process(action="stop", name="api")
process(action="list")

后台进程通过 tools/process_registry.py 统一存活、日志、PID 管理。

6.7 execute_code:把多步流水线压成一次推理

这是 Hermes 工程上最优雅的设计之一——所谓 Programmatic Tool Calling

execute_code(language="python", code="""
import json

repos = json.loads(_call_tool("read_file", {"path": "repos.json"})["content"])
results = []
for r in repos:
    out = _call_tool("terminal", {"cmd": f"git ls-remote {r['url']} HEAD"})
    results.append({"name": r["name"], "head": out["stdout"].split()[0]})
_call_tool("write_file", {"path": "snapshot.json", "content": json.dumps(results, indent=2)})
""")

_call_tool 是 Hermes 注入到沙箱 Python 进程里的 RPC bridge——你写出的 Python 代码可以直接调用任何 Hermes 工具,避免几十轮"工具调用 → 模型规划下一步"。

适合:批处理、聚合、数据转换、文件遍历、解析复杂 JSON 等场景。

6.8 delegate_task:子代理并行

delegate_task(tasks=[
    {"goal": "搜集 OpenAI 最近 5 篇论文要点", "toolsets": ["web"]},
    {"goal": "搜集 Anthropic 最近 5 篇论文要点", "toolsets": ["web"]},
    {"goal": "搜集 DeepMind 最近 5 篇论文要点", "toolsets": ["web"]},
])

子代理特点:

  • 完全空白对话(没有父 Agent 历史,必须把所有需要的信息塞 goal/context);
  • 自己的 toolset 限制;
  • 默认最多 3 个并发,可配;
  • 父 Agent 只看到每个子代理的 结构化总结(修改了什么、遇到了什么)。

详细 patterns 见第十一章和官方 guides/delegation-patterns.md

6.9 浏览器工具与多种后端

browser_* 工具支持 5 种后端:

Backend 描述 适用
browserbase Browserbase 云浏览器 不想本地装 chromium
browseruse Browser Use 云 同上
cdp 连本地 Chrome 的 CDP(你已经登录的 Chrome) 想"借用我的登录态"
chromium-local 本地 Chromium(playwright) 离线,可控
playwright-mcp 走 MCP 的 Playwright 进阶

切换:hermes tools → browser → 选 backend。

web_search 默认按以下次序选后端:

  1. Nous Tool Gateway(订阅用户零配置);
  2. Tavily(TAVILY_API_KEY);
  3. Brave(BRAVE_API_KEY);
  4. Bing(BING_API_KEY);
  5. DuckDuckGo(无 Key 但限速)。

web_extract 把页面拉下来转成 Markdown(去掉广告、导航),交给模型做总结/抽取。

6.11 Vision、Image Generation、TTS

  • Vision:模型本身支持视觉就走主模型;不支持就走 vision_model/auxiliary_model。粘贴图片 (@clipboard) 即用。
  • Image Generation:FAL.ai 后端,可选 9 个模型(FLUX 2 Klein/Pro、GPT-Image 1.5/2、Nano Banana Pro、Ideogram V3、Recraft V4 Pro、Qwen-Image、Z-Image Turbo)。
  • TTS:Edge TTS(免费)、ElevenLabs、OpenAI TTS、MiniMax、Mistral Voxtral、Google Gemini、xAI、NeuTTS、KittenTTS、Piper,再加自定义 command provider。

第十一章会展开它们。

6.12 Tool Gateway:订阅用户的便捷捷径

Nous Portal 订阅用户可以直接用 Tool Gateway:web search、image gen、TTS、browser 都走 Nous 的统一服务,不用自己配 Tavily/Brave/Browserbase 等密钥。

hermes model
# 选 Nous Portal → OAuth
hermes tools
# 启用 Tool Gateway 后端
# 进入仓库目录后:
uv pip install -e ".[voice]"        # CLI 麦克风/扬声器
uv pip install -e ".[messaging]"    # Discord/Telegram/Aiohttp
uv pip install -e ".[tts-premium]"  # ElevenLabs
uv pip install -e ".[mcp]"          # MCP 客户端
uv pip install -e ".[all]"          # 一把梭

hermes_agentpyproject.toml 中清晰划分了 extras,避免把所有依赖都塞进基础包。

6.14 自定义工具与插件

如果某个能力 Hermes 没有,你有三条路:

  1. 写 MCP server(首选,无侵入)—— 第八章详解;
  2. 写 Hermes 插件plugins/<name>/)—— 第十二章详解;
  3. 修改 tools/registry.py 加 native 工具(仅供贡献者)。

6.15 实战 1:让 Hermes 永远在 Docker 沙箱里跑

terminal:
  backend: docker
  docker:
    image: ghcr.io/nousresearch/hermes-sandbox:latest
    read_only: true
    cap_drop: [ALL]
    user: "1000:1000"
    working_dir: /workspace
    binds:
      - "${HOME}/code:/workspace:rw"
    env_passthrough:
      - OPENROUTER_API_KEY
      - GITHUB_TOKEN
approval:
  require_confirmation: ["^sudo ", "^rm -rf "]

效果:Agent 永远在容器内执行命令,对宿主只读绑定 ~/code,敏感凭据通过 env_passthrough 而非整个环境注入。

6.16 实战 2:Daytona Serverless"长寿命空闲零成本"

terminal:
  backend: daytona
  daytona:
    workspace: hermes-ops

第一次启动会触发 Daytona 创建工作空间,之后 Hermes 每次跑命令都唤醒它;空闲会自动 hibernate,按需收费。

6.17 实战 3:在 Telegram 用安全工具集

toolsets:
  hermes-telegram:
    - web
    - search
    - file
    - skills
    - memory
    - todo
    - send_message
approval:
  require_confirmation:
    - ".*"   # Telegram 端任何工具调用都先 DM 配对授权

这样即使 bot 被暴露给团队,也不会被人滥用让它跑 rm -rf

6.18 本章小结

  • Hermes 的工具体系按 工具 → 工具集 → 平台预设 三级组织;
  • 终端工具支持 6 种后端,可一行切换,让 Agent 跑在本地、容器、SSH、Daytona、Modal、Singularity;
  • execute_code 把多步流水线压成一次推理;delegate_task 让子代理并行;
  • 内置 审批机制 + 白名单 + 命令检测,是安全的核心保障;
  • 浏览器、视觉、图像、TTS、Web 搜索都各有多后端可选;
  • Tool Gateway 让订阅用户零配置上车;
  • 三种自定义路径:MCP、Plugin、Native,下一章开始我们就进入"让 Agent 自我成长"的核心:技能与记忆。