diff --git a/website/docs/developer-guide/architecture.md b/website/docs/developer-guide/architecture.md index 5b866f2273..89d255bcce 100644 --- a/website/docs/developer-guide/architecture.md +++ b/website/docs/developer-guide/architecture.md @@ -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 diff --git a/website/docs/getting-started/updating.md b/website/docs/getting-started/updating.md index 6cee7c6511..5ddb6472db 100644 --- a/website/docs/getting-started/updating.md +++ b/website/docs/getting-started/updating.md @@ -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 diff --git a/website/docs/reference/cli-commands.md b/website/docs/reference/cli-commands.md index 5d37996ce2..c90a9c0425 100644 --- a/website/docs/reference/cli-commands.md +++ b/website/docs/reference/cli-commands.md @@ -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 diff --git a/website/docs/reference/environment-variables.md b/website/docs/reference/environment-variables.md index 288583daed..8da1954ead 100644 --- a/website/docs/reference/environment-variables.md +++ b/website/docs/reference/environment-variables.md @@ -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 diff --git a/website/docs/user-guide/cli.md b/website/docs/user-guide/cli.md index 5339d8355d..a0944aca2c 100644 --- a/website/docs/user-guide/cli.md +++ b/website/docs/user-guide/cli.md @@ -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. diff --git a/website/docs/user-guide/configuration.md b/website/docs/user-guide/configuration.md index ab4e660268..df2e868ed9 100644 --- a/website/docs/user-guide/configuration.md +++ b/website/docs/user-guide/configuration.md @@ -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: diff --git a/website/docs/user-guide/features/mcp.md b/website/docs/user-guide/features/mcp.md index 38a4e59bae..0297b152de 100644 --- a/website/docs/user-guide/features/mcp.md +++ b/website/docs/user-guide/features/mcp.md @@ -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. diff --git a/website/docs/user-guide/features/skills.md b/website/docs/user-guide/features/skills.md index 8465cfb0d1..9a3063fc57 100644 --- a/website/docs/user-guide/features/skills.md +++ b/website/docs/user-guide/features/skills.md @@ -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) ``` diff --git a/website/docs/user-guide/messaging/index.md b/website/docs/user-guide/messaging/index.md index 4b08cfff42..c3a0eb07f9 100644 --- a/website/docs/user-guide/messaging/index.md +++ b/website/docs/user-guide/messaging/index.md @@ -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 ```