BloopAI/vibe-kanban
Get 10X more out of Claude Code, Codex or any coding agent
Healthy across the board
weakest axisPermissive license, no critical CVEs, actively maintained — safe to depend on.
Has a license, tests, and CI — clean foundation to fork and modify.
Documented and popular — useful reference codebase to read through.
No critical CVEs, sane security posture — runnable as-is.
- ✓Last commit 2w ago
- ✓14 active contributors
- ✓Distributed ownership (top contributor 20% of recent commits)
Show all 6 evidence items →Show less
- ✓Apache-2.0 licensed
- ✓CI configured
- ✓Tests present
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/bloopai/vibe-kanban)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/bloopai/vibe-kanban on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: BloopAI/vibe-kanban
Generated by RepoPilot · 2026-05-09 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/BloopAI/vibe-kanban shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
GO — Healthy across the board
- Last commit 2w ago
- 14 active contributors
- Distributed ownership (top contributor 20% of recent commits)
- Apache-2.0 licensed
- CI configured
- Tests present
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live BloopAI/vibe-kanban
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/BloopAI/vibe-kanban.
What it runs against: a local clone of BloopAI/vibe-kanban — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in BloopAI/vibe-kanban | Confirms the artifact applies here, not a fork |
| 2 | License is still Apache-2.0 | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit ≤ 43 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of BloopAI/vibe-kanban. If you don't
# have one yet, run these first:
#
# git clone https://github.com/BloopAI/vibe-kanban.git
# cd vibe-kanban
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of BloopAI/vibe-kanban and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "BloopAI/vibe-kanban(\\.git)?\\b" \\
&& ok "origin remote is BloopAI/vibe-kanban" \\
|| miss "origin remote is not BloopAI/vibe-kanban (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(Apache-2\\.0)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"Apache-2\\.0\"" package.json 2>/dev/null) \\
&& ok "license is Apache-2.0" \\
|| miss "license drift — was Apache-2.0 at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 4. Critical files exist
test -f "Cargo.toml" \\
&& ok "Cargo.toml" \\
|| miss "missing critical file: Cargo.toml"
test -f "crates/api-types/src/lib.rs" \\
&& ok "crates/api-types/src/lib.rs" \\
|| miss "missing critical file: crates/api-types/src/lib.rs"
test -f "crates/server" \\
&& ok "crates/server" \\
|| miss "missing critical file: crates/server"
test -f "crates/relay-protocol/src" \\
&& ok "crates/relay-protocol/src" \\
|| miss "missing critical file: crates/relay-protocol/src"
test -f "crates/db" \\
&& ok "crates/db" \\
|| miss "missing critical file: crates/db"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 43 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~13d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/BloopAI/vibe-kanban"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
Vibe Kanban is a local-first/cloud IDE for managing AI coding agent execution pipelines. It combines a kanban board for planning issues with isolated workspaces that give coding agents (Claude Code, Gemini CLI, Codex, etc.) their own git branch, terminal, and dev server; users review diffs inline and merge PRs without leaving the UI. Rust monorepo with ~27 crates under crates/ organized by domain: crates/server (Axum HTTP), crates/relay-* (agent communication), crates/workspace-manager (execution isolation), crates/worktree-manager (git/file management), crates/tauri-app (desktop), crates/preview-proxy (dev server proxying). Frontend likely in packages/ (inferred from assets/). Workspace coordinated via Cargo.toml with resolver = "3".
👥Who it's for
Software engineers and teams who use AI coding agents (Claude Code, GitHub Copilot, Cursor, etc.) and want to parallelize planning, agent execution, and code review in a single unified interface rather than context-switching between GitHub, terminals, and chat interfaces.
🌱Maturity & risk
Active but sunsetting—the repo shows a shutdown announcement on the README. The codebase is production-grade with 27 Rust crates, TypeScript/React frontend, Docker support, multiple deployment workflows, and comprehensive CI via GitHub Actions. However, the project is no longer being actively developed or maintained.
High risk due to active sunsetting and likely abandoned maintenance. The large monorepo spans 30+ interdependent crates (server, relay, workspace-manager, git-host, preview-proxy, relay-webrtc, etc.), creating high complexity and coupling. No clear test coverage metrics visible; dependency on unstable branches (ts-rs uses a fork with custom enum branch). Integration with 10+ external coding agents creates maintenance burden if agent APIs change.
Active areas of work
Project is in shutdown mode per the README announcement. The most recent workflows visible are relay-deploy-prod, remote-deploy-prod, and publish pipelines, but development has halted. The codebase remains stable but no new feature work is expected.
🚀Get running
git clone https://github.com/BloopAI/vibe-kanban.git
cd vibe-kanban
cargo build --release
# Desktop: cargo tauri dev (requires Tauri setup)
# Or npm run dev if TypeScript dev server exists in packages/
Note: Requires authentication with a supported coding agent (Claude, Gemini, etc.) and modern Rust toolchain.
Daily commands:
# Dev server (Rust backend)
cargo run --bin vibe-server # Assumes main binary in crates/server
# Desktop app (requires Tauri setup)
cd crates/tauri-app && cargo tauri dev
# Docker deployment
docker build -t vibe-kanban . && docker run -p 5173:5173 vibe-kanban
See .github/workflows/test.yml for CI commands and .github/workflows/relay-deploy-*.yml for production deploy patterns.
🗺️Map of the codebase
Cargo.toml— Workspace root defining all 30+ member crates and shared dependencies; essential for understanding the project's Rust architecture and build configuration.crates/api-types/src/lib.rs— Core API type definitions used across all services; changing these types cascades through the entire backend.crates/server— Primary backend server implementation; likely contains request routing and core business logic.crates/relay-protocol/src— Defines the relay communication protocol used between desktop, relay, and remote services.crates/db— Database layer with SQLx queries; all data persistence flows through this crate..github/workflows— CI/CD pipeline definitions for testing, building, and deploying across dev/prod environments.README.md— Project overview showing this is a sunsetting Kanban tool for coding agents; critical context for all contributors.
🛠️How to make changes
Add a new API endpoint
- Define request/response types in crates/api-types/src/ (e.g., my_feature.rs) (
crates/api-types/src/lib.rs) - Add route handler in crates/server (typically routes.rs or a feature module) (
crates/server) - Implement business logic in crates/services (
crates/services) - Add database query in crates/db with SQLx SQL file (
crates/db) - Export new type from crates/api-types/src/lib.rs (
crates/api-types/src/lib.rs)
Add a new workspace or project feature
- Define workspace metadata type in crates/api-types/src/workspace.rs (
crates/api-types/src/workspace.rs) - Add workspace manager logic in crates/workspace-manager (
crates/workspace-manager) - Add database schema migration and SQLx queries in crates/db (
crates/db) - Create relay protocol message type in crates/relay-protocol for agent sync (
crates/relay-protocol)
Integrate a new git host (GitHub/GitLab variant)
- Add git provider trait in crates/git-host (
crates/git-host) - Implement provider-specific OAuth in crates/api-types/src/oauth.rs (
crates/api-types/src/oauth.rs) - Add repository sync logic in crates/git (
crates/git) - Wire provider into server initialization in crates/server (
crates/server)
Add a new relay deployment target
- Add deployment config in crates/deployment or crates/local-deployment (
crates/deployment) - Define relay host type in crates/relay-hosts (
crates/relay-hosts) - Create GitHub Actions workflow in .github/workflows (e.g., relay-deploy-custom.yml) (
.github/workflows)
🔧Why these technologies
- Rust + Tokio — Type safety, memory efficiency, and async I/O for handling multiple concurrent relay connections at scale.
- PostgreSQL (SQLx) — Compile-time query verification with SQLx ensures API consistency; ACID transactions for issue and workspace mutations.
- WebSocket + WebRTC — Bi-directional real-time communication for agents; WebRTC enables peer-to-peer relay connections with fallback tunneling.
- Tauri Desktop App — Cross-platform (Windows/macOS/Linux) desktop wrapper with native IPC bridge to Rust backend; lightweight alternative to Electron.
- Docker + GitHub Actions — Containerized deployments for relay and server; CI/CD automation for dev/prod environments.
⚖️Trade-offs already made
-
Monolithic workspace (30+ Rust crates) vs. microservices
- Why: Unified dependency graph and compile-time safety; easier to refactor and coordinate type changes across layers.
- Consequence: Longer build times; harder to scale individual services independently; requires careful crate boundaries.
-
Tauri desktop app for agent interface
- Why: Native performance and smaller bundle size compared to Electron; direct IPC to Rust backend without Node overhead.
- Consequence: Smaller ecosystem for UI libraries; less community adoption than Electron; platform-specific quirks.
-
Compile-time SQLx query verification
- Why: Catch SQL errors at compile time; refactoring-safe.
- Consequence: Requires live database during builds; query metadata checked into repo (.sqlx/); harder to refactor schema dynamically.
-
Relay architecture (agent → relay → server/remote)
- Why: Enables offline agent operation; simplifies firewall traversal; decouples agent from backend.
- Consequence: Extra network hop; relay becomes a potential bottleneck; requires redundancy and failover logic.
🚫Non-goals (don't propose these)
- Does not provide real-time collaborative editing (separate service responsibility).
- Not a Git client; integrates with existing hosts (GitHub, GitLab) via API only.
- Does not store source code; indexes and manages references only.
- Not a general-purpose project management tool; optimized for AI agent workflows.
🪤Traps & gotchas
Database required: Must have PostgreSQL running; .env likely needs DATABASE_URL=postgres://.... Agent authentication: Each supported agent (Claude, Gemini, Copilot) requires separate auth setup—failure to configure blocks agent execution. Relay tunneling complexity: crates/relay-webrtc and crates/relay-tunnel-core add NAT traversal; misconfiguration causes agent-server disconnection. Monorepo Cargo.toml: Changes to workspace members require regenerating Cargo.lock. TypeScript codegen: ts-rs codegen for API types must run before frontend build—missing step breaks type safety. Fork dependency: ts-rs uses a non-standard branch (use-ts-enum) not in crates.io; risk of stale or incompatible updates.
🏗️Architecture
💡Concepts to learn
- Workspace Isolation — Vibe's core value—each agent run gets its own branch, terminal, and dev server; understanding
crates/workspace-managerandcrates/worktree-manageris essential to modify execution model - WebRTC Data Channels (Relay Tunneling) —
crates/relay-webrtcenables P2P agent-to-server tunneling when direct connection fails; NAT/firewall traversal is critical for remote agent deployment - Monorepo Workspace (Cargo) — 27 interdependent crates coordinated via single Cargo.toml with workspace resolver; dependency management and build performance depend on correct workspace setup
- Code Generation (ts-rs) — Backend Rust types auto-generate TypeScript definitions via ts-rs fork; frontend type safety depends on this codegen running before build
- Diff Visualization & Inline Comments — Core UX for code review in Vibe; requires parsing git diffs, matching hunks to source lines, and storing comment anchors—frontend likely uses a library like
diff-match-patch - Process Execution in Sandboxed Environments —
crates/executorsruns agent commands (build, test) in isolated contexts; security and resource limits are critical to prevent rogue agents from escaping - MCP (Model Context Protocol) —
crates/mcpenables agents to call tools (git, file I/O, bash); understanding MCP schema is key to extending what agents can do
🔗Related repos
vercel/ai— SDK for building AI-powered apps in TypeScript/JS; Vibe uses agents that depend on LLM SDKs like this for Claude/Gemini callscontinuedev/continue— Open-source IDE extension for Claude/other agents; similar goal of integrating agents into dev workflow but as an IDE plugin rather than standalone appjanhq/jan— Desktop AI agent runner with local-first design; overlaps with Vibe's workspace isolation and desktop (Tauri) architecturegithub/copilot-cli— GitHub's agent CLI interface; Vibe wraps Copilot and other agents as first-class execution targetsaider-ai/aider— Terminal-based AI pair programmer with git integration; predecessor model for agent-driven PR workflows that Vibe extends into a web UI
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add integration tests for API types serialization and deserialization
The crates/api-types crate exports 20+ types (auth.rs, issue.rs, pull_request.rs, etc.) that are used across the workspace but lacks integration tests. Since ts-rs is configured to generate TypeScript types, testing round-trip serialization (Rust → JSON → TypeScript) would catch breaking changes early and ensure type safety across the Rust/Node boundary.
- [ ] Create crates/api-types/tests/integration_tests.rs
- [ ] Add test cases for each major type in crates/api-types/src/*.rs (auth, issue, workspace, organizations, etc.)
- [ ] Test serde serialization/deserialization for edge cases (null fields, empty arrays, nested objects)
- [ ] Verify ts-rs generated TypeScript matches actual serialized JSON in tests
Add GitHub Actions workflow for workspace-wide cargo checks and clippy linting
The repo has .github/actions/cargo-checks-common-setup but no unified workflow running cargo fmt, clippy, and test across the 24-member workspace. Current test.yml may not be comprehensive. A standardized pre-commit linting workflow would catch quality issues before merge and reduce review cycles.
- [ ] Create .github/workflows/cargo-lint.yml that runs on PR pushes
- [ ] Configure matrix strategy to run
cargo fmt --check,cargo clippy --all-targets --all-features -- -D warnings, andcargo test --workspacein parallel - [ ] Reference existing .github/actions/cargo-checks-common-setup/action.yml for common setup (Rust toolchain, dependencies)
- [ ] Add job status checks to GitHub branch protection rules in settings
Document the MCP (Model Context Protocol) crate public API with examples
The crates/mcp directory exists in the workspace but there's no crates/mcp/README.md or documentation on how external coding agents should integrate. Given the repo's core purpose ('Get 10X more out of Claude Code, Gemini CLI, etc.'), clear MCP integration examples would lower contributor friction and clarify the agent integration pattern used throughout the codebase.
- [ ] Create crates/mcp/README.md documenting the public API exported from crates/mcp/src/lib.rs
- [ ] Add a 'Quick Start' section with code examples showing how to initialize and use the MCP module
- [ ] Document the relationship between crates/mcp and crates/relay-protocol (used by agents)
- [ ] Reference AGENTS.md and CLAUDE.md to explain how agents consume this crate
🌿Good first issues
- Add integration tests for
crates/api-typesissue schema—currently no visible test files; cover serialization of issue_assignee, issue_tag, and issue_comment types to ensure API contract stability. - Document the relay protocol message flow in a PROTOCOL.md—currently only
.github/actions/and workflow YAMLs exist; a new contributor can tracecrates/relay-protocol,crates/relay-ws, andcrates/relay-controlto write a message sequence diagram. - Add environment variable validation to
crates/server/src/main.rs—check for required vars (DATABASE_URL, GITHUB_TOKEN for git-host, STORAGE_BUCKET) at startup and fail with clear error messages rather than runtime panics.
⭐Top contributors
Click to expand
Top contributors
- @actions-user — 20 commits
- @stunningpixels — 19 commits
- @LSRCT — 16 commits
- @anastasiya1155 — 15 commits
- @ggordonhall — 11 commits
📝Recent commits
Click to expand
Recent commits
4deb7ec— chore: bump version to 0.1.44 (actions-user)b696a7e— Sort model selector models alphabetically (Vibe Kanban) (#3389) (stunningpixels)9f10150— Add README sunsetting banner (#3388) (stunningpixels)97123d5— Sunset project routes to export-only page (#3387) (stunningpixels)c768ce2— Bump Codex to 0.124.0 and refresh executor metadata (#3385) (stunningpixels)c395623— Bump Claude Code CLI to 2.1.119 (#3384) (stunningpixels)c2bea40— Pre-register execution log stores before streaming normalized logs (Vibe Kanban) (#3370) (stunningpixels)4c0a665— chore: bump version to 0.1.43 (actions-user)a1339e5— fix: scope vendored openssl to linux to unbreak windows-msvc cross-compile (#3367) (stunningpixels)d737b60— fix: vendor openssl to unblock musl + windows-msvc cross-compile (#3366) (stunningpixels)
🔒Security observations
- High · Unencrypted PostHog API Key in Docker Build Arguments —
Dockerfile, lines with POSTHOG_API_KEY and POSTHOG_API_ENDPOINT. The Dockerfile exposes PostHog API keys and endpoints as ARG parameters without any encryption or masking. These values are passed as environment variables during the build process and could be logged in Docker build history, making them accessible to anyone with access to the image layers or build logs. Fix: Use Docker BuildKit secrets instead of ARG for sensitive data. ReplaceARG POSTHOG_API_KEYwith--secretand reference viaRUN --mount=type=secret. Alternatively, pass these values at runtime only, not at build time. - High · Incomplete Dockerfile Configuration —
Dockerfile (incomplete). The provided Dockerfile snippet is truncated and incomplete (ends with 'ARG POSTHOG_API'). This incomplete configuration suggests potential missing security steps, missing FROM scratch or distroless final stage, and unverified build process. The full context cannot be assessed. Fix: Provide the complete Dockerfile for analysis. Ensure: (1) multi-stage builds use minimal final images, (2) no unnecessary layers with secrets, (3) proper file permissions, (4) non-root user execution. - Medium · Arbitrary Node.js Memory Configuration —
Dockerfile, NODE_OPTIONS line. The Dockerfile sets NODE_OPTIONS=--max-old-space-size=4096 as an environment variable. While not inherently insecure, this could be manipulated or exploited if the environment is not properly controlled, and high memory allocation can mask memory leaks. Fix: Use a fixed memory limit or configure this via build arguments with validation. Monitor and alert on memory usage. Consider using memory limits at the container orchestration level (e.g., Docker Compose, Kubernetes). - Medium · Missing Security Headers and CORS Configuration —
crates/server (inferred), axum and tower-http dependencies. The workspace depends on tower-http with CORS enabled, but the codebase structure doesn't show explicit security header configurations (no visible helmet, security middleware, or explicit header setup in API types). CORS misconfiguration could enable cross-origin attacks. Fix: Explicitly configure CORS with strict origin whitelisting. Add security headers middleware: X-Content-Type-Options, X-Frame-Options, Strict-Transport-Security, Content-Security-Policy. Validate all cross-origin requests. - Medium · SQLx Query Caching Without Verification —
crates/db/.sqlx/ directory and associated query files. The presence of .sqlx query cache files (crates/db/.sqlx/query-*.json) suggests compiled SQL queries are cached. If these caches are out of sync with actual database schema or if user input is improperly parameterized, SQL injection risks could exist. Fix: Ensure all database queries use proper parameterized statements with sqlx::query!() macros. Regenerate .sqlx cache files after schema changes. Never concatenate user input into SQL queries. Audit the db module for raw SQL usage. - Medium · Dependency on External Git Repository for ts-rs —
Cargo.toml, ts-rs dependency. The ts-rs dependency is pinned to a specific GitHub branch (xazukx/ts-rs:use-ts-enum) rather than a crates.io release. This introduces risk of: (1) branch deletion or unauthorized changes, (2) no vulnerability scanning, (3) supply chain attacks via compromised fork. Fix: Switch to an official crates.io release of ts-rs when available. If a fork is necessary, verify the maintainer's reputation, enable dependency scanning with tools like cargo-audit, and consider vendoring or mirroring the dependency. - Medium · Weak Cryptographic Library Configuration —
Cargo.toml, rustls, aws-lc-sys, aws-lc-rs dependencies. While rustls is configured with aws_lc_rs backend (secure), the dependency resolution includes aws-lc-sys and aws-lc-rs with pinned versions (=0.37.0, =1.16.0). Pinned versions could prevent security updates. Additionally, tls12 is enabled alongside tls13, which may expose downgrade attacks. Fix: Update version constraints to allow patch updates (0.37 ->
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.