{
  "markdown": "# sessions-dashboard\n\n**A live dashboard for every CLI agent session you're running** — Claude Code, Gemini CLI, and Codex CLI on a single screen. See what each agent is doing in real time, organize sessions into groups, and jump straight to a session's terminal in one click.\n\n<p align=\"center\">\n  <video src=\"docs/hero.mp4\" autoplay loop muted playsinline width=\"960\"></video>\n</p>\n\n![sessions-dashboard hero](docs/hero.gif)\n\n---\n\n## Install\n\n```bash\nnpx -y sessions-dashboard install\n```\n\nRequires Node ≥18 on PATH. The installer auto-detects which of the three CLIs are on your PATH and registers `sessions-dashboard` with each. First run pre-fetches Playwright's Chromium (~150 MB).\n\nAfter install, restart your CLI(s) and ask any session: *\"Open the sessions dashboard\"*\n\nTo remove the MCP registrations later: `npx -y sessions-dashboard uninstall`.\n\nFor installing from source (contributors), per-CLI manual config, and platform-specific caveats (Codex on Windows / Limited persistence mode), see [docs/INSTALL.md](docs/INSTALL.md).\n\n---\n\n## Why\n\nIf you run more than one CLI agent at a time, you quickly lose track:\n\n- Which session is working on what repo?\n- Which of my dozen terminal tabs is the session I need?\n- Is session 3 actively working right now, or idle waiting for you?\n- What tool is that long-running session stuck on?\n- How do I group related sessions (e.g. frontend + backend workers) visually?\n\n`sessions-dashboard` gives you a live, at-a-glance view:\n\n- 🟢 **`working`** — the agent is producing output right now\n- 🟣 **`running bash..`** — a tool is executing (you see which one)\n- ⚪ **`idle 2m`** — done, waiting for your next prompt\n- **Drag-and-drop groups** — organize sessions into named columns that persist across restarts\n- **One-click focus (macOS, Windows + WezTerm)** — jump from a card to the corresponding terminal tab, ready to prompt.\n- **Shared browser** — any session can open a webview every other session can script (useful for coordinated debugging)\n\n---\n\n## Quick tour\n\n### Open the dashboard\n\nAny session can open it:\n\n> *\"Open the sessions dashboard\"*\n\nA Chromium window appears, polling the daemon every 2 s. Every session currently using `sessions-dashboard` (or set to auto-register — see [Configuration](#configuration)) shows up as a card.\n\n### Activity indicator\n\nEach card shows a live pill:\n\n| Pill | Meaning |\n|---|---|\n| 🟢 `working` | The agent is producing output — text, thinking tokens, or about to dispatch a tool |\n| 🟣 `running bash..`, `running sessions-dashboard·screenshot..` | A tool is executing. The tool name is surfaced |\n| ⚪ `idle 2m` | Assistant finished its turn, waiting for your next prompt |\n\nThe state is derived from each session's transcript (tail-state tracking against the host CLI's chat log). Long-running tools stay accurately marked as `running` — no 60-second false-idle.\n\n### Name your sessions\n\nSessions default to their cwd's basename. Give them nicer names three ways:\n\n- **Env var before launching:** `SESSIONS_DASHBOARD_SESSION_NAME=frontend-worker claude` (works for any host; `CLAUDE_SESSION_NAME` is a Claude-era alias)\n- **`/rename` slash command** inside the session — auto-picked up within 15 s. Supported in Claude Code and Codex CLI; **Gemini CLI has no `/rename` equivalent**, so use the env var or the `set_session_name` tool below.\n- **`set_session_name` tool** — your CLI agent can call it programmatically (works for every host)\n\n### Group them\n\nDrag cards between groups in the dashboard. Groups match by **cwd** or **session name** — stable identifiers that survive CLI restarts. Click `+ New group` to add one; click the name to rename inline; `delete` twice to remove.\n\n### Share a browser across sessions\n\nUnder the hood, one Chromium instance serves all sessions. Session A can open `https://example.com`; session B can call `eval_js` on that same page; session C can screenshot it. Useful for coordinated debugging flows where one agent drives and another inspects.\n\n### Focus a session's terminal\n\nEach session card has a small `↗` button on its right side. Click it to bring that session's terminal window to the foreground with the correct tab selected — typing lands straight in the agent's prompt (Claude / Gemini / Codex, whichever the card is). Useful when the dashboard shows something finished and you need to jump to it.\n\n- **macOS:** any session, regardless of terminal. Walks Terminal.app / iTerm2 tabs by tty, with first-class tmux support. First use triggers a one-time automation-permission prompt asking to let `node` control Terminal.app / iTerm2 — click Allow; subsequent clicks work without a prompt.\n- **Windows:** sessions running inside WezTerm only — detected via the `WEZTERM_PANE` env var. Other Windows terminals (Windows Terminal, ConEmu, cmd, pwsh, git-bash) hide the button. Uses `wezterm cli activate-pane` to switch panes and a small PowerShell helper to raise the GUI window.\n- **Linux:** not yet supported — the button is hidden.\n\n---\n\n### Compatibility matrix\n\n| Host | Cards + drag/drop | Tools | Live activity pill | In-transcript rename |\n|---|---|---|---|---|\n| Claude Code | ✅ | ✅ | ✅ | ✅ `/rename` |\n| Gemini CLI | ✅ | ✅ | ✅ | 🟡 (`/rename` not built-in, but should work in practice; else, env var or `set_session_name` tool) |\n| Codex CLI | ✅ | ✅ | ✅ Extended mode (Limited shows working/idle only — no tool names) | ✅ `/rename` |\n\n---\n\n## Configuration\n\n| Env var | Default | Purpose |\n|---|---|---|\n| `SESSIONS_DASHBOARD_PORT` | `8787` | Port the daemon binds to on loopback. All sessions must agree. |\n| `SESSIONS_DASHBOARD_AUTOSTART` | unset | Set to `1` to register this session at startup, so it appears in the dashboard before any tool is invoked. The installer doesn't set this by default — opt in if you want eager registration. |\n| `SESSIONS_DASHBOARD_HOST` | auto | `claude`, `gemini`, or `codex`. When unset, detected by probing each host's transcript dir for one matching this cwd. The installer pins this per registration so the probe is bypassed. |\n| `SESSIONS_DASHBOARD_SESSION_NAME` | unset | Sticky display name for this session (cross-host). |\n| `CLAUDE_SESSION_NAME` | unset | Claude-era alias for `SESSIONS_DASHBOARD_SESSION_NAME`. |\n\nSet these in the MCP server's `env` block in your CLI's config file — see [docs/INSTALL.md](docs/INSTALL.md#per-cli-manual-install) for the per-CLI config syntax (Claude / Gemini settings.json, Codex config.toml). `SESSIONS_DASHBOARD_AUTOSTART=1` is recommended — it ensures every session shows up in the dashboard without you having to manually invoke a tool first.\n\n---\n\n## Tools\n\nThe MCP entry point is `mcp__sessions-dashboard__open_dashboard`. The package also exports nine other tools for shared-browser scripting (`open_webview`, `eval_js`, `screenshot`, …) — see [docs/TOOLS.md](docs/TOOLS.md) for the full reference.\n\n---\n\n## Troubleshooting\n\n- **`daemon_info` returns the PID** — use `taskkill /F /PID <pid>` (Windows) or `kill <pid>` (Unix) to force-kill a wedged daemon. Next tool call respawns it.\n- **Chromium window gone but daemon alive** — next `open_dashboard` or `open_webview` relaunches Chromium.\n- **Dashboard shows \"daemon unreachable\"** — daemon crashed or hasn't started yet. Run any `sessions-dashboard` tool to respawn.\n- **Session not appearing** — by default the daemon is dormant until a session calls a tool. Either invoke one (e.g. `open_dashboard`) or set `SESSIONS_DASHBOARD_AUTOSTART=1`.\n\n---\n\n## Architecture\n\n```\nclaude session ──┐\ngemini session ──┼── MCP stdio ──► sessions-dashboard ──► HTTP 127.0.0.1:8787 ──┐\ncodex session  ──┘                 (proxy: index.mjs)                           │\n                                                                                ▼\n                                                                   daemon.mjs ──► Chromium\n                                                                                │\n                                                                sessions.html  ─┘ (polls /sessions)\n```\n\nOne MCP proxy per CLI session, all talking to a single long-lived daemon that owns the Chromium browser. The daemon is loopback-only, resource-capped (max 50 sessions, 20 webviews), and survives individual CLI restarts.\n\n---\n\n## Contributing\n\nIssues and PRs welcome at <https://github.com/channyzf6/sessions-dashboard>.\n\nBuilt on Playwright. No runtime deps beyond Node 18+ and `@modelcontextprotocol/sdk`.\n",
  "bytes": 8415,
  "sha": "60ff19b08324a92b1067cb92acb4bab7fba615b74b4ee3e8d6231864ebd9c8d2",
  "repo_slug": "channyzf6/sessions-dashboard",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_channyzf6_sessions_dashboard_sessions_da_01e60173/readme"
}