mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
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)
|
||||
│ ├── approval.py # Dangerous command detection + per-session approval
|
||||
│ ├── 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
|
||||
│ ├── vision_tools.py # Image analysis via multimodal models
|
||||
│ ├── delegate_tool.py # Subagent spawning and parallel task execution
|
||||
|
|
@ -102,7 +103,7 @@ while turns < max_turns:
|
|||
|
||||
if 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))
|
||||
turns += 1
|
||||
else:
|
||||
|
|
@ -117,7 +118,7 @@ class AIAgent:
|
|||
self,
|
||||
model: str = "anthropic/claude-opus-4.6",
|
||||
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,
|
||||
enabled_toolsets: list = None,
|
||||
disabled_toolsets: list = None,
|
||||
|
|
@ -195,7 +196,7 @@ Key UX behaviors:
|
|||
- Thinking spinner shows animated kawaii face + verb (`(⌐■_■) deliberating...`)
|
||||
- Tool execution results appear as `┊ {emoji} {verb} {detail} {duration}`
|
||||
- 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
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
||||
:::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
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ These are commands you run from your shell.
|
|||
|---------|-------------|
|
||||
| `hermes model` | Switch provider and model interactively |
|
||||
| `hermes login` | OAuth login to a provider (use `--provider` to specify) |
|
||||
| `hermes logout` | Clear stored OAuth credentials |
|
||||
| `hermes logout` | Clear provider authentication |
|
||||
|
||||
### 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/)) |
|
||||
| `BROWSERBASE_API_KEY` | Browser automation ([browserbase.com](https://browserbase.com/)) |
|
||||
| `BROWSERBASE_PROJECT_ID` | Browserbase project ID |
|
||||
| `BROWSER_INACTIVITY_TIMEOUT` | Browser session inactivity timeout in seconds |
|
||||
| `FAL_KEY` | Image generation ([fal.ai](https://fal.ai/)) |
|
||||
| `ELEVENLABS_API_KEY` | Premium TTS voices ([elevenlabs.io](https://elevenlabs.io/)) |
|
||||
| `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_ALLOWED_USERS` | Comma-separated phone numbers (with country code) |
|
||||
| `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`) |
|
||||
|
||||
## 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_MIN_MS` | Custom delay range minimum (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
|
||||
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ There are two ways to enter multi-line messages:
|
|||
```
|
||||
|
||||
:::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
|
||||
|
|
@ -251,6 +251,7 @@ Long conversations are automatically summarized when approaching context limits:
|
|||
compression:
|
||||
enabled: true
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -139,10 +139,10 @@ Control how much "thinking" the model does before responding:
|
|||
|
||||
```yaml
|
||||
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
|
||||
|
||||
|
|
@ -164,6 +164,8 @@ tts:
|
|||
```yaml
|
||||
display:
|
||||
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 |
|
||||
|
|
@ -173,6 +175,58 @@ display:
|
|||
| `all` | Every tool call with a short preview (default) |
|
||||
| `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)
|
||||
|
||||
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.
|
||||
|
||||
:::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
|
||||
|
||||
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:
|
||||
|
||||
```
|
||||
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 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
|
||||
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):
|
||||
GATEWAY_ALLOW_ALL_USERS=true
|
||||
```
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue