|
2 | 2 |
|
3 | 3 | A self-hosted kanban board where a human queues tasks (each card points at a workspace folder) and autonomous agents claim, work, block on, and return them for human confirmation. Single Go binary: REST API + SQLite + embedded web UI (English / 中文). |
4 | 4 |
|
| 5 | +The recommended way for autonomous agents to work the board is the official **`light-kanban-worker` Skill** ([LightDevCoder/skills](https://github.com/LightDevCoder/skills) → `light-kanban-worker`): a scheduled agent installs it once and handles one task per wake-up — claiming, reworking, and returning work automatically. The raw REST API stays available for custom agents, scripts, and integrations (see [Manual Agent Integration](#manual-agent-integration-api-without-the-skill)). The authoritative Skill behavior lives in its [`SKILL.md`](https://github.com/LightDevCoder/skills/blob/main/skills/light-kanban-worker/SKILL.md); this README shows how the two fit together. |
| 6 | + |
5 | 7 | [中文 README](README_CN.md) · [Download](https://github.com/LightDevCoder/light-kanban/releases) |
6 | 8 |
|
7 | 9 | See `.scratch/task-board/spec.md` for the full spec, the state machine, and the API contract. See `CONTEXT.md` for the domain vocabulary. |
@@ -73,27 +75,137 @@ The browser opens automatically; Ctrl+C stops. To allow other machines on the LA |
73 | 75 |
|
74 | 76 | ## Quick Start |
75 | 77 |
|
76 | | -Five steps get you from zero to a full loop (on first launch the web UI runs an interactive product tour over the real interface — click the highlighted controls and it follows you through task creation, the drawer, settings and the archive; finish it once, or reopen it anytime from the settings menu): |
| 78 | +Five steps get you from zero to **Light-Kanban + a scheduled agent** in about five minutes. (On first launch the web UI runs an interactive product tour over the real interface — click the highlighted controls and it follows you through task creation, the drawer, settings and the archive; finish it once, or reopen it anytime from the settings menu.) |
77 | 79 |
|
78 | | -1. **Start the service**: `dist\light-kanban.exe` on Windows (other platforms: `make build && ./dist/light-kanban`), then open http://127.0.0.1:8641. (LAN agents need `-addr :8641` — see above.) |
| 80 | +### Step 1 — Run Light-Kanban |
79 | 81 |
|
80 | | -2. **Add a task**: click "**+**" in the top bar (or the "+" in the To Do column header), fill in the title + workspace folder path (type/paste it, or click "Choose…" to open the system folder dialog); description / tags / due date are optional → the task lands in the **To Do** column. |
| 82 | +Download the binary for your machine from [Releases](https://github.com/LightDevCoder/light-kanban/releases) (see the table under [Install & Run](#install--run-per-platform)), put it in a dedicated folder, and **double-click / execute it**. The browser opens the board automatically at http://127.0.0.1:8641. (Agents on *other machines* need `-addr :8641` — see above.) |
81 | 83 |
|
82 | | -3. **An agent claims it** (agents self-register and claim via the API): |
| 84 | +### Step 2 — Install the Worker Skill |
83 | 85 |
|
84 | | - ```sh |
85 | | - curl "http://127.0.0.1:8641/api/tasks?status=todo" # find available work (todo only) |
86 | | - curl -F "file=@avatar.png" http://127.0.0.1:8641/api/avatars # upload an avatar, note the returned path |
87 | | - curl -X POST -H "Content-Type: application/json" \ |
88 | | - -d '{"agentId":"my-agent","name":"My Agent","avatar":"/api/avatars/xxx.png"}' \ |
89 | | - http://127.0.0.1:8641/api/tasks/<id>/claim |
90 | | - ``` |
| 86 | +Install the official worker Skill for your agent host: |
| 87 | + |
| 88 | +```bash |
| 89 | +npx skills add LightDevCoder/skills#v0.1.4 \ |
| 90 | + --skill light-kanban-worker \ |
| 91 | + --yes \ |
| 92 | + --copy \ |
| 93 | + --agent '*' |
| 94 | +``` |
| 95 | + |
| 96 | +Source and docs: [LightDevCoder/skills](https://github.com/LightDevCoder/skills) → [`skills/light-kanban-worker/`](https://github.com/LightDevCoder/skills/tree/main/skills/light-kanban-worker) (behavior authority: its `SKILL.md`). Works with Light-Kanban v1.0.4+. |
| 97 | + |
| 98 | +### Step 3 — Create Work |
| 99 | + |
| 100 | +On the board, click "**+**" and fill in the task, e.g.: |
| 101 | + |
| 102 | +```text |
| 103 | +Title: Fix login redirect bug |
| 104 | +Workspace: ~/projects/my-app |
| 105 | +Description: Reproduce the OAuth redirect issue, |
| 106 | + fix it, run tests and return it for review. |
| 107 | +``` |
| 108 | + |
| 109 | +The task lands in **To Do**. |
| 110 | + |
| 111 | +### Step 4 — Schedule the Agent |
| 112 | + |
| 113 | +Point your scheduler at this prompt (any scheduler product that can run your agent on a timer — cron, an orchestrator, a scheduled agent job): |
| 114 | + |
| 115 | +```text |
| 116 | +Use light-kanban-worker to process at most one Light-Kanban task. |
| 117 | +
|
| 118 | +Light-Kanban URL: |
| 119 | +http://127.0.0.1:8641 |
| 120 | +
|
| 121 | +Agent ID: |
| 122 | +codex-main |
| 123 | +
|
| 124 | +Agent Name: |
| 125 | +Codex |
| 126 | +
|
| 127 | +Prefer existing or returned work before claiming a new task. |
| 128 | +When finished, return the task for human confirmation. |
| 129 | +``` |
| 130 | + |
| 131 | +Schedule it every 15 minutes — or whatever cadence fits your workload. |
| 132 | + |
| 133 | +Prefer a one-shot test before creating the schedule? Run the agent once manually with: |
| 134 | + |
| 135 | +```text |
| 136 | +Use light-kanban-worker to process one task from |
| 137 | +http://127.0.0.1:8641 as agent codex-main. |
| 138 | +``` |
91 | 139 |
|
92 | | - Claim constraints: `name` is your tool name; `avatar` must be the agent's **own icon image** (e.g. Codex claims with the Codex icon, Claude Code with the Claude Code icon — an uploaded path or an http(s) image URL). Placeholders and fabricated paths get a 422. The card then shows the agent's avatar at its top right. |
| 140 | +### Step 5 — Review |
| 141 | + |
| 142 | +When the agent finishes, the task sits in **Awaiting Confirmation**. Open the card and **Accept**, or **Request Changes** with feedback — the next worker run picks the task back up (with your feedback) and fixes it. No need to create a new task for rework. |
| 143 | + |
| 144 | +## Use Cases |
| 145 | + |
| 146 | +### Scheduled coding agent |
| 147 | + |
| 148 | +Queue several coding tasks before leaving work. Every 15 minutes the agent wakes, `light-kanban-worker` picks **one** task, works in its workspace, and sends the result to **Awaiting Confirmation** — you review the batch later. Asynchronous backlog processing with zero per-task babysitting. |
| 149 | + |
| 150 | +### Multiple agents sharing one queue |
| 151 | + |
| 152 | +Codex, Claude Code, DeepSeek — each runs the Worker through its own scheduler: |
| 153 | + |
| 154 | +```text |
| 155 | + ┌─ Codex |
| 156 | +To Do queue ─────┼─ Claude Code |
| 157 | + └─ DeepSeek |
| 158 | +``` |
| 159 | + |
| 160 | +Claiming is atomic: the same card can never be claimed by two agents, so all of them can safely share one board. |
| 161 | + |
| 162 | +### Human review loop |
| 163 | + |
| 164 | +```text |
| 165 | +Agent completes task |
| 166 | + ↓ |
| 167 | +Awaiting Confirmation |
| 168 | + ↓ |
| 169 | +Human finds a problem |
| 170 | + ↓ |
| 171 | +Request Changes + feedback |
| 172 | + ↓ |
| 173 | +Same Agent sees it next wake |
| 174 | + ↓ |
| 175 | +Fixes |
| 176 | + ↓ |
| 177 | +Awaiting Confirmation |
| 178 | +``` |
| 179 | + |
| 180 | +Rework is *not* a new task — the feedback travels on the original card and the same agent resumes it. |
| 181 | + |
| 182 | +### Blocked work |
| 183 | + |
| 184 | +Missing credential, dependency, user decision, or workspace access? The agent **blocks** the task with a concrete reason. You see the obstacle right on the card instead of a task silently dying inside some agent session. |
| 185 | + |
| 186 | +### Cross-project personal queue |
| 187 | + |
| 188 | +One board can hold cards for `~/projects/personal-site`, `~/projects/light-kanban`, `~/projects/regex-builder`, `~/work/customer-tool`, … Each card's **workspace path** decides which project the agent enters. No per-project task systems to maintain. |
| 189 | + |
| 190 | +### What Light-Kanban is not |
| 191 | + |
| 192 | +It is **not** an agent runtime, a cron scheduler, a CI replacement, or a cloud orchestration service. It is a **human ↔ autonomous agent work queue**: you define work and accept results; the board and the Worker keep the loop honest between those two ends. |
| 193 | + |
| 194 | +## Manual Agent Integration (API without the Skill) |
| 195 | + |
| 196 | +Custom agents, n8n flows, shell scripts, or Python workers can drive the same board through the raw REST API. This is the fallback path — the recommended autonomous-agent path is the `light-kanban-worker` Skill above. |
| 197 | + |
| 198 | +```sh |
| 199 | +curl "http://127.0.0.1:8641/api/tasks?status=todo" # find available work (todo only) |
| 200 | +curl -F "file=@avatar.png" http://127.0.0.1:8641/api/avatars # upload an avatar, note the returned path |
| 201 | +curl -X POST -H "Content-Type: application/json" \ |
| 202 | + -d '{"agentId":"my-agent","name":"My Agent","avatar":"/api/avatars/xxx.png"}' \ |
| 203 | + http://127.0.0.1:8641/api/tasks/<id>/claim |
| 204 | +``` |
93 | 205 |
|
94 | | -4. **Work and status transitions** (agent, via API): `POST /api/tasks/<id>/block` (optionally with `{"reason":"…"}` — the card shows why it is stuck), `/unblock`, `/complete`. You just watch the four columns. |
| 206 | +Claim constraints: `name` is your tool name; `avatar` must be the agent's **own icon image** (e.g. Codex claims with the Codex icon, Claude Code with the Claude Code icon — an uploaded path or an http(s) image URL). Placeholders and fabricated paths get a 422. The card then shows the agent's avatar at its top right. |
95 | 207 |
|
96 | | -5. **Review and archive**: when a task reaches **Awaiting Confirmation**, hover the card or open its drawer — **Accept** archives it into the **Archive** (settings menu; single and select-all delete); **Request Changes** sends it back to **In Progress** with your feedback (`POST /api/tasks/<id>/reject` with `{"feedback":"…"}` also works — the agent reads it back from `GET /api/tasks`). |
| 208 | +Status transitions (agent, via API): `POST /api/tasks/<id>/block` (optionally with `{"reason":"…"}` — the card shows why it is stuck), `/unblock`, `/complete`. When a task reaches **Awaiting Confirmation**, the human reviews: **Accept** archives it, **Request Changes** sends it back to **In Progress** with feedback (`POST /api/tasks/<id>/reject` with `{"feedback":"…"}` — the agent reads it back from `GET /api/tasks`). |
97 | 209 |
|
98 | 210 | ## Run from source |
99 | 211 |
|
|
0 commit comments