> ## Documentation Index
> Fetch the complete documentation index at: https://smithers.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# kanban

> Implement ticket files from .smithers/tickets in parallel worktree branches.

`kanban` is archived (not installed by `init`): copy it from `examples/init-pack/` with its dependency closure, or ask `create-workflow` to build an equivalent. It reads Markdown tickets from `.smithers/tickets/`, runs each ticket in its own worktree branch, then asks an agent to merge successful branches back into the main workspace.

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
bunx smthrs workflow run kanban --input '{"maxConcurrency":3}'
```

<Frame caption="The kanban UI shows each ticket implemented on its own worktree branch, merging only the ones that pass.">
  <img src="https://mintcdn.com/smithers/py7ertgBTLCgQQDl/images/workflow-ui/kanban.png?fit=max&auto=format&n=py7ertgBTLCgQQDl&q=85&s=e39deb5ba90df11bb798965dc4933da1" alt="kanban workflow UI showing tickets fanned into worktree branches before a merge step" width="1280" height="832" data-path="images/workflow-ui/kanban.png" />
</Frame>

## Inputs

| Input            | Type   | Default |
| ---------------- | ------ | ------- |
| `maxConcurrency` | number | `3`     |

## Ticket Layout

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
.smithers/tickets/
  add-oauth-login.md
  improve-empty-state.md
```

## How It Runs

1. Discovers `.md` ticket files, skipping dot-prefixed files (e.g. `.gitkeep`) and `readme.md` (case-insensitive).
2. Creates a worktree branch for each ticket.
3. Runs the shared `ValidationLoop` per ticket.
4. Records a ticket result in the run log.
5. Merges branches where validation passed and at least one reviewer approved.

## Output Shape

Successful ticket branches merge into the main workspace; the run log records per-ticket validation results and reviewer feedback, and failing tickets stay in their worktree branches for inspection.

## Use it when

* You have multiple independent tickets in `.smithers/tickets/`.
* You want each ticket built in its own worktree branch and merged on success.

## Use something else when

* Work not yet split: run [`tickets-create`](/workflows/tickets-create) first.
* The work is a single change: use [`implement`](/workflows/implement).

## Resume & retry

Runs are durable and resume with `up --resume`, and each ticket runs the validation loop independently (see Output Shape above for merge and failure handling).
