KaibanJS
TL;DR
KaibanJS is an MIT-licensed JavaScript framework from Kaiban that organises agents like a Kanban team: role-based agents work through tasks that move across a board, with dependencies, parallel runs and human validation steps. It suits JavaScript developers who want role-based agent teams in Node.js or the browser. The repository has had no pushes since May 2026.
Key facts
| Type | Framework |
|---|---|
| Languages / SDKs | JavaScript, TypeScript |
| License | MIT |
| Pricing model | Unknown |
| Orchestration pattern | Crew / roles |
| GitHub stars | 1,480 (as of 2026-09-30) |
| GitHub forks | 159 |
| Last push | 2026-05-15 |
| Latest release | v0.24.1 |
| Repository | kaiban-ai/KaibanJS |
| Website | www.kaibanjs.com |
| Documentation | docs.kaibanjs.com |
| Last verified | 2026-09-30 |
Key features
- Agents defined by name, role, goal, background and tools; the default type is the LLM-backed
ReactChampionAgent. (source) - A
Teamgroups agents and tasks, takesinputs, and runs tasks sequentially, by declareddependencies, or in parallel withallowParallelExecution. (source) - Task outputs flow forward with the
{taskResult:taskN}placeholder in later task descriptions. (source) - Kaiban Board: a local Kanban-style UI started with
npx kaibanjs@latest initthat shows tasks moving between states as agents work. (source) - Human validation: tasks marked
externalValidationRequiredstop inAWAITING_VALIDATIONuntilvalidateTask()orprovideFeedback()is called. (source) - A central Team Store (
team.useStore()) exposes task statuses and workflow logs to React or other UIs. (source) ExternalCodingAgentruns each task through the Claude Code or OpenCode CLI instead of an in-process model call. (source)WorkflowDrivenAgentexecutes@kaibanjs/workflowstep graphs without LLM reasoning and supports suspend and resume. (source)
Architecture and orchestration pattern
Pattern: Crew / roles
A KaibanJS program is a Team of agents and tasks. Each task names the agent that performs it and an expected output. The docs describe three deterministic execution modes that can be combined: tasks run in list order, start once their dependencies finish, or run side by side when marked allowParallelExecution. An LLM manager that would re-plan tasks at runtime is listed as coming soon, so the order is always defined by the developer.
Agents come in three types. The default ReactChampionAgent runs an LLM reasoning loop with tools (LangChain-compatible tools are accepted). WorkflowDrivenAgent executes a step graph from @kaibanjs/workflow, and ExternalCodingAgent hands a task to a local Claude Code or OpenCode process, one CLI call per task.
All state sits in a Team Store, described as Redux-inspired, which records task statuses (TODO, DOING, BLOCKED, REVISE, AWAITING_VALIDATION, DONE) and workflow logs; UIs subscribe to it. Team-level memory is on by default, so every task sees earlier results; with memory: false, tasks only receive results referenced through {taskResult:taskN}.
Human in the loop
A task created with externalValidationRequired: true moves to AWAITING_VALIDATION when its agent finishes, and the workflow status becomes BLOCKED. The application listens with team.onWorkflowStatusChange(), lists waiting tasks with getTasksByStatus('AWAITING_VALIDATION'), and either approves with validateTask(taskId) or sends provideFeedback(taskId, text). Feedback moves the task to REVISE, and the agent reworks it; feedback can also be given on tasks that are BLOCKED or already DONE. Each task keeps a feedbackHistory with content, status and timestamp. ExternalCodingAgent appends reviewer feedback to the prompt before calling the CLI again.
Harnesses it can drive
- Claude Code (evidence)
- OpenCode (evidence)
- OpenClaw (evidence)
Protocols
| Protocol | Support | Note |
|---|---|---|
| MCP | Partial evidence | Client only, through LangChain's @langchain/mcp-adapters (MultiServerMCPClient) from KaibanJS 0.20.1, over stdio or SSE; KaibanJS has no MCP module of its own. |
| A2A | Partial evidence | A how-to guide wraps a team in a server-side A2A endpoint built with the A2A project's @a2a-js/sdk plus Express; A2A is not part of the kaibanjs package and a client side is not covered. |
| AG-UI | Unknown | No mention in the KaibanJS docs sitemap, README or repository code (code search for 'ag-ui' and 'agui' returned nothing); KaibanJS is not listed in the AG-UI README. |
Best for
- JavaScript or TypeScript apps that want role-based agent teams in React, Next.js or Node.js
- Research-then-write task chains where each step's output feeds the next
- Running Claude Code or OpenCode on a fixed sequence of repository tasks
- Demos and internal tools that show agent progress on a Kanban board
Not for
- Workflows that need an LLM manager to re-plan tasks at runtime, which the docs list as coming soon
- Projects that need an actively updated dependency; there have been no pushes since 2026-05-15
- Python codebases
Quickstart
npx kaibanjs@latest init import { Agent, Task, Team } from 'kaibanjs';
const researcher = new Agent({ name: 'Ada', role: 'Researcher', goal: 'Collect facts on a topic' });
const writer = new Agent({ name: 'Ben', role: 'Writer', goal: 'Turn research into a short brief' });
const research = new Task({ referenceId: 'research', description: 'List key facts about {topic}',
expectedOutput: 'Bullet list', agent: researcher });
const brief = new Task({ description: 'Write a 100-word brief from: {taskResult:task1}',
expectedOutput: 'Short brief', agent: writer, dependencies: ['research'], externalValidationRequired: true });
const team = new Team({ name: 'Brief team', agents: [researcher, writer], tasks: [research, brief],
inputs: { topic: 'solid-state batteries' }, env: { OPENAI_API_KEY: process.env.OPENAI_API_KEY } });
team.onWorkflowStatusChange((status) => {
if (status === 'BLOCKED') team.getTasksByStatus('AWAITING_VALIDATION').forEach((t) => team.validateTask(t.id));
});
const output = await team.start();
console.log(output.status, output.result);
Common pitfalls
npx kaibanjs@latest initscaffolds a Kaiban Board project; the key goes in.envasVITE_OPENAI_API_KEY(or another provider), thennpm run kaibanrestarts the board. For library use, install withnpm install kaibanjs.- The quick start lists Node.js 14+ and npm 6+ as prerequisites.
- Anonymous telemetry is on by default; set
KAIBAN_TELEMETRY_OPT_OUT=trueto disable it. ExternalCodingAgentneeds Node.js (it spawns child processes), theclaudeoropencodeCLI onPATH, and has a default timeout of 10 minutes per call.- A2A and OpenClaw adapters must run server-side, not in browser bundles.
Pros
- Works in front-end frameworks (React, Vue, Angular, Next.js) as well as Node.js. (source)
- Validation and feedback are built into task states, including a
REVISEloop and a per-task feedback history. (source) - Release v0.24.1 added
ExternalCodingAgent, so a team can hand tasks to Claude Code or OpenCode. (source) - An official OpenClaw plugin (
@kaibanjs/kaibanjs-plugin) exposes a team as thekaiban_run_teamtool. (source) - Team memory can be switched off so tasks only see results they reference, which limits prompt size. (source)
Cons
- Maintenance has slowed: the last push to the repository was on 2026-05-15, and the latest release, v0.24.1, dates from 2026-05-01. (source)
- Dynamic orchestration by a manager LLM is still marked "Coming Soon"; task order must be defined up front. (source)
- Telemetry is enabled by default and must be turned off with
KAIBAN_TELEMETRY_OPT_OUT. (source) - MCP support depends on LangChain's adapter package rather than a KaibanJS module. (source)
- The project is still on 0.x releases (0.24.1). (source)
Alternatives
FAQ
Does KaibanJS support MCP?
Partly. Since 0.20.1 its agents can use MCP tools through LangChain's @langchain/mcp-adapters client over stdio or SSE. KaibanJS does not ship its own MCP module or server.
Is KaibanJS still maintained?
The repository's last push was on 2026-05-15 and the newest release is v0.24.1 from 2026-05-01, so there has been no activity for several months.
Is KaibanJS free?
The library is MIT-licensed. Its maker, Kaiban, also runs the separate KaibanIO platform, which the docs connect to over A2A; no public pricing page for it was found.
Can KaibanJS drive coding agents?
Yes. ExternalCodingAgent runs a task through the Claude Code or OpenCode CLI, and an OpenClaw plugin exposes a whole team as a single tool.
How does a human approve work in KaibanJS?
Mark a task with externalValidationRequired; when it reaches AWAITING_VALIDATION, call validateTask() to approve or provideFeedback() to send it back for revision.
Sources
- KaibanJS GitHub repository
- KaibanJS README
- KaibanJS LICENSE
- KaibanJS releases
- KaibanJS v0.24.1 release notes
- KaibanJS docs
- Agents (docs)
- Teams (docs)
- Task orchestration (docs)
- Task result passing (docs)
- The Kaiban Board (docs)
- Human-in-the-loop (docs)
- State management (docs)
- Memory (docs)
- ExternalCodingAgent (docs)
- WorkflowDrivenAgent (docs)
- MCP adapter integration (docs)
- A2A protocol integration (docs)
- OpenClaw native plugin (docs)
- OpenClaw integration via OpenResponses (docs)
- Integrating with the KaibanIO platform (docs)
- Telemetry (docs)
- Quick start (docs)
- Using TypeScript (docs)
- Integrating with JavaScript frameworks (docs)
- AG-UI README, supported integrations
- KaibanJS homepage
- Kaiban (vendor site linked from the kaiban-ai GitHub org)