| Preview mode — launching is disabled. | exception | error | cron, schedule, validation, valueerror |
| no install root | exception | error | cron, schedule, validation, valueerror |
| Hermes backend did not become ready: ${detail} | exception | critical | cron, ioerror, filesystem, permissions, runtimeerror |
| Cannot resolve ${installScriptName()}: no SOURCE_REPO_ROOT a | exception | critical | cron, json, corruption, runtimeerror |
| ${isPosix ? 'install.sh --manifest' : 'install.ps1 -Manifest | exception | critical | cron, json, corruption, runtimeerror |
| ${isPosix ? 'install.sh --manifest' : 'install.ps1 -Manifest | exception | error | cron, workdir, paths, validation |
| Remote connection is not ready yet. Try again in a moment. | exception | error | cron, workdir, paths, validation |
| Remote gateway URL is required. | validation | error | cron, workdir, paths, validation |
| Remote gateway URL is not valid: ${error.message} | validation | error | cron, monitor, validation, valueerror |
| Remote gateway URL must be http:// or https://, got ${parsed | validation | error | cron, monitor, no-agent, validation |
| Unsupported Hermes backend URL protocol: ${protocol} | validation | error | cron, no-agent, script, validation |
| Timed out connecting to Hermes backend after ${timeoutMs}ms | exception | error | cron, schedule, one-shot, clock, validation |
| ${res.status}: ${text || res.statusText} | http | error | cron, naming, lookup, ambiguity |
| ${label} exited and ${dashboardIndexUrl(baseUrl)} is served | exception | error | cron, immutability, security, validation |
| Could not generate a valid desktop installation ID. | exception | error | cron, schedule, one-shot, update, clock |
| Desktop installation ID path is not a regular file. | exception | error | cron, one-shot, update, schedule |
| Desktop installation ID is owned by another user. | exception | error | cron, resume, one-shot, schedule |
| Could not repair the desktop installation ID. | exception | error | cron, security, gateway, lifecycle, guard |
| Desktop installation ID is invalid. | validation | error | cron, notepad, validation, valueerror |
| Unknown uninstall mode: ${mode} | validation | error | cron, notepad, validation, valueerror |
| gh pr create failed (is gh installed and authenticated?) | exception | error | git, github, gh-cli, pull-request, desktop, ipc |
| Branch name is required. | validation | error | git, worktree, branch, validation, desktop, ipc |
| Secure token storage is unavailable (no OS keyring service w | exception | error | desktop, keyring, safe-storage, linux, secrets, electron |
| Failed to encrypt the remote gateway token for secure storag | exception | error | desktop, keyring, safe-storage, encryption, electron, secrets |
| An update is already in progress. | exception | warning | desktop, update, concurrency, guard, electron |
| Hermes install at ${ACTIVE_HERMES_ROOT} is missing or incomp | exception | critical | desktop, install, runtime, bootstrap, startup |
| Git for Windows is required for Hermes on Windows (provides | exception | critical | windows, git-bash, desktop, startup, terminal, preflight |
| Hermes venv missing at ${VENV_ROOT}. Re-run the desktop inst | exception | critical | desktop, venv, python, install, startup |
| Missing URL | validation | error | ipc, validation, url, image, desktop |
| Invalid data URL | validation | error | url, data-url, validation, image, desktop |
| Could not read image | exception | error | image, electron, native-image, clipboard, codec |
| Not a directory: ${watchDir} | validation | error | fs-watch, plugins, filesystem, validation, desktop |
| Gateway did not return a WS ticket. | exception | error | gateway, websocket, auth, ticket, network, desktop |
| Invalid profile name: ${value} | validation | error | profiles, validation, config, desktop |
| Remote gateway session token is required. | validation | error | gateway, remote, auth, token, validation, desktop |
| SSH host is required. | validation | error | ssh, remote, validation, config, desktop |
| Remote Hermes gateway is selected, but no session token is s | exception | error | gateway, remote, token, auth, connection, desktop |
| HERMES_DESKTOP_REMOTE_URL is set but HERMES_DESKTOP_REMOTE_T | exception | error | environment, remote, gateway, token, config, desktop |
| SSH remote mode is selected but no host is configured. | exception | error | ssh, configuration, desktop, startup, validation |
| Reached the gateway over HTTP, but the live WebSocket (/api/ | exception | error | websocket, network, proxy, gateway, desktop, connectivity |
| Hermes backend for profile "${profile}" is HTTP-reachable bu | exception | error | websocket, auth, session-token, gateway, desktop, startup |
| Hermes backend start was superseded by a newer connection at | exception | warning | race-condition, process-management, desktop, startup, lifecycle |
| Local Hermes backend is HTTP-reachable but the WebSocket (/a | exception | error | websocket, auth, local-backend, gateway, desktop, startup |
| File uploads are not supported against OAuth-gated remote ba | exception | error | oauth, file-upload, desktop, unsupported-feature, rest |
| Invalid external URL | validation | warning | security, url-validation, ipc, desktop, validation |
| Invalid preview URL | validation | warning | security, url-validation, ipc, desktop, preview |
| Could not create directory: ${error.message} | exception | error | filesystem, permissions, ipc, desktop, configuration |
| Invalid rename | validation | warning | validation, filesystem, ipc, desktop, rename |
| "${name}" already exists | validation | warning | filesystem, validation, collision, ipc, desktop |
| Invalid path | validation | warning | validation, filesystem, ipc, desktop |
| Content too large | validation | warning | validation, filesystem, size-limit, ipc, desktop |
| Parent directory does not exist | validation | warning | filesystem, validation, ipc, desktop |
| Invalid delete | validation | warning | validation, filesystem, ipc, desktop, trash |
| Gateway rejected native login: ${error}${desc ? ` (${desc})` | exception | error | oauth, authentication, loopback, gateway, desktop |
| Loopback callback missing authorization code | exception | error | oauth, authentication, loopback, validation, desktop |
| Loopback callback state mismatch (possible CSRF) | exception | error | oauth, csrf, security, authentication, desktop |
| Gateway token response missing access_token | exception | error | oauth, authentication, token, gateway, validation, desktop |
| Stored token set missing accessToken | validation | error | auth, oauth, token-storage, desktop |
| Secure token storage returned no encrypted payload; refusing | exception | error | security, keychain, electron, token-storage |
| First-run remote setup completed without a saved remote back | exception | error | desktop, first-run, remote-backend, invariant |
| Remote path must not be empty. | validation | error | validation, remote, ssh, path |
| Unsafe remote path: contains NUL or newline. | validation | error | security, command-injection, validation, remote |
| Remote path must be absolute or start with ~/: "${s}" | validation | error | validation, remote, path |
| Unsafe SSH target: host is required. | exception | error | ssh, validation, remote |
| Unsafe SSH target: host must not start with a dash ("${host} | exception | error | ssh, security, argument-injection, validation |
| Unsafe SSH target: host contains control characters. | exception | error | ssh, security, validation, sanitization |
| Unsafe SSH target: user contains control characters. | exception | error | ssh, security, validation, sanitization |
| Unsafe SSH target: user must not start with a dash ("${user} | exception | error | ssh, security, argument-injection, validation |
| Unsafe SSH port: ${port} (must be 1-65535). | exception | error | ssh, validation, port |
| Unsafe SSH key path: contains control characters. | exception | error | ssh, security, validation, path |
| Unsafe SSH key path: must not start with a dash ("${keyPath} | exception | error | ssh, security, argument-injection, validation |
| SshConnection requires a host. | exception | error | ssh, validation, constructor |
| Unsafe SSH control dir: ${controlDir} is a symlink. | exception | error | ssh, security, filesystem, symlink |
| Unsafe SSH control dir: ${controlDir} is not a directory. | exception | error | ssh, security, filesystem |
| Unsafe SSH control dir: ${controlDir} is owned by uid ${st.u | exception | error | ssh, security, permissions, filesystem |
| Extension "${id}" was not found on the Marketplace. | exception | error | marketplace, vscode, extension, network |
| Extension "${id}" has no published versions. | exception | error | marketplace, vscode, extension, transient |
| Could not find a downloadable package for "${id}". | exception | error | |
| Not a valid zip archive (no end-of-central-directory). | exception | error | |
| Corrupt zip: bad local file header. | exception | error | |
| Package manifest missing from the extension. | exception | error | |
| Expected a Marketplace id like "publisher.extension". | exception | error | |
| This runtime does not support microphone recording. | exception | error | |
| Microphone access denied. | exception | error | |
| resume returned no session id | exception | error | |
| Hermes gateway unavailable | exception | error | |
| reference image too large | exception | error | |
| could not create canvas context | exception | error | |
| No active session for background restart | exception | error | |
| Background restart did not return a task id | exception | error | |
| Could not read ${label} | exception | error | |
| Could not attach ${label} | exception | error | |
| Speech-to-text is disabled in settings. | exception | error | |
| No active session to restore. | exception | error | |
| Could not find the message to restore. | exception | error | |
| Cannot restore an empty message. | exception | error | |
| integrity check failed for ${origin} | exception | error | desktop, plugins, integrity, security, hashing |
| unsupported import${unsupported.length > 1 ? 's' : ''}: ${un | exception | error | desktop, plugins, esm, imports, validation |
| ${origin} has no valid default HermesPlugin export | exception | error | desktop, plugins, exports, validation, esm |
| ${caller}: illegal path traversal in "${path}" | exception | error | desktop, plugins, security, path-traversal, rest |
| Hermes desktop bridge unavailable | exception | error | desktop, electron, bridge, plugins, environment |
| Session transcript exceeds the Desktop safe-load limit; use | exception | error | desktop, sessions, transcript, memory, limits |
| Could not fetch image: ${response.status} | exception | error | desktop, images, network, http, download |
| Hermes Desktop bridge is unavailable | exception | error | desktop, electron, bridge, filesystem, environment |
| Saving is not available | exception | error | desktop, electron, filesystem, version-skew, save |
| Rename is not available | exception | error | desktop, electron, filesystem, rename, capability |
| Delete is not available | exception | error | desktop, electron, filesystem, delete, capability |
| Hermes Desktop bridge is unavailable | exception | error | desktop, git, electron, bridge, environment |
| loadout truncated | exception | error | desktop, loadout, binary, codec, range-error |
| That doesn't look like a ${noun}. | exception | warning | desktop, loadout, validation, user-input, share-codes |
| ${Noun} is too short to be valid. | exception | warning | desktop, loadout, validation, share-codes, truncation |
| ${Noun} is version ${version}; this build reads version ${sp | exception | warning | desktop, loadout, versioning, share-codes, schema |
| ${Noun} looks corrupted (checksum mismatch). | exception | warning | desktop, loadout, checksum, corruption, share-codes |
| ${Noun} is malformed: ${err.message} | exception | warning | desktop, loadout, codec, schema, validation |
| Desktop preview browser bridge is unavailable | exception | error | desktop, electron, preview, bridge, capability |
| Remote HTML preview could not be loaded | exception | error | |
| Desktop preview buffer bridge is unavailable | exception | error | |
| Could not stage remote HTML preview | exception | error | |
| started.error || 'OAuth failed to start' | exception | error | |
| OAuth server did not provide an authorization URL | exception | error | |
| current.error || 'OAuth authorization failed' | exception | error | |
| Gateway returned no file data | exception | error | |
| Gateway not connected | exception | error | |
| AudioContext unavailable for client wake capture | exception | error | |
| getUserMedia unavailable for client wake capture | exception | error | |
| Hermes gateway unavailable | exception | error | |
| Hermes gateway unavailable | exception | error | |
| result.confirm_message?.trim() || translateNow('cron.modelIm | exception | error | |
| Could not export ${slug} | exception | error | |
| Could not rename ${slug} | exception | error | |
| generation produced no drafts | exception | error | |
| hatch produced no preview | exception | error | |
| adopt failed | exception | error | |
| Hermes gateway is not connected | exception | error | |
| Active Hermes profile changed while connecting | exception | error | |
| That project has no folder to move into | exception | error | desktop, sessions, projects, validation |
| Gateway restart failed. | exception | error | desktop, gateway, restart, process-exit |
| Hermes gateway unavailable | exception | error | desktop, wake-word, gateway, connection |
| "${result.extensionId}" does not contribute any color themes | exception | error | desktop, themes, vscode, marketplace |
| Expected a Marketplace id like "publisher.extension". | validation | error | desktop, themes, validation, marketplace |
| Marketplace install is only available in the desktop app. | exception | error | desktop, themes, preload-api, environment |
| "${theme.name}" collides with a built-in theme. | exception | error | desktop, themes, naming, validation |
| Theme is missing required colors. | exception | error | desktop, themes, validation, colors |
| Theme file is not a JSON object. | exception | error | desktop, themes, vscode, json-parse |
| Theme has no "colors" map — not a VS Code color theme. | exception | error | desktop, themes, vscode, conversion |
| This Desktop build cannot refresh OAuth WebSocket tickets. U | exception | error | desktop, oauth, websocket, version-skew, shared |
| Your remote gateway session has expired. Open Settings -> Ga | exception | error | oauth, websocket, auth-expiry, gateway, shared |
| Could not refresh the remote gateway WebSocket ticket. | exception | error | oauth, websocket, gateway, shared, retry |
| latitude and longitude must be numbers | validation | error | whatsapp, bridge, location, validation |
| latitude/longitude out of range | validation | error | whatsapp, bridge, location, validation, range |
| question is required | validation | error | whatsapp, bridge, poll, validation |
| at least two poll options are required | validation | error | whatsapp, bridge, poll, validation |
| billing.charge_status returned no response | exception | error | tui, billing, topup, gateway-rpc, version-skew |
| gateway not running | exception | error | tui, gateway, websocket, connection, startup-race |
| gateway not connected: ${method} | exception | error | tui, gateway, websocket, connection, retry |
| default export must be register(sdk) | exception | error | widgets, dynamic-import, es-modules, dashboard |
| ${res.status}: ${text} | http | error | http, rest, auth, dashboard |
| /api/auth/ws-ticket: HTTP ${res.status} | http | error | websocket, auth, ticket, dashboard |
| clipboard image is empty | validation | warning | clipboard, upload, image, browser |
| image too large (max ${mb} MB) | validation | warning | upload, image, size-limit, clipboard |
| text || HTTP ${res.status} | http | error | http, upload, image, dashboard |
| image upload did not return a path | exception | error | api-contract, upload, image, version-skew |
| Session token not available — page must be served by the Her | exception | critical | websocket, auth, spa, bootstrap |
| OAuth popup was blocked — allow popups for this dashboard an | exception | error | oauth, popup, browser, mcp |
| OAuth failed to start | exception | error | oauth, mcp, backend |
| OAuth server did not provide an authorization URL | exception | error | oauth, mcp, api-contract |
| OAuth authorization failed | exception | error | oauth, mcp, polling |
| OAuth authorization window was closed before completion | exception | warning | oauth, mcp, popup, user-action |
| Name required | validation | warning | validation, mcp, form |
| URL required | validation | warning | validation, mcp, http-transport, form |
| Bearer token required | validation | warning | validation, mcp, auth, form |
| Command required | validation | warning | validation, mcp, stdio-transport, form |
| Expected exported session JSON or JSONL | validation | error | import, json, sessions, validation |
| File is empty | validation | warning | import, file, sessions, validation |
| composer not found (${SELECTORS.composer}); is a chat view o | exception | error | perf, e2e, desktop, selectors |
| multitab setup failed (${ok}) — dev hooks missing? (needs a | exception | error | |
| profile-switch needs --profile <name> | validation | error | |
| profile "${profile}" not found in the rail | exception | error | |
| render-churn setup failed (${ok}) — needs a dev renderer wit | exception | error | |
| right-pane timed out waiting for ${label} | exception | error | |
| right-pane needs a dev renderer or a production build with V | exception | error | |
| right-pane found no horizontal terminal split separator. | exception | error | |
| session-load found no sidebar rows to click | exception | error | |
| session-switch needs --a <sessionId> --b <sessionId> | validation | error | |
| --historyTurns is only supported by the synthetic stream pat | validation | error | |
| expected ${expected} preloaded history messages, got ${mount | exception | error | |
| real stream never started (no LLM credit / backend?) | exception | error | |
| target exe not found: ${exe} | exception | error | |
| icon not found: ${icon} | exception | error | |
| [stage-native-deps] native binary platform mismatch (target= | exception | error | |
| [stage-native-deps] no prebuilt binary for ${platform}-${arc | exception | error | |
| electron-rebuild failed for ${platform}-${arch} (exit ${resu | exception | error | |
| [stage-native-deps] get-windows is ${srcVersion} but the sta | exception | error | |
| [stage-native-deps] get-windows is missing its macOS helper | exception | error | |
| [stage-native-deps] get-windows has no win32 prebuilt bindin | exception | error | |
| [stage-native-deps] get-windows binding ${dir}/node-get-wind | exception | critical | build, native-modules, desktop, cross-platform, node-abi |
| c.couldNotPreview(attachment.label) | exception | warning | desktop, preview, attachments, filesystem |
| Could not open preview target: ${item.target} | exception | warning | desktop, preview, artifacts, filesystem |
| Desktop bridge unavailable | exception | error | desktop, electron, ipc-bridge, preview |
| Could not write artifact file | exception | error | desktop, electron, ipc, temp-files, filesystem |
| Invalid PDF data URL | validation | warning | desktop, preview, pdf, data-url, validation |
| Invalid PDF data URL type | validation | warning | desktop, preview, pdf, data-url, mime-type |
| Invalid PDF data URL payload | validation | warning | desktop, preview, pdf, base64, validation |
| Invalid PDF file header | validation | warning | desktop, preview, pdf, magic-bytes, validation |
| ${res.message || 'Archive failed'} | exception | error | desktop, learning, skills, ipc, curator |
| r.couldNotPreview(path) | exception | warning | desktop, preview, file-browser, filesystem |
| Cannot edit non-file path: {path} | exception | error | acp, editor-integration, filesystem, validation, python |
| path required | validation | error | acp, editor-integration, validation, tool-schema, python |
| content required | validation | error | acp, editor-integration, validation, tool-schema, python |
| old_string and new_string required | validation | error | acp, editor-integration, validation, patch, python |
| Failed to read file: {path} | exception | error | acp, editor-integration, filesystem, patch, python |
| {error or 'Could not find match for old_string in {path}'} | exception | error | acp, editor-integration, patch, fuzzy-match, stale-context, python |
| patch content required | validation | error | acp, editor-integration, patch, validation, protocol, python |
| no file paths found in V4A patch | validation | error | acp, editor-integration, patch, diff-format, validation, python |
| No available openai-codex credential in credential pool | exception | error | credentials, codex, usage, auth |
| Provider '{_explicit}' is set in config.yaml but no API key | exception | critical | config, provider, api-key, initialization |
| No LLM provider configured. Run `hermes model` to select a p | exception | critical | config, provider, first-run, initialization |
| Failed to initialize OpenAI client: {e} | exception | critical | initialization, openai, httpx, config |
| Model {agent.model} has a context window of {_ctx:,} tokens, | validation | error | config, model, context-window, validation |
| switch_model: no base_url resolved for provider '{new_provid | validation | error | model-switch, provider, base-url, config |
| Anthropic Messages adapter requires a positive max_tokens va | validation | error | anthropic, max-tokens, validation, adapter |
| The 'anthropic' package is required for Azure Foundry Anthro | exception | error | anthropic, azure, entra-id, dependency |
| The 'anthropic' package is required for the Anthropic provid | exception | error | anthropic, dependency, provider, import |
| The 'anthropic' package is required for the Bedrock provider | exception | error | anthropic, bedrock, dependency, aws |
| anthropic.AnthropicBedrock not available. Upgrade with: pip | exception | error | anthropic, bedrock, version, dependency |
| Anthropic refresh response was missing access_token | exception | error | oauth, anthropic, auth, proxy |
| Anthropic token refresh failed | exception | error | oauth, anthropic, token-refresh, auth |
| The 'claude' CLI is not installed. Install it with: npm inst | exception | error | anthropic, oauth, cli, dependency |
| Codex auxiliary Responses stream exceeded {float(total_timeo | exception | error | timeout, codex, streaming, auxiliary |
| Codex auxiliary Responses stream did not return a final resp | exception | error | codex, streaming, auxiliary, responses-api |
| Malformed proxy environment variable {key}={value!r}. Fix or | exception | error | proxy, environment, validation, http |
| Malformed custom endpoint URL: {candidate!r}. Run `hermes se | exception | error | config, base-url, validation, http |
| Auxiliary {task or 'call'}: provider {resolved_provider} cou | exception | error | auxiliary, provider, recovery, credentials |
| Auxiliary {task or 'call'}: LLM returned None response | exception | error | auxiliary, validation, provider, response-shape |
| Auxiliary {task or 'call'}: LLM returned invalid response (t | exception | error | auxiliary, response-shape, custom-endpoint, compatibility |
| Auxiliary streamed call timed out after {self._total_ceiling | exception | error | auxiliary, streaming, timeout, budget |
| No LLM provider configured for task={task} provider={resolve | exception | error | vision, auxiliary, configuration, credentials |
| Provider '{_explicit}' is set in config.yaml but no API key | exception | error | auxiliary, credentials, configuration, env |
| The 'azure-identity' package is required for Azure AI Foundr | exception | error | azure, entra-id, import, dependencies |
| The 'azure-identity' package is required for Azure AI Foundr | exception | error | azure, entra-id, dependency-install, offline |
| token provider returned empty value | validation | error | azure, entra-id, authentication, token |
| no usable api_key / token provider | validation | error | azure, validation, authentication, programming-error |
| httpx is required for Entra ID bearer auth on Microsoft Foun | exception | error | azure, httpx, dependencies, import |
| The 'boto3' package is required for the AWS Bedrock provider | exception | error | bedrock, aws, dependencies, import |
| boto3 {boto3.__version__} does not support converse_stream ( | exception | error | bedrock, aws, version, dependencies |
| Provider has been unresponsive (no response received) for {_ | exception | error | streaming, circuit-breaker, timeout, provider |
| Non-streaming API call timed out before request dispatch (th | exception | error | non-streaming, timeout, stale, connection-pool |
| Non-streaming API call timed out after {int(time.time() - ca | exception | error | non-streaming, timeout, retry, stale |
| Provider returned an empty stream with no finish_reason (pos | exception | error | |
| Provider returned an empty stream with no events (possible u | exception | error | |
| Provider returned an empty stream with no stop_reason (possi | exception | error | |
| Stream ended with no stop_reason while a tool_use block was | exception | error | |
| Reserved Harmony tokens in a JSON object key cannot be neutr | validation | error | |
| Codex Responses input must be a list of input items. | validation | error | |
| Codex Responses input[{idx}] must be an object. | validation | error | |
| Codex Responses input[{idx}] function_call is missing call_i | validation | error | |
| Codex Responses input[{idx}] function_call is missing name. | validation | error | |
| Codex Responses input[{idx}] function_call_output is missing | validation | error | |
| Codex Responses input[{idx}] message items must have role='a | validation | error | |
| Codex Responses input[{idx}] message item must have content | validation | error | |
| Codex Responses input[{idx}] message content[{part_idx}] mus | validation | error | |
| Codex Responses input[{idx}] message content[{part_idx}] has | validation | error | |
| Codex Responses input[{idx}] message item must contain at le | validation | error | |
| Codex Responses input[{idx}].content[{part_idx}] must be an | validation | error | |
| Responses API returned no output items | exception | error | |
| Codex Responses stream did not emit a terminal response | exception | error | |
| Context compression LLM returned empty content (provider={pr | exception | error | llm, compression, proxy, empty-response |
| Auxiliary compression model {aux_model} has a context window | validation | error | config, compression, context-window, startup |
| path is outside the allowed workspace | exception | error | security, path-validation, references, workspace |
| path is a sensitive credential file and cannot be attached | exception | error | security, credentials, references, path-validation |
| path is a sensitive credential or internal Hermes path and c | exception | error | security, credentials, references, hermes-home |
| path could not be verified against the credential deny-list | exception | error | security, fail-closed, references, environment |
| ACP file-system paths must be absolute. | exception | error | acp, copilot, path-validation, protocol |
| Path '{resolved}' is outside the session cwd '{root}'. | exception | error | acp, copilot, security, workspace |
| Could not start Copilot ACP command '{self._acp_command}'. I | exception | error | copilot, acp, startup, environment |
| Copilot ACP process did not expose stdin/stdout pipes. | exception | error | copilot, acp, stdio, process |
| Copilot ACP {method} failed: {err.get('message') or err} | exception | error | copilot, acp, jsonrpc, protocol |
| Hermes ACP mode requires the NEW GitHub Copilot CLI (github. | exception | error | copilot, acp, deprecation, startup |
| Copilot ACP process exited early: {stderr_text} | exception | error | copilot, acp, crash, process |
| Copilot ACP did not return a sessionId. | exception | error | copilot, acp, session, protocol |
| Write denied: '{path}' requires interactive approval and can | exception | error | copilot, acp, security, write-protection |
| Gemini native client requires an API key, but none was provi | exception | error | gemini, api-key, config, authentication |
gemini_invalid_json Invalid JSON from Gemini native API: {exc} | exception | error | gemini, json, http, proxy |
gemini_stream_error Gemini streaming request failed: {exc} | exception | error | gemini, streaming, network, retry |
| Image at {url} exceeds {max_bytes // (1024 * 1024)}MB cap; r | exception | warning | image-gen, download, size-limit, caching |
| Image at {url} returned 0 bytes; refusing to cache. | exception | error | image-generation, network, cache, validation |
| bad memory node id: {node_id!r} | exception | error | memory, learning-graph, validation |
| memory index {global_index} out of range | exception | error | memory, learning-graph, stale-state |
| memory node id is stale — refresh the graph | exception | error | memory, learning-graph, stale-state |
| {path.name} not found | exception | error | memory, filesystem, profile |
| LSP server binary not found: {cmd[0]} ({e}) | exception | error | lsp, subprocess, environment, configuration |
| cannot send {method!r}: stdin closed | exception | error | lsp, lifecycle, subprocess |
| send failed for {method!r}: {e} | exception | error | lsp, subprocess, retry |
| client not running | exception | error | lsp, lifecycle, api-misuse |
| cannot read {abs_path}: {e} | exception | error | lsp, filesystem, validation |
| unexpected EOF while reading LSP headers (partial={e.partial | exception | error | lsp, protocol, subprocess, eof |
| LSP header block exceeded 8 KiB without terminator | exception | error | lsp, protocol, configuration |
| non-ASCII LSP header: {line!r} | exception | error | lsp, protocol, encoding |
| malformed LSP header line: {line!r} | exception | error | lsp, protocol, debugging |
| LSP message missing Content-Length: {headers!r} | exception | error | lsp, protocol, framing |
| non-integer Content-Length: {cl!r} | exception | error | lsp, protocol, framing |
| unreasonable Content-Length: {n} | exception | error | lsp, protocol, framing, sanity-check |
| truncated LSP body: expected {n} bytes, got {len(e.partial)} | exception | error | lsp, protocol, eof, subprocess |
| MoA aggregator cannot be another MoA preset | exception | error | |
| unknown one-shot template: {name} | exception | error | |
| run_oneshot requires a template or instructions/user_input | validation | error | |
| Pet generation needs an image backend that supports referenc | exception | error | |
| image backend '{sprite.name}' cannot use reference images; c | exception | error | |
| image generation produced no output | exception | error | |
| image generation produced no usable drafts | exception | error | |
| base image not found: {base} | exception | error | |
| hatch cancelled | exception | error | |
| atlas validation failed | exception | error | |
| missing required animation row(s): {', '.join(missing_requir | exception | error | |
| only {len(filled_states)}/{len(atlas.ROW_SPECS)} animation r | exception | error | |
| could not fetch petdex manifest: {exc} | exception | error | |
| petdex manifest had no 'pets' array | exception | error | |
| invalid pet slug | validation | error | |
| pet '{slug}' is not in the petdex manifest | exception | error | |
| refusing non-petdex spritesheet host for '{slug}' | exception | error | |
| install of '{slug}' did not produce a spritesheet | exception | error | |
| could not write spritesheet for '{slug}': {exc} | exception | error | |
| register of generated pet '{slug}' did not produce a sprites | exception | error | |
| pet '{slug}' is not installed | exception | error | |
| download failed for {url}: {exc} | exception | error | |
| Plugin {policy.plugin_id!r} cannot override the provider (se | validation | error | |
| Plugin {policy.plugin_id!r} provider override {requested_pro | validation | error | |
| Plugin {policy.plugin_id!r} cannot override the model (set p | validation | error | |
| Plugin {policy.plugin_id!r} model override {requested_model! | validation | error | |
| Plugin {policy.plugin_id!r} cannot run completions against a | validation | error | |
| Plugin {policy.plugin_id!r} cannot override the auth profile | validation | error | |
| Plugin {plugin_id!r} cannot route through the built-in auxil | validation | error | |
| Plugin {plugin_id!r} cannot route through auxiliary task {ta | validation | error | |
| text input block requires 'text' string | validation | error | |
| image input block requires 'data' bytes or 'url' | validation | error | |
| Unknown input block type: {kind!r} | validation | error | |
| image input 'data' must be bytes | validation | error | |
| Plugin LLM structured output did not match schema: {exc.mess | validation | error | |
| complete_structured requires non-empty instructions | validation | error | |
| complete_structured requires at least one input block | validation | error | |
| acomplete_structured requires non-empty instructions | validation | error | |
| acomplete_structured requires at least one input block | validation | error | |
| iron-proxy does not ship native Windows binaries as of v{_IR | exception | error | |
| Unsupported platform for iron-proxy auto-install: {system} { | exception | error | platform, install, iron-proxy |
| Checksum mismatch for {asset_name}: expected {expected}, got | exception | critical | security, checksum, download, iron-proxy |
| Failed to download {url}: {exc} | exception | error | network, download, install, iron-proxy |
| iron-proxy checksums.txt failed GPG signature verification — | exception | critical | security, gpg, tampering, install, iron-proxy |
| No checksum entry for {asset_name} in {checksum_file.name} | exception | error | release-assets, install, iron-proxy |
| Could not find {binary_name} inside downloaded archive (memb | exception | error | release-assets, tar, install, iron-proxy |
| openssl not found on PATH. Install OpenSSL (apt: `openssl`, | exception | error | dependencies, certificates, openssl, iron-proxy |
| iron-proxy is not running — nothing to reload. Run `hermes | exception | warning | lifecycle, daemon, iron-proxy |
| The generated proxy.yaml has no management listener (written | exception | warning | migration, config, daemon, iron-proxy |
| management.token is missing — re-run `hermes egress setup`, | exception | warning | config, auth, daemon, iron-proxy |
| management API returned unexpected status {resp.status} | exception | error | api, daemon, version-skew, iron-proxy |
| iron-proxy rejected the new config (validation failed; the r | exception | error | config, validation, daemon, iron-proxy |
| management API rejected our key (401). The running daemon w | exception | warning | auth, daemon, config, iron-proxy |
| management reload failed (HTTP {exc.code}): {body} | exception | error | api, daemon, http, iron-proxy |
| could not reach the management API at {host}:{port} ({exc}). | exception | error | network, daemon, migration, iron-proxy |
| Refusing to start: could not pre-create audit log {audit_pat | exception | error | filesystem, permissions, security, iron-proxy |
| PyYAML is required to write the iron-proxy config but is not | exception | error | dependencies, python, config, iron-proxy |
| iron-proxy binary not available — run `hermes egress install | exception | error | install, lifecycle, iron-proxy |
| iron-proxy config not found at {cfg}. Run `hermes egress set | exception | error | config, lifecycle, setup, iron-proxy |
| Refusing to write iron-proxy log {log_path}: {exc}. Remove | exception | error | security, filesystem, permissions, symlink, iron-proxy |
| iron-proxy log {log_path} has unexpected owner uid={st.st_ui | exception | error | security, filesystem, permissions, egress-proxy |
| failed to spawn iron-proxy: {exc} | exception | error | subprocess, egress-proxy, installation |
| iron-proxy exited immediately (code {proc.returncode}). Last | exception | error | egress-proxy, startup, configuration |
| iron-proxy did not bind {probe_host}:{tunnel_port} within {_ | exception | error | egress-proxy, network, startup, timeout |
| Another iron-proxy start appears to be in progress (pidfile | exception | error | egress-proxy, concurrency, pidfile |
| Refusing to write pidfile {pidfile}: {exc}. Remove that pat | exception | error | security, filesystem, egress-proxy, pidfile |
| pidfile {pidfile} has unexpected owner uid={st.st_uid} | exception | error | filesystem, permissions, egress-proxy, pidfile, nfs |
| Bitwarden refresh did not return secrets for {missing}. Eit | exception | error | bitwarden, secrets, egress-proxy, configuration |
| credential_source=bitwarden but the access-token env or proj | exception | error | bitwarden, secrets, configuration, egress-proxy |
| Failed to download {url}: {exc} | exception | error | |
| No checksum entry for {asset_name} in {checksum_file.name} | exception | error | |
| Could not find {binary_name} inside downloaded archive (memb | exception | error | |
| Refusing to extract unsafe archive member {member!r}: it esc | exception | error | |
| Bitwarden access token is empty | exception | error | |
| Bitwarden project_id is empty | exception | error | |
| bws binary not available — auto-install failed and `bws` is | exception | error | |
| bws timed out after {_BWS_RUN_TIMEOUT}s fetching secrets | exception | error | |
| failed to invoke bws: {exc} | exception | error | |
| bws exited {proc.returncode}: {err[:200]} | exception | error | |
| bws returned non-JSON output: {exc} | exception | error | |
| bws returned unexpected shape: {type(payload).__name__} | exception | error | |
| op read timed out after {_OP_RUN_TIMEOUT}s for {reference!r} | exception | error | |
| failed to invoke op: {exc} | exception | error | |
| op read failed for {reference!r}: {err} | exception | error | |
| op read returned an empty value for {reference!r} | exception | error | |
| op CLI not found. Install the 1Password CLI (https://develo | exception | error | |
| Bundle name {name!r} normalizes to an empty slug | exception | error | |
| Bundle name is required | exception | error | |
| Bundle must reference at least one skill | exception | error | |
| Bundle already exists at {path} | exception | error | skills, bundles, filesystem, file-exists |
| No bundle at {path} | exception | error | skills, bundles, filesystem, not-found |
| Malformed subagent handle. | exception | error | subagents, delegation, serialization, dataclass |
| No active Hermes parent session is available. | exception | error | subagents, delegation, session, lifecycle |
| parent_session_id does not match the active session. | exception | error | subagents, delegation, session, validation |
| Duplicate correlation_id for this parent session. | exception | error | subagents, delegation, idempotency, registry |
| Hermes failed to assign a child identity. | exception | error | subagents, delegation, internal, invariant |
| goal must be a non-empty string of at most 16000 characters. | exception | error | subagents, delegation, validation, input |
| context must be a string of at most 32000 characters. | exception | error | subagents, delegation, validation, input |
| role must be 'leaf' or 'orchestrator'. | exception | error | subagents, delegation, validation, role |
| Per-launch timeout is not supported; configure delegation ti | exception | error | subagents, delegation, validation, timeout |
| working_directory is not supported because Hermes delegates | exception | error | subagents, delegation, validation, working-directory |
| Per-tool blocking is not supported; use allowed_toolsets. He | exception | error | subagents, delegation, validation, security |
| metadata must be JSON-serializable. | exception | error | subagents, delegation, validation, json, metadata |
| metadata exceeds 8192 bytes. | exception | error | subagents, delegation, validation, metadata, size-limit |
| Unknown toolsets: {', '.join(sorted(unknown))}. | exception | error | subagents, delegation, toolsets, validation |
| Requested toolsets would broaden parent permissions. | exception | error | subagents, delegation, security, privilege-escalation, toolsets |
| session {session_id} not found when storing title | exception | error | sessions, title-generation, sqlite, session-store |
| Hermes tool execution callback invoked more than once | exception | error | tools, middleware, execution, invariant |
| tool args must be a mapping, got {type(args).__name__} | exception | error | tools, guardrails, validation, json |
| Trace upload blocked: secret redaction failed, so the transc | exception | error | security, redaction, trace-upload, fail-closed |
| register_provider() expects a TranscriptionProvider instance | exception | error | typing, plugin, stt, registry, validation |
| Transcription provider .name must be a non-empty string | exception | error | validation, plugin, stt, registry |
| already initialized | exception | error | jsonrpc, codex, handshake, state-machine |
| codex app-server method {method!r} timed out after {timeout} | exception | error | jsonrpc, codex, timeout, subprocess |
| codex app-server error {code}: {message} | exception | error | jsonrpc, codex, protocol-error |
| codex app-server client is closed | exception | error | jsonrpc, codex, lifecycle, use-after-close |
| codex app-server stdin not available | exception | error | subprocess, codex, jsonrpc, spawn-config |
| codex app-server stdin closed unexpectedly: {exc} | exception | error | subprocess, codex, broken-pipe, crash |
-32603 codex thread/start returned no thread id (payload keys: {sorted(result.keys())}) | exception | error | codex, jsonrpc, version-skew, schema |
| hermes-tools MCP server requires the 'mcp' package: {exc} | exception | error | mcp, dependency, import, optional-extra |
| Video at {url} exceeds {max_bytes // (1024 * 1024)}MB cap; r | validation | warning | video, download, size-limit, cache |
| Video at {url} was empty (0 bytes). | validation | warning | video, download, empty-response, provider |
| video job {getattr(video, 'id', '?')} did not reach a termin | exception | warning | video, polling, timeout, provider |
| unsafe token directory | exception | critical | security, electron, auth-token, filesystem, symlink |
| Unknown distribution: {distribution}. Available: {list(list_ | validation | error | batch, validation, config, cli |
| Dataset file not found: {self.dataset_file} | exception | error | batch, file-not-found, path, cwd |
| No valid entries found in dataset file: {self.dataset_file} | validation | error | batch, dataset, jsonl, schema |
| Image file not found: {image_arg} | validation | error | cli, path, image, attachment |
| Not a supported image file: {explicit_path} | validation | error | cli, image, vision, file-format |
| Unknown skill(s): {missing_display} | validation | error | skills, cli, kanban, configuration |
| Termux:API command package detected, but the Android app is | exception | error | voice, termux, android, dependencies |
| Voice mode requires either Termux:API microphone access or P | exception | error | voice, termux, audio, dependencies |
| Voice mode requires sounddevice and numpy.
Install with: {sy | exception | error | voice, audio, python, dependencies |
| Voice mode requires an STT provider for transcription.
Optio | exception | error | voice, stt, configuration, api-key |
| a time is required | validation | warning | cron, blueprint, validation, scheduling |
| invalid time {time_val!r} — use HH:MM (24h) | validation | warning | cron, blueprint, validation, time-format |
| unknown recurrence {preset!r} — one of {', '.join(WEEKDAY_PR | validation | warning | cron, blueprint, validation, scheduling |
| unknown day {day!r} | validation | warning | cron, blueprint, validation, scheduling |
| invalid interval {iv!r} — minutes as a positive integer | validation | warning | cron, blueprint, validation, interval |
| unknown slot{'s' if len(unknown) > 1 else ''}: {', '.join(un | validation | warning | cron, blueprint, validation, typo |
| missing required value: {s.name} ({s.label}) | validation | warning | cron, blueprint, validation, required-field |
| {s.name}={raw!r} not allowed — one of {', '.join(map(str, s. | validation | warning | cron, blueprint, validation, enum |
| blueprint prompt missing value for {e} | validation | error | cron, blueprint, template, developer-error |
| Invalid cron job id for output path: {job_id!r} | validation | error | cron, security, path-traversal, validation |
| Invalid duration: '{s}'. Use format like '30m', '2h', or '1d | validation | warning | cron, duration, validation, parsing |
| Cron expressions require 'croniter' package. Install with: p | exception | error | cron, dependencies, croniter, scheduling |
| Invalid cron expression '{schedule}': {e} | validation | warning | cron, cron-expression, validation, parsing |
| Invalid timestamp '{schedule}': {e} | validation | error | |
| Invalid schedule '{original}'. Use:
- Duration: '30m', '2h | validation | error | |
| Failed to read cron database: {e} | exception | error | |
| Cron database corrupted and unrepairable: {e} | exception | error | |
| Cron database corrupted: expected {'jobs': [...]}, got {type | exception | error | |
| Cron workdir must be an absolute path (got {raw!r}). Cron jo | validation | error | |
| Cron workdir does not exist: {resolved} | validation | error | |
| Cron workdir is not a directory: {resolved} | validation | error | |
| monitor_script and monitor_url are mutually exclusive — a jo | validation | error | |
| monitor_script/monitor_url cannot be combined with no_agent= | validation | error | |
| no_agent=True requires a script — with no agent and no scrip | validation | error | |
| Requested one-shot time {run_at} is more than {ONESHOT_GRACE | validation | error | |
| Job name '{ref}' is ambiguous — matches {len(matches)} jobs: | validation | error | |
| Cron job field(s) cannot be updated: {', '.join(sorted(bad_f | validation | error | |
| Requested one-shot time {run_at} is in the past (grace windo | validation | error | |
| Cannot resume: one-shot time {run_at} is in the past (grace | validation | error | |
| Blocked: cron job contains a gateway lifecycle command or pe | exception | error | |
| job_id must be non-empty | validation | error | |
| key must be non-empty | validation | error | |
| key too long (max {MAX_KEY_CHARS} characters) | validation | error | |
| value too large (max {MAX_VALUE_BYTES} bytes per key) | validation | error | |
| notepad full: job '{job_id}' would exceed {MAX_JOB_TOTAL_BYT | validation | error | |
| {prompt injection scan error} | exception | error | |
| Cron job '{job_id}' blocked for safety: {err} | exception | error | |
| Timed out waiting for the TERMINAL_CWD {'write' if _holds_cw | exception | error | |
| Cron job '{job_name}' has no model configured (job.model={jo | exception | error | |
| {formatted runtime provider/auth error} | exception | error | |
| {_drift_marker} Skipped to prevent unintended spend: global | exception | error | |
| Cron job '{job_name}' idle for {int(_secs_ago)}s (limit {int | exception | error | |
| agent.run_conversation returned {type(result).__name__} inst | exception | error | |
| agent reported failure | exception | error | |
| Cron job '{job_id}' was saved, but its first scheduler regis | exception | error | |
| {format_runtime_provider_error(exc)} | exception | error | |
invalid_image_url invalid_image_url:Image parts must include a non-empty image URL. | validation | error | |
unsupported_content_type unsupported_content_type:Only image data URLs are supported. Non-image data payl | validation | error | |
invalid_content_part invalid_content_part:Image detail must be a non-empty string when provided. | validation | error | |
| confirmed model lock runtime mismatch: expected provider={ex | exception | error | |
| No adapter configured for {target.platform.value} | exception | error | |
| No chat ID for {target.platform.value} delivery | exception | error | |
| Telegram adapter cannot create named private DM topics | exception | error | |
| Failed to create Telegram private DM topic '{target_thread_i | exception | error | |
| Telegram private DM topic delivery requires telegram_reply_t | exception | error | |
| Telegram adapter cannot refresh named private DM topics | exception | error | |
| Failed to refresh Telegram private DM topic '{named_telegram | exception | error | |
| {target.platform.value} delivery failed | exception | error | |
| no results for label '{label}' under {root} | console | error | |
| ABORT (harness config error, not a result): {msg} | console | error | |
| OPENROUTER_API_KEY not in environment. Run: set -a; source ~ | console | error | |
| resolve install script failed: {e:#} | exception | error | |
| install.ps1 -Manifest failed: exit {:?}
{} | exception | error | |
| install.ps1 -Manifest produced no parseable JSON payload
{} | exception | error | |
| bootstrap cancelled by user | exception | error | |
| cancelled by user | exception | error | |
| install.ps1 -Stage {} produced no JSON result frame (exit={: | exception | error | |
| exit code {:?} | exception | error | |
| write bootstrap marker failed: {err:#} | exception | error | filesystem, bootstrap-installer, windows, marker |
| install script invocation failed: {e:#} | exception | error | powershell, windows, bootstrap-installer, child-process |
| install script pin commit `{other}` is not a valid git SHA | exception | error | git, pinning, bootstrap-installer, build-config |
| no install-script pin supplied — installer cannot resolve a | exception | error | build-config, pinning, bootstrap-installer, git |
| Failed to download {}: HTTP {} from {} | exception | error | network, http, bootstrap-installer, github |
| Another Hermes update is already running (PID {}, started {} | exception | warning | concurrency, lock, update, bootstrap-installer |
| Could not find the hermes CLI under {}. Is Hermes installed? | exception | error | filesystem, update, venv, bootstrap-installer |
| Hermes is still running. Close all Hermes windows and try th | exception | error | update, process-lifecycle, bootstrap-installer |
| hermes update failed (exit {:?}). See {} for details. | exception | error | update, logging, child-process, bootstrap-installer |
| Rebuilding the desktop app failed (exit {:?}). The update wa | exception | error | build, desktop, update, bootstrap-installer |
| spawning {} {:?}: {e} | exception | error | child-process, spawn, update, bootstrap-installer |
| waiting for child: {e} | exception | error | child-process, update, os-signal, bootstrap-installer |
| refusing to install update into non-app path: {} | exception | error | macos, validation, update, bootstrap-installer |
| desktop rebuild succeeded but no Hermes.app was found under | exception | error | macos, build, update, filesystem, bootstrap-installer |
| running ditto: {e} | exception | error | macos, child-process, update, bootstrap-installer |
| ditto failed while copying updated app into {} | exception | error | macos, filesystem, update, bootstrap-installer |
| could not move existing app aside at {} (leaving it in place | exception | error | macos, filesystem, atomic-swap, update, bootstrap-installer |
| installing updated app at {}: {err} | exception | error | macos, filesystem, atomic-swap, update, bootstrap-installer |
| launching {}: {e} | exception | warning | macos, launch, gatekeeper, update, bootstrap-installer |