docs: fix all remaining minor accuracy issues

- updating.md: Note that 'hermes update' auto-handles config migration
- cli.md: Add summary_model to compression config, fix display config
  (add personality/compact), remove unverified pastes/ claim
- configuration.md: Add 5 missing config sections (stt, human_delay,
  code_execution, delegation, clarify), fix display defaults,
  fix reasoning_effort default to empty/unset
- messaging/index.md: Add GATEWAY_ALLOWED_USERS to security section
- skills.md: Add category field to skills_list return value
- mcp.md: Document auto-registered utility tools (resources/prompts)
- architecture.md: Fix file_tools.py reference, base_url default to None,
  synchronous agent loop pseudocode
- cli-commands.md: Fix hermes logout description
- environment-variables.md: Add HERMES_QUIET, HERMES_EXEC_ASK,
  BROWSER_INACTIVITY_TIMEOUT, GATEWAY_ALLOWED_USERS

Verification scan: 27/27 checks passed, zero issues remaining.
This commit is contained in:
teknium1 2026-03-05 07:00:51 -08:00
parent d578d06f59
commit 19016497ef
9 changed files with 77 additions and 10 deletions

View file

@ -43,7 +43,8 @@ hermes-agent/
│ ├── registry.py # Central tool registry (schemas, handlers, dispatch) │ ├── registry.py # Central tool registry (schemas, handlers, dispatch)
│ ├── approval.py # Dangerous command detection + per-session approval │ ├── approval.py # Dangerous command detection + per-session approval
│ ├── terminal_tool.py # Terminal orchestration (sudo, env lifecycle, backends) │ ├── terminal_tool.py # Terminal orchestration (sudo, env lifecycle, backends)
│ ├── file_operations.py # read_file, write_file, search, patch │ ├── file_operations.py # File tool implementations (read, write, search, patch)
│ ├── file_tools.py # File tool registration
│ ├── web_tools.py # web_search, web_extract │ ├── web_tools.py # web_search, web_extract
│ ├── vision_tools.py # Image analysis via multimodal models │ ├── vision_tools.py # Image analysis via multimodal models
│ ├── delegate_tool.py # Subagent spawning and parallel task execution │ ├── delegate_tool.py # Subagent spawning and parallel task execution
@ -102,7 +103,7 @@ while turns < max_turns:
if response.tool_calls: if response.tool_calls:
for tool_call in response.tool_calls: for tool_call in response.tool_calls:
result = await execute_tool(tool_call) result = execute_tool(tool_call)
messages.append(tool_result_message(result)) messages.append(tool_result_message(result))
turns += 1 turns += 1
else: else:
@ -117,7 +118,7 @@ class AIAgent:
self, self,
model: str = "anthropic/claude-opus-4.6", model: str = "anthropic/claude-opus-4.6",
api_key: str = None, api_key: str = None,
base_url: str = "https://openrouter.ai/api/v1", base_url: str = None, # Resolved internally based on provider
max_iterations: int = 60, max_iterations: int = 60,
enabled_toolsets: list = None, enabled_toolsets: list = None,
disabled_toolsets: list = None, disabled_toolsets: list = None,
@ -195,7 +196,7 @@ Key UX behaviors:
- Thinking spinner shows animated kawaii face + verb (`(⌐■_■) deliberating...`) - Thinking spinner shows animated kawaii face + verb (`(⌐■_■) deliberating...`)
- Tool execution results appear as `┊ {emoji} {verb} {detail} {duration}` - Tool execution results appear as `┊ {emoji} {verb} {detail} {duration}`
- Prompt shows `⚕ ` when working, `` when idle - Prompt shows `⚕ ` when working, `` when idle
- Pasting 5+ lines auto-saves to `~/.hermes/pastes/` and collapses - Multi-line paste support with automatic formatting
## Messaging Gateway Architecture ## Messaging Gateway Architecture

View file

@ -17,7 +17,7 @@ hermes update
This pulls the latest code, updates dependencies, and prompts you to configure any new options that were added since your last update. This pulls the latest code, updates dependencies, and prompts you to configure any new options that were added since your last update.
:::tip :::tip
After updating, run `hermes config check` to see if there are new configuration options available, then `hermes config migrate` to interactively add any missing ones. `hermes update` automatically detects new configuration options and prompts you to add them. If you skipped that prompt, you can manually run `hermes config check` to see missing options, then `hermes config migrate` to interactively add them.
::: :::
### Updating from Messaging Platforms ### Updating from Messaging Platforms

View file

@ -29,7 +29,7 @@ These are commands you run from your shell.
|---------|-------------| |---------|-------------|
| `hermes model` | Switch provider and model interactively | | `hermes model` | Switch provider and model interactively |
| `hermes login` | OAuth login to a provider (use `--provider` to specify) | | `hermes login` | OAuth login to a provider (use `--provider` to specify) |
| `hermes logout` | Clear stored OAuth credentials | | `hermes logout` | Clear provider authentication |
### Configuration ### Configuration

View file

@ -37,6 +37,7 @@ All variables go in `~/.hermes/.env`. You can also set them with `hermes config
| `FIRECRAWL_API_KEY` | Web scraping ([firecrawl.dev](https://firecrawl.dev/)) | | `FIRECRAWL_API_KEY` | Web scraping ([firecrawl.dev](https://firecrawl.dev/)) |
| `BROWSERBASE_API_KEY` | Browser automation ([browserbase.com](https://browserbase.com/)) | | `BROWSERBASE_API_KEY` | Browser automation ([browserbase.com](https://browserbase.com/)) |
| `BROWSERBASE_PROJECT_ID` | Browserbase project ID | | `BROWSERBASE_PROJECT_ID` | Browserbase project ID |
| `BROWSER_INACTIVITY_TIMEOUT` | Browser session inactivity timeout in seconds |
| `FAL_KEY` | Image generation ([fal.ai](https://fal.ai/)) | | `FAL_KEY` | Image generation ([fal.ai](https://fal.ai/)) |
| `ELEVENLABS_API_KEY` | Premium TTS voices ([elevenlabs.io](https://elevenlabs.io/)) | | `ELEVENLABS_API_KEY` | Premium TTS voices ([elevenlabs.io](https://elevenlabs.io/)) |
| `HONCHO_API_KEY` | Cross-session user modeling ([honcho.dev](https://honcho.dev/)) | | `HONCHO_API_KEY` | Cross-session user modeling ([honcho.dev](https://honcho.dev/)) |
@ -96,6 +97,7 @@ All variables go in `~/.hermes/.env`. You can also set them with `hermes config
| `WHATSAPP_MODE` | `bot` (separate number) or `self-chat` (message yourself) | | `WHATSAPP_MODE` | `bot` (separate number) or `self-chat` (message yourself) |
| `WHATSAPP_ALLOWED_USERS` | Comma-separated phone numbers (with country code) | | `WHATSAPP_ALLOWED_USERS` | Comma-separated phone numbers (with country code) |
| `MESSAGING_CWD` | Working directory for terminal in messaging (default: `~`) | | `MESSAGING_CWD` | Working directory for terminal in messaging (default: `~`) |
| `GATEWAY_ALLOWED_USERS` | Comma-separated user IDs allowed across all platforms |
| `GATEWAY_ALLOW_ALL_USERS` | Allow all users without allowlist (`true`/`false`, default: `false`) | | `GATEWAY_ALLOW_ALL_USERS` | Allow all users without allowlist (`true`/`false`, default: `false`) |
## Agent Behavior ## Agent Behavior
@ -108,6 +110,8 @@ All variables go in `~/.hermes/.env`. You can also set them with `hermes config
| `HERMES_HUMAN_DELAY_MODE` | Response pacing: `off`/`natural`/`custom` | | `HERMES_HUMAN_DELAY_MODE` | Response pacing: `off`/`natural`/`custom` |
| `HERMES_HUMAN_DELAY_MIN_MS` | Custom delay range minimum (ms) | | `HERMES_HUMAN_DELAY_MIN_MS` | Custom delay range minimum (ms) |
| `HERMES_HUMAN_DELAY_MAX_MS` | Custom delay range maximum (ms) | | `HERMES_HUMAN_DELAY_MAX_MS` | Custom delay range maximum (ms) |
| `HERMES_QUIET` | Suppress non-essential output (`true`/`false`) |
| `HERMES_EXEC_ASK` | Enable execution approval prompts in gateway mode (`true`/`false`) |
## Session Settings ## Session Settings

View file

@ -171,7 +171,7 @@ There are two ways to enter multi-line messages:
``` ```
:::info :::info
Pasting 5+ lines of text automatically saves to `~/.hermes/pastes/` and collapses to a reference, keeping your prompt clean. Pasting multi-line text is supported — use `Alt+Enter` or `Ctrl+J` to insert newlines, or simply paste content directly.
::: :::
## Interrupting the Agent ## Interrupting the Agent
@ -251,6 +251,7 @@ Long conversations are automatically summarized when approaching context limits:
compression: compression:
enabled: true enabled: true
threshold: 0.85 # Compress at 85% of context limit threshold: 0.85 # Compress at 85% of context limit
summary_model: "google/gemini-3-flash-preview" # Model used for summarization
``` ```
When compression triggers, middle turns are summarized while the first 3 and last 4 turns are always preserved. When compression triggers, middle turns are summarized while the first 3 and last 4 turns are always preserved.

View file

@ -139,10 +139,10 @@ Control how much "thinking" the model does before responding:
```yaml ```yaml
agent: agent:
reasoning_effort: "xhigh" # xhigh (max), high, medium, low, minimal, none reasoning_effort: "" # empty = use model default. Options: xhigh (max), high, medium, low, minimal, none
``` ```
Higher reasoning effort gives better results on complex tasks at the cost of more tokens and latency. When unset (default), the model's own default reasoning level is used. Setting a value overrides it — higher reasoning effort gives better results on complex tasks at the cost of more tokens and latency.
## TTS Configuration ## TTS Configuration
@ -164,6 +164,8 @@ tts:
```yaml ```yaml
display: display:
tool_progress: all # off | new | all | verbose tool_progress: all # off | new | all | verbose
personality: "kawaii" # Default personality for the CLI
compact: false # Compact output mode (less whitespace)
``` ```
| Mode | What you see | | Mode | What you see |
@ -173,6 +175,58 @@ display:
| `all` | Every tool call with a short preview (default) | | `all` | Every tool call with a short preview (default) |
| `verbose` | Full args, results, and debug logs | | `verbose` | Full args, results, and debug logs |
## Speech-to-Text (STT)
```yaml
stt:
provider: "openai" # STT provider
```
Requires `VOICE_TOOLS_OPENAI_KEY` in `.env` for OpenAI STT.
## Human Delay
Simulate human-like response pacing in messaging platforms:
```yaml
human_delay:
mode: "off" # off | natural | custom
min_ms: 500 # Minimum delay (custom mode)
max_ms: 2000 # Maximum delay (custom mode)
```
## Code Execution
Configure the sandboxed Python code execution tool:
```yaml
code_execution:
timeout: 300 # Max execution time in seconds
max_tool_calls: 50 # Max tool calls within code execution
```
## Delegation
Configure subagent behavior for the delegate tool:
```yaml
delegation:
max_iterations: 50 # Max iterations per subagent
default_toolsets: # Toolsets available to subagents
- terminal
- file
- web
```
## Clarify
Configure the clarification prompt behavior:
```yaml
clarify:
timeout: 120 # Seconds to wait for user clarification response
```
## Context Files (SOUL.md, AGENTS.md) ## Context Files (SOUL.md, AGENTS.md)
Drop these files in your project directory and the agent automatically picks them up: Drop these files in your project directory and the agent automatically picks them up:

View file

@ -159,6 +159,10 @@ mcp_{server_name}_{tool_name}
Tools appear alongside built-in tools — the agent calls them like any other tool. Tools appear alongside built-in tools — the agent calls them like any other tool.
:::info
In addition to the server's own tools, each MCP server also gets 4 utility tools auto-registered: `list_resources`, `read_resource`, `list_prompts`, and `get_prompt`. These allow the agent to discover and use MCP resources and prompts exposed by the server.
:::
### Reconnection ### Reconnection
If an MCP server disconnects, Hermes automatically reconnects with exponential backoff (1s, 2s, 4s, 8s, 16s — max 5 attempts). Initial connection failures are reported immediately. If an MCP server disconnects, Hermes automatically reconnects with exponential backoff (1s, 2s, 4s, 8s, 16s — max 5 attempts). Initial connection failures are reported immediately.

View file

@ -36,7 +36,7 @@ hermes chat --toolsets skills -q "Show me the axolotl skill"
Skills use a token-efficient loading pattern: Skills use a token-efficient loading pattern:
``` ```
Level 0: skills_list() → [{name, description}, ...] (~3k tokens) Level 0: skills_list() → [{name, description, category}, ...] (~3k tokens)
Level 1: skill_view(name) → Full content + metadata (varies) Level 1: skill_view(name) → Full content + metadata (varies)
Level 2: skill_view(name, path) → Specific reference file (varies) Level 2: skill_view(name, path) → Specific reference file (varies)
``` ```

View file

@ -113,6 +113,9 @@ Configure per-platform overrides in `~/.hermes/gateway.json`:
TELEGRAM_ALLOWED_USERS=123456789,987654321 TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678 DISCORD_ALLOWED_USERS=123456789012345678
# Or allow specific users across all platforms (comma-separated user IDs):
GATEWAY_ALLOWED_USERS=123456789,987654321
# Or explicitly allow all users (NOT recommended for bots with terminal access): # Or explicitly allow all users (NOT recommended for bots with terminal access):
GATEWAY_ALLOW_ALL_USERS=true GATEWAY_ALLOW_ALL_USERS=true
``` ```