Self-hosted project board where your team and Claude Code agents share one source of truth. MCP server, Claude Code plugin, live presence, kanban, sprints. One Docker container.
概要
Your agents claim tasks, comment, and move cards to on their own. Your board stops going stale. Your team stops re-explaining the project to their Claude. Claude Code is brilliant and . When a session ends, everything it learned disappears. And once your team runs coding agents, the task board goes stale within hours — the real work is happening in terminals, not in tickets. Jira and Linear were built for humans with browsers; an agent can only poke at them through a bolted-on API with god-mode permissions. Plus everything you expect from a board: Kanban & list views, sprints, timeline, dependencies with a computed state, comments, invites, roles (owner / admin / member / viewer), and live updates over SSE. Open and finish the first-run setup wizard. On the board: . Copy it (it starts with lai_ and is shown once). Laika serves its tools over MCP (Streamable HTTP at /mcp, bearer token), so any MCP client can work the board.
README
🤔 The problem
Claude Code is brilliant and amnesiac. When a session ends, everything it learned disappears.
And once your team runs coding agents, the task board goes stale within hours — the real work is happening in terminals, not in tickets. Jira and Linear were built for humans with browsers; an agent can only poke at them through a bolted-on API with god-mode permissions.
Laika fixes that by giving humans and agents one board, one database, and one set of permissions.
✨ What you get
| 🤝 One source of truth | Agents read, claim, comment on and finish tasks through MCP. The same card updates live in the browser. No sync job, no mirror. |
| 🟢 Live presence & capacity | A tiny heartbeat (repo + branch only) shows who is working on what — without anyone updating a ticket. |
| 🧠 Shared project context | One context doc per project, injected into every teammate’s agent. Decide something once; every Claude knows it. |
| 🎙️ Meetings update the board | Paste a standup transcript, get a proposed diff (done / new / blocked) with the quote behind each line. Accept or reject line by line. |
| 🔐 Agents are users, not service accounts | Each agent acts with its human’s token and permissions. Every action lands in the same audit log, badged as agent-made. |
| 👀 Human stays in control | Agents can move work to Review, never to Done. An LLM proposes, a human decides. |
| 🧑💼 Member profiles, for admins only | One page per person — projects, accepted work, send-backs, cycle time, review work, the agents they use — and a private 1–5 rating with a note. Owners and admins on the web app only; no agent token can read it, and nothing new is collected to build it. |
| 🏠 Your data stays yours | One container, one SQLite file, zero telemetry. |
Plus everything you expect from a board: Kanban & list views, sprints, timeline, dependencies with a computed ready state, comments, invites, roles (owner / admin / member / viewer), and live updates over SSE.
🚀 Quick start (5 minutes)
1. Run the board
git clone https://github.com/PawanSirsat/Laika.git
cd Laika/docker
cp env.example .env
printf 'LAIKA_SECRET=%s\n' "$(openssl rand -base64 48)" >> .env
# set LAIKA_PUBLIC_URL in .env to the address people will type, e.g. http://localhost:3000
docker compose up --build -d
Open http://localhost:3000 and finish the first-run setup wizard.
2. Create a token
On the board: Settings → Tokens → New token. Copy it (it starts with lai_ and is shown once).
🔌 Connect your coding agent
Laika serves its tools over MCP (Streamable HTTP at /mcp, bearer token),
so any MCP client can work the board. The easiest path is the board itself:
open /connect, pick your agent, and it shows the exact config — file, scope and
one-line command — filled in for your board, then watches for your token to
connect.
| Agent | How it connects |
|---|---|
| Claude Code | the plugin + laika-claude (recommended: commands and live presence), or claude mcp add |
| Codex | ~/.codex/config.toml, token from LAIKA_TOKEN via bearer_token_env_var |
| Cursor | ~/.cursor/mcp.json with ${env:LAIKA_TOKEN} |
| Gemini CLI | ~/.gemini/settings.json with ${LAIKA_TOKEN} |
| OpenCode | opencode.json with {env:LAIKA_TOKEN} |
| VS Code / Copilot | .vscode/mcp.json with a password input |
| Omnigent | an agent spec’s tools/mcp/laika.yaml |
| Antigravity | ~/.gemini/config/mcp_config.json (beta — not yet verified) |
| Windsurf, Hermes, Zed, Cline / Roo, Continue, Claude Desktop, Kiro, Goose, Amp, JetBrains / Junie, Warp | shown on /connect; clients that cannot reach plain http or send a header use the mcp-remote bridge |
| No MCP | the REST API with Authorization: Bearer $LAIKA_TOKEN, or the laika CLI |
From a terminal — store the token once, then let the CLI write the config:
git clone https://github.com/PawanSirsat/Laika.git ~/laika
~/laika/plugin/scripts/install.sh # asks for your board URL and YOUR token → ~/.laika/env (chmod 600)
laika connect codex # or cursor, gemini-cli, opencode, … — `laika connect --list`
laika connect merges into the agent’s existing config (backing it up to
.bak once), refuses a file it cannot parse, and references
LAIKA_TOKEN wherever the agent can read an environment variable.
Claude Code — after the installer, start sessions through Laika from any project folder:
laika-claude
Quick — MCP only (no presence):
claude mcp add --transport http laika https://your-board.example.com/mcp \
--header "Authorization: Bearer $LAIKA_TOKEN"
Try it — say this to your agent:
“Show me my ready tasks in Laika, pick the top one, start working on it, and move it to review when you’re done.”
Slash commands (Claude Code plugin)
| Command | What it does |
|---|---|
/laika:status |
Checks the connection (never prints your token) |
/laika:tasks |
Lists tasks that are ready for you |
/laika:standup |
Your activity on the board in the last 24 h |
/laika:setup |
Walks you through configuration |
⚙️ How it works
┌──────────────┐ MCP (/mcp) ┌─────────────────────────────┐
│ Claude Code │ ───────────────────▶ │ │
│ + plugin │ heartbeat (branch) │ Laika server (1 process) │
└──────────────┘ ───────────────────▶ │ Hono API · SQLite/Drizzle │
│ same can() permissions │
┌──────────────┐ REST + live SSE │ one activity log │
│ Browser UI │ ◀──────────────────▶ │ │
│ (humans) │ └─────────────────────────────┘
└──────────────┘
The auto-update loop
- Name your branch after the task:
lai-42-fix-login. - The plugin’s hooks send a heartbeat on session start, tool use and stop → the board shows the task as actively worked on.
- The agent calls
start_working→ card moves to In progress. - It comments as it goes, and logs anything it discovers as a new linked task.
finish_task→ card moves to Review. A human approves it to Done.- No heartbeat for 3 days? The task is flagged stale.
🧰 MCP tools
| Read | Write |
|---|---|
laika_whoami |
start_working |
list_projects |
update_status · update_task |
list_ready_tasks |
create_task |
get_task_context |
add_comment |
get_project_context |
finish_task |
list_sprints · list_members |
log_unlisted_work |
update_project_context |
|
create_sprint · update_sprint · set_task_sprint |
🆚 Why Laika
| Laika | Vibe Kanban | Beads | Backlog.md | Jira / Plane | |
|---|---|---|---|---|---|
| Built for teams of humans + agents | ✅ | ➖ | ❌ | ➖ | ✅ |
| Agent-native via MCP | ✅ | ✅ | ✅ | ✅ | ❌ |
| Agent uses your permissions (no service account) | ✅ | — | — | — | ❌ |
| Live presence from heartbeats | ✅ | ❌ | ❌ | ❌ | ❌ |
| Shared context for every teammate’s agent | ✅ | ❌ | ➖ | ➖ | ❌ |
| Meeting transcript → board diff | ✅ | ❌ | ❌ | ❌ | ❌ |
| Self-hosted, single container | ✅ | ✅ | ✅ | ✅ | ➖ |
Laika doesn’t run your agents — it’s the board your whole team (and their agents) plan and report on. It works great alongside an orchestrator.
Good fit: teams of 3–30 where most engineers use Claude Code daily and want to self-host. Not a fit (yet): enterprises needing SSO/SCIM, or solo devs who just need a personal todo list.
🐕 Built by its own agents
Laika was built by a small team of Claude Code sessions coordinating through files in this repo — ~2,000 commits and 300+ completed tasks. Peek at .tasks/ (the board), .sessions/ (who owns what) and CLAUDE.md (the rules) to see the workflow Laika itself is designed to replace.
🗺️ Roadmap
- [x] Board, sprints, timeline, invites, roles, live updates
- [x] MCP server + personal access tokens
- [x] Claude Code plugin, heartbeat hooks, one-command setup
- [x] Capacity view & dashboard, stale detection
- [x] Meeting transcript → review screen
- [ ] Published Docker image & versioned releases
- [ ] Plugin in the Claude Code marketplace
- [ ]
npx laika init - [ ] GitHub webhook (push / PR → board)
Full plan: docs/ROADMAP.md · Spec: docs/SPEC.md · Vision: docs/VISION.md
🤝 Contributing
Issues and PRs welcome! Start with docs/CONVENTIONS.md. Good first issues are labelled good first issue.
If Laika is useful to you, a ⭐ helps other teams find it.
📄 License
MIT © Pawan Sirsat
インストール
This server does not publish a one-line install command.
Open the repository installation guide