claude-code-kanban 4.12.0 → 4.13.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/README.md +23 -77
- package/lib/parsers.js +4 -3
- package/package.json +1 -1
- package/server.js +2 -2
package/README.md
CHANGED
|
@@ -8,9 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
> Watch Claude Code work, in real time.
|
|
10
10
|
|
|
11
|
-

|
|
11
|
+

|
|
14
12
|
|
|
15
13
|
## Getting Started
|
|
16
14
|
|
|
@@ -22,11 +20,7 @@ Hooks enable subagent tracking, waiting-for-user detection, and session activity
|
|
|
22
20
|
npx claude-code-kanban --install
|
|
23
21
|
```
|
|
24
22
|
|
|
25
|
-
|
|
26
|
-
- Copy `agent-spy.sh` to `~/.claude/hooks/` (requires `jq`)
|
|
27
|
-
- Add `SubagentStart`, `SubagentStop`, `TeammateIdle`, and `PostToolUse` hooks to `~/.claude/settings.json`
|
|
28
|
-
|
|
29
|
-
All changes are non-destructive — existing settings are preserved.
|
|
23
|
+
Non-destructive — existing settings in `~/.claude/settings.json` are preserved. Uninstall anytime with `npx claude-code-kanban --uninstall`.
|
|
30
24
|
|
|
31
25
|
### 2. Start the dashboard
|
|
32
26
|
|
|
@@ -34,72 +28,34 @@ All changes are non-destructive — existing settings are preserved.
|
|
|
34
28
|
npx claude-code-kanban --open
|
|
35
29
|
```
|
|
36
30
|
|
|
37
|
-
Open http://localhost:3541 (or use `--open` to auto-launch the browser).
|
|
38
|
-
|
|
39
31
|
### 3. Use Claude Code as usual
|
|
40
32
|
|
|
41
|
-
Tasks, agents, and messages appear on the board automatically
|
|
42
|
-
|
|
43
|
-
> To uninstall hooks: `npx claude-code-kanban --uninstall`
|
|
33
|
+
Tasks, agents, and messages appear on the board automatically — Claude Code writes task files and conversation logs to `~/.claude`, the dashboard watches them and streams updates to the browser via SSE. It never directs Claude's work.
|
|
44
34
|
|
|
45
35
|
## Features
|
|
46
36
|
|
|
47
37
|
- **Real-time Kanban board** — Tasks move through Pending → In Progress → Completed as Claude works
|
|
48
|
-
- **
|
|
49
|
-
- **
|
|
38
|
+
- **Session log** — The full conversation timeline: prompts, replies, tool calls and results (`Shift+L`)
|
|
39
|
+
- **Agent log** — Live subagent tracking with prompts, duration, status, and idle detection
|
|
40
|
+
- **Task detail panel** — Full description, notes, blockedBy/blocks dependencies, inline editing
|
|
41
|
+
- **Follow & pin** — Follow the latest message live (`Shift+M`), pin the messages that matter
|
|
42
|
+
- **Tool stats & impact** — Per-session tool usage breakdown and file impact
|
|
50
43
|
- **Waiting-for-user indicators** — Amber highlight on sessions needing permission or input
|
|
51
|
-
- **Plan correlation** — Plan sessions linked to their implementation sessions
|
|
52
44
|
- **Agent teams** — Color-coded team members, owner filtering, member count badges
|
|
53
|
-
- **
|
|
54
|
-
- **
|
|
55
|
-
- **
|
|
56
|
-
- **Cleanup** — Delete tasks (with dependency checks) or bulk-delete entire sessions
|
|
57
|
-
- **Keyboard shortcuts** — Press `?` for help; `Shift+M` for live message follow
|
|
58
|
-
|
|
59
|
-
## Configuration
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
PORT=8080 npx claude-code-kanban # Custom port
|
|
63
|
-
npx claude-code-kanban --open # Auto-open browser
|
|
64
|
-
npx claude-code-kanban --dir=~/.claude-work # Custom Claude config dir
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
If port 3541 is in use, the server falls back to a random available port.
|
|
68
|
-
|
|
69
|
-
### Global install
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
npm install -g claude-code-kanban
|
|
73
|
-
claude-code-kanban --open
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## How It Works
|
|
45
|
+
- **17 color themes** — Dracula, Nord, Catppuccin, Gruvbox, Tokyo Night, and more — each in light and dark
|
|
46
|
+
- **Storage manager** — Inspect disk usage and clean up stale sessions and tasks
|
|
47
|
+
- **Keyboard-first** — Press `?` for the full shortcut reference
|
|
77
48
|
|
|
78
|
-
|
|
49
|
+

|
|
79
50
|
|
|
80
|
-
|
|
51
|
+

|
|
81
52
|
|
|
82
|
-
|
|
53
|
+

|
|
83
54
|
|
|
84
|
-
| Hook event | What it enables |
|
|
85
|
-
|------------|----------------|
|
|
86
|
-
| `SubagentStart` / `SubagentStop` | Agent log — see subagent spawns, durations, prompts |
|
|
87
|
-
| `TeammateIdle` | Idle detection for team member agents |
|
|
88
|
-
| `PostToolUse` | Waiting-for-user detection (permission prompts, AskUserQuestion) |
|
|
89
55
|
|
|
90
56
|
## Context Window Monitoring
|
|
91
57
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
### Setup
|
|
95
|
-
|
|
96
|
-
The installer copies `context-status.sh` alongside the agent hooks:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
npx claude-code-kanban --install
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Then add it to your statusline in `~/.claude/settings.json`:
|
|
58
|
+
Per-session context usage bars, token/cost breakdowns, and model info in the sidebar and detail panel. The installer copies `context-status.sh` — wire it into your statusline in `~/.claude/settings.json`:
|
|
103
59
|
|
|
104
60
|
```json
|
|
105
61
|
{
|
|
@@ -111,27 +67,17 @@ Then add it to your statusline in `~/.claude/settings.json`:
|
|
|
111
67
|
}
|
|
112
68
|
```
|
|
113
69
|
|
|
114
|
-
The script pipes through
|
|
115
|
-
|
|
116
|
-
### What you get
|
|
70
|
+
The script pipes through, so your existing statusline keeps working.
|
|
117
71
|
|
|
118
|
-
|
|
119
|
-
- **Detail panel** — input/output token breakdown, cache read tokens, cost, duration, API time, lines added/removed, and model name
|
|
120
|
-
- Only shown for active or pinned sessions
|
|
121
|
-
|
|
122
|
-
## FAQ
|
|
123
|
-
|
|
124
|
-
**Does this control Claude?**
|
|
125
|
-
No. The viewer only observes — it never writes to task files or directs Claude's work.
|
|
126
|
-
|
|
127
|
-
**Does it work with agent teams?**
|
|
128
|
-
Yes. Team sessions are auto-detected with color-coded members and owner filtering.
|
|
72
|
+
## Configuration
|
|
129
73
|
|
|
130
|
-
|
|
131
|
-
|
|
74
|
+
```bash
|
|
75
|
+
PORT=8080 npx claude-code-kanban # Custom port (falls back if busy)
|
|
76
|
+
npx claude-code-kanban --open # Auto-open browser
|
|
77
|
+
npx claude-code-kanban --dir=~/.claude-work # Custom Claude config dir
|
|
78
|
+
```
|
|
132
79
|
|
|
133
|
-
|
|
134
|
-
The Kanban board still shows tasks, but you won't see the agent log, waiting-for-user indicators, or live session activity. Run `npx claude-code-kanban --install` for the full experience.
|
|
80
|
+
Global install: `npm install -g claude-code-kanban`, then `claude-code-kanban --open`.
|
|
135
81
|
|
|
136
82
|
## License
|
|
137
83
|
|
package/lib/parsers.js
CHANGED
|
@@ -1029,14 +1029,15 @@ const CACHED_IMAGE_MIME = {
|
|
|
1029
1029
|
png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', webp: 'image/webp',
|
|
1030
1030
|
};
|
|
1031
1031
|
|
|
1032
|
-
// Serve pasted image N from
|
|
1032
|
+
// Serve pasted image N from <claudeDir>/image-cache/<sessionId>/. The cached file may
|
|
1033
1033
|
// be any image format, so resolve it by index rather than assuming .png. sessionId
|
|
1034
1034
|
// is validated to a bare id to prevent path traversal.
|
|
1035
|
-
function readCachedImage(sessionId, n) {
|
|
1035
|
+
function readCachedImage(sessionId, n, claudeDir) {
|
|
1036
1036
|
const idx = Number(n);
|
|
1037
1037
|
if (!sessionId || !/^[A-Za-z0-9._-]+$/.test(sessionId)) return null;
|
|
1038
1038
|
if (!Number.isInteger(idx) || idx < 0) return null;
|
|
1039
|
-
const
|
|
1039
|
+
const baseDir = claudeDir || path.join(require('os').homedir(), '.claude');
|
|
1040
|
+
const dir = path.join(baseDir, 'image-cache', sessionId);
|
|
1040
1041
|
try {
|
|
1041
1042
|
const match = readdirSync(dir).find((f) => {
|
|
1042
1043
|
const dot = f.lastIndexOf('.');
|
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -54,7 +54,7 @@ function getClaudeDir() {
|
|
|
54
54
|
return dir.startsWith('~') ? dir.replace('~', os.homedir()) : dir;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
return process.env.CLAUDE_DIR || path.join(os.homedir(), '.claude');
|
|
57
|
+
return process.env.CLAUDE_CONFIG_DIR || process.env.CLAUDE_DIR || path.join(os.homedir(), '.claude');
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
function getArgUrl(argName, envName) {
|
|
@@ -2110,7 +2110,7 @@ app.get('/api/sessions/:sessionId/tool-result-image/:toolUseId/:n', (req, res) =
|
|
|
2110
2110
|
});
|
|
2111
2111
|
|
|
2112
2112
|
app.get('/api/sessions/:sessionId/cached-image/:n', (req, res) => {
|
|
2113
|
-
const img = readCachedImage(req.params.sessionId, req.params.n);
|
|
2113
|
+
const img = readCachedImage(req.params.sessionId, req.params.n, CLAUDE_DIR);
|
|
2114
2114
|
if (!img) return res.status(404).end();
|
|
2115
2115
|
res.setHeader('Content-Type', img.mediaType);
|
|
2116
2116
|
res.setHeader('Cache-Control', 'no-store');
|