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:
parent
d578d06f59
commit
19016497ef
9 changed files with 77 additions and 10 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue