{"repo":"NousResearch/hermes-agent","public_id":"15972","display_label":"Dashboard Chat tab requires --tui flag, undocumented","summary":"These items address missing or unclear documentation about the --tui flag being required to access the Chat tab in the dashboard. Includes a batch of low-risk contributor PRs spanning docs and community topics alongside this specific gap.","subsystem":"docs","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":27247,"merged_at":"2026-05-17T03:32:44+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-05-17T03:32:44+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":15972,"pr_number":27247,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-05-17T03:32:44+00:00"}],"members":[{"kind":"issue","number":15972,"title":"[Docs] hermes dashboard --tui required for Chat tab — not documented【Dashboard chat tab not visible】","url":null,"state":"closed"},{"kind":"pr","number":26314,"title":"docs(dashboard): clarify Chat tab --tui requirement","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#27247","number":27247}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":27247,"title":"Batch salvage: 10 low-risk new-contributor PRs (docs/community/gemma-4/fallback ctx-length)","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["README.md","run_agent.py","scripts/release.py","website/docs/reference/cli-commands.md","website/docs/user-guide/configuration.md","website/docs/user-guide/features/cron.md","website/docs/user-guide/features/delegation.md","website/docs/user-guide/features/spotify.md","website/docs/user-guide/features/web-dashboard.md","website/docs/user-guide/security.md"],"fix_hunks":[{"file":"README.md","hunks":["@@ -182,7 +182,10 @@ scripts/run_tests.sh\n - 💬 [Discord](https://discord.gg/NousResearch)\n - 📚 [Skills Hub](https://agentskills.io)\n - 🐛 [Issues](https://github.com/NousResearch/hermes-agent/issues)\n+- 🔌 [computer-use-linux](https://github.com/avifenesh/computer-use-linux) — Linux desktop-control MCP server for Hermes and other MCP hosts, with AT-SPI accessibility trees, Wayland/X11 input, screenshots, and compositor window targeting.\n - 🔌 [HermesClaw](https://github.com/AaronWong1999/hermesclaw) — Community WeChat bridge: Run Hermes Agent and OpenClaw on the same WeChat account.\n+- 🛠️ [hermes-eval](https://github.com/Saurav0989/hermes-eval) — Skill regression testing and trajectory quality scoring. Catch skill drift before it propagates. Exports quality-filtered trajectories in Atropos RL format. GitHub Actions CI template included.\n+- 🧠 [Hermes MemPalace](https://github.com/kjames2001/hermes-mempalace) — Native MemPalace memory provider plugin: semantic search, knowledge graph, and diary journaling via ChromaDB.\n \n ---\n "]},{"file":"run_agent.py","hunks":["@@ -9187,6 +9187,7 @@ def _try_activate_fallback(self, reason: \"FailoverReason | None\" = None) -> bool\n                     self.model, base_url=self.base_url,\n                     api_key=self.api_key, provider=self.provider,\n                     config_context_length=getattr(self, \"_config_context_length\", None),\n+                    custom_providers=self._custom_providers,\n                 )\n                 self.context_compressor.update_model(\n                     model=self.model,","@@ -10122,6 +10123,7 @@ def _supports_reasoning_extra_body(self) -> bool:\n             \"openai/\",\n             \"x-ai/\",\n             \"google/gemini-2\",\n+            \"google/gemma-4\",\n             \"qwen/qwen3\",\n             \"tencent/hy3-preview\",\n             \"xiaomi/\","]},{"file":"scripts/release.py","hunks":["@@ -1086,6 +1086,14 @@\n     \"[redacted:email]\": \"nightcityblade\",  # PR #24138 (docs voice/tts table)\n     \"[redacted:email]\": \"polkn\",  # PR #6136 salvage (skill_view collision refusal)\n     \"[redacted:email]\": \"rewbs\",\n+    # batch salvage (May 2026 LHF run)\n+    \"[redacted:email]\": \"Saurav0989\",  # PR #27071 (docs: hermes-eval community link)\n+    \"220110965+Saurav0989@users.noreply.github.com\": \"Saurav0989\",\n+    \"[redacted:email]\": \"avifenesh\",  # PR #25902 (docs: computer-use-linux MCP)\n+    \"55848801+avifenesh@users.noreply.github.com\": \"avifenesh\",\n+    \"279959838+BROCCOLO1D@users.noreply.github.com\": \"BROCCOLO1D\",  # PR #26796 (docs: spotify + HA)\n+    \"[redacted:email]\": \"matthewlai\",  # PR #25293 (feat: gemma 4 reasoning allowlist)\n+    \"4296245+matthewlai@users.noreply.github.com\": \"matthewlai\",\n }\n \n "]},{"file":"website/docs/reference/cli-commands.md","hunks":["@@ -1106,13 +1106,17 @@ hermes claw migrate --source /home/user/old-openclaw\n hermes dashboard [options]\n ```\n \n-Launch the web dashboard — a browser-based UI for managing configuration, API keys, and monitoring sessions. Requires `pip install hermes-agent[web]` (FastAPI + Uvicorn). See [Web Dashboard](/docs/user-guide/features/web-dashboard) for full documentation.\n+Launch the web dashboard — a browser-based UI for managing configuration, API keys, and monitoring sessions. Requires `pip install hermes-agent[web]` (FastAPI + Uvicorn). The embedded browser Chat tab requires `--tui` plus the `pty` extra. See [Web Dashboard](/docs/user-guide/features/web-dashboard) for full documentation.\n \n | Option | Default | Description |\n |--------|---------|-------------|\n | `--port` | `9119` | Port to run the web server on |\n | `--host` | `127.0.0.1` | Bind address |\n | `--no-open` | — | Don't auto-open the browser |\n+| `--tui` | off | Enable the in-browser Chat tab by running `hermes --tui` behind a PTY/WebSocket bridge. Requires `pip install 'hermes-agent[web,pty]'` and a POSIX PTY environment such as Linux, macOS, or WSL2. |\n+| `--insecure` | off | Allow binding to non-localhost hosts. Exposes dashboard credentials on the network; use only behind trusted network controls. |\n+| `--stop` | — | Stop running `hermes dashboard` processes and exit. |\n+| `--status` | — | List running `hermes dashboard` processes and exit. |\n \n ```bash\n # Default — opens browser to http://127.0.0.1:9119","@@ -1120,6 +1124,9 @@ hermes dashboard\n \n # Custom port, no browser\n hermes dashboard --port 8080 --no-open\n+\n+# Enable the browser Chat tab\n+hermes dashboard --tui\n ```\n \n ## `hermes profile`"]},{"file":"website/docs/user-guide/configuration.md","hunks":["@@ -1667,6 +1667,7 @@ delegation:\n   # provider: \"openrouter\"                  # Override provider (empty = inherit parent)\n   # base_url: \"http://localhost:1234/v1\"    # Direct OpenAI-compatible endpoint (takes precedence over provider)\n   # api_key: \"[redacted:secret-assignment]\"                    # API key for base_url (falls back to OPENAI_API_KEY)\n+  # api_mode: \"\"                            # Wire protocol for base_url: \"chat_completions\", \"codex_responses\", or \"anthropic_messages\". Empty = auto-detect from URL (e.g. /anthropic suffix → anthropic_messages). Set explicitly for non-standard endpoints the heuristic can't detect.\n   max_concurrent_children: 3                # Parallel children per batch (floor 1, no ceiling). Also via DELEGATION_MAX_CONCURRENT_CHILDREN env var.\n   max_spawn_depth: 1                        # Delegation tree depth cap (1-3, clamped). 1 = flat (default): parent spawns leaves that cannot delegate. 2 = orchestrator children can spawn leaf grandchildren. 3 = three levels.\n   orchestrator_enabled: true                # Global kill switch. When false, role=\"orchestrator\" is ignored and every child is forced to leaf regardless of max_spawn_depth.","@@ -1676,6 +1677,8 @@ delegation:\n \n **Direct endpoint override:** If you want the obvious custom-endpoint path, set `delegation.base_url`, `delegation.api_key`, and `delegation.model`. That sends subagents directly to that OpenAI-compatible endpoint and takes precedence over `delegation.provider`. If `delegation.api_key` is omitted, Hermes falls back to `OPENAI_API_KEY` only.\n \n+**Wire protocol (`api_mode`):** Hermes auto-detects the wire protocol from `delegation.base_url` (e.g. paths ending in `/anthropic` → `anthropic_messages`; Codex / native Anthropic / Kimi-coding hostnames keep their existing detection). For endpoints the heuristic can't classify — for example Azure AI Foundry, MiniMax, Zhipu GLM, or LiteLLM proxies fronting an Anthropic-shaped backend — set `delegation.api_mode` explicitly to one of `chat_completions`, `codex_responses`, or `anthropic_messages`. Leave it empty (the default) to keep auto-detection.\n+\n The delegation provider uses the same credential resolution as CLI/gateway startup. All configured providers are supported: `openrouter`, `nous`, `copilot`, `zai`, `kimi-coding`, `minimax`, `minimax-cn`. When a provider is set, the system automatically resolves the correct base URL, API key, and API mode — no manual credential wiring needed.\n \n **Precedence:** `delegation.base_url` in config → `delegation.provider` in config → parent provider (inherited). `delegation.model` in config → parent model (inherited). Setting just `model` without `provider` changes only the model name while keeping the parent's credentials (useful for switching models within the same provider like OpenRouter)."]},{"file":"website/docs/user-guide/features/cron.md","hunks":["@@ -125,6 +125,10 @@ Jobs with a `workdir` run sequentially on the scheduler tick, not in the paralle\n \n You do not need to delete and recreate jobs just to change them.\n \n+:::tip Job reference\n+The `<job_id>` placeholder below (and in [Lifecycle actions](#lifecycle-actions)) also accepts the job's name (case-insensitive) — handy when you remember `morning-digest` but not the hex ID. An exact job ID takes precedence over name matches; if the reference is not an ID and a name matches more than one job, the command refuses and prints the candidate IDs so you can disambiguate.\n+:::\n+\n ### Chat\n \n ```bash"]},{"file":"website/docs/user-guide/features/delegation.md","hunks":["@@ -274,6 +274,7 @@ delegation:\n   model: \"qwen2.5-coder\"\n   base_url: \"http://localhost:1234/v1\"\n   api_key: \"[redacted:secret-assignment]\"\n+  # api_mode: \"anthropic_messages\"  # Optional. Wire protocol override for base_url (\"chat_completions\", \"codex_responses\", or \"anthropic_messages\"). Empty = auto-detect from URL (e.g. /anthropic suffix). Set explicitly for endpoints the heuristic can't classify (Azure AI Foundry, MiniMax, Zhipu GLM, LiteLLM proxies, …).\n ```\n \n :::tip"]},{"file":"website/docs/user-guide/features/spotify.md","hunks":["@@ -12,7 +12,7 @@ Unlike Hermes' built-in OAuth integrations (Google, GitHub Copilot, Codex), Spot\n \n ## Setup\n \n-### One-shot: `hermes tools`\n+### One-shot: `hermes tools` or first-run setup\n \n The fastest path. Run:\n ","@@ -20,7 +20,9 @@ The fastest path. Run:\n hermes tools\n ```\n \n-Scroll to `🎵 Spotify`, press space to toggle it on, then `s` to save. Hermes drops you straight into the OAuth flow — if you don't have a Spotify app yet, it walks you through creating one inline. Once you finish, the toolset is enabled AND authenticated in one pass.\n+Scroll to `🎵 Spotify`, press space to toggle it on, then `s` to save. The same toggle is also available during the first-run `hermes setup` / `hermes setup tools` flow. Spotify stays opt-in, so enabling it there runs the same provider-aware configuration as `hermes tools`.\n+\n+Hermes drops you straight into the OAuth flow — if you don't have a Spotify app yet, it walks you through creating one inline. Once you finish, the toolset is enabled AND authenticated in one pass.\n \n If you prefer to do the steps separately (or you're re-authing later), use the two-step flow below.\n ","@@ -125,6 +127,12 @@ Control and inspect playback, plus fetch recently played history.\n | `list` | Every Spotify Connect device visible to your account |\n | `transfer` | Move playback to `device_id`. Optional `play: true` starts playback on transfer |\n \n+### Home Assistant-managed speakers\n+\n+If Home Assistant manages speakers that already support Spotify Connect (for example Sonos, Echo, Nest, or other Connect-capable speakers), they appear in `spotify_devices list` automatically whenever Spotify can see them. Hermes does not need a Home Assistant ↔ Spotify bridge for this path — Spotify handles the device routing natively.\n+\n+Ask Hermes to transfer playback by the speaker's display name (for example, “transfer Spotify to the kitchen speaker”), or call `spotify_devices list` and pass the exact `device_id` to `spotify_devices transfer` when scripting. If the speaker is missing, open the Spotify app or the speaker's Spotify integration once so Spotify registers it as an active Connect target.\n+\n #### `spotify_queue`\n | Action | Purpose | Premium? |\n |--------|---------|----------|"]},{"file":"website/docs/user-guide/features/web-dashboard.md","hunks":["@@ -35,6 +35,9 @@ hermes dashboard --host 0.0.0.0\n \n # Start without opening browser\n hermes dashboard --no-open\n+\n+# Enable the in-browser Chat tab\n+hermes dashboard --tui\n ```\n \n ## Prerequisites","@@ -49,6 +52,8 @@ The `web` extra pulls in FastAPI/Uvicorn; `pty` pulls in `ptyprocess` (POSIX) or\n \n When you run `hermes dashboard` without the dependencies, it will tell you what to install. If the frontend hasn't been built yet and `npm` is available, it builds automatically on first launch.\n \n+The Chat tab is intentionally off for a plain `hermes dashboard` launch. Start the dashboard with `hermes dashboard --tui` or set `HERMES_DASHBOARD_TUI=1` when you want the embedded browser chat pane.\n+\n ## Pages\n \n ### Status"]},{"file":"website/docs/user-guide/security.md","hunks":["@@ -64,6 +64,11 @@ The `/yolo` command is a **toggle** — each use flips the mode on or off:\n \n YOLO mode is available in both CLI and gateway sessions. Internally, it sets the `HERMES_YOLO_MODE` environment variable which is checked before every command execution.\n \n+When YOLO is active, Hermes shows two persistent visual reminders so it's hard to forget that approval prompts are bypassed:\n+\n+- A red banner line at session start when YOLO is already active: `⚠ YOLO mode — all approval prompts bypassed`. Hidden when YOLO is off so the default banner stays uncluttered.\n+- A `⚠ YOLO` fragment in the status bar across all width tiers, updated live as you toggle YOLO on or off (rich-text renderer and plain-text fallback).\n+\n :::danger\n YOLO mode disables **all** dangerous command safety checks for the session — **except** the hardline blocklist (see below). Use only when you fully trust the commands being generated (e.g., well-tested automation scripts in disposable environments).\n :::\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}