kanbango 2.1.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.ai/lessons.jsonl +0 -0
- package/.ai/retro/close.json +1 -0
- package/.ai/retro/last-run.json +1 -0
- package/AGENTS.md +7 -7
- package/API.md +20 -12
- package/CHANGELOG.md +39 -0
- package/LLM_AGENTS.md +170 -177
- package/README.md +31 -14
- package/bin/kanban.js +101 -26
- package/index.html +162 -85
- package/index.js +2 -0
- package/kan2.md +76 -0
- package/kanban.js +306 -34
- package/mcp-server.js +403 -185
- package/package.json +1 -1
- package/plan.js +159 -0
- package/planv2.md +17 -7
- package/tests/run.js +1 -0
package/LLM_AGENTS.md
CHANGED
|
@@ -68,7 +68,7 @@ Read tasks from kanban board. Can list all tasks, filter by column/epic, or get
|
|
|
68
68
|
```json
|
|
69
69
|
{
|
|
70
70
|
"operation": "list", // "list" or "show"
|
|
71
|
-
"task_id": "
|
|
71
|
+
"task_id": "014", // Required for "show"
|
|
72
72
|
"col": "planned", // Optional: "active" | "planned" | "icebox" | "done"
|
|
73
73
|
"epic": "Phase 1" // Optional: filter by epic group
|
|
74
74
|
}
|
|
@@ -95,7 +95,7 @@ Get specific task details:
|
|
|
95
95
|
```json
|
|
96
96
|
{
|
|
97
97
|
"operation": "show",
|
|
98
|
-
"task_id": "
|
|
98
|
+
"task_id": "014"
|
|
99
99
|
}
|
|
100
100
|
```
|
|
101
101
|
|
|
@@ -103,12 +103,12 @@ Get specific task details:
|
|
|
103
103
|
```json
|
|
104
104
|
[
|
|
105
105
|
{
|
|
106
|
-
"id": "
|
|
107
|
-
"title": "
|
|
106
|
+
"id": "014",
|
|
107
|
+
"title": "Google Calendar Integration",
|
|
108
108
|
"column": "active",
|
|
109
109
|
"epic_group": "Phase 1",
|
|
110
110
|
"created": "2026-03-15",
|
|
111
|
-
"
|
|
111
|
+
"subtasks": [
|
|
112
112
|
{ "done": true, "text": "API authentication" },
|
|
113
113
|
{ "done": false, "text": "Event synchronization" }
|
|
114
114
|
]
|
|
@@ -119,232 +119,202 @@ Get specific task details:
|
|
|
119
119
|
**Response (show):**
|
|
120
120
|
```json
|
|
121
121
|
{
|
|
122
|
-
"id": "
|
|
123
|
-
"title": "
|
|
122
|
+
"id": "014",
|
|
123
|
+
"title": "Google Calendar Integration",
|
|
124
124
|
"column": "active",
|
|
125
125
|
"epic_group": "Phase 1",
|
|
126
126
|
"created": "2026-03-15",
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
"subtasks": [
|
|
128
|
+
{ "done": true, "text": "API authentication" },
|
|
129
|
+
{ "done": false, "text": "Event synchronization" }
|
|
130
|
+
]
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
---
|
|
135
135
|
|
|
136
|
-
### 2.
|
|
137
|
-
|
|
138
|
-
Create a new task on kanban board.
|
|
136
|
+
### 2. kanban_manage
|
|
139
137
|
|
|
140
|
-
|
|
141
|
-
```json
|
|
142
|
-
{
|
|
143
|
-
"title": "New feature implementation", // Required
|
|
144
|
-
"col": "planned", // Optional: "active" | "planned" | "icebox" | "done" (default: "planned")
|
|
145
|
-
"epic": "Phase 1" // Optional: epic group name (default: "—")
|
|
146
|
-
}
|
|
147
|
-
```
|
|
138
|
+
Create, move, or patch-update kanban tasks. Single tool for all mutations.
|
|
148
139
|
|
|
149
|
-
**
|
|
140
|
+
**Actions:**
|
|
141
|
+
- `create` - Create a new task with optional rich planning fields
|
|
142
|
+
- `move` - Move a task to a different column
|
|
143
|
+
- `update` - Apply a field-level patch to any task attributes
|
|
150
144
|
|
|
151
|
-
|
|
145
|
+
**Parameters (create):**
|
|
152
146
|
```json
|
|
153
147
|
{
|
|
154
|
-
"
|
|
148
|
+
"action": "create",
|
|
149
|
+
"title": "New feature", // Required (only hard requirement)
|
|
150
|
+
"col": "planned", // Optional, default "planned"
|
|
151
|
+
"epic": "Phase 1", // Optional, default "—"
|
|
152
|
+
"description": "Context and plan", // Strongly recommended
|
|
153
|
+
"specs": "Technical constraints", // Strongly recommended
|
|
154
|
+
"in_scope": ["What is included"], // Strongly recommended
|
|
155
|
+
"out_of_scope": ["What is excluded"], // Strongly recommended
|
|
156
|
+
"acceptance_criteria": ["Must work"], // Strongly recommended
|
|
157
|
+
"test_cases": ["Verify X"], // Recommended
|
|
158
|
+
"subtasks": [{"text": "Do it", "done": false}],
|
|
159
|
+
"notes": "Freeform notes"
|
|
155
160
|
}
|
|
156
161
|
```
|
|
157
162
|
|
|
158
|
-
Create
|
|
163
|
+
**Create field policy:** only `title` is hard-required (GUI/CLI quick-add stays usable). For agent work, always send the strongly recommended fields. If any are missing, create still succeeds and the response includes `warnings` + `missing_recommended`.
|
|
164
|
+
|
|
165
|
+
**Parameters (move):**
|
|
159
166
|
```json
|
|
160
167
|
{
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"
|
|
168
|
+
"action": "move",
|
|
169
|
+
"task_id": "014", // Required
|
|
170
|
+
"column": "done" // Required: target column
|
|
164
171
|
}
|
|
165
172
|
```
|
|
166
173
|
|
|
167
|
-
**
|
|
174
|
+
**Parameters (update):**
|
|
168
175
|
```json
|
|
169
176
|
{
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
175
|
-
"
|
|
177
|
+
"action": "update",
|
|
178
|
+
"task_id": "014", // Required
|
|
179
|
+
"patch": {"description": "New context"}, // Field-level patch object
|
|
180
|
+
"title": "New title", // Shortcut, equivalent to patch.title
|
|
181
|
+
"subtasks": [{"text": "A", "done": true}], // Preferred full subtask list
|
|
182
|
+
"return": "summary" // "none" | "summary" | "full" (default "summary")
|
|
176
183
|
}
|
|
177
184
|
```
|
|
178
185
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
### 3. kanban_update
|
|
182
|
-
|
|
183
|
-
Update existing tasks on kanban board. Can move tasks between columns, toggle subtask completion, or update task details.
|
|
184
|
-
|
|
185
|
-
**Operations:**
|
|
186
|
-
- `move` - Move task to different column
|
|
187
|
-
- `toggle` - Toggle subtask completion
|
|
188
|
-
- `update` - Update task title and/or subtask list
|
|
186
|
+
**Examples:**
|
|
189
187
|
|
|
190
|
-
|
|
188
|
+
Create a task:
|
|
191
189
|
```json
|
|
192
190
|
{
|
|
193
|
-
"
|
|
194
|
-
"
|
|
195
|
-
"
|
|
196
|
-
"
|
|
197
|
-
"
|
|
198
|
-
"
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
]
|
|
191
|
+
"action": "create",
|
|
192
|
+
"title": "Database optimization",
|
|
193
|
+
"col": "planned",
|
|
194
|
+
"epic": "Performance",
|
|
195
|
+
"description": "Reduce N+1 queries on board list",
|
|
196
|
+
"specs": "Keep JSON storage; no new deps",
|
|
197
|
+
"in_scope": ["list query path"],
|
|
198
|
+
"out_of_scope": ["GUI redesign"],
|
|
199
|
+
"acceptance_criteria": ["list stays correct under load"]
|
|
202
200
|
}
|
|
203
201
|
```
|
|
204
202
|
|
|
205
|
-
**Examples:**
|
|
206
|
-
|
|
207
203
|
Move task to done:
|
|
208
204
|
```json
|
|
209
205
|
{
|
|
210
|
-
"
|
|
211
|
-
"task_id": "
|
|
206
|
+
"action": "move",
|
|
207
|
+
"task_id": "014",
|
|
212
208
|
"column": "done"
|
|
213
209
|
}
|
|
214
210
|
```
|
|
215
211
|
|
|
216
|
-
|
|
212
|
+
Patch-update task fields:
|
|
217
213
|
```json
|
|
218
214
|
{
|
|
219
|
-
"
|
|
220
|
-
"task_id": "
|
|
221
|
-
"
|
|
215
|
+
"action": "update",
|
|
216
|
+
"task_id": "014",
|
|
217
|
+
"patch": {
|
|
218
|
+
"title": "Updated title",
|
|
219
|
+
"description": "New implementation plan",
|
|
220
|
+
"epic_group": "Phase 2",
|
|
221
|
+
"subtasks": [
|
|
222
|
+
{ "id": "st-1", "text": "Research", "done": true },
|
|
223
|
+
{ "id": "st-2", "text": "Implementation", "done": false }
|
|
224
|
+
]
|
|
225
|
+
}
|
|
222
226
|
}
|
|
223
227
|
```
|
|
224
228
|
|
|
225
|
-
|
|
226
|
-
```json
|
|
227
|
-
{
|
|
228
|
-
"operation": "update",
|
|
229
|
-
"task_id": "PI-014-google-calendar",
|
|
230
|
-
"title": "Google Calendar API Integration"
|
|
231
|
-
}
|
|
232
|
-
```
|
|
229
|
+
---
|
|
233
230
|
|
|
234
|
-
|
|
235
|
-
```json
|
|
236
|
-
{
|
|
237
|
-
"operation": "update",
|
|
238
|
-
"task_id": "PI-014-google-calendar",
|
|
239
|
-
"tasks": [
|
|
240
|
-
{ "done": true, "text": "API authentication" },
|
|
241
|
-
{ "done": true, "text": "Event synchronization" },
|
|
242
|
-
{ "done": false, "text": "Error handling" }
|
|
243
|
-
]
|
|
244
|
-
}
|
|
245
|
-
```
|
|
231
|
+
### 3. kanban_gui
|
|
246
232
|
|
|
247
|
-
|
|
248
|
-
```json
|
|
249
|
-
{
|
|
250
|
-
"success": true,
|
|
251
|
-
"message": "Moved PI-014-google-calendar to done"
|
|
252
|
-
}
|
|
253
|
-
```
|
|
233
|
+
Control the web GUI server: start, stop, or check status.
|
|
254
234
|
|
|
255
|
-
**
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
"title": "PI-014: Google Calendar Integration",
|
|
260
|
-
"column": "active",
|
|
261
|
-
"epic_group": "Phase 1",
|
|
262
|
-
"created": "2026-03-15",
|
|
263
|
-
"tasks": [
|
|
264
|
-
{ "done": false, "text": "API authentication" },
|
|
265
|
-
{ "done": false, "text": "Event synchronization" }
|
|
266
|
-
]
|
|
267
|
-
}
|
|
268
|
-
```
|
|
235
|
+
**Port resolution (start):**
|
|
236
|
+
1. Explicit `port` argument, if provided
|
|
237
|
+
2. Else `KANBANGO_GUI_PORT` env
|
|
238
|
+
3. Else stable hash of project cwd in range `5510–5999`
|
|
269
239
|
|
|
270
|
-
|
|
240
|
+
If the preferred port is busy, the server picks the next free port. Always trust the returned `url` / `port` (also written to `backlog/.kanbango-gui.json`).
|
|
271
241
|
|
|
272
|
-
|
|
242
|
+
**Auto-start with MCP:** set `KANBANGO_AUTO_GUI=1` in the MCP server env. GUI starts when MCP starts; use `status` to read the URL.
|
|
273
243
|
|
|
274
|
-
|
|
244
|
+
**Actions:**
|
|
245
|
+
- `start` - Launch the GUI server
|
|
246
|
+
- `stop` - Kill the GUI server
|
|
247
|
+
- `status` - Check if the GUI is running (reads live process or port file)
|
|
275
248
|
|
|
276
249
|
**Parameters:**
|
|
277
250
|
```json
|
|
278
251
|
{
|
|
279
|
-
"
|
|
252
|
+
"action": "start", // "start" | "stop" | "status"
|
|
253
|
+
"port": 5821 // Optional, only for "start"
|
|
280
254
|
}
|
|
281
255
|
```
|
|
282
256
|
|
|
283
257
|
**Examples:**
|
|
284
258
|
|
|
285
|
-
Start GUI
|
|
259
|
+
Start GUI (stable project port):
|
|
286
260
|
```json
|
|
287
|
-
{
|
|
261
|
+
{
|
|
262
|
+
"action": "start"
|
|
263
|
+
}
|
|
288
264
|
```
|
|
289
265
|
|
|
290
266
|
Start GUI on custom port:
|
|
291
267
|
```json
|
|
292
268
|
{
|
|
269
|
+
"action": "start",
|
|
293
270
|
"port": 8080
|
|
294
271
|
}
|
|
295
272
|
```
|
|
296
273
|
|
|
297
|
-
|
|
274
|
+
Stop the GUI:
|
|
298
275
|
```json
|
|
299
276
|
{
|
|
300
|
-
"
|
|
301
|
-
"port": 5500,
|
|
302
|
-
"pid": 12345,
|
|
303
|
-
"url": "http://localhost:5500"
|
|
277
|
+
"action": "stop"
|
|
304
278
|
}
|
|
305
279
|
```
|
|
306
280
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
### 5. kanban_gui_stop
|
|
310
|
-
|
|
311
|
-
Stop the web GUI server if it is running.
|
|
312
|
-
|
|
313
|
-
**Parameters:**
|
|
281
|
+
Check status:
|
|
314
282
|
```json
|
|
315
|
-
{
|
|
283
|
+
{
|
|
284
|
+
"action": "status"
|
|
285
|
+
}
|
|
316
286
|
```
|
|
317
287
|
|
|
318
|
-
**Response:**
|
|
288
|
+
**Response (start):**
|
|
319
289
|
```json
|
|
320
290
|
{
|
|
321
|
-
"status": "
|
|
322
|
-
"port":
|
|
291
|
+
"status": "started",
|
|
292
|
+
"port": 5623,
|
|
293
|
+
"pid": 12345,
|
|
294
|
+
"url": "http://localhost:5623"
|
|
323
295
|
}
|
|
324
296
|
```
|
|
325
297
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
### 6. kanban_gui_status
|
|
329
|
-
|
|
330
|
-
Get status of the web GUI server.
|
|
331
|
-
|
|
332
|
-
**Parameters:**
|
|
298
|
+
**Response (stop):**
|
|
333
299
|
```json
|
|
334
|
-
{
|
|
300
|
+
{
|
|
301
|
+
"status": "stopping",
|
|
302
|
+
"port": 5623,
|
|
303
|
+
"pid": 12345
|
|
304
|
+
}
|
|
335
305
|
```
|
|
336
306
|
|
|
337
|
-
**Response (running):**
|
|
307
|
+
**Response (status - running):**
|
|
338
308
|
```json
|
|
339
309
|
{
|
|
340
310
|
"status": "running",
|
|
341
|
-
"port":
|
|
311
|
+
"port": 5623,
|
|
342
312
|
"pid": 12345,
|
|
343
|
-
"url": "http://localhost:
|
|
313
|
+
"url": "http://localhost:5623"
|
|
344
314
|
}
|
|
345
315
|
```
|
|
346
316
|
|
|
347
|
-
**Response (not running):**
|
|
317
|
+
**Response (status - not running):**
|
|
348
318
|
```json
|
|
349
319
|
{
|
|
350
320
|
"status": "not_running"
|
|
@@ -359,15 +329,24 @@ Get status of the web GUI server.
|
|
|
359
329
|
|
|
360
330
|
```json
|
|
361
331
|
{
|
|
362
|
-
"id": "string", //
|
|
363
|
-
"title": "string", //
|
|
332
|
+
"id": "string", // Numeric task identifier (e.g., "014")
|
|
333
|
+
"title": "string", // Task title, kept separate from the ID
|
|
364
334
|
"column": "string", // "active" | "planned" | "icebox" | "done"
|
|
365
335
|
"epic_group": "string", // Epic group name or "—"
|
|
366
336
|
"created": "string", // Creation date (YYYY-MM-DD)
|
|
367
|
-
"
|
|
337
|
+
"description": "string", // High-level context
|
|
338
|
+
"specs": "string", // Technical constraints
|
|
339
|
+
"in_scope": ["string"], // What this task includes
|
|
340
|
+
"out_of_scope": ["string"], // Explicit non-goals
|
|
341
|
+
"acceptance_criteria": ["string"],
|
|
342
|
+
"test_cases": ["string"],
|
|
343
|
+
"notes": "string",
|
|
344
|
+
"subtasks": [
|
|
368
345
|
{
|
|
369
|
-
"
|
|
370
|
-
"
|
|
346
|
+
"id": "string",
|
|
347
|
+
"done": "boolean",
|
|
348
|
+
"text": "string",
|
|
349
|
+
"description": "string"
|
|
371
350
|
}
|
|
372
351
|
]
|
|
373
352
|
}
|
|
@@ -387,51 +366,62 @@ Get status of the web GUI server.
|
|
|
387
366
|
### Pattern 1: Task Discovery
|
|
388
367
|
|
|
389
368
|
```json
|
|
390
|
-
|
|
391
|
-
{ "operation": "list", "col": "active" }
|
|
369
|
+
{ "tool": "kanban_read", "arguments": { "operation": "list", "col": "active" } }
|
|
392
370
|
```
|
|
393
371
|
|
|
394
372
|
### Pattern 2: Task Creation Workflow
|
|
395
373
|
|
|
396
374
|
```json
|
|
397
|
-
// 1. Create task
|
|
398
|
-
{ "
|
|
375
|
+
// 1. Create task with strongly recommended planning fields
|
|
376
|
+
{ "tool": "kanban_manage", "arguments": {
|
|
377
|
+
"action": "create",
|
|
378
|
+
"title": "New feature",
|
|
379
|
+
"col": "planned",
|
|
380
|
+
"epic": "Phase 1",
|
|
381
|
+
"description": "Why this exists",
|
|
382
|
+
"specs": "APIs and constraints",
|
|
383
|
+
"in_scope": ["Core path"],
|
|
384
|
+
"out_of_scope": ["Mobile"],
|
|
385
|
+
"acceptance_criteria": ["npm test passes"]
|
|
386
|
+
} }
|
|
399
387
|
|
|
400
388
|
// 2. Get task details to see generated ID
|
|
401
|
-
{ "operation": "show", "task_id": "
|
|
389
|
+
{ "tool": "kanban_read", "arguments": { "operation": "show", "task_id": "015" } }
|
|
402
390
|
|
|
403
391
|
// 3. Update with subtasks
|
|
404
|
-
{
|
|
405
|
-
"operation": "update",
|
|
406
|
-
"task_id": "PI-015-new-feature",
|
|
407
|
-
"tasks": [
|
|
408
|
-
{ "done": false, "text": "Research" },
|
|
409
|
-
{ "done": false, "text": "Implementation" }
|
|
410
|
-
]
|
|
411
|
-
}
|
|
392
|
+
{ "tool": "kanban_manage", "arguments": { "action": "update", "task_id": "015", "subtasks": [{"done": false, "text": "Research"}, {"done": false, "text": "Implementation"}] } }
|
|
412
393
|
```
|
|
413
394
|
|
|
414
395
|
### Pattern 3: Task Progression
|
|
415
396
|
|
|
416
397
|
```json
|
|
417
398
|
// Move from planned → active
|
|
418
|
-
{ "
|
|
399
|
+
{ "tool": "kanban_manage", "arguments": { "action": "move", "task_id": "015", "column": "active" } }
|
|
419
400
|
|
|
420
|
-
//
|
|
421
|
-
{ "
|
|
401
|
+
// Update subtasks in one call
|
|
402
|
+
{ "tool": "kanban_manage", "arguments": { "action": "update", "task_id": "015", "subtasks": [{ "done": true, "text": "Research" }, { "done": false, "text": "Implementation" }] } }
|
|
422
403
|
|
|
423
404
|
// Move from active → done
|
|
424
|
-
{ "
|
|
405
|
+
{ "tool": "kanban_manage", "arguments": { "action": "move", "task_id": "015", "column": "done" } }
|
|
425
406
|
```
|
|
426
407
|
|
|
427
408
|
### Pattern 4: Epic Management
|
|
428
409
|
|
|
429
410
|
```json
|
|
430
411
|
// List all tasks in an epic
|
|
431
|
-
{ "operation": "list", "epic": "Performance" }
|
|
412
|
+
{ "tool": "kanban_read", "arguments": { "operation": "list", "epic": "Performance" } }
|
|
432
413
|
|
|
433
|
-
// Create task in specific epic
|
|
434
|
-
{ "
|
|
414
|
+
// Create task in specific epic (still include recommended fields)
|
|
415
|
+
{ "tool": "kanban_manage", "arguments": {
|
|
416
|
+
"action": "create",
|
|
417
|
+
"title": "Cache optimization",
|
|
418
|
+
"epic": "Performance",
|
|
419
|
+
"description": "Reduce repeated board reads",
|
|
420
|
+
"specs": "In-memory cache with TTL",
|
|
421
|
+
"in_scope": ["list endpoint"],
|
|
422
|
+
"out_of_scope": ["distributed cache"],
|
|
423
|
+
"acceptance_criteria": ["p95 list latency down"]
|
|
424
|
+
} }
|
|
435
425
|
```
|
|
436
426
|
|
|
437
427
|
---
|
|
@@ -439,30 +429,33 @@ Get status of the web GUI server.
|
|
|
439
429
|
## Best Practices for LLM Agents
|
|
440
430
|
|
|
441
431
|
1. **Always use `kanban_read` first** - Discover existing tasks before creating new ones
|
|
442
|
-
2. **
|
|
443
|
-
3. **Use `
|
|
444
|
-
4. **
|
|
445
|
-
5. **
|
|
446
|
-
6. **
|
|
447
|
-
7. **
|
|
432
|
+
2. **Numeric task lookup** - Task IDs are zero-padded numbers (e.g. `"035"`). Unpadded numbers such as `"35"` also work in any `task_id` parameter.
|
|
433
|
+
3. **Use `col` filter** - Narrow down to relevant column when listing
|
|
434
|
+
4. **Use `epic` grouping** - Organize tasks by features/phases
|
|
435
|
+
5. **Create with planning fields** - Always include description, specs, in_scope, out_of_scope, acceptance_criteria; treat `warnings`/`missing_recommended` as a signal to fill gaps
|
|
436
|
+
6. **Work through subtasks** - Toggle each subtask as you complete them
|
|
437
|
+
7. **Move tasks through workflow** - planned → active → done progression
|
|
438
|
+
8. **Use `show` operation** - Get full task details including subtasks
|
|
439
|
+
9. **Handle task IDs** - Always use the full task ID returned from create/show
|
|
448
440
|
|
|
449
441
|
---
|
|
450
442
|
|
|
451
443
|
## Error Handling
|
|
452
444
|
|
|
453
|
-
All tools return error
|
|
445
|
+
All tools return structured error responses:
|
|
454
446
|
|
|
455
447
|
```json
|
|
456
448
|
{
|
|
457
|
-
"error":
|
|
449
|
+
"error": {
|
|
450
|
+
"code": "TASK_NOT_FOUND",
|
|
451
|
+
"message": "Task 999 was not found",
|
|
452
|
+
"hint": "Call kanban_read with operation=list to discover valid task ids",
|
|
453
|
+
"details": {},
|
|
454
|
+
"retryable": false
|
|
455
|
+
}
|
|
458
456
|
}
|
|
459
457
|
```
|
|
460
458
|
|
|
461
|
-
Common errors:
|
|
462
|
-
- `"Task not found: PI-999"` - Task ID doesn't exist
|
|
463
|
-
- `"Failed to move task: PI-999"` - Move operation failed
|
|
464
|
-
- `"task_id is required for 'show' operation"` - Missing required parameter
|
|
465
|
-
|
|
466
459
|
---
|
|
467
460
|
|
|
468
461
|
## Installation for Users
|
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ npx kanbango --help
|
|
|
25
25
|
# Initialize backlog directories
|
|
26
26
|
kanban init
|
|
27
27
|
|
|
28
|
-
# Start web GUI
|
|
28
|
+
# Start web GUI (stable project port; prints the real URL)
|
|
29
29
|
kanban serve
|
|
30
30
|
|
|
31
31
|
# List all tasks
|
|
@@ -35,13 +35,13 @@ kanban list --json
|
|
|
35
35
|
kanban add "My task" --col planned --epic "Phase 1"
|
|
36
36
|
|
|
37
37
|
# Show details
|
|
38
|
-
kanban show
|
|
38
|
+
kanban show 001
|
|
39
39
|
|
|
40
40
|
# Move between columns (active | planned | icebox | done)
|
|
41
|
-
kanban move
|
|
41
|
+
kanban move 001 active
|
|
42
42
|
|
|
43
|
-
#
|
|
44
|
-
kanban
|
|
43
|
+
# Update subtasks in one call
|
|
44
|
+
kanban update 001 '{"subtasks":[{"done":true,"text":"Research"},{"done":false,"text":"Implementation"}]}'
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
### Columns
|
|
@@ -59,14 +59,17 @@ Tasks are JSON files in `backlog/<column>/`:
|
|
|
59
59
|
|
|
60
60
|
```json
|
|
61
61
|
{
|
|
62
|
-
"id": "
|
|
62
|
+
"id": "001",
|
|
63
63
|
"title": "My Feature",
|
|
64
64
|
"column": "planned",
|
|
65
65
|
"epic_group": "Phase 1",
|
|
66
66
|
"created": "2026-07-08",
|
|
67
67
|
"description": "High-level context.",
|
|
68
68
|
"specs": "Technical details.",
|
|
69
|
+
"in_scope": ["What this task covers"],
|
|
70
|
+
"out_of_scope": ["What is explicitly excluded"],
|
|
69
71
|
"acceptance_criteria": ["Works as expected"],
|
|
72
|
+
"test_cases": ["Verify the happy path"],
|
|
70
73
|
"subtasks": [
|
|
71
74
|
{ "id": "st-1", "text": "First step", "done": false }
|
|
72
75
|
]
|
|
@@ -96,6 +99,24 @@ Add this to your MCP client config (`.mcp.json`, `opencode.json`, or Claude Desk
|
|
|
96
99
|
}
|
|
97
100
|
```
|
|
98
101
|
|
|
102
|
+
Auto-start the web GUI with MCP (opt-in):
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"mcpServers": {
|
|
107
|
+
"kanbango": {
|
|
108
|
+
"command": "npx",
|
|
109
|
+
"args": ["kanbango", "mcp"],
|
|
110
|
+
"env": {
|
|
111
|
+
"KANBANGO_AUTO_GUI": "1"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Optional: pin the port with `KANBANGO_GUI_PORT` (e.g. `"5821"`). Without it, each project gets a stable port in `5510–5999` derived from the project path. The real URL is always available via `kanban_gui` → `status` (and written to `backlog/.kanbango-gui.json` while the GUI runs).
|
|
119
|
+
|
|
99
120
|
Or generate the config files automatically:
|
|
100
121
|
|
|
101
122
|
```bash
|
|
@@ -109,11 +130,8 @@ Once connected, your agent gets access to these tools:
|
|
|
109
130
|
| Tool | What it does |
|
|
110
131
|
|------|-------------|
|
|
111
132
|
| `kanban_read` | List tasks, filter by column/epic, show details |
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
114
|
-
| `kanban_gui_start` | Start web GUI from the agent |
|
|
115
|
-
| `kanban_gui_stop` | Stop web GUI |
|
|
116
|
-
| `kanban_gui_status` | Check if GUI is running |
|
|
133
|
+
| `kanban_manage` | Create, move, patch-update tasks |
|
|
134
|
+
| `kanban_gui` | Start, stop, or check web GUI status (returns the real URL/port) |
|
|
117
135
|
|
|
118
136
|
Your agent stays in sync with your real board — every change is persisted as JSON files.
|
|
119
137
|
|
|
@@ -122,12 +140,11 @@ Your agent stays in sync with your real board — every change is persisted as J
|
|
|
122
140
|
| Command | Description |
|
|
123
141
|
|---------|-------------|
|
|
124
142
|
| `kanban init` | Create backlog directory structure |
|
|
125
|
-
| `kanban serve [PORT]` | Start web GUI (
|
|
143
|
+
| `kanban serve [PORT]` | Start web GUI (stable project port, or PORT / KANBANGO_GUI_PORT) |
|
|
126
144
|
| `kanban list [--col <col>] [--json]` | List tasks |
|
|
127
145
|
| `kanban show <ID>` | Show task details |
|
|
128
146
|
| `kanban add <TITLE>` | Add a new task |
|
|
129
147
|
| `kanban move <ID> <COL>` | Move task |
|
|
130
|
-
| `kanban toggle <ID> <IDX>` | Toggle subtask |
|
|
131
148
|
| `kanban mcp-init` | Generate MCP config files |
|
|
132
149
|
|
|
133
150
|
## Web GUI
|
|
@@ -152,4 +169,4 @@ Node.js 16+
|
|
|
152
169
|
|
|
153
170
|
## License
|
|
154
171
|
|
|
155
|
-
MIT
|
|
172
|
+
MIT
|