Manage AI coding agents on a visual Kanban board. Run parallel agents through a To Do→In Progress→Review→Done flow with automatic git worktree isolation and GitHub PR creation.
80
72%
Does it follow best practices?
Impact
98%
2.13xAverage score across 3 eval scenarios
Advisory
Suggest reviewing before use
Optimize this skill with Tessl
npx tessl skill review --optimize ./.agent-skills/vibe-kanban/SKILL.md| Platform | Current Support | Requirements |
|---|---|---|
| Claude | Native MCP integration | Register in mcpServers |
| Codex | MCP script integration | scripts/mcp-setup.sh --codex or equivalent config |
| Gemini | MCP registration | mcpServers/bridge configuration |
| OpenCode | MCP/bridge integration | omx/ohmg or equivalent setup |
Whether this skill alone is sufficient:
Manage multiple AI agents (Claude/Codex/Gemini) from a single Kanban board. Moving a card (task) to In Progress automatically creates a git worktree and starts the agent.
# Node.js 18+ required
node --version
# Complete agent authentication beforehand
claude --version # Set ANTHROPIC_API_KEY
codex --version # Set OPENAI_API_KEY (optional)
gemini --version # Set GOOGLE_API_KEY (optional)
opencode --version # No separate setup needed (GUI-based)Verified versions (as of 2026-02-22)
- vibe-kanban: v0.1.17
- claude (Claude Code): 2.1.50
- codex: 0.104.0
- gemini: 0.29.5
- opencode: 1.2.10
# Run immediately (no installation needed)
npx vibe-kanban
# Specify port (default port 3000)
npx vibe-kanban --port 3001
# Specify port and environment variable together
PORT=3001 npx vibe-kanban --port 3001
# Use wrapper script
bash scripts/vibe-kanban-start.shBrowser opens http://localhost:3000 automatically.
⚠️ Port conflict warning: If another dev server like Next.js is using port 3000, run
PORT=3001 npx vibe-kanban --port 3001. ConfirmMain server on :3001in the startup log, then visithttp://localhost:3001.
Normal startup log:
Starting vibe-kanban v0.1.17...
No user profiles.json found, using defaults only
Starting PR monitoring service with interval 60s
Remote client initialized with URL: https://api.vibekanban.com
Main server on :3001, Preview proxy on :XXXXX
Opening browser...git clone https://github.com/BloopAI/vibe-kanban.git
cd vibe-kanban
pnpm i
pnpm run dev| Variable | Description | Default |
|---|---|---|
PORT | Server port | 3000 |
HOST | Server host | 127.0.0.1 |
VIBE_KANBAN_REMOTE | Allow remote connections | false |
VK_ALLOWED_ORIGINS | CORS allowed origins | Not set |
DISABLE_WORKTREE_CLEANUP | Disable worktree cleanup | Not set |
ANTHROPIC_API_KEY | For Claude Code agent | — |
OPENAI_API_KEY | For Codex/GPT agent | — |
GOOGLE_API_KEY | For Gemini agent | — |
Set in .env file before starting the server.
API key location per agent (Settings → Agents → Environment variables)
- Claude Code:
ANTHROPIC_API_KEY- Codex:
OPENAI_API_KEY- Gemini:
GOOGLE_API_KEY- Opencode: No separate setup needed (built-in auth)
Vibe Kanban runs as an MCP (Model Context Protocol) server, letting agents control the board directly.
~/.claude/settings.json or project .mcp.json:
{
"mcpServers": {
"vibe-kanban": {
"command": "npx",
"args": ["vibe-kanban", "--mcp"],
"env": {
"MCP_HOST": "127.0.0.1",
"MCP_PORT": "3001"
}
}
}
}Add to ~/.config/opencode/opencode.json:
{
"mcp": {
"vibe-kanban": {
"command": "npx",
"args": ["vibe-kanban", "--mcp"],
"env": {
"MCP_HOST": "127.0.0.1",
"MCP_PORT": "3001"
}
}
}
}After restarting, vk_* tools are available directly in your OpenCode session.
| Tool | Description |
|---|---|
vk_list_cards | List all cards (workspaces) |
vk_create_card | Create a new card |
vk_move_card | Change card status |
vk_get_diff | Get card diff |
vk_retry_card | Re-run a card |
⚠️ Tool name changes from older versions:
vk_list_tasks→vk_list_cards,vk_create_task→vk_create_cardThese are the confirmed tool names from the actual MCP API as of v0.1.17.
To connect Vibe Kanban with Codex, run the following from your project root:
bash scripts/mcp-setup.sh --codexThis command adds the vibe-kanban MCP server config to ~/.codex/config.toml.
Hook-based auto-looping is not default Codex behavior, so retry/loop management is handled via board card progress states or a higher-level orchestrator.
v0.1.17 actual UI structure: Vibe Kanban is a Kanban board, but the actual unit of work is a Workspace. Each workspace handles one task independently.
# Default run
npx vibe-kanban
# → http://localhost:3000
# Port conflict (e.g., Next.js)
PORT=3001 npx vibe-kanban --port 3001
# → http://localhost:3001Review the implementation plan for this feature with plannoplanno (plannotator) is an independent skill — usable without Vibe Kanban.
+ button in the left sidebarmain)When a workspace is created:
vk/<hash>-<slug> branch is created automatically (e.g., vk/3816-add-a-comment-to)Workspace states:
Workspace directory (configurable in Settings → General → Workspace Directory):
~/.vibe-kanban-workspaces/ ← default location (under home directory)
├── <workspace-uuid-1>/ ← workspace 1 isolated environment
├── <workspace-uuid-2>/ ← workspace 2 isolated environment
└── <workspace-uuid-3>/ ← workspace 3 isolated environmentBranch naming (configurable in Settings → General → Git → Branch Prefix):
vk/<4-char ID>-<task-slug>
e.g.: vk/3816-add-a-comment-to-readmeInternal behavior:
git worktree add <workspace-dir> -b vk/<hash>-<task-slug> main
<agent-cli> -p "<task-description>" --cwd <workspace-dir>Recommended .gitignore entries:
.vibe-kanban-workspaces/ .vibe-kanban/
# Official image
docker run -p 3000:3000 vibekanban/vibe-kanban
# Pass environment variables
docker run -p 3000:3000 \
-e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
-e VK_ALLOWED_ORIGINS=https://vk.example.com \
vibekanban/vibe-kanban# CORS must be allowed
VK_ALLOWED_ORIGINS=https://vk.example.com
# Or multiple origins
VK_ALLOWED_ORIGINS=https://a.example.com,https://b.example.comIntegrates with VSCode Remote-SSH:
vscode://vscode-remote/ssh-remote+user@host/path/to/.vk/trees/<task-slug># Clean up orphaned worktrees
git worktree prune
# List current worktrees
git worktree list
# Force remove a specific worktree
git worktree remove .vk/trees/<slug> --force# CORS config required for remote access
VK_ALLOWED_ORIGINS=https://your-domain.com npx vibe-kanban# Test CLI directly
claude --version
codex --version
# Check API keys
echo $ANTHROPIC_API_KEY
echo $OPENAI_API_KEY# Use a different port
npx vibe-kanban --port 3001
# Or use environment variable
PORT=3001 npx vibe-kanban# Disable worktree cleanup and restart
DISABLE_WORKTREE_CLEANUP=1 npx vibe-kanban| Situation | Mode |
|---|---|
| Shared team board, visual progress tracking | UI (npx vibe-kanban) |
| CI/CD pipeline, script automation | CLI (scripts/pipeline.sh) |
| Quick local experiments | CLI (scripts/conductor.sh) |
| Browser diff/log review | UI |
Configure each agent in Settings → Agents:
| Agent | Command | API Key |
|---|---|---|
| Opencode | opencode | Built-in (default) |
| Claude Code | claude | ANTHROPIC_API_KEY |
| Codex | codex | OPENAI_API_KEY |
| Gemini | gemini | GOOGLE_API_KEY |
| Amp | amp | Separate |
| Qwen Code | qwen-coder | Separate |
| Copilot | copilot | GitHub account |
| Droid | droid | Separate |
| Cursor Agent | cursor | Cursor subscription |
Configurable per agent:
claude-opus-4-6)"Payment Flow v2" epic
├── Workspace 1: Frontend UI → Claude Code
├── Workspace 2: Backend API → Codex
└── Workspace 3: Integration tests → Opencode
→ 3 workspaces Running simultaneously → parallel implementationClaude Code → design/domain-heavy features
Codex → types/tests/refactoring
Gemini → docs/storybook writing
Opencode → general tasks (default)Set VIBE_KANBAN_REMOTE=true
→ Team members check status on the board
→ Review/approval only via GitHub PR
→ Parallel agents + traditional PR process combinedSame task, two workspaces:
Workspace A → Claude Code (UI structure focus)
Workspace B → Codex (performance optimization focus)
→ Compare PRs, pick best-of-bothCombine with OpenCode's ulw (ultrawork) mode to run agents in parallel at the epic level:
# ulw keyword → activates ultrawork parallel execution layer
# Vibe Kanban board: npx vibe-kanban (run in a separate terminal)
task(category="visual-engineering", run_in_background=True,
load_skills=["frontend-ui-ux", "vibe-kanban"],
description="[Kanban WS1] Frontend UI",
prompt="Implement payment flow UI — card input, order confirmation, and completion screens in src/components/payment/")
task(category="unspecified-high", run_in_background=True,
load_skills=["vibe-kanban"],
description="[Kanban WS2] Backend API",
prompt="Implement payment flow API — POST /charge, POST /refund, GET /status/:id")
task(category="unspecified-low", run_in_background=True,
load_skills=["vibe-kanban"],
description="[Kanban WS3] Integration tests",
prompt="Write payment E2E tests — success/failure/refund scenarios")
# → 3 workspaces appear simultaneously in Running state on the Kanban board
# → On each completion: Needs Attention → PR created → ArchiveVIBE_KANBAN_REMOTE=true only on trusted networks┌─────────────────────────────────────────────────────────┐
│ Vibe Kanban UI │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │ To Do │In Progress│ Review │ Done │ │
│ └──────────┴──────────┴──────────┴──────────┘ │
└───────────────────────────┬─────────────────────────────┘
│ REST API
┌───────────────────────────▼─────────────────────────────┐
│ Rust Backend │
│ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌──────────┐ │
│ │ server │ │executors │ │ git │ │ services │ │
│ └─────────┘ └──────────┘ └─────────┘ └──────────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │ SQLite │ │
│ └───────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌────▼────┐ ┌─────▼─────┐ ┌────▼────┐
│ Claude │ │ Codex │ │ Gemini │
│worktree1│ │ worktree2 │ │worktree3│
└─────────┘ └───────────┘ └─────────┘.agent-skills/vibe-kanban/
├── SKILL.md # Main skill document
├── SKILL.toon # TOON format (compressed)
├── scripts/
│ ├── start.sh # Server start wrapper
│ ├── cleanup.sh # Worktree cleanup
│ ├── mcp-setup.sh # MCP setup automation
│ └── health-check.sh # Server health check
├── references/
│ ├── environment-variables.md # Environment variable reference
│ └── mcp-api.md # MCP API reference
└── templates/
├── claude-mcp-config.json # Claude Code MCP config
├── docker-compose.yml # Docker deployment template
└── .env.example # Environment variable example# Start server
bash scripts/start.sh --port 3001
# Worktree cleanup
bash scripts/cleanup.sh --dry-run # Preview
bash scripts/cleanup.sh --all # Remove all VK worktrees
# MCP setup
bash scripts/mcp-setup.sh --claude # Claude Code setup
bash scripts/mcp-setup.sh --all # Setup for all agents
# Health check
bash scripts/health-check.sh
bash scripts/health-check.sh --json # JSON output=== Start server ===
npx vibe-kanban Run immediately (port 3000)
PORT=3001 npx vibe-kanban --port 3001 Port conflict (e.g., Next.js)
http://localhost:3000 Board UI
=== Environment variables ===
PORT=3001 Change port
VK_ALLOWED_ORIGINS=https://... Allow CORS
ANTHROPIC_API_KEY=... Claude Code auth
OPENAI_API_KEY=... Codex auth
GOOGLE_API_KEY=... Gemini auth
=== MCP integration ===
npx vibe-kanban --mcp MCP mode
vk_list_cards List cards (workspaces)
vk_create_card Create card
vk_move_card Change status
=== Workspace flow ===
Create → Running → Needs Attention → Archive
Running: worktree created + agent started
Needs Attention: finished or needs input
Archive: PR merge complete
=== MCP config file locations ===
Opencode: ~/.config/opencode/opencode.json
Claude Code: ~/.claude/settings.json or .mcp.json
=== worktree cleanup ===
git worktree prune Clean up orphans
git worktree list List all
git worktree remove <path> Force removec033769
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.