From fb3446a281e4bddc733a04bf92a5ec5f0d6decc9 Mon Sep 17 00:00:00 2001 From: witcheer <208820874+notwitcheer@users.noreply.github.com> Date: Tue, 8 Sep 2026 12:25:32 +0000 Subject: [PATCH] docs: eight small accuracy fixes from open type/docs issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each fix verified against main @ ee84ccd on 2026-09-08. - windows-native: the troubleshooting entry told users to set HERMES_GATEWAY_FORCE_STARTUP (no code reads it), query a task named HermesGateway (hermes_cli/gateway_windows.py names it Hermes_Gateway), and described the Startup-folder fallback as a cmd.exe shortcut (it writes a .vbs run via wscript.exe). Closes #88077. - faq: 'hermes config set HERMES_MODEL ...' does not change the default model; 'model.default' does. Closes #65855. - messaging/index, slash-commands, irc: gateway settings are read from ~/.hermes/config.yaml (gateway/config.py), not gateway-config.yaml. Closes #65857, closes #78276. - telegram: reaction lifecycle is πŸ‘€ then πŸ‘/πŸ‘Ž (plugins/platforms/telegram/adapter.py on_processing_complete), docs said βœ…/❌. Closes #78698. - plugins: bundled memory providers win on a name collision (plugins/memory/__init__.py docstring: bundled, user, project, entry point, first seen wins); the page said user plugins override. Model providers keep the documented last-writer-wins. Closes #100281. - architecture, index: terminal backend count is seven (tools/terminal_tool.py: local, docker, singularity, modal, daytona, vercel_sandbox, ssh); two surfaces said six. Closes #78252. - quickstart: the Portal quick path was called 'free'; the login is free, the inference is billed to the subscription. Wording now matches integrations/nous-portal. Closes #78254. --- website/docs/developer-guide/architecture.md | 2 +- website/docs/getting-started/quickstart.md | 2 +- website/docs/index.mdx | 2 +- website/docs/reference/faq.md | 2 +- website/docs/reference/slash-commands.md | 2 +- website/docs/user-guide/features/plugins.md | 2 +- website/docs/user-guide/messaging/index.md | 6 +++--- website/docs/user-guide/messaging/irc.md | 4 ++-- website/docs/user-guide/messaging/telegram.md | 6 +++--- website/docs/user-guide/windows-native.md | 6 +++--- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/website/docs/developer-guide/architecture.md b/website/docs/developer-guide/architecture.md index 3640103c3d..8b826980e7 100644 --- a/website/docs/developer-guide/architecture.md +++ b/website/docs/developer-guide/architecture.md @@ -40,7 +40,7 @@ This page is the top-level map of Hermes Agent internals. Use it to orient yours β–Ό β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Session Storage β”‚ β”‚ Tool Backends β”‚ -β”‚ (SQLite + FTS5) β”‚ β”‚ Terminal (6 backends) β”‚ +β”‚ (SQLite + FTS5) β”‚ β”‚ Terminal (7 backends) β”‚ β”‚ hermes_state.py β”‚ β”‚ Browser (5 backends) β”‚ β”‚ gateway/session.pyβ”‚ β”‚ Web (4 backends) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ MCP (dynamic) β”‚ diff --git a/website/docs/getting-started/quickstart.md b/website/docs/getting-started/quickstart.md index e0772f02be..3d424f0ae7 100644 --- a/website/docs/getting-started/quickstart.md +++ b/website/docs/getting-started/quickstart.md @@ -98,7 +98,7 @@ That logs you in, sets Nous as your provider, and turns on the Tool Gateway in o :::info Setup modes On a fresh install, `hermes setup` offers three modes: -- **Quick Setup (Nous Portal)** β€” free OAuth login, no API keys; sets up a model plus the Tool Gateway tools. The recommended fast path. +- **Quick Setup (Nous Portal)** β€” OAuth login, no API keys to manage; sets up a model plus the Tool Gateway tools, billed to your [Nous Portal subscription](/integrations/nous-portal). The recommended fast path. - **Full Setup** β€” walk through every provider, tool, and option yourself (bring your own keys). - **Blank Slate** β€” everything starts **off** except the bare minimum needed to run an agent: **provider & model, the File Operations toolset, and the Terminal toolset**. No web, browser, code execution, vision, memory, delegation, cron, skills, plugins, or MCP servers β€” and compression, checkpoints, smart routing, and memory capture are all disabled. After the minimal baseline is applied, you choose one of two paths: **start with everything disabled** (finish now with the minimal agent), or **walk through all configurations** (opt in to tools, skills, plugins, MCP, and messaging). Pick this when you want a minimal, fully-controlled agent and intend to enable only exactly what you need. diff --git a/website/docs/index.mdx b/website/docs/index.mdx index a4f248e8ae..0634bcdb84 100644 --- a/website/docs/index.mdx +++ b/website/docs/index.mdx @@ -134,7 +134,7 @@ It's not a coding copilot tethered to an IDE or a chatbot wrapper around a singl ## Key Features - **A closed learning loop** β€” Agent-curated memory with periodic nudges, autonomous skill creation, skill self-improvement during use, FTS5 cross-session recall with LLM summarization, and [Honcho](https://github.com/plastic-labs/honcho) dialectic user modeling -- **Runs anywhere, not just your laptop** β€” 6 terminal backends: local, Docker, SSH, Daytona, Singularity, Modal. Daytona and Modal offer serverless persistence β€” your environment hibernates when idle, costing nearly nothing +- **Runs anywhere, not just your laptop** β€” 7 terminal backends: local, Docker, SSH, Daytona, Singularity, Modal, Vercel Sandbox. Daytona and Modal offer serverless persistence β€” your environment hibernates when idle, costing nearly nothing - **Lives where you do** β€” CLI, Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost, Email, SMS, DingTalk, Feishu, WeCom, Weixin, QQ Bot, Yuanbao, BlueBubbles, Home Assistant, Microsoft Teams, Google Chat, and more β€” 20+ platforms from one gateway - **Built by model trainers** β€” Created by [Nous Research](https://nousresearch.com), the lab behind Hermes, Nomos, and Psyche. Works with [Nous Portal](https://portal.nousresearch.com), [OpenRouter](https://openrouter.ai), OpenAI, or any endpoint - **Scheduled automations** β€” Built-in cron with delivery to any platform diff --git a/website/docs/reference/faq.md b/website/docs/reference/faq.md index 7dfc0d3ebd..2e7d31b5a6 100644 --- a/website/docs/reference/faq.md +++ b/website/docs/reference/faq.md @@ -284,7 +284,7 @@ Make sure the key matches the provider. An OpenAI key won't work with OpenRouter hermes model # Set a valid model -hermes config set HERMES_MODEL anthropic/claude-opus-4.7 +hermes config set model.default anthropic/claude-opus-4.7 # Or specify per-session hermes chat --model openrouter/meta-llama/llama-3.1-70b-instruct diff --git a/website/docs/reference/slash-commands.md b/website/docs/reference/slash-commands.md index 0bcdcb52cb..005be52a9a 100644 --- a/website/docs/reference/slash-commands.md +++ b/website/docs/reference/slash-commands.md @@ -15,7 +15,7 @@ Installed skills are also exposed as dynamic slash commands on both surfaces. (` ## Permissions and admin/user split -Every messaging platform that supports a per-user allowlist (Telegram, Discord, Slack, Matrix, Mattermost, Signal, …) also supports a two-tier slash command split: **admins** get every registered command, **regular users** only get the names you list in `user_allowed_commands` (plus the always-allowed floor `/help` and `/whoami`). Configure `allow_admin_from` and `user_allowed_commands` (and the per-group equivalents `group_allow_admin_from` / `group_user_allowed_commands`) inside the platform's `extra:` block in `~/.hermes/gateway-config.yaml`. +Every messaging platform that supports a per-user allowlist (Telegram, Discord, Slack, Matrix, Mattermost, Signal, …) also supports a two-tier slash command split: **admins** get every registered command, **regular users** only get the names you list in `user_allowed_commands` (plus the always-allowed floor `/help` and `/whoami`). Configure `allow_admin_from` and `user_allowed_commands` (and the per-group equivalents `group_allow_admin_from` / `group_user_allowed_commands`) inside the platform's `extra:` block in `~/.hermes/config.yaml`. See the per-platform docs for examples β€” the structure is identical across platforms: diff --git a/website/docs/user-guide/features/plugins.md b/website/docs/user-guide/features/plugins.md index 417850c1c7..78b450f262 100644 --- a/website/docs/user-guide/features/plugins.md +++ b/website/docs/user-guide/features/plugins.md @@ -144,7 +144,7 @@ Within each source, Hermes also recognizes sub-category directories that route p | `plugins/context_engine//` | Context-compression engines (`ctx.register_context_engine()`) | **Own loader** in `plugins/context_engine/__init__.py` (one active at a time) | | `plugins/model-providers//` | LLM provider profiles (`register_provider(ProviderProfile(...))`) | **Own loader** in `providers/__init__.py` (lazily scanned on first `get_provider_profile()` call) | -User plugins at `~/.hermes/plugins/model-providers//` and `~/.hermes/plugins/memory//` override bundled plugins of the same name β€” last-writer-wins in `register_provider()` / `register_memory_provider()`. Drop a directory in, and it replaces the built-in without any repo edits. +User plugins at `~/.hermes/plugins/model-providers//` override bundled model providers of the same name (last-writer-wins in `register_provider()`), so you can replace a built-in provider profile without any repo edits. Memory providers resolve the other way round: for `~/.hermes/plugins/memory//` the **bundled** provider wins on a name collision (bundled, then user, then project, then entry points; first seen wins), so a user memory provider needs its own unique name. ## Plugins are opt-in (with a few exceptions) diff --git a/website/docs/user-guide/messaging/index.md b/website/docs/user-guide/messaging/index.md index b792b962aa..96446f46e0 100644 --- a/website/docs/user-guide/messaging/index.md +++ b/website/docs/user-guide/messaging/index.md @@ -284,7 +284,7 @@ continuation, not the history loaded when you send a message. ## Per-Channel Model & System Prompt Overrides -Different channels can run different models and personas from a **single gateway** β€” e.g. a cheap fast model in `#daily` and a frontier model with a specialist prompt in `#dev`. Configure `channel_overrides` under the platform in `~/.hermes/gateway-config.yaml`: +Different channels can run different models and personas from a **single gateway** β€” e.g. a cheap fast model in `#daily` and a frontier model with a specialist prompt in `#dev`. Configure `channel_overrides` under the platform in `~/.hermes/config.yaml`: ```yaml platforms: @@ -731,7 +731,7 @@ Once upstream is healthy, `/platform resume ` clears the breaker and re-ar ### Restart notifications -When the gateway restarts (or is shut down with in-flight sessions), it can send a one-shot "the agent is back" / "the agent was interrupted" message to each platform's home channel. This is controlled per-platform by the `gateway_restart_notification` flag in `gateway-config.yaml`, which defaults to `true`: +When the gateway restarts (or is shut down with in-flight sessions), it can send a one-shot "the agent is back" / "the agent was interrupted" message to each platform's home channel. This is controlled per-platform by the `gateway_restart_notification` flag in `config.yaml`, which defaults to `true`: ```yaml gateway: @@ -748,7 +748,7 @@ Disable it on noisy or low-priority platforms while leaving it on for your prima ### Typing indicators -While the agent is processing a message, the gateway shows a live typing status on platforms that support it β€” a "typing…" bubble on Telegram/Discord/Signal, or the "is thinking…" assistant status on Slack. This is controlled per-platform by the `typing_indicator` flag in `gateway-config.yaml`, which defaults to `true`: +While the agent is processing a message, the gateway shows a live typing status on platforms that support it β€” a "typing…" bubble on Telegram/Discord/Signal, or the "is thinking…" assistant status on Slack. This is controlled per-platform by the `typing_indicator` flag in `config.yaml`, which defaults to `true`: ```yaml gateway: diff --git a/website/docs/user-guide/messaging/irc.md b/website/docs/user-guide/messaging/irc.md index f9fa9d94ce..4fd2106162 100644 --- a/website/docs/user-guide/messaging/irc.md +++ b/website/docs/user-guide/messaging/irc.md @@ -15,9 +15,9 @@ IRC is plain text: there is no voice, image, file, thread, reaction, typing, or ## Configure Hermes -You can configure IRC two ways β€” environment variables (for a quick env-only setup) or the `gateway` block in `~/.hermes/gateway-config.yaml`. +You can configure IRC two ways β€” environment variables (for a quick env-only setup) or the `gateway` block in `~/.hermes/config.yaml`. -### Option A β€” gateway-config.yaml +### Option A β€” config.yaml ```yaml gateway: diff --git a/website/docs/user-guide/messaging/telegram.md b/website/docs/user-guide/messaging/telegram.md index 720217ec7e..79afe3d1d4 100644 --- a/website/docs/user-guide/messaging/telegram.md +++ b/website/docs/user-guide/messaging/telegram.md @@ -1224,8 +1224,8 @@ This covers the custom fallback transport layer that Hermes uses for Telegram co The bot can add emoji reactions to messages as visual processing feedback: - πŸ‘€ when the bot starts processing your message -- βœ… when the response is delivered successfully -- ❌ if an error occurs during processing +- πŸ‘ when the response is delivered successfully +- πŸ‘Ž if an error occurs during processing Reactions are **disabled by default**. Enable them in `config.yaml`: @@ -1241,7 +1241,7 @@ TELEGRAM_REACTIONS=true ``` :::note -Unlike Discord (where reactions are additive), Telegram's Bot API replaces all bot reactions in a single call. The transition from πŸ‘€ to βœ…/❌ happens atomically β€” you won't see both at once. +Unlike Discord (where reactions are additive), Telegram's Bot API replaces all bot reactions in a single call. The transition from πŸ‘€ to πŸ‘/πŸ‘Ž happens atomically β€” you won't see both at once. ::: :::tip diff --git a/website/docs/user-guide/windows-native.md b/website/docs/user-guide/windows-native.md index f703dfe286..69c2726a9d 100644 --- a/website/docs/user-guide/windows-native.md +++ b/website/docs/user-guide/windows-native.md @@ -176,8 +176,8 @@ hermes gateway install What happens under the hood: -1. `schtasks /Create /SC ONLOGON /RL LIMITED /TN HermesGateway` β€” registers a task that runs at your login with standard (non-elevated) permissions. No UAC prompt. -2. If schtasks is blocked by group policy, falls back to writing a `start /min cmd.exe /d /c ` shortcut into `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup`. Same effect, slightly cruder. +1. `schtasks /Create /SC ONLOGON /RL LIMITED /TN Hermes_Gateway` β€” registers a task that runs at your login with standard (non-elevated) permissions. No UAC prompt. +2. If schtasks is blocked by group policy, falls back to writing a small `Hermes_Gateway.vbs` launcher (run hidden via `wscript.exe`) into `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup`. Same effect, slightly cruder. A VBScript is used rather than a `cmd.exe` shortcut because a console allocated at logon can receive a close event that kills the gateway before it finishes starting. 3. Spawns the gateway **detached via `pythonw.exe`** β€” not `python.exe`. `pythonw.exe` has no console attached, which immunizes it against `CTRL_C_EVENT` broadcasts from sibling processes (a real issue that used to kill the gateway when you Ctrl+C'd anything in the same process group). Flags used when spawning: `DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW | CREATE_BREAKAWAY_FROM_JOB`. @@ -297,7 +297,7 @@ You hit a shebang-script invocation that bypassed the `.cmd` shim. Hermes resolv Your download of `install.ps1` picked up a UTF-8 BOM. The `irm | iex` form strips BOMs automatically; `[scriptblock]::Create((irm ...))` does not. Re-run with the simple `irm | iex` form, or download the script manually and save it without a BOM via `[IO.File]::WriteAllText($path, $text, (New-Object Text.UTF8Encoding $false))`. **Gateway won't stay running after restart.** -Check `hermes gateway status` β€” it merges the schtasks entry, the Startup-folder shortcut (if used), and the live PID. If schtasks is registered but not running, group policy may be blocking `ONLOGON` triggers. Run `schtasks /Query /TN HermesGateway /V /FO LIST` to see the task's failure reason, or fall back to the Startup-folder path by uninstalling and reinstalling with `HERMES_GATEWAY_FORCE_STARTUP=1`. +Check `hermes gateway status` β€” it merges the schtasks entry, the Startup-folder shortcut (if used), and the live PID. If schtasks is registered but not running, group policy may be blocking `ONLOGON` triggers. Run `schtasks /Query /TN Hermes_Gateway /V /FO LIST` (`Hermes_Gateway_` for a named profile) to see the task's failure reason. The Startup-folder fallback engages automatically only when `schtasks` itself fails to register the task; there is no environment variable or flag to force it. **`/edit` still does nothing after setting `$env:EDITOR`.** You set it in the current process only; close and reopen the shell, or set it at User scope in System Properties β†’ Environment Variables. Verify with `echo $env:EDITOR` in a new PowerShell window.