kanbango 3.8.0 → 5.1.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/AGENTS.md +23 -18
- package/API.md +58 -170
- package/CHANGELOG.md +39 -1
- package/LLM_AGENTS.md +21 -502
- package/README.md +18 -16
- package/agent-playbook.js +18 -57
- package/bin/kanban.js +344 -304
- package/config-wizard.js +4 -4
- package/index.html +59 -2
- package/kanban.js +503 -283
- package/mcp-server.js +259 -201
- package/package.json +1 -1
- package/plan.js +19 -24
- package/plugins/tui-kanban-controller.js +117 -0
- package/plugins/tui-kanban.tsx +314 -0
- package/workflow.js +15 -14
- package/.ai/lessons.jsonl +0 -14
- package/.ai/retro/close.json +0 -1
- package/.ai/retro/last-run.json +0 -1
- package/.ait-quality.yml +0 -26
- package/bin/kanban-cmd.js +0 -40
- package/kan2.md +0 -76
- package/kanbango.md +0 -48
- package/planv2.md +0 -317
- package/tests/fixtures/fake-opencode.js +0 -69
- package/tests/index.js +0 -19
- package/tests/kanban-cli.js +0 -118
- package/tests/kanban.js +0 -104
- package/tests/run.js +0 -38
package/LLM_AGENTS.md
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
# MCP Server Guide for LLM Agents
|
|
2
2
|
|
|
3
|
-
Human-oriented setup
|
|
3
|
+
Human-oriented setup. **Agents do not load this file.** Rules live in `agent-playbook.js`.
|
|
4
|
+
`tools/list` is short; full playbook is `kanban_read` `operation=help`.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
`tools/list` descriptions. After install, the agent only needs the MCP server —
|
|
7
|
-
not this markdown.
|
|
6
|
+
## Config
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
**Claude Desktop / generic MCP:**
|
|
10
9
|
|
|
11
|
-
## Quick Integration
|
|
12
|
-
|
|
13
|
-
### Configuration
|
|
14
|
-
|
|
15
|
-
Add to your MCP client configuration:
|
|
16
|
-
|
|
17
|
-
**Claude Desktop:**
|
|
18
10
|
```json
|
|
19
11
|
{
|
|
20
12
|
"mcpServers": {
|
|
@@ -26,507 +18,34 @@ Add to your MCP client configuration:
|
|
|
26
18
|
}
|
|
27
19
|
```
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
{
|
|
32
|
-
"mcpServers": {
|
|
33
|
-
"kanbango": {
|
|
34
|
-
"command": "node",
|
|
35
|
-
"args": ["path/to/mcp-server.js"]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### Project Automation (Claude Code + OpenCode)
|
|
42
|
-
|
|
43
|
-
Generate project configs automatically in the current folder:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
# Local install (recommended)
|
|
47
|
-
npx kanbango mcp-init
|
|
48
|
-
|
|
49
|
-
# Use npx-based command in configs
|
|
50
|
-
npx kanbango mcp-init --npx
|
|
51
|
-
|
|
52
|
-
# Only Claude Code config
|
|
53
|
-
npx kanbango mcp-init --claude
|
|
54
|
-
|
|
55
|
-
# Only OpenCode config
|
|
56
|
-
npx kanbango mcp-init --opencode
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
This creates:
|
|
60
|
-
- `.mcp.json` for Claude Code (project-scoped MCP servers)
|
|
61
|
-
- `opencode.json` for OpenCode (project-scoped MCP servers)
|
|
62
|
-
|
|
63
|
-
## Available Tools
|
|
64
|
-
|
|
65
|
-
### 1. kanban_read
|
|
66
|
-
|
|
67
|
-
Read tasks from kanban board. Can list all tasks, filter by column/epic, or get details of a specific task.
|
|
68
|
-
|
|
69
|
-
**Operations:**
|
|
70
|
-
- `list` - Get all tasks (with optional filters)
|
|
71
|
-
- `show` - Get specific task details
|
|
72
|
-
- `help` - Return token playbook from `agent-playbook.js` (no board I/O)
|
|
73
|
-
|
|
74
|
-
**Parameters:**
|
|
75
|
-
```json
|
|
76
|
-
{
|
|
77
|
-
"operation": "list", // "list" | "show" | "help"
|
|
78
|
-
"task_id": "014", // Required for "show"
|
|
79
|
-
"col": "planned", // Optional: "active" | "planned" | "icebox" | "done"
|
|
80
|
-
"epic": "Phase 1" // Optional: filter by epic group
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
**Examples:**
|
|
85
|
-
|
|
86
|
-
List all tasks:
|
|
87
|
-
```json
|
|
88
|
-
{
|
|
89
|
-
"operation": "list"
|
|
90
|
-
}
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
List tasks in active column:
|
|
94
|
-
```json
|
|
95
|
-
{
|
|
96
|
-
"operation": "list",
|
|
97
|
-
"col": "active"
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
Get specific task details:
|
|
102
|
-
```json
|
|
103
|
-
{
|
|
104
|
-
"operation": "show",
|
|
105
|
-
"task_id": "014"
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Response (list):**
|
|
110
|
-
```json
|
|
111
|
-
[
|
|
112
|
-
{
|
|
113
|
-
"id": "014",
|
|
114
|
-
"title": "Google Calendar Integration",
|
|
115
|
-
"column": "active",
|
|
116
|
-
"epic_group": "Phase 1",
|
|
117
|
-
"created": "2026-03-15",
|
|
118
|
-
"subtasks": [
|
|
119
|
-
{ "done": true, "text": "API authentication" },
|
|
120
|
-
{ "done": false, "text": "Event synchronization" }
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
**Response (show):**
|
|
127
|
-
```json
|
|
128
|
-
{
|
|
129
|
-
"id": "014",
|
|
130
|
-
"title": "Google Calendar Integration",
|
|
131
|
-
"column": "active",
|
|
132
|
-
"epic_group": "Phase 1",
|
|
133
|
-
"created": "2026-03-15",
|
|
134
|
-
"subtasks": [
|
|
135
|
-
{ "done": true, "text": "API authentication" },
|
|
136
|
-
{ "done": false, "text": "Event synchronization" }
|
|
137
|
-
]
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
### 2. kanban_manage
|
|
144
|
-
|
|
145
|
-
Create, move, or patch-update kanban tasks. Single tool for all mutations.
|
|
146
|
-
|
|
147
|
-
**Actions:**
|
|
148
|
-
- `create` - Create a new task with optional rich planning fields
|
|
149
|
-
- `move` - Move a task to a different column
|
|
150
|
-
- `update` - Apply a field-level patch to any task attributes
|
|
151
|
-
|
|
152
|
-
**Parameters (create):**
|
|
153
|
-
```json
|
|
154
|
-
{
|
|
155
|
-
"action": "create",
|
|
156
|
-
"title": "New feature", // Required (only hard requirement)
|
|
157
|
-
"col": "planned", // Optional, default "planned"
|
|
158
|
-
"epic": "Phase 1", // Optional, default "—"
|
|
159
|
-
"description": "Context and plan", // Strongly recommended
|
|
160
|
-
"specs": "Technical constraints", // Strongly recommended
|
|
161
|
-
"in_scope": ["What is included"], // Strongly recommended
|
|
162
|
-
"out_of_scope": ["What is excluded"], // Strongly recommended
|
|
163
|
-
"acceptance_criteria": ["Must work"], // Strongly recommended
|
|
164
|
-
"test_cases": ["Verify X"], // Recommended
|
|
165
|
-
"subtasks": [{"text": "Do it", "done": false}],
|
|
166
|
-
"notes": "Freeform notes"
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
**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`.
|
|
171
|
-
|
|
172
|
-
**Parameters (move):**
|
|
173
|
-
```json
|
|
174
|
-
{
|
|
175
|
-
"action": "move",
|
|
176
|
-
"task_id": "014", // Required
|
|
177
|
-
"column": "done" // Required: target column
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Parameters (update):**
|
|
182
|
-
```json
|
|
183
|
-
{
|
|
184
|
-
"action": "update",
|
|
185
|
-
"task_id": "014", // Required
|
|
186
|
-
"patch": {"description": "New context"}, // Field-level patch object
|
|
187
|
-
"title": "New title", // Shortcut, equivalent to patch.title
|
|
188
|
-
"subtasks": [{"text": "A", "done": true}], // Preferred full subtask list
|
|
189
|
-
"return": "summary" // "none" | "summary" | "full" (default "summary")
|
|
190
|
-
}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**Examples:**
|
|
194
|
-
|
|
195
|
-
Create a task:
|
|
196
|
-
```json
|
|
197
|
-
{
|
|
198
|
-
"action": "create",
|
|
199
|
-
"title": "Database optimization",
|
|
200
|
-
"col": "planned",
|
|
201
|
-
"epic": "Performance",
|
|
202
|
-
"description": "Reduce N+1 queries on board list",
|
|
203
|
-
"specs": "Keep JSON storage; no new deps",
|
|
204
|
-
"in_scope": ["list query path"],
|
|
205
|
-
"out_of_scope": ["GUI redesign"],
|
|
206
|
-
"acceptance_criteria": ["list stays correct under load"]
|
|
207
|
-
}
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
Move task to done:
|
|
211
|
-
```json
|
|
212
|
-
{
|
|
213
|
-
"action": "move",
|
|
214
|
-
"task_id": "014",
|
|
215
|
-
"column": "done"
|
|
216
|
-
}
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
Patch-update task fields:
|
|
220
|
-
```json
|
|
221
|
-
{
|
|
222
|
-
"action": "update",
|
|
223
|
-
"task_id": "014",
|
|
224
|
-
"patch": {
|
|
225
|
-
"title": "Updated title",
|
|
226
|
-
"description": "New implementation plan",
|
|
227
|
-
"epic_group": "Phase 2",
|
|
228
|
-
"subtasks": [
|
|
229
|
-
{ "id": "st-1", "text": "Research", "done": true },
|
|
230
|
-
{ "id": "st-2", "text": "Implementation", "done": false }
|
|
231
|
-
]
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
---
|
|
21
|
+
Generate project files: `npx kanbango mcp-init` (optional `--npx`, `--claude`, `--opencode`).
|
|
22
|
+
Writes `.mcp.json` and/or `opencode.json`.
|
|
237
23
|
|
|
238
|
-
|
|
24
|
+
Auto-GUI: set `KANBANGO_AUTO_GUI=1`. Pin port with `KANBANGO_GUI_PORT`. Label with `KANBANGO_PROJECT_NAME`.
|
|
239
25
|
|
|
240
|
-
|
|
26
|
+
## Tools
|
|
241
27
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
28
|
+
| Tool | Role |
|
|
29
|
+
|------|------|
|
|
30
|
+
| `kanban_read` | Omit operation = context (wake). list `view=summary`. `operation=help` for the playbook |
|
|
31
|
+
| `kanban_manage` | create / move / update / delete / epic_* / plan_*. Writes default `return=none` |
|
|
32
|
+
| `kanban_gui` | `status` before `start`. `stop` only owned. `external_running` = do not kill |
|
|
246
33
|
|
|
247
|
-
|
|
248
|
-
1. Explicit `port` argument, if provided
|
|
249
|
-
2. Else `KANBANGO_GUI_PORT` env
|
|
250
|
-
3. Else stable hash of project cwd in range `5510–5999`
|
|
34
|
+
Create returns `{ok, id, missing?}`. List hides `column=done` and tasks under done/archived epics unless you pass `include_done` / `include_archived` / `col=done`.
|
|
251
35
|
|
|
252
|
-
|
|
36
|
+
Kanbango core does not require QA, review agents, OpenCode, or another runner. Testing/review gates and agent spawns are optional project configuration.
|
|
253
37
|
|
|
254
|
-
|
|
38
|
+
Wake: one `kanban_read` (no operation). Then `show` with `view=planning` or `view=execution`. Do not re-list the full board after every write. Context skips blocked active work, surfaces failed/blocked gates and manual testing/review, and only starts the next unblocked planned task. Writes (`create`/`move`/`update`/`plan_*`) default `return=none` — no full card, subtasks, or evidence echo. Cost probe: `node benchmarks/agent-workflow.js --size 0 --size 10 --size 1000` (MCP JSON bytes ≠ tokens).
|
|
255
39
|
|
|
256
|
-
|
|
257
|
-
- `start` - Launch the GUI server (or report already_running owned/external)
|
|
258
|
-
- `stop` - Stop only MCP-owned GUI
|
|
259
|
-
- `status` - Check GUI state
|
|
40
|
+
## Errors
|
|
260
41
|
|
|
261
|
-
|
|
262
|
-
```json
|
|
263
|
-
{
|
|
264
|
-
"action": "start", // "start" | "stop" | "status"
|
|
265
|
-
"port": 5821 // Optional, only for "start"
|
|
266
|
-
}
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
**Examples:**
|
|
270
|
-
|
|
271
|
-
Start GUI (stable project port):
|
|
272
|
-
```json
|
|
273
|
-
{
|
|
274
|
-
"action": "start"
|
|
275
|
-
}
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
Start GUI on custom port:
|
|
279
|
-
```json
|
|
280
|
-
{
|
|
281
|
-
"action": "start",
|
|
282
|
-
"port": 8080
|
|
283
|
-
}
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
Stop the GUI:
|
|
287
|
-
```json
|
|
288
|
-
{
|
|
289
|
-
"action": "stop"
|
|
290
|
-
}
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
Check status:
|
|
294
|
-
```json
|
|
295
|
-
{
|
|
296
|
-
"action": "status"
|
|
297
|
-
}
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
**Response (start):**
|
|
301
|
-
```json
|
|
302
|
-
{
|
|
303
|
-
"status": "started",
|
|
304
|
-
"owned": true,
|
|
305
|
-
"port": 5623,
|
|
306
|
-
"pid": 12345,
|
|
307
|
-
"url": "http://localhost:5623"
|
|
308
|
-
}
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
**Response (stop - owned):**
|
|
312
|
-
```json
|
|
313
|
-
{
|
|
314
|
-
"status": "stopping",
|
|
315
|
-
"owned": true,
|
|
316
|
-
"port": 5623,
|
|
317
|
-
"pid": 12345
|
|
318
|
-
}
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
**Response (stop - external refused):**
|
|
322
|
-
```json
|
|
323
|
-
{
|
|
324
|
-
"status": "external_running",
|
|
325
|
-
"owned": false,
|
|
326
|
-
"port": 5623,
|
|
327
|
-
"pid": 12345,
|
|
328
|
-
"url": "http://localhost:5623",
|
|
329
|
-
"hint": "GUI was not started by this MCP process; stop refused."
|
|
330
|
-
}
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
**Response (status - running owned):**
|
|
334
|
-
```json
|
|
335
|
-
{
|
|
336
|
-
"status": "running",
|
|
337
|
-
"owned": true,
|
|
338
|
-
"port": 5623,
|
|
339
|
-
"pid": 12345,
|
|
340
|
-
"url": "http://localhost:5623"
|
|
341
|
-
}
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
**Response (status - external):**
|
|
345
|
-
```json
|
|
346
|
-
{
|
|
347
|
-
"status": "external_running",
|
|
348
|
-
"owned": false,
|
|
349
|
-
"port": 5623,
|
|
350
|
-
"pid": 99999,
|
|
351
|
-
"url": "http://localhost:5623"
|
|
352
|
-
}
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
**Response (status - not running):**
|
|
356
|
-
```json
|
|
357
|
-
{
|
|
358
|
-
"status": "not_running"
|
|
359
|
-
}
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## Data Structure
|
|
365
|
-
|
|
366
|
-
### Task Object
|
|
367
|
-
|
|
368
|
-
```json
|
|
369
|
-
{
|
|
370
|
-
"id": "string", // Numeric task identifier (e.g., "014")
|
|
371
|
-
"title": "string", // Task title, kept separate from the ID
|
|
372
|
-
"column": "string", // "active" | "planned" | "icebox" | "done"
|
|
373
|
-
"epic_group": "string", // Epic group name or "—"
|
|
374
|
-
"created": "string", // Creation date (YYYY-MM-DD)
|
|
375
|
-
"description": "string", // High-level context
|
|
376
|
-
"specs": "string", // Technical constraints
|
|
377
|
-
"in_scope": ["string"], // What this task includes
|
|
378
|
-
"out_of_scope": ["string"], // Explicit non-goals
|
|
379
|
-
"acceptance_criteria": ["string"],
|
|
380
|
-
"test_cases": ["string"],
|
|
381
|
-
"notes": "string",
|
|
382
|
-
"subtasks": [
|
|
383
|
-
{
|
|
384
|
-
"id": "string",
|
|
385
|
-
"done": "boolean",
|
|
386
|
-
"text": "string",
|
|
387
|
-
"description": "string"
|
|
388
|
-
}
|
|
389
|
-
]
|
|
390
|
-
}
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
### Columns
|
|
394
|
-
|
|
395
|
-
- `active` - In progress (max 1-2 tasks recommended)
|
|
396
|
-
- `planned` - Planned for implementation
|
|
397
|
-
- `icebox` - Frozen / nice-to-have
|
|
398
|
-
- `done` - Completed
|
|
399
|
-
|
|
400
|
-
---
|
|
401
|
-
|
|
402
|
-
## Usage Patterns
|
|
403
|
-
|
|
404
|
-
### Pattern 1: Task Discovery
|
|
405
|
-
|
|
406
|
-
```json
|
|
407
|
-
{ "tool": "kanban_read", "arguments": { "operation": "list", "col": "active" } }
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### Pattern 2: Task Creation Workflow
|
|
411
|
-
|
|
412
|
-
```json
|
|
413
|
-
// 1. Create task with strongly recommended planning fields
|
|
414
|
-
{ "tool": "kanban_manage", "arguments": {
|
|
415
|
-
"action": "create",
|
|
416
|
-
"title": "New feature",
|
|
417
|
-
"col": "planned",
|
|
418
|
-
"epic": "Phase 1",
|
|
419
|
-
"description": "Why this exists",
|
|
420
|
-
"specs": "APIs and constraints",
|
|
421
|
-
"in_scope": ["Core path"],
|
|
422
|
-
"out_of_scope": ["Mobile"],
|
|
423
|
-
"acceptance_criteria": ["npm test passes"]
|
|
424
|
-
} }
|
|
425
|
-
|
|
426
|
-
// 2. Get task details to see generated ID
|
|
427
|
-
{ "tool": "kanban_read", "arguments": { "operation": "show", "task_id": "015" } }
|
|
428
|
-
|
|
429
|
-
// 3. Update with subtasks
|
|
430
|
-
{ "tool": "kanban_manage", "arguments": { "action": "update", "task_id": "015", "subtasks": [{"done": false, "text": "Research"}, {"done": false, "text": "Implementation"}] } }
|
|
431
|
-
```
|
|
432
|
-
|
|
433
|
-
### Pattern 3: Task Progression
|
|
434
|
-
|
|
435
|
-
```json
|
|
436
|
-
// Move from planned → active
|
|
437
|
-
{ "tool": "kanban_manage", "arguments": { "action": "move", "task_id": "015", "column": "active" } }
|
|
438
|
-
|
|
439
|
-
// Update subtasks in one call
|
|
440
|
-
{ "tool": "kanban_manage", "arguments": { "action": "update", "task_id": "015", "subtasks": [{ "done": true, "text": "Research" }, { "done": false, "text": "Implementation" }] } }
|
|
441
|
-
|
|
442
|
-
// Move from active → done
|
|
443
|
-
{ "tool": "kanban_manage", "arguments": { "action": "move", "task_id": "015", "column": "done" } }
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
### Pattern 4: Epic Management
|
|
447
|
-
|
|
448
|
-
```json
|
|
449
|
-
// List all tasks in an epic
|
|
450
|
-
{ "tool": "kanban_read", "arguments": { "operation": "list", "epic": "Performance" } }
|
|
451
|
-
|
|
452
|
-
// Create task in specific epic (still include recommended fields)
|
|
453
|
-
{ "tool": "kanban_manage", "arguments": {
|
|
454
|
-
"action": "create",
|
|
455
|
-
"title": "Cache optimization",
|
|
456
|
-
"epic": "Performance",
|
|
457
|
-
"description": "Reduce repeated board reads",
|
|
458
|
-
"specs": "In-memory cache with TTL",
|
|
459
|
-
"in_scope": ["list endpoint"],
|
|
460
|
-
"out_of_scope": ["distributed cache"],
|
|
461
|
-
"acceptance_criteria": ["p95 list latency down"]
|
|
462
|
-
} }
|
|
463
|
-
```
|
|
464
|
-
|
|
465
|
-
---
|
|
466
|
-
|
|
467
|
-
## Token-efficient playbook (source of truth)
|
|
468
|
-
|
|
469
|
-
**Edit `agent-playbook.js` only.** MCP tool descriptions and `operation=help` are built from it.
|
|
470
|
-
|
|
471
|
-
At runtime agents already receive the rules via tool descriptions. Humans can also call:
|
|
472
|
-
|
|
473
|
-
```json
|
|
474
|
-
{ "operation": "help" }
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
on `kanban_read` (no board I/O).
|
|
478
|
-
|
|
479
|
-
### Drop-in for project `AGENTS.md` (optional)
|
|
480
|
-
|
|
481
|
-
Same bullets as `DROP_IN_RULE` in `agent-playbook.js` — copy if you want them outside MCP:
|
|
482
|
-
|
|
483
|
-
```text
|
|
484
|
-
Kanbango MCP — token rules:
|
|
485
|
-
- list: col filter, view=summary; keep task_ids; no full-board re-list after writes
|
|
486
|
-
- show: view=execution while coding; full only if needed
|
|
487
|
-
- create once with description,specs,in_scope,out_of_scope,acceptance_criteria
|
|
488
|
-
- move/update: return=none; subtasks=full array replace
|
|
489
|
-
- steps on create/plan_create → subtasks (no forced TDD); runner optional; optional plan_*: plan_create → plan_advance → plan_evidence (diff|summary|test_command) → plan_done
|
|
490
|
-
- gui: status before start; stop only owned; external_running = do not kill
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
### Columns
|
|
494
|
-
`planned` → `active` (few at a time) → `done`. Use `icebox` for parked work.
|
|
495
|
-
|
|
496
|
-
---
|
|
497
|
-
|
|
498
|
-
## Error Handling
|
|
499
|
-
|
|
500
|
-
All tools return structured error responses:
|
|
501
|
-
|
|
502
|
-
```json
|
|
503
|
-
{
|
|
504
|
-
"error": {
|
|
505
|
-
"code": "TASK_NOT_FOUND",
|
|
506
|
-
"message": "Task 999 was not found",
|
|
507
|
-
"hint": "Call kanban_read with operation=list to discover valid task ids",
|
|
508
|
-
"details": {},
|
|
509
|
-
"retryable": false
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
```
|
|
513
|
-
|
|
514
|
-
---
|
|
515
|
-
|
|
516
|
-
## Installation for Users
|
|
517
|
-
|
|
518
|
-
Tell users to run:
|
|
519
|
-
|
|
520
|
-
```bash
|
|
521
|
-
npm install -g kanbango
|
|
522
|
-
```
|
|
42
|
+
Structured `{error:{code,message,hint,details,retryable}}`. `next_tool_call` only when the repair is unique (`TASK_NOT_FOUND`, `INVALID_TRANSITION`). Concurrent writers on one local board may receive `BOARD_LOCKED` (`retryable=true`); retry the mutation. No lock across machines or shared/network storage. Corrupt task/epic JSON on list or context is `PARSE_ERROR` (`details.file`); never a partial board.
|
|
523
43
|
|
|
524
|
-
|
|
44
|
+
## Concurrency
|
|
525
45
|
|
|
526
|
-
|
|
46
|
+
One local `backlog/` only. MCP, CLI, and GUI share `backlog/.board.lock`. Not a distributed store.
|
|
527
47
|
|
|
528
48
|
## Support
|
|
529
49
|
|
|
50
|
+
- API map: [API.md](./API.md)
|
|
530
51
|
- GitHub: https://github.com/k0r81/kanbango
|
|
531
|
-
- Issues: https://github.com/k0r81/kanbango/issues
|
|
532
|
-
- Full docs: https://github.com/k0r81/kanbango#readme
|
package/README.md
CHANGED
|
@@ -31,8 +31,9 @@ kanban config
|
|
|
31
31
|
# Start web GUI (stable project port; prints the real URL)
|
|
32
32
|
kanban serve
|
|
33
33
|
|
|
34
|
-
# List
|
|
34
|
+
# List tasks (hides column=done unless --col done)
|
|
35
35
|
kanban list --json
|
|
36
|
+
kanban list --col done --json
|
|
36
37
|
|
|
37
38
|
# Add an epic (initiative container), then a task under it
|
|
38
39
|
kanban epic add "Phase 1" --description "Why this initiative" --goals "Ship X"
|
|
@@ -52,7 +53,7 @@ kanban rm 001
|
|
|
52
53
|
# Show details
|
|
53
54
|
kanban show 001
|
|
54
55
|
|
|
55
|
-
# Move between columns (active | planned | icebox | done)
|
|
56
|
+
# Move between columns (active | planned | icebox | testing | review | done)
|
|
56
57
|
kanban move 001 active
|
|
57
58
|
|
|
58
59
|
# Update subtasks in one call
|
|
@@ -76,21 +77,22 @@ Epic status is **derived** from child task columns (not a board column).
|
|
|
76
77
|
| `active` | In progress (keep to 1–2 tasks) |
|
|
77
78
|
| `planned` | Ready to implement |
|
|
78
79
|
| `icebox` | Nice-to-have / frozen |
|
|
79
|
-
| `testing` | Optional
|
|
80
|
-
| `review` | Optional
|
|
80
|
+
| `testing` | Optional project gate (default off) |
|
|
81
|
+
| `review` | Optional project gate (default off) |
|
|
81
82
|
| `done` | Completed |
|
|
82
83
|
|
|
83
84
|
### Project config (`backlog/kanbango.json`)
|
|
84
85
|
|
|
85
|
-
Optional. Missing file =
|
|
86
|
+
Optional. Missing file = core board only: `icebox`, `planned`, `active`, and `done`.
|
|
87
|
+
Workflow gates and agents are opt-in project configuration.
|
|
86
88
|
|
|
87
|
-
On a **TTY**, `kanban init` / `kanban mcp-init` open a checkbox wizard when the file is missing
|
|
89
|
+
On a **TTY**, `kanban init` / `kanban mcp-init` open a checkbox wizard when the file is missing. The default is the core board with gates and agents off. Non-TTY (CI, pipes, MCP) never blocks or creates a config; it prints a hint to run `kanban config` in a terminal. `kanban config` always opens the wizard (TTY required); invalid existing JSON is **not** overwritten (error + fix/remove).
|
|
88
90
|
|
|
89
91
|
```json
|
|
90
92
|
{
|
|
91
93
|
"columns": {
|
|
92
|
-
"testing": { "enabled": false, "label": "
|
|
93
|
-
"review": { "enabled":
|
|
94
|
+
"testing": { "enabled": false, "label": "Testing" },
|
|
95
|
+
"review": { "enabled": false, "label": "Review" }
|
|
94
96
|
},
|
|
95
97
|
"workflow": {
|
|
96
98
|
"enabled": true,
|
|
@@ -102,7 +104,7 @@ On a **TTY**, `kanban init` / `kanban mcp-init` open a checkbox wizard when the
|
|
|
102
104
|
|
|
103
105
|
- Only `testing` and `review` are configurable (core columns stay on).
|
|
104
106
|
- `enabled: false` on a gate column hides it and moves existing cards in that column to `planned`.
|
|
105
|
-
- Agent `enabled: false` keeps
|
|
107
|
+
- Agent `enabled: false` keeps an explicitly enabled column as a **manual** gate (no auto spawn).
|
|
106
108
|
- Legacy string agent names still work: `"testing_agent": "qa-tester"`.
|
|
107
109
|
|
|
108
110
|
## Data Structure
|
|
@@ -181,11 +183,11 @@ Once connected, your agent gets access to these tools:
|
|
|
181
183
|
|
|
182
184
|
| Tool | What it does |
|
|
183
185
|
|------|-------------|
|
|
184
|
-
| `kanban_read` |
|
|
186
|
+
| `kanban_read` | Omit operation = context (wake: unblocked active / gate / next planned). list `view=summary`; playbook via `operation=help` |
|
|
185
187
|
| `kanban_manage` | Create, move, update, plan_* workflow |
|
|
186
188
|
| `kanban_gui` | Start / status / stop (stop only kills GUI this MCP started) |
|
|
187
189
|
|
|
188
|
-
**Token tip for agents:** rules
|
|
190
|
+
**Token tip for agents:** `tools/list` is short. Full rules: `kanban_read` → `operation: "help"` (`agent-playbook.js`). Wake = context + one `show` (planning/execution), not `list` + `full`. Writes default `return=none`. Cost probe: `node benchmarks/agent-workflow.js`. Human setup: [LLM_AGENTS.md](./LLM_AGENTS.md).
|
|
189
191
|
|
|
190
192
|
Your agent stays in sync with your real board — every change is persisted as JSON files.
|
|
191
193
|
|
|
@@ -196,7 +198,7 @@ Your agent stays in sync with your real board — every change is persisted as J
|
|
|
196
198
|
| `kanban init` | Create backlog dirs; TTY wizard if `kanbango.json` missing |
|
|
197
199
|
| `kanban config` | Interactive project config wizard (`backlog/kanbango.json`) |
|
|
198
200
|
| `kanban serve [PORT]` | Start web GUI (stable project port, or PORT / KANBANGO_GUI_PORT) |
|
|
199
|
-
| `kanban list [--col <col>] [--json]` | List tasks |
|
|
201
|
+
| `kanban list [--col <col>] [--json]` | List tasks (hides `done` unless `--col done`) |
|
|
200
202
|
| `kanban show <ID>` | Show task details |
|
|
201
203
|
| `kanban add <TITLE>` | Add a new task |
|
|
202
204
|
| `kanban move <ID> <COL>` | Move task |
|
|
@@ -209,14 +211,14 @@ Your agent stays in sync with your real board — every change is persisted as J
|
|
|
209
211
|
```bash
|
|
210
212
|
kanban serve
|
|
211
213
|
```
|
|
212
|
-
-
|
|
213
|
-
-
|
|
214
|
-
-
|
|
214
|
+
- Epic rail + NOW panel (`next_action` from `/api/context`)
|
|
215
|
+
- Cards show blocked-by dependency ids
|
|
216
|
+
- Drag-and-drop between columns; inline edit and subtask checkboxes
|
|
215
217
|
|
|
216
218
|
## Using as a Node.js module
|
|
217
219
|
|
|
218
220
|
```js
|
|
219
|
-
const kanban = require('kanbango');
|
|
221
|
+
const { kanban } = require('kanbango');
|
|
220
222
|
const tasks = await kanban.allTasks();
|
|
221
223
|
```
|
|
222
224
|
|