Web Dashboard
The web-based IDE that ships with tmux-ide 2.5+ — open localhost:6060 to use it
Web Dashboard
The dashboard is a browser-based IDE served by the tmux-ide daemon. It runs locally on localhost:6060 and gives you a file editor, multi-thread chat, diff viewer, terminal, plans editor, search, and LSP — all wired to the same project state your CLI commands operate on.
Open the dashboard
# In any project directory:
tmux-ide # launches the tmux session + daemon; prints the URL
tmux-ide dashboard # opens the browser at the daemon's URLFlags for tmux-ide dashboard:
--no-open— print the URL without opening a browser--json— emit{"url", "port", "pid"}for scripts
The dashboard is also reachable at http://localhost:6060 directly if you prefer.
Layout
The route is /project/:name. Five regions:
┌──┬───┬──────────┬───────────────────┬─────┐
│PR│ AB│ Sidebar │ Editor / View │ Insp│
│ │ │ (240px) │ │(260)│
├──┴───┴──────────┴───────────────────┴─────┤
│ Bottom Panel — terminal / problems / output│
├───────────────────────────────────────────┤
│ Status Bar │
└───────────────────────────────────────────┘- Project Rail (PR) — leftmost. One row per registered project; click to switch.
- Activity Bar (AB) — view picker: files / search / diffs / plans / tasks / skills / notes / mission / chat / terminal / widgets.
- Sidebar — context for the active view (file tree, plan list, etc.).
- Editor — the active view's main surface.
- Inspector — collapsible right rail with the event timeline (Cmd+I to toggle).
- Bottom Panel — tabs for terminal, problems, output.
Keyboard shortcuts
Cmd+K— command palette: jump to any project, thread, terminal, or command.Cmd+/— keyboard shortcut cheat sheet (every registered keybind in the app).Cmd+B/Cmd+Alt+B/Cmd+J— toggle left sidebar / right inspector / bottom panel.Cmd+P— quick switcher: project picker.Cmd+Shift+F— workspace search.Cmd+Shift+C/T/E— focus chat / terminal / files view.Cmd+E(in plans view) — enter plan edit mode.Cmd+S(in plan edit) — save plan body.Esc(in plan edit) — cancel without saving.
Views
Files
VS Code-style file tree + multi-tab editor with Shiki syntax highlighting. Right-click for context menu (open in folder, copy path, search in folder). LSP-powered hover, go-to-definition, rename across TypeScript / Python / Rust / Go. Autosave with crash recovery.
Chat
Multi-thread chat surface with first-class Claude Code and Codex providers, isolated per project.
- Multichat — every project owns its own thread list; opening
/project/Ashows A's threads only. Click+ New chatto start a thread; the rail switches between them with no daemon round-trip. - Provider switcher — the header picker swaps between Claude Code, Codex, and any custom command-based provider. The switch is local-first (no daemon round-trip), with the persisted
thread.providerupdated as a reload fallback. Switching does not lose thread context. - Per-turn model picker — discovered live from each provider (no hardcoded model lists). The picked model rides on the next
chat.session.send; favorites are persisted per workspace. - Codex capabilities — when the active model declares them, an adjacent selector exposes
reasoningEffort(low / medium / high) andfastMode. Both are persisted perthread × kind × modelso different threads can run with different effort levels against the same model. - Composer — inline image preview with click-to-expand, plan follow-up cards (
ProposedPlanCard), permission dialogs, terminal-context chips, pending-approval banner, and a mention/command menu. - Tool calls — every tool invocation renders as a
ToolCallCardyou can expand for input/output, with diff stats and changed-file trees rolled up inline. - Edit from message — text-only user turns get a pencil affordance. Edit-and-save calls
chat.session.editFromTurn, regenerating the rest of the thread from the new content. - Rename in place — click the thread title in the header to rename without a modal.
Shortcuts: Cmd+Shift+C focuses the chat view. The header Stop button cancels an in-flight turn (chat.session.cancel).
Diffs
Three diff sources plus full commit history, all sharing one Monaco-powered StickyDiffEditor.
- Modes —
changes(working tree, polled every 5s),history(browse commits,?base=maintags ahead-of-base commits for PR context), andbranch(fullbase...HEADrange a PR would contain). - Sources within
changes—working(HEADvs disk),staged(HEADvs index), andpr(base branch vsHEAD). The toggle is in the header; the file rail and editor rebind to the new git refs in place. - Split / unified — the view-style toggle lives in the same toolbar as the source toggle.
- Per-hunk Accept / Reject — when the host registers the callbacks, each hunk gets inline affordances; the daemon write-through is staged behind the toolbar buttons.
- Large-diff guard — files past the line threshold render a placeholder with a
Load anywayescape hatch so the editor doesn't choke on auto-generated lockfiles. - Commit rail — in history mode, the left rail shows up to 200 commits with subject, short SHA, author, and relative date. An
AHEADbadge marks commits not yet inmain.
Shortcuts: open the Diffs view from the activity bar; the file rail accepts arrow-key navigation.
┌─ Diffs ──────────────────────────────────────────────┐
│ 12 files changed +340 / −58 [changes][history][branch vs main] [working][staged][pr] [split][unified] │
├──────────┬───────────────────────────────────────────┤
│ src/ │ dashboard/lib/api.ts │
│ ▸ api.ts │ ─────────────────────────────────────── │
│ useK.. │ 42 - return r.json(); │
│ ... │ 42 + return await r.json(); │
│ │ [Accept hunk] [Reject hunk] │
└──────────┴───────────────────────────────────────────┘Search
Ripgrep-backed workspace search served by the daemon, virtualized for large result sets.
- Query input — debounced 250ms; Enter is implicit. Smart-case by default; toggle to case-sensitive or regex from the icon row.
- Glob include / exclude — VS Code-style globs (
src/**,packages/*/src/**,**/*.test.ts,node_modules/**). Empty fields fall back to the daemon's default ignore list. - Current-file scope — the
FileTexttoggle pinsincludeto the active editor buffer; toggling off restores the prior glob. - Recent searches — focus the empty query input to drop down the last 10 queries for the current project (persisted per workspace).
- Match navigation —
F3/Shift+F3step across matches panel-wide, wrapping at both ends. Clicking a match opens the file at the line with the submatch highlighted; the row stays highlighted as the active match so furtherF3presses continue from there. - Replace — open the replace input from the toolbar; replace per-file from the file-header
Replacebutton, orReplace N in M filesto commit across the whole result set (gated by a confirm dialog). Files modified since the search snapshot are skipped automatically. - Open match — clicking a row navigates to
?view=files&path=<path>&line=<line>, which the Files surface consumes to focus the buffer at the cursor.
Shortcuts: Cmd+Shift+F opens the search view; F3 / Shift+F3 step to next / previous match; Esc closes the replace-confirm dialog.
┌─ Search ─ Cmd+Shift+F ───────────────────────────────┐
│ [openFileAt ] │
│ [refocusBuffer ] │
│ [Aa] [.*] [✎] [▣] searching… │
│ files to include: packages/*/src/** │
│ files to exclude: **/*.test.ts, node_modules/** │
│ 14 results in 6 files · 32ms │
│ ▾ packages/chat-solid/src/lib/editorOpen.ts (3) │
│ 12 // openFileAt is the broker entry point │
│ 14 export function openFileAt(req: OpenRequest) │
│ ▾ dashboard/src/components/search/SearchView.tsx (5) │
│ 362 openFileAt({ │
└──────────────────────────────────────────────────────┘Terminal
Vertical-rail tab strip. Each new terminal opens with the project's cwd. Tabs are kept-alive on switch (no remount latency). Cmd+T opens a new terminal; Cmd+W closes the active one; Cmd+1..9 jumps to a tab.
Tasks / Plans / Skills / Mission / Notes
Mission-orchestration surfaces: view tasks, milestones, validation status, plans, skill definitions. Same data the CLI's tmux-ide task / mission / plan / skill commands operate on.
Bottom Panel
- terminal — quick terminal scoped to the project cwd
- problems — LSP diagnostics across the workspace
- output — daemon event log (project.launch, chat.thread.created, task completion, etc.)
Project switching
The project rail on the left lists every registered project. Click to switch — the route changes to /project/:name. If the project's tmux session isn't running, the route auto-launches it on mount (the IDE shell shows a centered "Launching…" spinner during the boot, then renders once the session is up).
To add a project: open the dashboard at localhost:6060/setup or click "Add project" in the activity bar. The wizard auto-detects the package manager, frameworks, and recommended dev/test commands.
Settings
localhost:6060/settings — terminal font, theme, keybind customization, provider configuration.
See also
- Getting Started — install + first project
- Commands — every CLI subcommand including
tmux-ide dashboard - Configuration —
ide.ymlreference - What's New in 2.5 — feature list