Props
| Prop | Type | Default | Description |
|---|---|---|---|
id | string | "kanban" | ID prefix for all generated task and loop elements. |
columns | ColumnDef[] | (required) | Column definitions in order. Items flow left to right through each column. |
useTickets | () => Array<{ id: string }> | (required) | Function that returns ticket items to process. Each item must have an id field. |
agents | Record<string, AgentLike> | undefined | Record mapping column names to agents. Overrides column-level agents. |
maxConcurrency | number | Infinity | Max items processed in parallel per column. |
onComplete | OutputTarget | undefined | Output schema for the completion task when items reach the final column. |
until | boolean | false | Loop exit condition. When true, the board loop stops. |
maxIterations | number | 5 | Max iterations through the column pipeline. |
skipIf | boolean | false | Skip the entire board. Returns null. |
children | ReactNode | undefined | Content passed to the onComplete task, if present. |
ColumnDef
| Field | Type | Description |
|---|---|---|
name | string | Column name (e.g., "backlog", "review"). |
agent | AgentLike | Agent that processes items in this column. |
output | OutputTarget | Output schema for tasks in this column. |
prompt | (ctx: { item, column }) => string | Optional prompt template. Receives the item and column name. |
task | Partial<TaskProps> | Optional task overrides applied to each generated item task in the column. Use this to set retries, timeoutMs, heartbeatTimeoutMs, or override continueOnFail. |
Basic usage
With concurrency limits
Overriding agents per column
Theagents prop overrides column-level agents:
With completion handler
WhenonComplete is provided, a final task runs after the loop exits:
Custom prompts per column
Per-column task policy
Usetask when a lane needs explicit retries or different runtime limits:
Structure
<Kanban> composes existing primitives. It does not create a new host element type. The rendered tree looks like:
Notes
<Kanban>is a composite component. It renders a tree of<Loop>,<Sequence>,<Parallel>, and<Task>elements.- Each column creates a
<Parallel>block where all ticket items are processed concurrently (bounded bymaxConcurrency). - Generated item tasks default to
continueOnFail={true}so one item does not block the rest of the board. Usecolumn.taskto add retries or override that behavior. - The
useTicketsfunction is called at render time. Return different items each iteration to implement dynamic ticket sources. - Use
untilwithctx.outputMaybe()to exit the loop when all items reach the final column.