mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-02 00:41:43 +08:00
Broad drift audit against origin/main (b52b63396).
Reference pages (most user-visible drift):
- slash-commands: add /busy, /curator, /footer, /indicator, /redraw, /steer
that were missing; drop non-existent /terminal-setup; fix /q footnote
(resolves to /queue, not /quit); extend CLI-only list with all 24
CLI-only commands in the registry
- cli-commands: add dedicated sections for hermes curator / fallback /
hooks (new subcommands not previously documented); remove stale
hermes honcho standalone section (the plugin registers dynamically
via hermes memory); list curator/fallback/hooks in top-level table;
fix completion to include fish
- toolsets-reference: document the real 52-toolset count; split browser
vs browser-cdp; add discord / discord_admin / spotify / yuanbao;
correct hermes-cli tool count from 36 to 38; fix misleading claim
that hermes-homeassistant adds tools (it's identical to hermes-cli)
- tools-reference: bump tool count 55 -> 68; add 7 Spotify, 5 Yuanbao,
2 Discord toolsets; move browser_cdp/browser_dialog to their own
browser-cdp toolset section
- environment-variables: add 40+ user-facing HERMES_* vars that were
undocumented (--yolo, --accept-hooks, --ignore-*, inference model
override, agent/stream/checkpoint timeouts, OAuth trace, per-platform
batch tuning for Telegram/Discord/Matrix/Feishu/WeCom, cron knobs,
gateway restart/connect timeouts); dedupe the Cron Scheduler section;
replace stale QQ_SANDBOX with QQ_PORTAL_HOST
User-guide (top level):
- cli.md: compression preserves last 20 turns, not 4 (protect_last_n: 20)
- configuration.md: display.platforms is the canonical per-platform
override key; tool_progress_overrides is deprecated and auto-migrated
- profiles.md: model.default is the config key, not model.model
- sessions.md: CLI/TUI session IDs use 6-char hex, gateway uses 8
- checkpoints-and-rollback.md: destructive-command list now matches
_DESTRUCTIVE_PATTERNS (adds rmdir, cp, install, dd)
- docker.md: the container runs as non-root hermes (UID 10000) via
gosu; fix install command (uv pip); add missing --insecure on the
dashboard compose example (required for non-loopback bind)
- security.md: systemctl danger pattern also matches 'restart'
- index.md: built-in tool count 47 -> 68
- integrations/index.md: 6 STT providers, 8 memory providers
- integrations/providers.md: drop fictional dashscope/qwen aliases
Features:
- overview.md: 9 image models (not 8), 9 TTS providers (not 5),
8 memory providers (Supermemory was missing)
- tool-gateway.md: 9 image models
- tools.md: extend common-toolsets list with search / messaging /
spotify / discord / debugging / safe
- fallback-providers.md: add 6 real providers from PROVIDER_REGISTRY
(lmstudio, kimi-coding-cn, stepfun, alibaba-coding-plan,
tencent-tokenhub, azure-foundry)
- plugins.md: Available Hooks table now includes on_session_finalize,
on_session_reset, subagent_stop
- built-in-plugins.md: add the 7 bundled plugins the page didn't
mention (spotify, google_meet, three image_gen providers, two
dashboard examples)
- web-dashboard.md: add --insecure and --tui flags
- cron.md: hermes cron create takes positional schedule/prompt, not
flags
Messaging:
- telegram.md: TELEGRAM_WEBHOOK_SECRET is now REQUIRED when
TELEGRAM_WEBHOOK_URL is set (gateway refuses to start without it
per GHSA-3vpc-7q5r-276h). Biggest user-visible drift in the batch.
- discord.md: HERMES_DISCORD_TEXT_BATCH_SPLIT_DELAY_SECONDS default
is 2.0, not 0.1
- dingtalk.md: document DINGTALK_REQUIRE_MENTION /
FREE_RESPONSE_CHATS / MENTION_PATTERNS / HOME_CHANNEL /
ALLOW_ALL_USERS that the adapter supports
- bluebubbles.md: drop fictional BLUEBUBBLES_SEND_READ_RECEIPTS env
var; the setting lives in platforms.bluebubbles.extra only
- qqbot.md: drop dead QQ_SANDBOX; add real QQ_PORTAL_HOST and
QQ_GROUP_ALLOWED_USERS
- wecom-callback.md: replace 'hermes gateway start' (service-only)
with 'hermes gateway' for first-time setup
Developer-guide:
- architecture.md: refresh tool/toolset counts (61/52), terminal
backend count (7), line counts for run_agent.py (~13.7k), cli.py
(~11.5k), main.py (~10.4k), setup.py (~3.5k), gateway/run.py
(~12.2k), mcp_tool.py (~3.1k); add yuanbao adapter, bump platform
adapter count 18 -> 20
- agent-loop.md: run_agent.py line count 10.7k -> 13.7k
- tools-runtime.md: add vercel_sandbox backend
- adding-tools.md: remove stale 'Discovery import added to
model_tools.py' checklist item (registry auto-discovery)
- adding-platform-adapters.md: mark send_typing / get_chat_info as
concrete base methods; only connect/disconnect/send are abstract
- acp-internals.md: ACP sessions now persist to SessionDB
(~/.hermes/state.db); acp.run_agent call uses
use_unstable_protocol=True
- cron-internals.md: gateway runs scheduler in a dedicated background
thread via _start_cron_ticker, not on a maintenance cycle; locking
is cross-process via fcntl.flock (Unix) / msvcrt.locking (Windows)
- gateway-internals.md: gateway/run.py ~12k lines
- provider-runtime.md: cron DOES support fallback (run_job reads
fallback_providers from config)
- session-storage.md: SCHEMA_VERSION = 11 (not 9); add migrations
10 and 11 (trigram FTS, inline-mode FTS5 re-index); add
api_call_count column to Sessions DDL; document messages_fts_trigram
and state_meta in the architecture tree
- context-compression-and-caching.md: remove the obsolete 'context
pressure warnings' section (warnings were removed for causing
models to give up early)
- context-engine-plugin.md: compress() signature now includes
focus_topic param
- extending-the-cli.md: _build_tui_layout_children signature now
includes model_picker_widget; add to default layout
Also fixed three pre-existing broken links/anchors the build warned
about (docker.md -> api-server.md, yuanbao.md -> cron-jobs.md and
tips#background-tasks, nix-setup.md -> #container-aware-cli).
Regenerated per-skill pages via website/scripts/generate-skill-docs.py
so catalog tables and sidebar are consistent with current SKILL.md
frontmatter.
docusaurus build: clean, no broken links or anchors.
203 lines
8.1 KiB
Markdown
203 lines
8.1 KiB
Markdown
---
|
|
sidebar_position: 1
|
|
title: "Tools & Toolsets"
|
|
description: "Overview of Hermes Agent's tools — what's available, how toolsets work, and terminal backends"
|
|
---
|
|
|
|
# Tools & Toolsets
|
|
|
|
Tools are functions that extend the agent's capabilities. They're organized into logical **toolsets** that can be enabled or disabled per platform.
|
|
|
|
## Available Tools
|
|
|
|
Hermes ships with a broad built-in tool registry covering web search, browser automation, terminal execution, file editing, memory, delegation, RL training, messaging delivery, Home Assistant, and more.
|
|
|
|
:::note
|
|
**Honcho cross-session memory** is available as a memory provider plugin (`plugins/memory/honcho/`), not as a built-in toolset. See [Plugins](./plugins.md) for installation.
|
|
:::
|
|
|
|
High-level categories:
|
|
|
|
| Category | Examples | Description |
|
|
|----------|----------|-------------|
|
|
| **Web** | `web_search`, `web_extract` | Search the web and extract page content. |
|
|
| **Terminal & Files** | `terminal`, `process`, `read_file`, `patch` | Execute commands and manipulate files. |
|
|
| **Browser** | `browser_navigate`, `browser_snapshot`, `browser_vision` | Interactive browser automation with text and vision support. |
|
|
| **Media** | `vision_analyze`, `image_generate`, `text_to_speech` | Multimodal analysis and generation. |
|
|
| **Agent orchestration** | `todo`, `clarify`, `execute_code`, `delegate_task` | Planning, clarification, code execution, and subagent delegation. |
|
|
| **Memory & recall** | `memory`, `session_search` | Persistent memory and session search. |
|
|
| **Automation & delivery** | `cronjob`, `send_message` | Scheduled tasks with create/list/update/pause/resume/run/remove actions, plus outbound messaging delivery. |
|
|
| **Integrations** | `ha_*`, MCP server tools, `rl_*` | Home Assistant, MCP, RL training, and other integrations. |
|
|
|
|
For the authoritative code-derived registry, see [Built-in Tools Reference](/docs/reference/tools-reference) and [Toolsets Reference](/docs/reference/toolsets-reference).
|
|
|
|
:::tip Nous Tool Gateway
|
|
Paid [Nous Portal](https://portal.nousresearch.com) subscribers can use web search, image generation, TTS, and browser automation through the **[Tool Gateway](tool-gateway.md)** — no separate API keys needed. Run `hermes model` to enable it, or configure individual tools with `hermes tools`.
|
|
:::
|
|
|
|
## Using Toolsets
|
|
|
|
```bash
|
|
# Use specific toolsets
|
|
hermes chat --toolsets "web,terminal"
|
|
|
|
# See all available tools
|
|
hermes tools
|
|
|
|
# Configure tools per platform (interactive)
|
|
hermes tools
|
|
```
|
|
|
|
Common toolsets include `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`, and `rl`.
|
|
|
|
See [Toolsets Reference](/docs/reference/toolsets-reference) for the full set, including platform presets such as `hermes-cli`, `hermes-telegram`, and dynamic MCP toolsets like `mcp-<server>`.
|
|
|
|
## Terminal Backends
|
|
|
|
The terminal tool can execute commands in different environments:
|
|
|
|
| Backend | Description | Use Case |
|
|
|---------|-------------|----------|
|
|
| `local` | Run on your machine (default) | Development, trusted tasks |
|
|
| `docker` | Isolated containers | Security, reproducibility |
|
|
| `ssh` | Remote server | Sandboxing, keep agent away from its own code |
|
|
| `singularity` | HPC containers | Cluster computing, rootless |
|
|
| `modal` | Cloud execution | Serverless, scale |
|
|
| `daytona` | Cloud sandbox workspace | Persistent remote dev environments |
|
|
| `vercel_sandbox` | Vercel Sandbox cloud microVM | Cloud execution with snapshot-backed filesystem persistence |
|
|
|
|
### Configuration
|
|
|
|
```yaml
|
|
# In ~/.hermes/config.yaml
|
|
terminal:
|
|
backend: local # or: docker, ssh, singularity, modal, daytona, vercel_sandbox
|
|
cwd: "." # Working directory
|
|
timeout: 180 # Command timeout in seconds
|
|
```
|
|
|
|
### Docker Backend
|
|
|
|
```yaml
|
|
terminal:
|
|
backend: docker
|
|
docker_image: python:3.11-slim
|
|
```
|
|
|
|
### SSH Backend
|
|
|
|
Recommended for security — agent can't modify its own code:
|
|
|
|
```yaml
|
|
terminal:
|
|
backend: ssh
|
|
```
|
|
```bash
|
|
# Set credentials in ~/.hermes/.env
|
|
TERMINAL_SSH_HOST=my-server.example.com
|
|
TERMINAL_SSH_USER=myuser
|
|
TERMINAL_SSH_KEY=~/.ssh/id_rsa
|
|
```
|
|
|
|
### Singularity/Apptainer
|
|
|
|
```bash
|
|
# Pre-build SIF for parallel workers
|
|
apptainer build ~/python.sif docker://python:3.11-slim
|
|
|
|
# Configure
|
|
hermes config set terminal.backend singularity
|
|
hermes config set terminal.singularity_image ~/python.sif
|
|
```
|
|
|
|
### Modal (Serverless Cloud)
|
|
|
|
```bash
|
|
uv pip install modal
|
|
modal setup
|
|
hermes config set terminal.backend modal
|
|
```
|
|
|
|
### Vercel Sandbox
|
|
|
|
```bash
|
|
pip install 'hermes-agent[vercel]'
|
|
hermes config set terminal.backend vercel_sandbox
|
|
hermes config set terminal.vercel_runtime node24
|
|
```
|
|
|
|
Authenticate with all three of `VERCEL_TOKEN`, `VERCEL_PROJECT_ID`, and `VERCEL_TEAM_ID`. This access-token setup is the supported path for deployments and normal long-running Hermes processes on Render, Railway, Docker, and similar hosts. Supported runtimes are `node24`, `node22`, and `python3.13`; Hermes defaults to `/vercel/sandbox` as the remote workspace root.
|
|
|
|
For one-off local development, Hermes also accepts short-lived Vercel OIDC tokens:
|
|
|
|
```bash
|
|
VERCEL_OIDC_TOKEN="$(vc project token <project-name>)" hermes chat
|
|
```
|
|
|
|
From a linked Vercel project directory:
|
|
|
|
```bash
|
|
VERCEL_OIDC_TOKEN="$(vc project token)" hermes chat
|
|
```
|
|
|
|
With `container_persistent: true`, Hermes uses Vercel snapshots to preserve filesystem state across sandbox recreation for the same task. This can include Hermes-synced credentials, skills, and cache files inside the sandbox. Snapshots do not preserve live processes, PID space, or the same live sandbox identity.
|
|
|
|
Background terminal commands use Hermes' generic non-local process flow: spawn, poll, wait, log, and kill work through the normal process tool while the sandbox is alive, but Hermes does not provide native Vercel detached-process recovery after cleanup or restart.
|
|
|
|
Leave `container_disk` unset or at the shared default `51200`; custom disk sizing is unsupported for Vercel Sandbox and will fail diagnostics/backend creation.
|
|
|
|
### Container Resources
|
|
|
|
Configure CPU, memory, disk, and persistence for all container backends:
|
|
|
|
```yaml
|
|
terminal:
|
|
backend: docker # or singularity, modal, daytona, vercel_sandbox
|
|
container_cpu: 1 # CPU cores (default: 1)
|
|
container_memory: 5120 # Memory in MB (default: 5GB)
|
|
container_disk: 51200 # Disk in MB (default: 50GB)
|
|
container_persistent: true # Persist filesystem across sessions (default: true)
|
|
```
|
|
|
|
When `container_persistent: true`, installed packages, files, and config survive across sessions.
|
|
|
|
### Container Security
|
|
|
|
All container backends run with security hardening:
|
|
|
|
- Read-only root filesystem (Docker)
|
|
- All Linux capabilities dropped
|
|
- No privilege escalation
|
|
- PID limits (256 processes)
|
|
- Full namespace isolation
|
|
- Persistent workspace via volumes, not writable root layer
|
|
|
|
Docker can optionally receive an explicit env allowlist via `terminal.docker_forward_env`, but forwarded variables are visible to commands inside the container and should be treated as exposed to that session.
|
|
|
|
## Background Process Management
|
|
|
|
Start background processes and manage them:
|
|
|
|
```python
|
|
terminal(command="pytest -v tests/", background=true)
|
|
# Returns: {"session_id": "proc_abc123", "pid": 12345}
|
|
|
|
# Then manage with the process tool:
|
|
process(action="list") # Show all running processes
|
|
process(action="poll", session_id="proc_abc123") # Check status
|
|
process(action="wait", session_id="proc_abc123") # Block until done
|
|
process(action="log", session_id="proc_abc123") # Full output
|
|
process(action="kill", session_id="proc_abc123") # Terminate
|
|
process(action="write", session_id="proc_abc123", data="y") # Send input
|
|
```
|
|
|
|
PTY mode (`pty=true`) enables interactive CLI tools like Codex and Claude Code.
|
|
|
|
## Sudo Support
|
|
|
|
If a command needs sudo, you'll be prompted for your password (cached for the session). Or set `SUDO_PASSWORD` in `~/.hermes/.env`.
|
|
|
|
:::warning
|
|
On messaging platforms, if sudo fails, the output includes a tip to add `SUDO_PASSWORD` to `~/.hermes/.env`.
|
|
:::
|