From 939670cc4e83eb948a2c4a2b666a1356a0de4e29 Mon Sep 17 00:00:00 2001 From: amanning3390 Date: Fri, 24 Jul 2026 16:36:26 -0500 Subject: [PATCH] docs(acp): document HERMES_ACP_SKIP_CONFIGURED_MCP for ACP hosts Adds a 'Host integration' section to the ACP guide and a row in the environment variable reference so the next ACP host implementer does not have to read the adapter source. Documents the exact contract the tests already pin: the value must be exactly `1`; unset/empty/`0`/`false` keep the default behavior; only globally configured config.yaml MCP discovery is skipped, and servers supplied by the ACP session through session/new are still registered. Framed as a host-set process marker rather than user configuration - the same shape as the existing HERMES_KANBAN_TASK entry - so it does not read as a behavioral setting that belongs in config.yaml. Co-authored-by: amanning3390 Signed-off-by: amanning3390 --- .../docs/reference/environment-variables.md | 1 + website/docs/user-guide/features/acp.md | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/website/docs/reference/environment-variables.md b/website/docs/reference/environment-variables.md index 16949979c738..9473ac605c41 100644 --- a/website/docs/reference/environment-variables.md +++ b/website/docs/reference/environment-variables.md @@ -748,6 +748,7 @@ Advanced per-platform knobs for throttling the outbound message batcher. Most us | `HERMES_QUIET` | Suppress non-essential output (`true`/`false`) | | `CODEX_HOME` | When [Codex app-server runtime](../user-guide/features/codex-app-server-runtime) is enabled, override the directory Codex CLI reads its config + auth from (default: `~/.codex`). Hermes' migration writes the managed block to `/config.toml`. | | `HERMES_KANBAN_TASK` | Set by the kanban dispatcher when spawning a worker (task UUID). Workers and the spawned `hermes-tools` MCP subprocess inherit it so kanban tools gate correctly. Don't set manually. | +| `HERMES_ACP_SKIP_CONFIGURED_MCP` | Set by an [ACP host](../user-guide/features/acp#host-integration) on the Hermes subprocess it spawns. `1` skips starting the globally configured `config.yaml` MCP servers before the ACP JSON-RPC loop, for hosts that pass the session's MCP servers through `session/new` themselves. Servers supplied by the ACP session are still registered; any other value keeps the default. Don't set manually. | | `HERMES_API_TIMEOUT` | LLM API call timeout in seconds (default: `1800`) | | `HERMES_API_CALL_STALE_TIMEOUT` | Non-streaming stale-call timeout in seconds (default: `90`). Auto-disabled for local providers when left unset, and may scale upward for very large contexts. Also configurable via `providers..stale_timeout_seconds` or `providers..models..stale_timeout_seconds` in `config.yaml`. | | `HERMES_STREAM_READ_TIMEOUT` | Streaming socket read timeout in seconds (default: `120`). Auto-increased to `HERMES_API_TIMEOUT` for local providers. Increase if local LLMs time out during long code generation. | diff --git a/website/docs/user-guide/features/acp.md b/website/docs/user-guide/features/acp.md index ccdaabc5832d..4983465d2fd0 100644 --- a/website/docs/user-guide/features/acp.md +++ b/website/docs/user-guide/features/acp.md @@ -156,6 +156,28 @@ ACP mode uses the same Hermes configuration as the CLI: Provider resolution uses Hermes' normal runtime resolver, so ACP inherits the currently configured provider and credentials. Hermes also advertises a terminal auth method (`--setup`) for first-run ACP clients; this opens Hermes' interactive model/provider setup. +## Host integration + +These variables are set by an **ACP host process** (an editor or another agent +harness) on the Hermes subprocess it spawns. They are not user configuration — +do not set them by hand in `.env` or `config.yaml`. + +| Variable | Value | Effect | +|----------|-------|--------| +| `HERMES_ACP_SKIP_CONFIGURED_MCP` | `1` | Skip starting the **globally configured** MCP servers from `config.yaml` before the ACP JSON-RPC loop begins. | + +Hermes normally starts every MCP server configured in `config.yaml` before it +enters the ACP JSON-RPC loop. A host that owns MCP itself — passing the +session's servers explicitly through `session/new` — does not need that global +startup, and an unrelated slow or interactive MCP server would otherwise delay +`initialize`. Setting the marker to exactly `1` lets such a host skip it. + +Only the global `config.yaml` discovery is skipped. **MCP servers supplied by +the ACP session through `session/new` are still registered**, so a host loses +no capability it asked for. Any other value (unset, empty, `0`, `false`) keeps +the default behavior, so an unrelated truthy-looking string cannot silently +disable MCP. + ## Session behavior ACP sessions are tracked by the ACP adapter's in-memory session manager while the server is running.