{"slug": "show-hn-kanvibe-git-worktree-and-tmux-kanban-board-for-ai-clis-now-electron", "title": "Show HN: KanVibe – Git worktree and tmux Kanban board for AI CLIs, now Electron", "summary": "KanVibe, a keyboard-first Kanban board for AI coding agents, is now available as an Electron desktop app, supporting git worktrees and tmux/zellij sessions, with hooks for Claude Code, Gemini CLI, Codex CLI, and OpenCode to automate task status transitions. The tool, installable via a Homebrew tap, lets developers track branch-based tasks, manage sessions, and use Vim-style controls, with a directory scan to register projects and auto-create worktrees and terminal sessions for tasks.", "body_md": "**Keyboard-first Kanban workspace for AI coding agents**\n\nKanVibe keeps AI coding work out of scattered terminal tabs. Track branch-based tasks on a real-time Kanban board, open each task's tmux/zellij session in the browser or desktop app, and let Claude Code, Gemini CLI, Codex CLI, and OpenCode hooks move tasks through the workflow automatically.\n\nUse shortcuts for project filters, task search, notifications, task detail panels, and common task actions without losing terminal focus.\n\nBuying me a coffee is nice, but honestly? A contribution would make my day even more. :)\n\nOpen task search from anywhere, filter by project or branch name, and jump directly into the task workspace without returning to the board first.\n\nUse numbered dock shortcuts on a task detail page to open task metadata, hook status, AI chat, and PR actions before the keystroke reaches the embedded terminal.\n\nNarrow the board to the active projects you care about, with keyboard navigation for switching between repositories quickly.\n\nOpen the notification panel to review AI agent status changes, background sync results, and task events, then jump to the related task.\n\nCreate follow-up branch TODOs directly from the highlighted search result, preserving project and branch context for the next piece of work.\n\nTurn on Vim-style board controls in **Settings → Keyboard**, then move across task cards with `h/j/k/l`\n\n, find visible task text with `/`\n\n, open the new-task modal with `n`\n\n, move statuses with `:move progress`\n\n, and delete a focused task with `dd`\n\n.\n\n[Open the Vim controls demo video](/rookedsysc/kanvibe/blob/main/docs/images/readme/kanvibe-vim-controls.mp4)\n\nSee which AI agents are running on which task, and how many, straight from the board, then jump into the terminal that owns one. Focus or hover a card and hold for a moment to open the session panel; it lists each running session with what it is doing and the subtasks branching off it right now. Clicking a session switches to the tmux window that session is attached to and moves input focus to the terminal.\n\nThe same panel opens from the task detail dock, so you can keep watching subtasks while you work in the terminal.\n\n| Dependency | Version | Required | Install |\n|---|---|---|---|\n|\n\n`brew install git`\n\n[tmux](https://github.com/tmux/tmux)`brew install tmux`\n\n[gh](https://cli.github.com/)`brew install gh`\n\n(requires `gh auth login`\n\n)[zellij](https://github.com/zellij-org/zellij)`brew install zellij`\n\nUntil KanVibe is accepted into the official Homebrew Cask repository, install it from the KanVibe Homebrew tap:\n\n```\nbrew install --cask rookedsysc/kanvibe/kanvibe\nopen -a KanVibe\n```\n\nAfter the official Homebrew Cask is accepted, the install command becomes:\n\n```\nbrew install --cask kanvibe\nbrew update\nbrew upgrade --cask kanvibe\nbrew uninstall --cask kanvibe\nbrew untap rookedsysc/kanvibe\n```\n\nClick the **magnifying-glass directory scan button** on the main board toolbar — it sits between the project filter and **+ New Task** — to open the project registry dialog. In the dialog, choose a local or remote git repository path and click **Scan & Register**; KanVibe then registers the repository, detects existing worktree branches, and installs supported agent hooks.\n\nTo stop managing a project, delete it from the registered-project list in the registry dialog. This removes only the SQLite project record and associated KanVibe task records; git branches, worktrees, and files on disk are kept.\n\nAdd a TODO task from the Kanban board. When creating a task with a branch name, KanVibe automatically:\n\n- Creates a\n**git worktree** for the branch - Spawns a\n**tmux window** or**zellij tab** for the session - Links the terminal session to the task\n\nTasks are managed through 5 statuses: **TODO** → **PROGRESS** → **PENDING** → **REVIEW** → **DONE**\n\nChange statuses via drag & drop, or let [AI Agent Hooks](#ai-agent-hooks---automatic-status-tracking) transition them automatically. When a task moves to **DONE**, its branch, worktree, and terminal session are **automatically deleted**.\n\nEach task's terminal page supports multiple pane layouts:\n\n| Layout | Description |\n|---|---|\nSingle |\nOne full-screen pane |\nHorizontal 2 |\nTwo panes side by side |\nVertical 2 |\nTwo panes stacked |\nLeft + Right TB |\nLeft pane + right top/bottom split |\nLeft TB + Right |\nLeft top/bottom split + right pane |\nQuad |\nFour equal panes |\n\nEach pane can run a custom command (e.g., `vim`\n\n, `htop`\n\n, `lazygit`\n\n, test runner, etc.). Configure layouts globally or per-project from the settings dialog.\n\n- 5-status task management (TODO / PROGRESS / PENDING / REVIEW / DONE)\n- Drag & drop task ordering with project colors, priority markers, PR badges, and session labels\n- Multi-project filtering with keyboard search for visible project and task text\n- Done column pagination for long-running projects\n- Real-time WebSocket updates across browser and desktop windows\n\n- Create branch TODOs that automatically prepare a git worktree and terminal session\n- Use the board toolbar magnifying-glass scan dialog to register repositories and detect existing worktree branches as TODO tasks\n- Open each task into a dedicated terminal workspace with task metadata, hook controls, chat, and PR actions in the side dock\n- Move a task to DONE to clean up its branch, worktree, and terminal session automatically\n- Delete a project from the scan dialog without touching existing git branches, worktrees, or files on disk\n\n**tmux** and**zellij** are both supported as terminal multiplexers- Browser-based terminal streaming through xterm.js and WebSocket\n- SSH remote terminal support that reads\n`~/.ssh/config`\n\n- Non-interactive remote SSH commands reuse an app-local ControlMaster socket pool under\n`~/.kanvibe`\n\n, with per-host concurrency capped at 4x available CPU cores - Remote terminal attach executes tmux/zellij directly over SSH; trusted X11 forwarding (\n`ssh -Y`\n\n) is requested only when local`DISPLAY`\n\n, remote`X11Forwarding`\n\n, and`xauth`\n\nare available - Nerd Font rendering support\n\n- Board cards show a per-agent icon and count next to the tmux badge, so you can tell at a glance which agents are running on which task and how many\n- Focus or hover a card to open a session panel that shows what each running session is doing, taken from its most recent AI response, along with the subtasks it is driving as branches hanging off the session; sweeping past cards does not open it\n- Running sessions carry a moving progress bar that conveys progress through motion rather than a ratio, and holds still when the environment asks for reduced motion\n- Task detail exposes the same panel through the live sessions dock item (\n`Mod+4`\n\nwithout a PR,`Mod+5`\n\nwith one) - Clicking a session switches to its tmux window and moves input focus to the terminal\n- Running state combines two signals: an agent attached to a tmux pane counts as running even while it waits for input, and a session whose transcript was just updated counts as running even when no pane is visible\n- Subtask counts are available for Claude Code and Codex, depend on version for OpenCode, and are not available for Gemini CLI\n- Sessions outside tmux (zellij, plain terminal) are judged by transcript activity alone, so one waiting for input may appear idle\n\n- Open quick task search by branch or project name from anywhere\n- Filter projects, inspect notifications, and trigger task actions without leaving the board\n- Use numbered detail shortcuts to switch task info, status/hooks, AI chat, PR, and other dock panels before keystrokes reach the terminal\n- Create a branch TODO directly from quick search with the configured shortcut\n\n- Read remaining Claude, Codex, and Gemini subscription usage from the task detail dock or\n`Cmd/Ctrl+0`\n\n- Uses the sign-in each CLI already stored locally, so no extra API key is required\n- Normalizes each provider's different window shapes (5-hour, 7-day, per-model) into one bar with reset times and plan tier\n- Queries every registered account per provider and labels them when more than one is signed in\n- Shows the last saved result immediately and refreshes above it, so the panel never opens blank after a restart\n- Manage accounts under\n**Settings → AI accounts**: add an account per provider, sign in, sign in again, or remove one - Adding an account creates its home and launches that CLI's own sign-in command in an in-app terminal, pointed at it\n- An expired sign-in is refreshed by asking that CLI to do it; KanVibe never rewrites the credentials a CLI stores\n- Account homes follow the sibling-directory convention (\n`~/.claude-work`\n\nand so on), so the same account works from a terminal by switching one environment variable - Signed-out accounts stay listed so there is still somewhere to sign in again, and removing one deletes only the account home KanVibe created\n\n| Shortcut | Scope | Action |\n|---|---|---|\n`Cmd/Ctrl+F` or `/` with Vim-style controls enabled |\nBoard | Open page find for visible project/task text; press `Enter` for next and `Shift+Enter` for previous |\n`h / j / k / l` or `← / ↓ / ↑ / →` |\nBoard task cards | Move focus left/down/up/right across visible task cards; if no task is focused, enter the first visible task |\n`n` |\nBoard | Open the new task modal immediately |\n`:move todo|progress|pending|review|done` |\nFocused board task card | Move the focused task to the target status without drag-and-drop; press `Tab` in the command input to autocomplete a unique status prefix |\n`dd` |\nFocused board task card | Delete the focused task after confirmation |\n`Cmd/Ctrl+Shift+O` |\nGlobal | Open quick task search by branch or project name (default, configurable) |\n`Cmd/Ctrl+Shift+P` |\nBoard | Open the project filter dropdown |\n`Cmd/Ctrl+Shift+I` |\nBoard | Open the notifications dropdown |\n`Cmd+[` / `Cmd+]` (macOS), `Alt+[` / `Alt+]` (Linux) |\nGlobal | Navigate back/forward through app history; back falls back to board home when there is no previous page |\n`Cmd+1/2/3` (macOS), `Alt+1/2/3` (Linux) |\nTask detail | Activate the numbered detail dock items: info, status/hooks, and AI chat. These shortcuts are intercepted before terminal input |\n`Cmd+4` (macOS), `Alt+4` (Linux) |\nTask detail | Open the task PR in the browser when a PR exists; otherwise the shortcut belongs to the fourth numbered dock item when present |\n`Cmd/Ctrl+0` |\nTask detail | Toggle the AI usage panel. It sits outside the numbered dock order, so dock numbering is unaffected |\n`Cmd/Ctrl+N` |\nQuick task search | Create a new branch TODO from the currently highlighted task |\n`↑ / ↓ / Enter / Shift+Enter / Esc` |\nQuick task search | Move selection, open task, open task in a new window, close dialog |\n`↑ / ↓ / Enter / Esc` |\nProject filter dropdown | Move selection, toggle project filter, close dropdown |\n`↑ / ↓ / Enter / Esc` |\nNotifications dropdown | Move selection, open notification target, close dropdown |\n\nTask detail dock numbering excludes the back-to-board button and follows the visible dock item order. If a task has a PR URL, PR takes slot 4 and later dock items shift to 5+; without a PR, the next dock item uses slot 4.\n\nVim-style board controls (`h/j/k/l`\n\n, `/`\n\n, `n`\n\n, `dd`\n\n, and `:move ...`\n\n) can be turned on or off in **Settings → Keyboard**. Arrow-key task navigation and `Cmd/Ctrl+F`\n\npage find remain available even when Vim-style controls are disabled.\n\nKanVibe integrates with **Claude Code Hooks**, **Gemini CLI Hooks**, **Codex CLI**, and **OpenCode** to automatically track task status. Tasks are managed through 5 statuses:\n\n| Status | Description |\n|---|---|\nTODO |\nInitial state when a task is created |\nPROGRESS |\nAI is actively working on the task |\nPENDING |\nAI asked a follow-up question; waiting for user response (Claude Code only) |\nREVIEW |\nAI has finished; awaiting review |\nDONE |\nTask complete — branch, worktree, and terminal session are automatically deleted |\n\n```\nUser sends prompt          → PROGRESS\nAI asks question (AskUser) → PENDING\nUser answers               → PROGRESS\nAI finishes response       → REVIEW\nBeforeAgent (user prompt)  → PROGRESS\nAfterAgent (agent done)    → REVIEW\n```\n\nGemini CLI does not have an equivalent to Claude Code's\n\n`AskUserQuestion`\n\n, so the PENDING state is not available.\n\n```\nUserPromptSubmit                → PROGRESS\nPermissionRequest (Bash only)  → PENDING\nPreToolUse (Bash only)         → PROGRESS\nStop                           → REVIEW\n```\n\nKanVibe now uses Codex's current lifecycle hooks model with `.codex/hooks.json`\n\nplus `[features].hooks = true`\n\nin `.codex/config.toml`\n\n:\n\nCodex loads project-local `.codex/`\n\nhooks only for trusted project/worktree paths. If a task runs in a generated worktree, trust that worktree in Codex before expecting the local hook file to fire.\n\nCodex's current\n\n`PermissionRequest`\n\nand`PreToolUse`\n\nmatchers are Bash-scoped, so`PENDING`\n\nrepresents approval waits rather than every kind of conversational follow-up question.\n\n```\nUser sends message (message.updated, role=user) → PROGRESS\nAI asks a question (question.asked)             → PENDING\nUser answers question (question.replied)        → PROGRESS\nSession idle (session.idle)                     → REVIEW\n```\n\nOpenCode uses its own [plugin system](https://opencode.ai/docs/plugins/) instead of shell-script hooks. KanVibe generates a TypeScript plugin at `.opencode/plugins/kanvibe-plugin.ts`\n\nthat subscribes to OpenCode's native event hooks (`message.updated`\n\n, `question.asked`\n\n, `question.replied`\n\n, and `session.idle`\n\n) via the `@opencode-ai/plugin`\n\nSDK. This means status updates are handled in-process without spawning external shell commands.\n\nAll agent hooks are **auto-installed** when you register a project through KanVibe's directory scan or create a task with a worktree. You can also install them individually from the task detail page.\n\n| Agent | Hook Directory | Config File |\n|---|---|---|\n| Claude Code | `.claude/hooks/` |\n`.claude/settings.json` |\n| Gemini CLI | `.gemini/hooks/` |\n`.gemini/settings.json` |\n| Codex CLI | `.codex/hooks/` |\n`.codex/config.toml` , `.codex/hooks.json` |\n| OpenCode | `.opencode/plugins/` |\nPlugin auto-discovery |\n\nTask status changes via AI Agent Hooks trigger **browser notifications** with project, branch, and status. **Click to jump directly to the task detail page.**\n\n**Real-time alerts**— Instant notifications for task status changes** Background mode**— Notifications work even when KanVibe is not focused** Smart navigation**— Click notification → task detail page (with correct language)** Configurable**— Enable/disable per project and filter by status (PROGRESS, PENDING, REVIEW, DONE)\n\nSetup: Browser will prompt for permission on first visit. Configure filters in **Project Settings** → **Notifications**.\n\n| Endpoint | Method | Description |\n|---|---|---|\n`/api/hooks/start` |\nPOST | Create a new task |\n`/api/hooks/status` |\nPOST | Update task status by `branchName` + `projectName` ; if the target is missing, KanVibe still sends a browser notification and returns `404` without changing status |\n\nReview code changes directly in the browser with a GitHub-style diff viewer. Click the **Diff** badge on the task detail page to see all modified files compared to the base branch.\n\n- File tree sidebar with changed file count\n- Inline diff viewer powered by Monaco Editor\n- Edit mode for quick fixes directly in the browser\n- Viewed file tracking with checkboxes\n\n- 6 layout presets (Single, Horizontal 2, Vertical 2, Left+Right TB, Left TB+Right, Quad)\n- Per-pane custom command configuration\n- Global and per-project layout settings\n\n- Supported languages: Korean (ko), English (en), Chinese (zh)\n- Powered by next-intl\n\n| Category | Technology |\n|---|---|\n| Frontend/Backend | Next.js 16 (App Router) + React 19 + TypeScript |\n| Database | SQLite + TypeORM + better-sqlite3 |\n| Styling | Tailwind CSS v4 |\n| Terminal | xterm.js + WebSocket + node-pty |\n| SSH | system ssh binary |\n| Drag & Drop | @hello-pangea/dnd |\n| i18n | next-intl |\n| Desktop Packaging | Electron + Electron Builder |\n\nDownloads, all-time monthly trend — updated daily from GitHub Release asset download counts.\n\nGitHub stars, all-time monthly trend.\n\nThis project is licensed under the **AGPL-3.0**. You are free to use, modify, and extend it for open-source purposes. Commercial SaaS distribution is not permitted under this license. See [LICENSE](/rookedsysc/kanvibe/blob/main/LICENSE) for details.\n\nSee [docs/CONTRIBUTING.md](/rookedsysc/kanvibe/blob/main/docs/CONTRIBUTING.md) for guidelines.\n\n[workmux](https://github.com/raine/workmux)— tmux workspace manager[vibe-kanban](https://github.com/BloopAI/vibe-kanban)— AI-powered Kanban board", "url": "https://wpnews.pro/news/show-hn-kanvibe-git-worktree-and-tmux-kanban-board-for-ai-clis-now-electron", "canonical_source": "https://github.com/rookedsysc/kanvibe", "published_at": "2026-08-31 13:35:19+00:00", "updated_at": "2026-08-31 13:53:56.995111+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["KanVibe", "Claude Code", "Gemini CLI", "Codex CLI", "OpenCode", "tmux", "zellij", "Homebrew"], "alternates": {"html": "https://wpnews.pro/news/show-hn-kanvibe-git-worktree-and-tmux-kanban-board-for-ai-clis-now-electron", "markdown": "https://wpnews.pro/news/show-hn-kanvibe-git-worktree-and-tmux-kanban-board-for-ai-clis-now-electron.md", "text": "https://wpnews.pro/news/show-hn-kanvibe-git-worktree-and-tmux-kanban-board-for-ai-clis-now-electron.txt", "jsonld": "https://wpnews.pro/news/show-hn-kanvibe-git-worktree-and-tmux-kanban-board-for-ai-clis-now-electron.jsonld"}}