# Delegation Config Restart Trap — Jul 9, 2026 ## The Problem Subagents kept failing with HTTP 402 (OpenRouter insufficient credits) even after: 1. Changing `delegation.model` from `openrouter/anthropic/claude-opus-4.8` to `claude-opus-4-8` 2. Changing `delegation.provider` to `admin-ai` 3. Verifying the model name was correct via `curl` directly against admin-ai API Root cause: The running Hermes gateway process (PID 2757853) cached the old delegation config at startup. The `hermes config set` commands only updated the config file on disk. Subagents spawned from the running gateway still used the old OpenRouter-routed model string. ## The Fix ```bash # Stop the running gateway first — must be done from OUTSIDE the gateway session # (e.g. via SSH, or from a separate terminal, or from host CLI session) hermes gateway stop # Or kill the PID directly: kill 2757853 # Then restart: systemctl start hermes # Or: hermes gateway run --replace ``` **Cannot restart from inside the gateway:** `hermes gateway restart` from inside the Telegram session kills the process before the command completes (SIGTERM propagates to child processes). The error message: "Blocked: cannot restart or stop the gateway from inside the gateway process." ## Symptoms - `hermes config get delegation.model` shows the NEW value (config file updated) - But subagents still use the OLD model name - Subagents fail with `HTTP 402: openrouter...Insufficient credits` - The running gateway process (check via `ps aux | grep hermes.*gateway`) has a start time before the config change ## Prevention - After ANY `hermes config set` for `delegation.*`, note whether the gateway needs a restart - Verification: check the gateway PID's start time vs the config file's modification time - If config modified after gateway start → restart needed - For known-good behavior: use `deepseek-chat` (the conversation model) as delegation model too — it doesn't go through OpenRouter and doesn't need config changes ## Effective delegation state (Jul 9, 2026, 10:30 PM) Despite config file having `model: deepseek-chat`, the running gateway still used the cached old config. All subagents dispatched tonight actually ran on `deepseek-chat` because the config was changed FROM that value first (was deepseek-chat → changed to openrouter/opus failed → changed back). The initial successful deepseek-chat dispatches worked before the first config change attempt. ## Re-confirmed Jul 10, 2026 Same pattern recurred when changing delegation model from `gemini-pro-latest` to `deepseek-v4-pro`. Config confirmed correct, but subagents kept dispatching on Gemini until gateway was restarted. This trap is persistent — it will hit every model change regardless of how carefully the config is verified. **Cron job drift is a related symptom:** When the conversation model changed from `deepseek-chat` to `deepseek-v4-pro`, unpinned cron jobs refused to run with a safety warning: "global inference config drifted since this job was created." Fix: pin each job explicitly with `hermes cron update --model --provider `.