A Rust terminal kanban board for managing Git worktrees and OpenCode tmux sessions.
Before creating this tool, I used Agent of Empires — which is also a cool project with a similar purpose. However, I found its session management quite barebone as projects grew more complex. I was also inspired by VibeKanban. So you can think of this tool as a combination of both - managing your tasks in a kanban without leaving your favorate terminal environment.
What makes this different: I'm building this exclusively for opencode users. This lets me integrate deeply with opencode's API and offer unique features:
- Stable session running state detection
- Session TODO list with progress tracking
- Running subagents and their TODO summaries (when applicable)
- And more to come 🚀
- Unix shell
tmuxinstalled and available onPATH(required)opencodeinstalled and available onPATH(recommended for attach/resume workflows)
-
Verify runtime tools:
tmux -V opencode --version
-
Start the app:
npx @qrafty-ai/opencode-kanban
-
In the UI:
- Press
nto create a task - Press
Enteron a task to attach - Press
?for built-in help - Press
qto quit
- Press
-
In the attached tmux session:
- Press
<prefix>+Ofor help overlay - Press
<prefix>+Kto return to kanban session
- Press
If you start outside tmux, opencode-kanban auto-creates or auto-attaches to a tmux session named opencode-kanban.
npm install -g @qrafty-ai/opencode-kanbanyay -S opencode-kanban
# or
paru -S opencode-kanbancargo build --release
./target/release/opencode-kanban-
Launch default project:
opencode-kanban
-
Launch a named project:
opencode-kanban --project my-project
-
Start with a theme preset:
opencode-kanban --theme default opencode-kanban --theme light opencode-kanban --theme high-contrast opencode-kanban --theme mono opencode-kanban --theme custom
Each project uses its own SQLite file and board state.
- Press
nto open the new-task dialog. - Pick a repository and enter task details.
- Press
Enterto create. - Press
Enteron the task card to attach to its tmux/OpenCode session.
- Move focus with
h/land select withj/k. - Reorder/move task with
H/J/K/L. - Archive selected task with
a. - Open archive view with
A.
- Press
vto toggle between detail/kanban view - Check detail view for session running state in depth
Ctrl-p: switch projectn: new taskEnter: attach selected taskh/j/k/l: navigate boardH/J/K/L: move taska: archive selected taskA: open archive view?: help overlayq: quit
For full, current bindings, use the in-app help overlay (?).
- Settings file:
~/.config/opencode-kanban/settings.toml - Project databases (Linux default):
~/.local/share/opencode-kanban/*.sqlite
The app creates config/data files on demand.
Theme values live in ~/.config/opencode-kanban/settings.toml.
Top-level option:
theme:default|light|high-contrast|mono|custom
When theme = "custom", configure semantic tokens with these sections:
[custom_theme]inherit:default|light|high-contrast|mono
[custom_theme.base]canvas,surface,text,text_muted,header,accent,danger
[custom_theme.interactive]focus,selected_bg,selected_border,border
[custom_theme.status]running,waiting,idle,dead,broken,unavailable
[custom_theme.tile]repo,branch,todo
[custom_theme.category]primary,secondary,tertiary,success,warning,danger
[custom_theme.dialog]surface,input_bg,button_bg,button_fg
Example:
theme = "custom"
[custom_theme]
inherit = "light"
[custom_theme.base]
canvas = "#E2E7EE"
surface = "#ECF1F7"
text = "#222A3A"
text_muted = "#4E596D"
header = "#2F66BF"
accent = "#0E7490"
danger = "#B02E24"
[custom_theme.interactive]
focus = "#2F66BF"
selected_bg = "#D6DFED"
selected_border = "#477ACD"
border = "#A5B2C6"
[custom_theme.status]
running = "#278449"
waiting = "#AB781A"
idle = "#5D687A"
dead = "#B02E24"
broken = "#B02E24"
unavailable = "#B02E24"
[custom_theme.tile]
repo = "#086678"
branch = "#926614"
todo = "#4E596D"
[custom_theme.category]
primary = "#2F66BF"
secondary = "#AB501F"
tertiary = "#6949AB"
success = "#278449"
warning = "#AB781A"
danger = "#B02E24"
[custom_theme.dialog]
surface = "#ECF1F7"
input_bg = "#E0E6EF"
button_bg = "#CDD8E7"
button_fg = "#FFFFFF"- Accepted color format:
#RRGGBB(hex only).
tmux is required but not available:- Install tmux and confirm
tmux -Vworks in the same shell.
- Install tmux and confirm
OpenCode binary not found:- Install OpenCode and confirm
opencode --versionworks.
- Install OpenCode and confirm
- Mouse scroll/click not working well in tmux:
- Run
tmux set -g mouse on.
- Run
cargo test
cargo clippy -- -D warnings
cargo build --releaseRelease and publisher setup docs are in docs/releasing.md.
MIT

