kanbango 2.0.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 +606 -0
- package/API.md +177 -0
- package/CHANGELOG.md +122 -0
- package/LICENSE +21 -0
- package/LLM_AGENTS.md +484 -0
- package/README.md +360 -0
- package/bin/kanban-cmd.js +40 -0
- package/bin/kanban.js +462 -0
- package/index.html +1095 -0
- package/index.js +15 -0
- package/kanban.js +625 -0
- package/kanbango.md +48 -0
- package/mcp-server.js +489 -0
- package/package.json +41 -0
- package/planv2.md +307 -0
- package/tests/run.js +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
# kanbango
|
|
2
|
+
|
|
3
|
+
JSON-first local Kanban board with web GUI, CLI, and MCP server (pure JavaScript).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 📊 Local Kanban board stored in JSON task files
|
|
8
|
+
- 🎨 Modern web GUI with drag-and-drop interface
|
|
9
|
+
- 🖥️ Full CLI support for automation and CI/CD
|
|
10
|
+
- 🤖 AI-friendly API (JSON output)
|
|
11
|
+
- 📁 Four columns: Active, Planned, Icebox, Done
|
|
12
|
+
- ✅ Subtasks with progress tracking
|
|
13
|
+
- 🏷️ Epic grouping
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
### Global (recommended)
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g kanbango
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Local (per project)
|
|
23
|
+
```bash
|
|
24
|
+
npm install -D kanbango
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Using npx (no installation)
|
|
28
|
+
```bash
|
|
29
|
+
npx kanbango --help
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## NPM Package
|
|
33
|
+
|
|
34
|
+
- Package name: `kanbango`
|
|
35
|
+
- Binaries: `kanban`, `kanban-cmd`
|
|
36
|
+
- MCP server entrypoint: `mcp-server.js` (run via `npx kanbango mcp`)
|
|
37
|
+
|
|
38
|
+
## Requirements
|
|
39
|
+
|
|
40
|
+
- Node.js 16+
|
|
41
|
+
|
|
42
|
+
## Quick Start
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Initialize backlog structure
|
|
46
|
+
kanban init
|
|
47
|
+
|
|
48
|
+
# Start web GUI (opens http://localhost:5500)
|
|
49
|
+
kanban serve
|
|
50
|
+
|
|
51
|
+
# List all tasks (JSON)
|
|
52
|
+
kanban list --json
|
|
53
|
+
|
|
54
|
+
# Add a new task
|
|
55
|
+
kanban add "New feature" --col planned --epic "Phase1"
|
|
56
|
+
|
|
57
|
+
# Show task details
|
|
58
|
+
kanban show PI-001
|
|
59
|
+
|
|
60
|
+
# Move task between columns
|
|
61
|
+
kanban move PI-001 active
|
|
62
|
+
|
|
63
|
+
# Toggle subtask
|
|
64
|
+
kanban toggle PI-001 0
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## CLI Commands
|
|
68
|
+
|
|
69
|
+
| Command | Description |
|
|
70
|
+
|---------|-------------|
|
|
71
|
+
| `kanban serve [PORT]` | Start web GUI (default: 5500) |
|
|
72
|
+
| `kanban init` | Initialize backlog structure |
|
|
73
|
+
| `kanban mcp-init` | Generate MCP config files for Claude Code / OpenCode |
|
|
74
|
+
| `kanban list` | List all tasks |
|
|
75
|
+
| `kanban show <ID>` | Show task details |
|
|
76
|
+
| `kanban add <TITLE>` | Add new task |
|
|
77
|
+
| `kanban move <ID> <COL>` | Move task to column |
|
|
78
|
+
| `kanban toggle <ID> <IDX>` | Toggle subtask |
|
|
79
|
+
|
|
80
|
+
## Columns
|
|
81
|
+
|
|
82
|
+
- `active` — In progress (max 1-2 tasks)
|
|
83
|
+
- `planned` — Planned for implementation
|
|
84
|
+
- `icebox` — Frozen / nice-to-have
|
|
85
|
+
- `done` — Completed
|
|
86
|
+
|
|
87
|
+
## Data Structure
|
|
88
|
+
|
|
89
|
+
Tasks are stored as JSON files in `backlog/<column>/`. Existing Markdown task files are still readable during migration:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"id": "PI-001-feature-title",
|
|
94
|
+
"title": "Feature Title",
|
|
95
|
+
"column": "planned",
|
|
96
|
+
"epic_group": "Phase 1",
|
|
97
|
+
"created": "2026-07-07",
|
|
98
|
+
"description": "High-level context and implementation plan.",
|
|
99
|
+
"specs": "Technical details and constraints.",
|
|
100
|
+
"acceptance_criteria": [
|
|
101
|
+
"First condition",
|
|
102
|
+
"Second condition"
|
|
103
|
+
],
|
|
104
|
+
"subtasks": [
|
|
105
|
+
{
|
|
106
|
+
"id": "st-1",
|
|
107
|
+
"text": "First subtask",
|
|
108
|
+
"done": false,
|
|
109
|
+
"description": "Execution details for the subtask"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"notes": "Optional freeform notes"
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## AI Integration
|
|
117
|
+
|
|
118
|
+
The `kanban-cmd` command provides simplified JSON output for AI agents:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# For AI: always use JSON output
|
|
122
|
+
kanban-cmd list
|
|
123
|
+
|
|
124
|
+
# Filter by column
|
|
125
|
+
kanban-cmd list --col active
|
|
126
|
+
|
|
127
|
+
# Show task details
|
|
128
|
+
kanban-cmd show PI-001
|
|
129
|
+
|
|
130
|
+
# Add task (AI-friendly)
|
|
131
|
+
kanban-cmd add "New task" --col planned --epic "Phase 1"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### JSON Output Format
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
[
|
|
138
|
+
{
|
|
139
|
+
"id": "PI-001-feature-title",
|
|
140
|
+
"title": "Feature Title",
|
|
141
|
+
"column": "planned",
|
|
142
|
+
"epic_group": "Phase 1",
|
|
143
|
+
"created": "2026-07-07",
|
|
144
|
+
"description": "High-level context and implementation plan.",
|
|
145
|
+
"specs": "Technical details and constraints.",
|
|
146
|
+
"acceptance_criteria": [
|
|
147
|
+
"First condition"
|
|
148
|
+
],
|
|
149
|
+
"tasks": [
|
|
150
|
+
{
|
|
151
|
+
"id": "st-1",
|
|
152
|
+
"done": false,
|
|
153
|
+
"text": "First subtask",
|
|
154
|
+
"description": "Execution details for the subtask"
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## MCP Task Views
|
|
162
|
+
|
|
163
|
+
`kanban_read` supports compact response shaping so agents can avoid reading the whole task every time.
|
|
164
|
+
|
|
165
|
+
```json
|
|
166
|
+
{
|
|
167
|
+
"operation": "show",
|
|
168
|
+
"task_id": "PI-001-feature-title",
|
|
169
|
+
"view": "planning"
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Supported views:
|
|
174
|
+
|
|
175
|
+
- `summary` - `id`, `title`, `column`, `epic_group`, `created`, `progress`
|
|
176
|
+
- `planning` - summary + `description`, `specs`, `acceptance_criteria`
|
|
177
|
+
- `execution` - planning + `subtasks`
|
|
178
|
+
- `full` - execution + `notes`
|
|
179
|
+
|
|
180
|
+
You can also request explicit fields:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"operation": "show",
|
|
185
|
+
"task_id": "PI-001-feature-title",
|
|
186
|
+
"fields": ["title", "description", "acceptance_criteria"]
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
`kanban_update` supports patch-style updates and compact responses:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"operation": "update",
|
|
195
|
+
"task_id": "PI-001-feature-title",
|
|
196
|
+
"patch": {
|
|
197
|
+
"description": "Updated plan",
|
|
198
|
+
"acceptance_criteria": ["OAuth works"]
|
|
199
|
+
},
|
|
200
|
+
"return": "summary"
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Errors are returned as structured JSON:
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"error": {
|
|
209
|
+
"code": "TASK_NOT_FOUND",
|
|
210
|
+
"message": "Task PI-999-missing was not found",
|
|
211
|
+
"hint": "Call kanban_read with operation=list to discover valid task ids",
|
|
212
|
+
"details": {
|
|
213
|
+
"task_id": "PI-999-missing"
|
|
214
|
+
},
|
|
215
|
+
"retryable": false
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
## Web GUI
|
|
221
|
+
|
|
222
|
+
Start the web interface:
|
|
223
|
+
```bash
|
|
224
|
+
kanban serve 5500
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Features:
|
|
228
|
+
- Swimlanes grouped by epic
|
|
229
|
+
- Drag-and-drop between columns
|
|
230
|
+
- Inline editing
|
|
231
|
+
- Real-time subtask checkboxes
|
|
232
|
+
- Progress tracking
|
|
233
|
+
|
|
234
|
+
## Directory Structure
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
backlog/
|
|
238
|
+
├── active/ # Tasks in progress
|
|
239
|
+
├── planned/ # Planned tasks
|
|
240
|
+
├── icebox/ # Frozen tasks
|
|
241
|
+
└── done/ # Completed tasks
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## API for AI Agents
|
|
245
|
+
|
|
246
|
+
See [API.md](API.md) for detailed API function definitions.
|
|
247
|
+
|
|
248
|
+
## MCP Server
|
|
249
|
+
|
|
250
|
+
This package includes a Model Context Protocol (MCP) server for integration with MCP-compatible clients.
|
|
251
|
+
|
|
252
|
+
### Using the MCP server
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# Run the MCP server directly
|
|
256
|
+
npm run mcp
|
|
257
|
+
|
|
258
|
+
# Or using npx
|
|
259
|
+
npx kanbango mcp
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### MCP Configuration
|
|
263
|
+
|
|
264
|
+
For MCP clients, add this to your configuration:
|
|
265
|
+
|
|
266
|
+
```json
|
|
267
|
+
{
|
|
268
|
+
"mcpServers": {
|
|
269
|
+
"kanbango": {
|
|
270
|
+
"command": "npx",
|
|
271
|
+
"args": ["kanbango", "mcp"]
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### MCP Per Project (Recommended)
|
|
278
|
+
|
|
279
|
+
Install locally in the project so each repo controls its own MCP version:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
npm install -D kanbango
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Then point MCP to the local package:
|
|
286
|
+
|
|
287
|
+
```json
|
|
288
|
+
{
|
|
289
|
+
"mcpServers": {
|
|
290
|
+
"kanbango": {
|
|
291
|
+
"command": "node",
|
|
292
|
+
"args": ["./node_modules/kanbango/mcp-server.js"]
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
If you prefer `npx`, you can still use it, but versioning is less explicit:
|
|
299
|
+
|
|
300
|
+
```json
|
|
301
|
+
{
|
|
302
|
+
"mcpServers": {
|
|
303
|
+
"kanbango": {
|
|
304
|
+
"command": "npx",
|
|
305
|
+
"args": ["kanbango", "mcp"]
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### MCP Project Automation (Claude Code + OpenCode)
|
|
312
|
+
|
|
313
|
+
Generate project configs automatically (creates `.mcp.json` and `opencode.json` in the current folder):
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
# Local install (recommended)
|
|
317
|
+
npx kanbango mcp-init
|
|
318
|
+
|
|
319
|
+
# Use npx-based command in configs
|
|
320
|
+
npx kanbango mcp-init --npx
|
|
321
|
+
|
|
322
|
+
# Only Claude Code config
|
|
323
|
+
npx kanbango mcp-init --claude
|
|
324
|
+
|
|
325
|
+
# Only OpenCode config
|
|
326
|
+
npx kanbango mcp-init --opencode
|
|
327
|
+
|
|
328
|
+
# Overwrite existing files
|
|
329
|
+
npx kanbango mcp-init --force
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Available MCP Tools
|
|
333
|
+
|
|
334
|
+
- `kanban_read` - Read tasks (list all, filter, or get specific task details)
|
|
335
|
+
- `kanban_create` - Create a new task
|
|
336
|
+
- `kanban_update` - Update tasks (move, toggle subtask, or edit details)
|
|
337
|
+
- `kanban_gui_start` - Start the web GUI server (returns URL)
|
|
338
|
+
- `kanban_gui_stop` - Stop the web GUI server
|
|
339
|
+
- `kanban_gui_status` - Check GUI server status
|
|
340
|
+
|
|
341
|
+
## Development
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# Install dependencies
|
|
345
|
+
npm install
|
|
346
|
+
|
|
347
|
+
# Run tests
|
|
348
|
+
npm test
|
|
349
|
+
|
|
350
|
+
# Build (if needed)
|
|
351
|
+
npm run build
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## License
|
|
355
|
+
|
|
356
|
+
MIT
|
|
357
|
+
|
|
358
|
+
## Contributing
|
|
359
|
+
|
|
360
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
const { spawn } = require('child_process');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const os = require('os');
|
|
5
|
+
|
|
6
|
+
// Find Python executable
|
|
7
|
+
function findPython() {
|
|
8
|
+
const pyCommands = os.platform() === 'win32' ? ['python', 'py'] : ['python3', 'python'];
|
|
9
|
+
|
|
10
|
+
for (const cmd of pyCommands) {
|
|
11
|
+
try {
|
|
12
|
+
const result = require('child_process').spawnSync(cmd, ['--version'], { stdio: 'ignore' });
|
|
13
|
+
if (result.status === 0) {
|
|
14
|
+
return cmd;
|
|
15
|
+
}
|
|
16
|
+
} catch (e) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
throw new Error('Python not found. Please install Python 3.7+');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Main execution
|
|
24
|
+
const python = findPython();
|
|
25
|
+
const scriptPath = path.join(__dirname, '..', 'kanban-cmd.py');
|
|
26
|
+
const args = process.argv.slice(2);
|
|
27
|
+
|
|
28
|
+
const child = spawn(python, [scriptPath, ...args], {
|
|
29
|
+
stdio: 'inherit',
|
|
30
|
+
env: { ...process.env }
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
child.on('exit', (code) => {
|
|
34
|
+
process.exit(code || 0);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
child.on('error', (err) => {
|
|
38
|
+
console.error('Error running kanban-cmd.py:', err.message);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
});
|