kanbango 2.0.0 → 2.4.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 +7 -7
- package/API.md +20 -12
- package/CHANGELOG.md +40 -0
- package/LLM_AGENTS.md +141 -175
- package/README.md +78 -266
- package/bin/kanban.js +101 -26
- package/index.html +162 -85
- package/index.js +2 -0
- package/kan2.md +76 -0
- package/kanban.js +284 -35
- package/mcp-server.js +393 -184
- package/package.json +1 -1
- package/plan.js +159 -0
- package/planv2.md +17 -7
- package/tests/run.js +1 -0
package/AGENTS.md
CHANGED
|
@@ -6,7 +6,7 @@ This document provides build commands, testing procedures, and code style guidel
|
|
|
6
6
|
|
|
7
7
|
### Available Scripts
|
|
8
8
|
```bash
|
|
9
|
-
# Start web GUI (
|
|
9
|
+
# Start web GUI (stable project port in 5510-5999, or KANBANGO_GUI_PORT)
|
|
10
10
|
npm start
|
|
11
11
|
# or
|
|
12
12
|
node bin/kanban.js serve
|
|
@@ -14,7 +14,7 @@ node bin/kanban.js serve
|
|
|
14
14
|
# Start web GUI on custom port
|
|
15
15
|
node bin/kanban.js serve 8080
|
|
16
16
|
|
|
17
|
-
# Run MCP server
|
|
17
|
+
# Run MCP server (optional auto-GUI: KANBANGO_AUTO_GUI=1)
|
|
18
18
|
npm run mcp
|
|
19
19
|
# or
|
|
20
20
|
node mcp-server.js
|
|
@@ -143,7 +143,7 @@ async function parseEpic(filePath, column) {
|
|
|
143
143
|
|
|
144
144
|
// Callbacks
|
|
145
145
|
function shortId(epicId) {
|
|
146
|
-
const match = epicId.match(/^(
|
|
146
|
+
const match = epicId.match(/^(?:[A-Z]+-)?(\d+)/);
|
|
147
147
|
return match ? match[1] : epicId;
|
|
148
148
|
}
|
|
149
149
|
```
|
|
@@ -387,9 +387,9 @@ const args = process.argv.slice(2); // Skip node and script path
|
|
|
387
387
|
const cmd = args[0];
|
|
388
388
|
const param1 = args[1];
|
|
389
389
|
|
|
390
|
-
// Example: node bin/kanban.js move
|
|
390
|
+
// Example: node bin/kanban.js move 001 done
|
|
391
391
|
// args[0] = "move"
|
|
392
|
-
// args[1] = "
|
|
392
|
+
// args[1] = "001"
|
|
393
393
|
// args[2] = "done"
|
|
394
394
|
```
|
|
395
395
|
|
|
@@ -560,7 +560,7 @@ After making changes, verify:
|
|
|
560
560
|
1. CLI works: `node bin/kanban.js list --json`
|
|
561
561
|
2. Web GUI starts: `node bin/kanban.js serve` (Ctrl+C to stop)
|
|
562
562
|
3. MCP server tools: `echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node mcp-server.js`
|
|
563
|
-
4. All three tools work: kanban_read,
|
|
563
|
+
4. All three tools work: kanban_read, kanban_manage, kanban_gui
|
|
564
564
|
|
|
565
565
|
## Common Patterns to Avoid
|
|
566
566
|
|
|
@@ -603,4 +603,4 @@ return { content: [{ text: JSON.stringify({ error: error.message }) }], isError:
|
|
|
603
603
|
- README.md: https://github.com/k0r81/kanbango#readme
|
|
604
604
|
- LLM Agents Guide: LLM_AGENTS.md
|
|
605
605
|
- MCP Server Guide: LLM_AGENTS.md
|
|
606
|
-
- Issues: https://github.com/k0r81/kanbango/issues
|
|
606
|
+
- Issues: https://github.com/k0r81/kanbango/issues
|
package/API.md
CHANGED
|
@@ -42,7 +42,7 @@ Documentation for interacting with local Kanban system (kanban.py).
|
|
|
42
42
|
"properties": {
|
|
43
43
|
"task_id": {
|
|
44
44
|
"type": "string",
|
|
45
|
-
"description": "
|
|
45
|
+
"description": "Numeric task ID (e.g. '014')"
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
"required": ["task_id"],
|
|
@@ -108,8 +108,8 @@ Documentation for interacting with local Kanban system (kanban.py).
|
|
|
108
108
|
```json
|
|
109
109
|
{
|
|
110
110
|
"type": "function",
|
|
111
|
-
"name": "
|
|
112
|
-
"description": "
|
|
111
|
+
"name": "kanban_update",
|
|
112
|
+
"description": "Update task fields, including the full subtasks list.",
|
|
113
113
|
"parameters": {
|
|
114
114
|
"type": "object",
|
|
115
115
|
"properties": {
|
|
@@ -117,12 +117,20 @@ Documentation for interacting with local Kanban system (kanban.py).
|
|
|
117
117
|
"type": "string",
|
|
118
118
|
"description": "Parent task ID"
|
|
119
119
|
},
|
|
120
|
-
"
|
|
121
|
-
"type": "
|
|
122
|
-
"
|
|
120
|
+
"subtasks": {
|
|
121
|
+
"type": "array",
|
|
122
|
+
"items": {
|
|
123
|
+
"type": "object",
|
|
124
|
+
"properties": {
|
|
125
|
+
"id": { "type": "string" },
|
|
126
|
+
"text": { "type": "string" },
|
|
127
|
+
"done": { "type": "boolean" },
|
|
128
|
+
"description": { "type": "string" }
|
|
129
|
+
}
|
|
130
|
+
}
|
|
123
131
|
}
|
|
124
132
|
},
|
|
125
|
-
"required": ["task_id", "
|
|
133
|
+
"required": ["task_id", "subtasks"],
|
|
126
134
|
"additionalProperties": false
|
|
127
135
|
}
|
|
128
136
|
}
|
|
@@ -138,16 +146,16 @@ python kanban.py list --json
|
|
|
138
146
|
python kanban.py list --col active --json
|
|
139
147
|
|
|
140
148
|
# Show task details
|
|
141
|
-
python kanban.py show
|
|
149
|
+
python kanban.py show 014
|
|
142
150
|
|
|
143
151
|
# Add new task
|
|
144
152
|
python kanban.py add "New function" --col planned --epic "Faza 6"
|
|
145
153
|
|
|
146
154
|
# Move task to different column
|
|
147
|
-
python kanban.py move
|
|
155
|
+
python kanban.py move 014 active
|
|
148
156
|
|
|
149
|
-
#
|
|
150
|
-
python kanban.py
|
|
157
|
+
# Update subtasks
|
|
158
|
+
python kanban.py update 014 '{"subtasks":[{"done":true,"text":"Research"},{"done":false,"text":"Implementation"}]}'
|
|
151
159
|
```
|
|
152
160
|
|
|
153
161
|
## Kanban Columns
|
|
@@ -167,7 +175,7 @@ python kanban.py toggle PI-014-google-calendar 0
|
|
|
167
175
|
"column": "active|planned|icebox|done",
|
|
168
176
|
"epic_group": "string",
|
|
169
177
|
"created": "string",
|
|
170
|
-
"
|
|
178
|
+
"subtasks": [
|
|
171
179
|
{
|
|
172
180
|
"done": "boolean",
|
|
173
181
|
"text": "string"
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,46 @@ All notable changes to kanbango will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.4.0] - 2026-07-27
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Opt-in GUI auto-start with MCP via `KANBANGO_AUTO_GUI=1`
|
|
12
|
+
- Stable per-project GUI port (hash of cwd in `5510–5999`), overridable with `KANBANGO_GUI_PORT` or `kanban serve [PORT]`
|
|
13
|
+
- `backlog/.kanbango-gui.json` port file so the real URL is always discoverable
|
|
14
|
+
- `kanban_gui status` discovers a running GUI even outside the MCP child-process tracker
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- `kanban serve` default port is no longer hard-coded `5500`; uses preferred/stable port resolution
|
|
18
|
+
- `kanban_gui start` waits for the server to publish its actual listen port before returning
|
|
19
|
+
|
|
20
|
+
## [2.3.0] - 2026-07-27
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- `in_scope` and `out_of_scope` fields (arrays of strings) for task boundaries in planning/execution/full views
|
|
24
|
+
- MCP `kanban_manage` create/update support for `in_scope` and `out_of_scope`
|
|
25
|
+
- Web GUI edit/view sections for In Scope and Out of Scope (muted styling for exclusions)
|
|
26
|
+
- Markdown migrate support for `## In Scope` / `## Out of Scope` (and PL headings)
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- HTTP API now forwards `test_cases` on create and update (GUI saves were previously dropped)
|
|
30
|
+
|
|
31
|
+
## [2.2.0] - 2026-07-09
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- MCP tools consolidated from 6 to 3:
|
|
35
|
+
- `kanban_create` + `kanban_update` merged into `kanban_manage` with `action` parameter (`create` | `move` | `update`)
|
|
36
|
+
- `kanban_gui_start` + `kanban_gui_stop` + `kanban_gui_status` merged into `kanban_gui` with `action` parameter (`start` | `stop` | `status`)
|
|
37
|
+
- `kanban_read` unchanged
|
|
38
|
+
- `kanban_manage` subtask edits now use full list updates via `update`; `toggle` action removed
|
|
39
|
+
|
|
40
|
+
## [2.1.0] - 2026-07-09
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
- `test_cases` field (array of strings) as a first-class task attribute in all views (planning, execution, full)
|
|
44
|
+
- `test_cases` parameter in `kanban_create` MCP tool input schema
|
|
45
|
+
- Patch support for `test_cases` in `kanban_update` MCP tool
|
|
46
|
+
- Markdown parsing of `## Test Cases` / `## Przypadki Testowe` sections
|
|
47
|
+
|
|
8
48
|
## [2.0.0] - 2026-07-07
|
|
9
49
|
|
|
10
50
|
### Added
|
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,195 @@ 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
|
|
150
|
+
"col": "planned", // Optional, default "planned"
|
|
151
|
+
"epic": "Phase 1", // Optional, default "—"
|
|
152
|
+
"description": "Context and plan",
|
|
153
|
+
"specs": "Technical constraints",
|
|
154
|
+
"in_scope": ["What is included"],
|
|
155
|
+
"out_of_scope": ["What is excluded"],
|
|
156
|
+
"acceptance_criteria": ["Must work"],
|
|
157
|
+
"test_cases": ["Verify X"],
|
|
158
|
+
"subtasks": [{"text": "Do it", "done": false}],
|
|
159
|
+
"notes": "Freeform notes"
|
|
155
160
|
}
|
|
156
161
|
```
|
|
157
162
|
|
|
158
|
-
|
|
163
|
+
**Parameters (move):**
|
|
159
164
|
```json
|
|
160
165
|
{
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"
|
|
166
|
+
"action": "move",
|
|
167
|
+
"task_id": "014", // Required
|
|
168
|
+
"column": "done" // Required: target column
|
|
164
169
|
}
|
|
165
170
|
```
|
|
166
171
|
|
|
167
|
-
**
|
|
172
|
+
**Parameters (update):**
|
|
168
173
|
```json
|
|
169
174
|
{
|
|
170
|
-
"
|
|
171
|
-
"
|
|
172
|
-
"
|
|
173
|
-
"
|
|
174
|
-
"
|
|
175
|
-
"
|
|
175
|
+
"action": "update",
|
|
176
|
+
"task_id": "014", // Required
|
|
177
|
+
"patch": {"description": "New context"}, // Field-level patch object
|
|
178
|
+
"title": "New title", // Shortcut, equivalent to patch.title
|
|
179
|
+
"subtasks": [{"text": "A", "done": true}], // Preferred full subtask list
|
|
180
|
+
"return": "summary" // "none" | "summary" | "full" (default "summary")
|
|
176
181
|
}
|
|
177
182
|
```
|
|
178
183
|
|
|
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
|
|
184
|
+
**Examples:**
|
|
189
185
|
|
|
190
|
-
|
|
186
|
+
Create a task:
|
|
191
187
|
```json
|
|
192
188
|
{
|
|
193
|
-
"
|
|
194
|
-
"
|
|
195
|
-
"
|
|
196
|
-
"
|
|
197
|
-
"title": "Updated title", // Optional for "update"
|
|
198
|
-
"tasks": [ // Optional for "update"
|
|
199
|
-
{ "done": true, "text": "Task 1" },
|
|
200
|
-
{ "done": false, "text": "Task 2" }
|
|
201
|
-
]
|
|
189
|
+
"action": "create",
|
|
190
|
+
"title": "Database optimization",
|
|
191
|
+
"col": "planned",
|
|
192
|
+
"epic": "Performance"
|
|
202
193
|
}
|
|
203
194
|
```
|
|
204
195
|
|
|
205
|
-
**Examples:**
|
|
206
|
-
|
|
207
196
|
Move task to done:
|
|
208
197
|
```json
|
|
209
198
|
{
|
|
210
|
-
"
|
|
211
|
-
"task_id": "
|
|
199
|
+
"action": "move",
|
|
200
|
+
"task_id": "014",
|
|
212
201
|
"column": "done"
|
|
213
202
|
}
|
|
214
203
|
```
|
|
215
204
|
|
|
216
|
-
|
|
205
|
+
Patch-update task fields:
|
|
217
206
|
```json
|
|
218
207
|
{
|
|
219
|
-
"
|
|
220
|
-
"task_id": "
|
|
221
|
-
"
|
|
208
|
+
"action": "update",
|
|
209
|
+
"task_id": "014",
|
|
210
|
+
"patch": {
|
|
211
|
+
"title": "Updated title",
|
|
212
|
+
"description": "New implementation plan",
|
|
213
|
+
"epic_group": "Phase 2",
|
|
214
|
+
"subtasks": [
|
|
215
|
+
{ "id": "st-1", "text": "Research", "done": true },
|
|
216
|
+
{ "id": "st-2", "text": "Implementation", "done": false }
|
|
217
|
+
]
|
|
218
|
+
}
|
|
222
219
|
}
|
|
223
220
|
```
|
|
224
221
|
|
|
225
|
-
|
|
226
|
-
```json
|
|
227
|
-
{
|
|
228
|
-
"operation": "update",
|
|
229
|
-
"task_id": "PI-014-google-calendar",
|
|
230
|
-
"title": "Google Calendar API Integration"
|
|
231
|
-
}
|
|
232
|
-
```
|
|
222
|
+
---
|
|
233
223
|
|
|
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
|
-
```
|
|
224
|
+
### 3. kanban_gui
|
|
246
225
|
|
|
247
|
-
|
|
248
|
-
```json
|
|
249
|
-
{
|
|
250
|
-
"success": true,
|
|
251
|
-
"message": "Moved PI-014-google-calendar to done"
|
|
252
|
-
}
|
|
253
|
-
```
|
|
226
|
+
Control the web GUI server: start, stop, or check status.
|
|
254
227
|
|
|
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
|
-
```
|
|
228
|
+
**Port resolution (start):**
|
|
229
|
+
1. Explicit `port` argument, if provided
|
|
230
|
+
2. Else `KANBANGO_GUI_PORT` env
|
|
231
|
+
3. Else stable hash of project cwd in range `5510–5999`
|
|
269
232
|
|
|
270
|
-
|
|
233
|
+
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
234
|
|
|
272
|
-
|
|
235
|
+
**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
236
|
|
|
274
|
-
|
|
237
|
+
**Actions:**
|
|
238
|
+
- `start` - Launch the GUI server
|
|
239
|
+
- `stop` - Kill the GUI server
|
|
240
|
+
- `status` - Check if the GUI is running (reads live process or port file)
|
|
275
241
|
|
|
276
242
|
**Parameters:**
|
|
277
243
|
```json
|
|
278
244
|
{
|
|
279
|
-
"
|
|
245
|
+
"action": "start", // "start" | "stop" | "status"
|
|
246
|
+
"port": 5821 // Optional, only for "start"
|
|
280
247
|
}
|
|
281
248
|
```
|
|
282
249
|
|
|
283
250
|
**Examples:**
|
|
284
251
|
|
|
285
|
-
Start GUI
|
|
252
|
+
Start GUI (stable project port):
|
|
286
253
|
```json
|
|
287
|
-
{
|
|
254
|
+
{
|
|
255
|
+
"action": "start"
|
|
256
|
+
}
|
|
288
257
|
```
|
|
289
258
|
|
|
290
259
|
Start GUI on custom port:
|
|
291
260
|
```json
|
|
292
261
|
{
|
|
262
|
+
"action": "start",
|
|
293
263
|
"port": 8080
|
|
294
264
|
}
|
|
295
265
|
```
|
|
296
266
|
|
|
297
|
-
|
|
267
|
+
Stop the GUI:
|
|
298
268
|
```json
|
|
299
269
|
{
|
|
300
|
-
"
|
|
301
|
-
"port": 5500,
|
|
302
|
-
"pid": 12345,
|
|
303
|
-
"url": "http://localhost:5500"
|
|
270
|
+
"action": "stop"
|
|
304
271
|
}
|
|
305
272
|
```
|
|
306
273
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
### 5. kanban_gui_stop
|
|
310
|
-
|
|
311
|
-
Stop the web GUI server if it is running.
|
|
312
|
-
|
|
313
|
-
**Parameters:**
|
|
274
|
+
Check status:
|
|
314
275
|
```json
|
|
315
|
-
{
|
|
276
|
+
{
|
|
277
|
+
"action": "status"
|
|
278
|
+
}
|
|
316
279
|
```
|
|
317
280
|
|
|
318
|
-
**Response:**
|
|
281
|
+
**Response (start):**
|
|
319
282
|
```json
|
|
320
283
|
{
|
|
321
|
-
"status": "
|
|
322
|
-
"port":
|
|
284
|
+
"status": "started",
|
|
285
|
+
"port": 5623,
|
|
286
|
+
"pid": 12345,
|
|
287
|
+
"url": "http://localhost:5623"
|
|
323
288
|
}
|
|
324
289
|
```
|
|
325
290
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
### 6. kanban_gui_status
|
|
329
|
-
|
|
330
|
-
Get status of the web GUI server.
|
|
331
|
-
|
|
332
|
-
**Parameters:**
|
|
291
|
+
**Response (stop):**
|
|
333
292
|
```json
|
|
334
|
-
{
|
|
293
|
+
{
|
|
294
|
+
"status": "stopping",
|
|
295
|
+
"port": 5623,
|
|
296
|
+
"pid": 12345
|
|
297
|
+
}
|
|
335
298
|
```
|
|
336
299
|
|
|
337
|
-
**Response (running):**
|
|
300
|
+
**Response (status - running):**
|
|
338
301
|
```json
|
|
339
302
|
{
|
|
340
303
|
"status": "running",
|
|
341
|
-
"port":
|
|
304
|
+
"port": 5623,
|
|
342
305
|
"pid": 12345,
|
|
343
|
-
"url": "http://localhost:
|
|
306
|
+
"url": "http://localhost:5623"
|
|
344
307
|
}
|
|
345
308
|
```
|
|
346
309
|
|
|
347
|
-
**Response (not running):**
|
|
310
|
+
**Response (status - not running):**
|
|
348
311
|
```json
|
|
349
312
|
{
|
|
350
313
|
"status": "not_running"
|
|
@@ -359,15 +322,24 @@ Get status of the web GUI server.
|
|
|
359
322
|
|
|
360
323
|
```json
|
|
361
324
|
{
|
|
362
|
-
"id": "string", //
|
|
363
|
-
"title": "string", //
|
|
325
|
+
"id": "string", // Numeric task identifier (e.g., "014")
|
|
326
|
+
"title": "string", // Task title, kept separate from the ID
|
|
364
327
|
"column": "string", // "active" | "planned" | "icebox" | "done"
|
|
365
328
|
"epic_group": "string", // Epic group name or "—"
|
|
366
329
|
"created": "string", // Creation date (YYYY-MM-DD)
|
|
367
|
-
"
|
|
330
|
+
"description": "string", // High-level context
|
|
331
|
+
"specs": "string", // Technical constraints
|
|
332
|
+
"in_scope": ["string"], // What this task includes
|
|
333
|
+
"out_of_scope": ["string"], // Explicit non-goals
|
|
334
|
+
"acceptance_criteria": ["string"],
|
|
335
|
+
"test_cases": ["string"],
|
|
336
|
+
"notes": "string",
|
|
337
|
+
"subtasks": [
|
|
368
338
|
{
|
|
369
|
-
"
|
|
370
|
-
"
|
|
339
|
+
"id": "string",
|
|
340
|
+
"done": "boolean",
|
|
341
|
+
"text": "string",
|
|
342
|
+
"description": "string"
|
|
371
343
|
}
|
|
372
344
|
]
|
|
373
345
|
}
|
|
@@ -387,51 +359,43 @@ Get status of the web GUI server.
|
|
|
387
359
|
### Pattern 1: Task Discovery
|
|
388
360
|
|
|
389
361
|
```json
|
|
390
|
-
|
|
391
|
-
{ "operation": "list", "col": "active" }
|
|
362
|
+
{ "tool": "kanban_read", "arguments": { "operation": "list", "col": "active" } }
|
|
392
363
|
```
|
|
393
364
|
|
|
394
365
|
### Pattern 2: Task Creation Workflow
|
|
395
366
|
|
|
396
367
|
```json
|
|
397
368
|
// 1. Create task
|
|
398
|
-
{ "title": "New feature", "col": "planned", "epic": "Phase 1" }
|
|
369
|
+
{ "tool": "kanban_manage", "arguments": { "action": "create", "title": "New feature", "col": "planned", "epic": "Phase 1" } }
|
|
399
370
|
|
|
400
371
|
// 2. Get task details to see generated ID
|
|
401
|
-
{ "operation": "show", "task_id": "
|
|
372
|
+
{ "tool": "kanban_read", "arguments": { "operation": "show", "task_id": "015" } }
|
|
402
373
|
|
|
403
374
|
// 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
|
-
}
|
|
375
|
+
{ "tool": "kanban_manage", "arguments": { "action": "update", "task_id": "015", "subtasks": [{"done": false, "text": "Research"}, {"done": false, "text": "Implementation"}] } }
|
|
412
376
|
```
|
|
413
377
|
|
|
414
378
|
### Pattern 3: Task Progression
|
|
415
379
|
|
|
416
380
|
```json
|
|
417
381
|
// Move from planned → active
|
|
418
|
-
{ "
|
|
382
|
+
{ "tool": "kanban_manage", "arguments": { "action": "move", "task_id": "015", "column": "active" } }
|
|
419
383
|
|
|
420
|
-
//
|
|
421
|
-
{ "
|
|
384
|
+
// Update subtasks in one call
|
|
385
|
+
{ "tool": "kanban_manage", "arguments": { "action": "update", "task_id": "015", "subtasks": [{ "done": true, "text": "Research" }, { "done": false, "text": "Implementation" }] } }
|
|
422
386
|
|
|
423
387
|
// Move from active → done
|
|
424
|
-
{ "
|
|
388
|
+
{ "tool": "kanban_manage", "arguments": { "action": "move", "task_id": "015", "column": "done" } }
|
|
425
389
|
```
|
|
426
390
|
|
|
427
391
|
### Pattern 4: Epic Management
|
|
428
392
|
|
|
429
393
|
```json
|
|
430
394
|
// List all tasks in an epic
|
|
431
|
-
{ "operation": "list", "epic": "Performance" }
|
|
395
|
+
{ "tool": "kanban_read", "arguments": { "operation": "list", "epic": "Performance" } }
|
|
432
396
|
|
|
433
397
|
// Create task in specific epic
|
|
434
|
-
{ "title": "Cache optimization", "epic": "Performance" }
|
|
398
|
+
{ "tool": "kanban_manage", "arguments": { "action": "create", "title": "Cache optimization", "epic": "Performance" } }
|
|
435
399
|
```
|
|
436
400
|
|
|
437
401
|
---
|
|
@@ -439,30 +403,32 @@ Get status of the web GUI server.
|
|
|
439
403
|
## Best Practices for LLM Agents
|
|
440
404
|
|
|
441
405
|
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. **
|
|
406
|
+
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.
|
|
407
|
+
3. **Use `col` filter** - Narrow down to relevant column when listing
|
|
408
|
+
4. **Use `epic` grouping** - Organize tasks by features/phases
|
|
409
|
+
5. **Work through subtasks** - Toggle each subtask as you complete them
|
|
410
|
+
6. **Move tasks through workflow** - planned → active → done progression
|
|
411
|
+
7. **Use `show` operation** - Get full task details including subtasks
|
|
412
|
+
8. **Handle task IDs** - Always use the full task ID returned from create/show
|
|
448
413
|
|
|
449
414
|
---
|
|
450
415
|
|
|
451
416
|
## Error Handling
|
|
452
417
|
|
|
453
|
-
All tools return error
|
|
418
|
+
All tools return structured error responses:
|
|
454
419
|
|
|
455
420
|
```json
|
|
456
421
|
{
|
|
457
|
-
"error":
|
|
422
|
+
"error": {
|
|
423
|
+
"code": "TASK_NOT_FOUND",
|
|
424
|
+
"message": "Task 999 was not found",
|
|
425
|
+
"hint": "Call kanban_read with operation=list to discover valid task ids",
|
|
426
|
+
"details": {},
|
|
427
|
+
"retryable": false
|
|
428
|
+
}
|
|
458
429
|
}
|
|
459
430
|
```
|
|
460
431
|
|
|
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
432
|
---
|
|
467
433
|
|
|
468
434
|
## Installation for Users
|