| model_preset must be a non-empty string | validation | error | |
| model_preset {name!r} not found. Available: {', '.join(prese | validation | error | |
| model must be a non-empty string | validation | error | |
| context_window_tokens must be an integer | validation | error | |
| model and model_preset are mutually exclusive | validation | error | |
| unknown Agent Plugin '{name}' | validation | error | |
| channel 'system' is reserved for internal messages | validation | error | |
| required session is not active | exception | error | |
| exec session manager is closed | exception | error | |
| maximum exec sessions reached ({self.max_sessions}) | exception | error | |
| Unknown path | validation | error | |
| Unknown content | validation | error | |
| Unknown old_text | validation | error | |
| Unknown new_text | validation | error | |
| reference_images must be inside the workspace or nanobot med | exception | error | |
| reference image not found: {value} | exception | error | |
| reference image is not a file: {value} | exception | error | |
| unsupported reference image: {value} | exception | error | |
| MCP authorization was cancelled | exception | error | |
| MCP server requires browser authorization | exception | error | |
| scratchpad is full (max {max_keys} keys) | validation | error | |
| Unknown sandbox backend {sandbox!r}. Available: {list(_BACKE | validation | error | |
| session @{target_name} was not found | exception | error | |
| source session was not found | exception | error | |
| session message rate limit reached ({self._max_messages_per_ | exception | error | |
| expect_reply=true requires reply_timeout_seconds between {MI | exception | error | |
| timeRange must be OneDay, OneWeek, OneMonth, OneYear, or YYY | validation | error | |
| authLevel must be 0 or 1 | validation | error | |
| {field} must be an object | validation | error | |
| {field} must be a string | validation | error | |
| Only a single user message is supported | validation | error | |
| Remote image URLs are not supported. Use base64 data URLs or | validation | error | |
| Invalid content format | validation | error | |
| CLI app '{name}' not found | error_code | error | |
| unsupported pip install command | exception | error | |
| pip is not available and uv is not installed | exception | error | |
| npm is not installed | exception | error | |
| registry entry has no npm_package | exception | error | |
| no {key} is defined for {app['name']} | exception | error | |
| script-style install commands are disabled in this MVP | exception | error | |
| invalid command: {exc} | exception | error | |
| unsupported {expected} command | exception | error | |
| this CLI app uses an unsupported install strategy | exception | error | |
| {note} | exception | error | |
| install failed | exception | error | |
| CLI app is not installed | exception | error | |
| update failed | exception | error | |
| uninstall failed | exception | error | |
| {entry or name} is not available on PATH | exception | error | |
| working_dir is outside the configured workspace | exception | error | |
| CLI app '{name}' is not installed | exception | error | |
missing_audio missing_audio | error_code | error | |
disabled disabled | error_code | error | |
not_configured not_configured | error_code | error | |
duration duration | error_code | error | |
mime mime | error_code | error | |
size size | error_code | error | |
decode decode | error_code | error | |
empty empty | error_code | error | |
| ChannelPlugin.management.default_config for '{plugin.name}' | validation | error | |
| {plugin.name} does not support multiple instances | validation | error | |
| ChannelPlugin.management.instance_specs for '{plugin.name}' | validation | error | |
| ChannelPlugin.management.instance_specs for '{plugin.name}' | validation | error | |
| ChannelPlugin.management.instance_specs for '{plugin.name}' | validation | error | |
| ChannelPlugin.management.instance_specs for '{plugin.name}' | validation | error | |
| ChannelPlugin.management.instance_specs for '{plugin.name}' | validation | error | |
| ChannelPlugin.management.update_instance_config for '{plugin | validation | error | |
| ChannelPlugin.management.feature_instances for '{plugin.name | validation | error | |
| ChannelPlugin.management.feature_instances for '{plugin.name | validation | error | |
| ChannelPlugin.management.feature_instances for '{plugin.name | validation | error | |
| ChannelPlugin.name must not be empty | validation | error | |
| ChannelPlugin.management for '{plugin.name}' returned an emp | validation | error | |
| ChannelPlugin.management runtime name '{runtime_name}' must | validation | error | |
| DingTalk access token unavailable | exception | error | |
| DingTalk text message was not delivered | exception | error | |
| DingTalk attachment fallback was not delivered | exception | error | |
| Discord client is not ready | exception | error | |
| missing Feishu connect session | http | error | |
| unsupported Feishu connect action: {action} | http | error | |
| Unable to start Feishu/Lark connection: {exc} | http | error | |
| {exc} | http | error | |
| instance id must match [A-Za-z0-9_-]+ | validation | error | |
| Feishu instance at index {index} must be an object | validation | error | |
| Invalid Feishu instance at index {index}: {exc} | validation | error | |
| duplicate Feishu instance id '{instance_id}' | validation | error | |
| Feishu / Lark registration does not support client_secret au | exception | error | |
| Feishu / Lark registration did not return a device_code | exception | error | |
| Feishu / Lark registration did not return a login URL | exception | error | |
| Feishu {m_type} message was not delivered | exception | error | |
| Feishu WebSocket runner did not start | exception | error | |
| Matrix dependencies not installed. Run: nanobot plugins enab | exception | error | |
| Matrix client is not started | exception | error | |
| Matrix client not initialized | exception | error | |
| Matrix message was not delivered: {response} | exception | error | |
| Mattermost client is not started | exception | error | |
| Mochat HTTP client not initialized | exception | error | |
| Mochat HTTP {response.status_code}: {response.text[:200]} | exception | error | |
| Mochat API error: {msg} (code={parsed_dict['code']}) | exception | error | |
| MSTeams HTTP client not initialized | exception | error | |
| MSTeams conversation ref not found for chat_id={msg.chat_id} | exception | error | |
| MSTeams conversation ref has untrusted service_url for chat_ | exception | error | |
| PyJWT not installed. Run: nanobot plugins enable msteams | exception | error | |
| missing bearer token | validation | error | |
| empty bearer token | validation | error | |
| missing token kid | validation | error | |
| signing key not found for kid={kid} | validation | error | |
| serviceUrl claim mismatch | validation | error | |
| Bot Framework OpenID config missing jwks_uri | exception | error | |
| napcat: not connected | exception | error | |
| napcat: action {action} failed status={status!r} retcode={re | exception | error | |
| channel plugin name must start with a letter and contain onl | validation | error | |
| channel plugin setup must be a ChannelSetupSpec or None | validation | error | |
| channel plugin management must be a ChannelManagementSpec | validation | error | |
| channel plugin dependencies must be a tuple of requirements | validation | error | |
| channel plugin dependency is not a valid requirement: {depen | validation | error | |
| channel plugin webui entry must stay inside its package | validation | error | |
| Channel plugin '{self.name}' runtime '{self.runtime}' does n | exception | error | |
| Channel plugin '{self.name}' runtime declares name '{channel | exception | error | |
| Channel plugin '{self.name}' does not provide a connector | exception | error | |
| Channel plugin '{self.name}' connector '{self.connector}' is | exception | error | |
| Channel plugin '{self.name}' connector '{self.connector}' do | exception | error | |
| channel plugin {label} must use 'module:attribute' syntax | validation | error | |
| channel plugin {label} module must be an absolute import pat | validation | error | |
| channel plugin {label} attribute must be a Python identifier | validation | error | |
| {module_name}.PLUGIN must be a ChannelPlugin | validation | error | |
| {module_name}.PLUGIN declares name '{plugin.name}', expected | validation | error | |
| {module_name}.PLUGIN {label} must stay inside {package_name} | validation | error | |
| {module_name}.PLUGIN {label} module does not exist inside it | validation | error | |
| {module_name}.PLUGIN webui entry does not exist: {plugin.web | validation | error | |
| QQ client not initialized | exception | error | |
| Unknown channel: {name} | exception | error | |
| group_message_buffer_size must be > 0 | validation | error | |
| signal-cli daemon check returned status {response.status_cod | exception | error | |
| signal-cli daemon not responding: {e} | exception | error | |
| Signal SSE stream ended unexpectedly | exception | error | |
| signal-cli send failed: {response['error']} | exception | error | |
| SSE connection failed with status {response.status_code} | exception | error | |
| Signal SSE stream closed by remote endpoint | exception | error | |
| Not connected to signal-cli daemon | exception | error | |
| Slack Socket Mode WebSocket connect timed out | exception | error | |
| Slack target channel name is empty | validation | error | |
| Slack channel '{name}' was not found. Use a joined channel n | validation | error | |
| Slack target user handle is empty | validation | error | |
| Slack user '{handle}' was not found. Use '@name' or a concre | validation | error | |
| Slack DM target for user '{user_id}' could not be opened. | validation | error | |
| webhook_path must start with "/" | validation | error | |
| webhook_url is required when Telegram mode is webhook | validation | error | |
| webhook_url must be a public HTTPS URL | validation | error | |
| webhook_secret_token is required when Telegram mode is webho | validation | error | |
| webhook_secret_token must be 1-256 characters using only A-Z | validation | error | |
| Telegram bot token was rejected by the server | exception | error | |
| Telegram application is restarting; message not delivered | exception | error | |
| unsafe media URL: {error} | validation | error | |
| {error} | validation | error | |
| Could not resolve {host} | exception | error | |
| invalid trusted proxy CIDR: {value!r} | validation | error | |
| universal trusted proxy CIDRs are not allowed | validation | error | |
| trusted proxy CIDRs must not cover all IPv4-mapped addresses | validation | error | |
| assertion_header must be a valid HTTP header name | validation | error | |
| assertion_header must identify a proxy-generated authenticat | validation | error | |
| unix_socket_path must not contain NUL bytes | validation | error | |
| unix_socket_path must be an absolute path | validation | error | |
| path must start with "/" | validation | error | |
| token_issue_path must start with "/" | validation | error | |
| public_ws_url must be an absolute ws:// or wss:// URL withou | validation | error | |
| NANOBOT_TUI_BIN does not exist: {executable} | exception | error | |
| the native TUI is not available on Windows ARM64 because Bun | exception | error | |
| this source checkout requires Bun to run its matching TUI; i | exception | error | |
| no native TUI archive is published for nanobot {__version__} | exception | error | |
| could not install TUI dependencies: {exc} | exception | error | |
| could not install TUI dependencies{suffix} | exception | error | |
| downloaded TUI archive failed checksum verification | exception | error | |
| TUI release manifest is not valid UTF-8 | exception | error | |
| TUI release manifest is malformed | exception | error | |
| TUI release manifest is incomplete | exception | error | |
| TUI release archive contains invalid entries | exception | error | |
| TUI release archive is incomplete | exception | error | |
| TUI release file has an invalid size: {entry.filename} | exception | error | |
| downloaded TUI archive is not a valid ZIP file | exception | error | |
| TUI release file failed verification: {name} | exception | error | |
| the matching gateway instance is running on a different port | exception | error | |
| the configured gateway port belongs to a different nanobot i | exception | error | |
| could not start the local gateway ({result.message}); logs: | exception | error | |
| local gateway did not become ready; logs: {result.status.log | exception | error | |
| the native TUI can open only WebSocket sessions; use --class | exception | error | |
| Environment-based configuration could not be parsed. Check t | exception | error | |
| Environment-based configuration is invalid. | exception | error | |
| JSON syntax error at line {exc.lineno}, column {exc.colno}: | exception | error | |
| The file is not valid UTF-8. | exception | error | |
| Unable to read the file: {_sentence(detail)} | exception | error | |
| The top level of config.json must be a JSON object. | exception | error | |
| Found {len(issues)} invalid setting(s). | exception | error | |
| Found {len(missing)} missing environment variable reference( | exception | error | |
| unknown timezone {value!r} | validation | error | |
| Invalid thinking_style {v!r}. Must be one of: {', '.join(rep | validation | error | |
| providers.{key} conflicts with built-in provider {spec.name! | validation | error | |
| providers.<name>.api_type is only supported for providers.op | validation | error | |
| host is 0.0.0.0 (all interfaces) but api_key is not set - se | validation | error | |
| model_preset name 'default' is reserved for agents.defaults | validation | error | |
| model_preset {name!r} not found in model_presets | validation | error | |
| Provider '{provider_name}' only supports transcription. | exception | error | |
| providers.{provider_name}.proxy is only supported for OpenAI | exception | error | |
| Azure OpenAI requires api_base in config. | exception | error | |
| Provider '{provider_name}' requires api_base in config. | exception | error | |
| No API key configured for provider '{provider_name}'. | exception | error | |
| validated Azure provider setup is missing api_base | exception | error | |
| GitHub device code expired. Please run login again. | exception | error | |
| GitHub device flow was denied. | exception | error | |
| {desc} | exception | error | |
| GitHub device flow timed out. | exception | error | |
| GitHub Copilot is not logged in. Run: nanobot provider login | exception | error | |
| GitHub Copilot token exchange returned no token. | exception | error | |
| unsupported reference image: {p} | exception | error | |
| generated image payload was not valid base64 | exception | error | |
| generated image payload was not a supported image | exception | error | |
| blocked unsafe generated image URL: {error} | exception | error | |
| generated image URL redirected without a location | exception | error | |
| generated image exceeded the 32 MiB download limit | exception | error | |
| failed to download generated image (HTTP {response.status_co | exception | error | |
| generated image URL exceeded the redirect limit | exception | error | |
| blocked unsafe generated image URL: {exc} | exception | error | |
| failed to download generated image: {exc} | exception | error | |
| generated image URL did not return a supported image | exception | error | |
| {cls.__name__} must set provider_name | exception | error | |
| {label} returned no images: {provider_error} | exception | error | |
| {label} returned no images for this request | exception | error | |
| {missing_key_message} | exception | error | |
| OpenRouter image generation failed: {detail} | exception | error | |
| AIHubMix image generation timed out | exception | error | |
| AIHubMix image generation request failed: {exc} | exception | error | |
| AIHubMix image generation failed: {detail} | exception | error | |
| Ollama image generation does not support reference images | exception | error | |
| Ollama image generation failed (HTTP {response.status_code}) | exception | error | |
| Gemini Imagen generation failed (HTTP {response.status_code} | exception | error | |
| Gemini image generation failed (HTTP {response.status_code}) | exception | error | |
| MiniMax image generation timed out | exception | error | |
| MiniMax image generation request failed: {exc} | exception | error | |
| MiniMax image generation failed: {detail} | exception | error | |
| OpenAI model '{clean_model}' does not support reference imag | exception | error | |
| OpenAI image generation failed (HTTP {response.status_code}) | exception | error | |
| Custom image generation failed (HTTP {response.status_code}) | exception | error | |
| Codex image generation failed (HTTP {response.status_code}): | exception | error | |
| StepFun image generation failed: {detail} | exception | error | |
| Zhipu image generation does not support reference images | exception | error | |
| Zhipu image generation timed out | exception | error | |
| Zhipu image generation request failed: {exc} | exception | error | |
| Zhipu image generation failed: {detail} | exception | error | |
| ModelScope image generation request timed out | exception | error | |
| ModelScope image generation request failed: {exc} | exception | error | |
| ModelScope image generation failed: {detail} | exception | error | |
| ModelScope did not return a task_id: {response.text[:500]} | exception | error | |
| ModelScope task polling failed: {detail} | exception | error | |
| ModelScope image generation task failed: {data} | exception | error | |
| ModelScope image generation timed out after {_MODELSCOPE_POL | exception | error | |
| The callback URL does not belong to this sign-in flow. Copy | validation | error | |
| OpenAI Codex sign-in expired. Start a new sign-in flow. | exception | error | |
| OpenAI Codex sign-in was cancelled. | exception | error | |
| Paste the full callback URL from your browser. | validation | error | |
| The callback URL is invalid. Copy the full URL from your bro | validation | error | |
| Paste the full callback URL from your browser ({OPENAI_CODEX | validation | error | |
| The callback URL is missing OAuth state. Copy the entire bro | validation | error | |
| The callback URL has no authorization result. Finish signing | validation | error | |
| Response failed: {str(detail)[:500]} | exception | error | |
| xAI model catalog returned invalid JSON. | exception | error | |