First release after v1.1.0. Big push on multi-agent / multi-repo / multi-session — 9 new agent CLIs, a workspace can now hold many repos, an issue can hold many chat threads, plus an in-iframe devtools panel for branch previews and one-command `npx kanbots` launch.
✨ New
- Nine new agent CLIs. Gemini, Amp, Cursor, Copilot, OpenCode, Droid, CCR, Qwen, and a generic ACP (Agent Client Protocol) JSON-RPC transport. Supported-agent count goes from 2 → 11 — pick the one you have a subscription for in the Task Create dialog.
- Multi-repo workspaces. A workspace can now hold more than one repo. Each card targets a chosen repo, the LeftRail shows a repo switcher with status badges, and the dispatch picks the right working tree at run time. New
workspace_repostable + eight bridge channels for CRUD / status / open-in-IDE. - Multi-session chats per issue. Open more than one chat thread against the same issue (or as a standalone conversation).
chat_sessionsis keyed on either a conversation id or a thread id, with a CHECK constraint that one and only one is set. - In-iframe devtools for branch previews. The branch preview iframe now ships with Eruda (mobile-style console + network + DOM inspector) and a click-to-component crosshair overlay. Built with an HTTP reverse-proxy that rewrites text/html responses to inject the panels; everything else streams through unchanged.
- AI-drafted PR descriptions. A new Create PR modal hits the existing composer plumbing to draft the title + body from the diff before posting through to GitHub.
- GitHub PR review comments inline in the chat. Branch-based PR discovery surfaces unresolved review comments as messages in the issue chat. Replying through kanbots posts the response back to the PR thread.
- Card templates. Reusable card scaffolds (title pattern, default labels, default agent, default workspace). New from the + menu on the board.
- Sub-issues. Cards can parent / child each other; cycle detection runs on assign. The card panel grows a Sub-issues section with create-inline + reorder.
- Saved board views. Persist a (filter + sort) preset and recall it with one click. Stored in the new prefs store.
- Multi-select on the board. Shift-click to start a range, hold ⌘/Ctrl to toggle. Bulk move, bulk archive, bulk label.
- Workspace cost rollup. The board toolbar shows total $ spent across all runs in the active workspace, updated as runs complete.
- Recent-activity feed in the LeftRail. Last N agent events across the workspace, click to jump.
- `npx kanbots` launcher. One-command launch on any machine with Node 18+. Zero runtime deps, caches the binary under `~/.kanbots/bin`.
🪄 Improvements
- Slash-command discovery extended. The typeahead now sources from each agent's built-in catalog and user-defined commands (`~/.claude/commands`, skills directories), not just the default set.
- Zustand-backed prefs store. One persisted `kanbots:prefs` key replaces four hand-rolled `localStorage` hooks (diff prefs, focused repo, tweaks, board views + sort + include-backlog). Legacy keys migrate on first read; old hooks kept as thin selector wrappers so no call sites changed.
- Card decision options use the neutral tray style. The inline Decide buttons on a card no longer use the orange-fill primary — they match the tray's neutral `o` style. The floating tray hides itself when the same decision is already inline on the board.
- Selected card uses a soft accent ring. The 2px solid outline is gone, replaced by a 1px `accent-line` shadow. Card hover no longer translates 1px (was a subtle but distracting jitter on scroll).
- Cost meter alignment. Center-aligned with consistent line-height. The "$0.00 today" trailing text no longer floats above the number.
- Primary-button key-cap badges read correctly. Keyboard hints inside primary buttons (e.g. the New task button) now use `--accent-ink` text on a translucent inset so the badge contrasts against the orange fill.
🐛 Fixes
- Closing a chat window no longer crashes. `win.on('closed', ...)` was reading `win.webContents.id` after `webContents` was already destroyed. `webContents.id` is now cached at window creation.
- Preview proxy no longer crashes on Electron startup. `fileURLToPath(import.meta.url)` returned `undefined` when the dispatcher was bundled into the desktop CJS host. Replaced with a portable `__dirname` / `import.meta.url` runtime probe.
- "Rendered more hooks" on the board. `Board.tsx` `useMemo` calls (`grouped`, `orderedNumbers`, `currentViewState`, `matchedViewId`) are hoisted above the loading / error early returns so the hook count is stable across renders.
- "Rendered more hooks" in the workspace tree. `WorkspaceTree.TreeRow` `useEffect` moved above the `hiddenBySearch` early return; the row bails after the hook runs.
- Tray no longer emits invalid HTML. Outer `.kb-tray-item` was a `` containing nested decision ``s. Restructured to a `` with a sibling jump button + options group.
🛠 Internal
- New SQLite migrations 0024..0030 run on first launch (gemini/amp provider config, multi-repo, long-tail providers, chat-sessions, chat-sessions threads, card-templates, issue-relations).
- Preview-proxy injection assets (Eruda + inspector script) are copied alongside the desktop `main.cjs` at build time via tsup `onSuccess` so the bundled CJS host can locate them.
- `Config.previewAssetsDir` threaded through the api so the proxy can find its assets in both `pnpm dev` and packaged builds.
- Nine new high-level wrappers in `@kanbots/llm` (one per new adapter) + eight new desktop auth modules.
- Recurring Rules-of-Hooks trap documented internally; this push fixes the three known recurrences and adds a baseline comment in `Board.tsx` explaining why hoisting matters.
Install
macOS (clears the Gatekeeper quarantine flag automatically):
```sh
curl -fsSL https://kanbots.dev/install-mac.sh | bash
```
One-command launch (any platform, Node 18+):
```sh
npx kanbots
```
Linux / Windows / direct downloads: see assets below.