local-kanban 1.15.0 → 2.0.0-beta.1
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/CHANGELOG.md +721 -0
- package/README.md +219 -13
- package/README.ru.md +203 -13
- package/bin/kb +361 -67
- package/bin/local-kanban +167 -16
- package/package.json +3 -3
- package/public/app.js +15 -2
- package/public/boot-fallback.js +76 -0
- package/public/drawer-sync.js +15 -1
- package/public/index.html +44 -3
- package/public/js/app-install-rules.js +81 -0
- package/public/js/ask-rules.js +116 -0
- package/public/js/asks.js +256 -0
- package/public/js/attention.js +121 -0
- package/public/js/automations.js +224 -0
- package/public/js/board.js +399 -141
- package/public/js/chaos.js +30 -16
- package/public/js/chat-md.js +171 -0
- package/public/js/chat-models.js +23 -0
- package/public/js/chat.js +1403 -0
- package/public/js/claude-setup-rules.js +201 -0
- package/public/js/core.js +1114 -41
- package/public/js/dash.js +23 -7
- package/public/js/done.js +85 -0
- package/public/js/drawer.js +1833 -173
- package/public/js/glyphs.js +341 -0
- package/public/js/health-rules.js +43 -0
- package/public/js/health.js +138 -0
- package/public/js/init.js +101 -34
- package/public/js/launch-rules.js +58 -0
- package/public/js/limits-rules.js +23 -0
- package/public/js/limits.js +55 -0
- package/public/js/live-link.js +132 -0
- package/public/js/live-rules.js +212 -0
- package/public/js/lost-field.js +21 -0
- package/public/js/no-zoom.js +7 -0
- package/public/js/now-terms.js +515 -0
- package/public/js/now.js +265 -0
- package/public/js/onboarding-rules.js +95 -0
- package/public/js/onboarding-scenes.js +193 -0
- package/public/js/onboarding.js +414 -0
- package/public/js/order.js +5 -0
- package/public/js/pace-rules.js +18 -0
- package/public/js/phone-rules.js +14 -0
- package/public/js/project.js +66 -30
- package/public/js/review-rules.js +87 -0
- package/public/js/review.js +163 -0
- package/public/js/search.js +163 -0
- package/public/js/settings.js +606 -120
- package/public/js/share.js +106 -0
- package/public/js/sidebar.js +434 -166
- package/public/js/sse.js +486 -75
- package/public/js/store.js +22 -0
- package/public/js/term-copy.js +189 -0
- package/public/js/term-input-rules.js +18 -0
- package/public/js/term-reprint.js +29 -0
- package/public/js/typeset.js +11 -0
- package/public/js/unsaved.js +233 -0
- package/public/js/usage-rules.js +105 -0
- package/public/manifest.webmanifest +2 -2
- package/public/offline.html +9 -4
- package/public/style.css +1581 -121
- package/public/sw.js +5 -2
- package/skills/kanban/SKILL.md +53 -18
- package/src/api-break.js +174 -0
- package/src/automations.js +266 -0
- package/src/backup.js +26 -6
- package/src/chat-feed.js +588 -0
- package/src/chat-queue.js +123 -0
- package/src/claude-asks.js +290 -0
- package/src/claude-hooks.js +218 -0
- package/src/claude-limits.js +84 -0
- package/src/claude-live.js +297 -0
- package/src/claude-now.js +240 -0
- package/src/claude-sessions.js +190 -0
- package/src/claude-settings.js +88 -0
- package/src/claude-setup.js +148 -0
- package/src/claude-usage.js +541 -0
- package/src/compress.js +53 -0
- package/src/config.js +16 -1
- package/src/db.js +34 -11
- package/src/error-handler.js +2 -1
- package/src/file-snapshot.js +30 -11
- package/src/health.js +183 -0
- package/src/launch.js +166 -0
- package/src/own-wait.js +161 -0
- package/src/phantom.js +683 -0
- package/src/prompt-box.js +78 -0
- package/src/qr.js +223 -0
- package/src/question-screen.js +188 -0
- package/src/restore.js +40 -3
- package/src/review-check.js +64 -0
- package/src/routes/automations.js +38 -0
- package/src/routes/chat.js +297 -0
- package/src/routes/claude.js +90 -0
- package/src/routes/dashboard.js +66 -18
- package/src/routes/events.js +59 -6
- package/src/routes/health.js +13 -0
- package/src/routes/projects.js +63 -15
- package/src/routes/share.js +24 -0
- package/src/routes/skills.js +18 -13
- package/src/routes/system.js +385 -93
- package/src/routes/tasks.js +460 -122
- package/src/routes/terminal.js +88 -0
- package/src/schema.sql +82 -2
- package/src/server.js +38 -10
- package/src/share.js +249 -0
- package/src/skills.js +99 -6
- package/src/stamp.js +34 -0
- package/src/static-headers.js +30 -0
- package/src/sync/github.js +13 -4
- package/src/sync/worker.js +1 -0
- package/src/task-shape.js +17 -0
- package/src/terminal-say.js +38 -0
- package/src/tree-print.js +33 -0
- package/src/work-clock.js +35 -0
- package/src/work-feed.js +399 -0
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,727 @@ version it goes out as and opens an empty one again. Released sections are histo
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [2.0.0-beta.1]
|
|
12
|
+
|
|
13
|
+
**2.0 beta.** The board stopped being a list of tasks next to Claude and became the place you work with it: Claude starts
|
|
14
|
+
inside the board, you talk to it in the card, watch every session side by side, and a fresh Claude checks the work. A
|
|
15
|
+
beta goes to everyone, like a release: `npm install -g local-kanban` and the update button both bring it, and your
|
|
16
|
+
data stays. To stay on the last 1.x, run `npm install -g local-kanban@1.16.0`.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- **The README shows the board as it is now**, in the dark theme, with Claude moving cards in the first picture.
|
|
21
|
+
- **Update checks understand betas.** A board on a beta is offered the next beta and the release it leads to; before,
|
|
22
|
+
both looked like the version it already had.
|
|
23
|
+
|
|
24
|
+
- **The chat says what Claude is doing while nothing lands in the transcript.** A long script takes a minute or two to
|
|
25
|
+
write, and all that time the chat said only "Claude is working…". The light is green now and tells how long the
|
|
26
|
+
transcript has been silent and, for a Claude inside the board, whether it is thinking or writing and how many tokens
|
|
27
|
+
it wrote. A counter that stood still for a minute with nothing to wait on turns the light yellow: "no answer for 1 min".
|
|
28
|
+
- **Steps tell writing from running.** A step and a folded run of steps say how long Claude took to write them and how
|
|
29
|
+
long they ran: "wrote for 1 min 31 s · ran for 19 s". Before, only the second number was shown, and a session of
|
|
30
|
+
minutes looked like commands of seconds.
|
|
31
|
+
- **Health lists the rules with `paths:` too.** The rules of a project's `.claude/rules` that Claude Code loads only
|
|
32
|
+
when it works with their files are listed with the CLAUDE.md files of subfolders, with their size: past the
|
|
33
|
+
per-file limit Claude Code reads only the start of such a file.
|
|
34
|
+
|
|
35
|
+
## [1.16.0]
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **Health: how big the instructions Claude reads are.** Switch it on in Settings → Health, and the sidebar gets a
|
|
40
|
+
section that measures every project: its own CLAUDE.md in lines and characters, and everything a session started in
|
|
41
|
+
its folder reads (the CLAUDE.md of the folders above, imports, rules, auto memory), against the norms — under 200
|
|
42
|
+
lines per CLAUDE.md, as the Claude Code docs ask, and the 40,000 and 120,000 characters from which Claude Code itself
|
|
43
|
+
warns. The CLAUDE.md files of subfolders are listed apart.
|
|
44
|
+
- **Claude done by time.** A switch over the section shows the runs as before, or every task Claude finished in one
|
|
45
|
+
list, the latest on top, with its project on the row. The choice is kept in the browser.
|
|
46
|
+
- **Automations: a check of Review that starts by itself.** Switch them on in Settings → Claude Code, and the sidebar
|
|
47
|
+
gets a section where a rule reads "When [project] finishes its work, wait [3] min and start a check of the tasks in
|
|
48
|
+
Review". Once every task Claude took in that project has reached Review and nothing waits for you, the board counts
|
|
49
|
+
the pause down — beside ▶ of Review and over Claude now — and starts the check inside the board, as the button does.
|
|
50
|
+
A rule runs once; the page may be closed. A question of Claude, a task handed back to To do or a used-up limit holds
|
|
51
|
+
it, and the pause starts again after.
|
|
52
|
+
|
|
53
|
+
- **An answer cut off by a lost connection goes on by itself.** When the connection to the API breaks in the middle of
|
|
54
|
+
Claude's answer, Claude Code ends the turn and waits — nothing told you the work had stopped. Now the card says
|
|
55
|
+
"connection lost · going on", and the board tells its own Claude to go on from where it stopped (up to three times in
|
|
56
|
+
a row, after 15 s, 1 min and 3 min). When it cannot — a Claude started outside the board, or it broke again — the card
|
|
57
|
+
says "answer broke off" and the board notifies you. A second "Claude is waiting for you" (or question) of the same
|
|
58
|
+
task now shows its banner and sound as well — it used to replace the first one silently.
|
|
59
|
+
- **The board over Wi-Fi.** Settings → Wi-Fi (and the Wi-Fi button beside Settings, orange while it is on) opens the
|
|
60
|
+
board to people on the same network: a QR code and a link open it on their phone or laptop. The address has no
|
|
61
|
+
password — anyone on that network who opens it can do on the board what you can, including talking to Claude on your
|
|
62
|
+
computer — so keep it on only on a network of people you trust. Switching off closes the board to the network.
|
|
63
|
+
- **The first-run wizard says what the board is now** — the card's chat with questions as a form, Claude now with every
|
|
64
|
+
Claude side by side and Continue — and asks whether to show Claude as a chat or a terminal. The check of the computer no
|
|
65
|
+
longer reads "Claude's questions: not connected": the board gives its own Claude the hook. Every board sees the wizard
|
|
66
|
+
once more after the update.
|
|
67
|
+
- **Continue a Claude of the board that has stopped.** A Claude started inside the board and stopped from outside (or
|
|
68
|
+
ended by itself) keeps its terminal: the card says "Session interrupted" and opens on it, and Continue — in the card's
|
|
69
|
+
terminal, in its chat, and in Claude now (the list and Terminals) — starts Claude again in that terminal with its
|
|
70
|
+
conversation, where it waits for your word. Claude now keeps an interrupted run in sight instead of folding it among
|
|
71
|
+
the ones nobody leads.
|
|
72
|
+
- **Claude as a chat.** A card has a Chat tab in place of "Claude's work": the conversation of its Claude in turns —
|
|
73
|
+
your words, what Claude wrote, its steps folded under "N steps" with their time and a ✗ where one failed, and how long
|
|
74
|
+
each turn took. What a command returned is never shown. The Claude the board started can be answered right there:
|
|
75
|
+
words go at once to a Claude waiting at its prompt, and to a busy one they wait in a queue (✕ takes them back) and
|
|
76
|
+
go once it has been free for two seconds; a question Claude asks is answered right in the chat, with the keys of its
|
|
77
|
+
terminal. A Claude in Terminal or the Claude app is read, not spoken to. Whether a card and a column of Claude now →
|
|
78
|
+
Terminals show Claude as its chat or its terminal is one choice in Settings → Claude Code. The tasks over a column
|
|
79
|
+
open and close like a shutter, and opened steps fold back. A picture pasted, dropped or picked with the clip goes
|
|
80
|
+
with the message as a picture — a thumbnail over the field, ✕ takes it out — and Claude gets it as an image, not
|
|
81
|
+
as the path of a file in your words. Claude's answers read as Markdown: headings, lists, tables, quotes and code.
|
|
82
|
+
A message reaches Claude for certain: words left in its input field are cleared first, the board sees the message
|
|
83
|
+
arrive before it presses Enter and leave after it, and when it does not, the chat says why instead of looking sent.
|
|
84
|
+
A Claude at work can be stopped from the chat (■ next to Send) — as Esc in its terminal, never twice at once.
|
|
85
|
+
⌘↵ (Ctrl+↵ off a Mac) sends at once even while Claude works — it takes the words into the turn going on — and a
|
|
86
|
+
waiting message has its own Now; words sent mid-turn show in that turn.
|
|
87
|
+
A block of code in Claude's answer has a copy button, and a command (a block of a shell) runs in a new Terminal
|
|
88
|
+
window in the project's folder once you have seen it whole and said yes — only a command Claude wrote in that chat.
|
|
89
|
+
⛶ in a chat of Claude now → Terminals spreads that column over the window, smoothly, and takes it back the same way
|
|
90
|
+
(Esc too) — the same chat, what you typed and the place you read kept.
|
|
91
|
+
- **⌘F opens the search over projects and tasks** (Ctrl+F off a Mac) — from any screen, from a field too. Pressed
|
|
92
|
+
again while the search (or any other window) is open, it is the browser's own find. The shortcut can be changed in
|
|
93
|
+
Settings → Hotkeys.
|
|
94
|
+
- **A task moves to another project.** "Move to project…" in the card's ⋯ menu and in the right-click menu of a card:
|
|
95
|
+
the task keeps its comments, attachments, checklist, links and issue, takes the next number of that project, and
|
|
96
|
+
its old key still leads to it (the card's timeline and `kb show` say where it came from). A task Claude is working
|
|
97
|
+
on is not moved until it is handed in.
|
|
98
|
+
- **A screenshot reaches Claude from its terminal.** Paste a picture (or drop one) into the answer field of the card's
|
|
99
|
+
Terminal tab or of a column in Claude now → Terminals: it is kept as an attachment of the task, and its path goes
|
|
100
|
+
into the field, so Claude opens the picture when the answer is sent.
|
|
101
|
+
- **The answer field suggests handing the task in.** While Claude waits for a word on a task in Doing or Deploy, the
|
|
102
|
+
empty field shows a grey hint — "Move KEY to Review, so I can check it later"; Tab puts it in, typing hides it.
|
|
103
|
+
- **A check of Review can think at its own level.** Settings → Claude Code has a second "How hard Claude thinks", for
|
|
104
|
+
checks: a check started from Claude review or the Review column takes it, every other task the level of all starts.
|
|
105
|
+
Left as it is, a check thinks as every task does.
|
|
106
|
+
- **Claude now → Terminals: every run of Claude side by side, each with its terminal.** A switch at the top of the
|
|
107
|
+
section lays the live runs out as columns, like an agents window: the tasks of the batch above, and — for a Claude
|
|
108
|
+
the board started — its screen, its keys and a field to answer it, without opening a card. A Claude in the Terminal
|
|
109
|
+
app or the Claude app has no screen here; its column says where it is.
|
|
110
|
+
A ✕ beside "Open in the card" closes a column's terminal: a Claude that is done and has nothing to ask goes off
|
|
111
|
+
the section at once (a Claude still running is asked about first).
|
|
112
|
+
- **Settings → As an app: how to make the board an app of its own.** The steps for the browser the page is open in
|
|
113
|
+
(Chrome and other Chromium browsers, Edge, Safari on a Mac, iPhone and iPad, Android; Firefox on a computer is told
|
|
114
|
+
to use another browser), the others folded below, and an *Install* button where the browser offers it. A board
|
|
115
|
+
opened over plain http at a LAN address is told why Chrome greys the menu item out. The installed app opens light.
|
|
116
|
+
- **The terminal of a card shrinks and grows.** Drag the short bar over its keys (or press ↑/↓ on it) to make the
|
|
117
|
+
screen lower or taller; a double click gives back the usual height. The height is remembered on this computer.
|
|
118
|
+
- **A new look, in the spirit of the new Claude app.** Near-black (or, with the light theme, cream) monochrome, a
|
|
119
|
+
white main button, neutral highlights instead of orange, serif titles, icons in the sidebar, thin borders and
|
|
120
|
+
rounder cards, a *New task* row at the top of the sidebar and soft transitions for screens, the task card, windows
|
|
121
|
+
and lists. Behind the board, clouds and waves made of grey symbols drift from right to left in three layers of
|
|
122
|
+
depth — the far ones smaller, dimmer and slower, the near ones hiding them — and a click on empty space (not on a
|
|
123
|
+
button, card or field) sends a sonar pulse that lights them up in blue as it spreads, the lit side of every form
|
|
124
|
+
brighter than its shadow. It moves at the display's frame rate, can be turned off in *Settings → Appearance →
|
|
125
|
+
Symbols in the background*, and stops with reduced motion and on a hidden tab. The theme still picks light or dark.
|
|
126
|
+
- **A welcome wizard that asks how you want to use the board — and it comes back once after an update.** Besides the
|
|
127
|
+
language, it now asks how ▶ should start Claude (inside the board, in Terminal, in the Claude app or only copy the
|
|
128
|
+
prompt — the ways this computer lacks are greyed with the reason), what the board shows (Claude's usage, limits,
|
|
129
|
+
work feed, compact cards) and the GitHub sync, which it shows as it is when it is already on. A board that was in
|
|
130
|
+
use before goes through it once after updating, without the demo step; its projects, tasks and settings stay as
|
|
131
|
+
they are, and only what you change is written. *Settings → About* can open it again, and has a line with a
|
|
132
|
+
Telegram contact for questions.
|
|
133
|
+
- **A card knows which Claude sessions worked on it.** Claude Code gives every command it runs a
|
|
134
|
+
session id, and `kb` now sends it along. When a session moves a task into work, leaves a note on
|
|
135
|
+
it or ticks its checklist, the board ties the two together: the card shows how many sessions
|
|
136
|
+
worked on the task and when the latest one did, and `kb show` prints the same, plus the transcript
|
|
137
|
+
of an earlier session — so a task sent back for rework can be picked up knowing what was already
|
|
138
|
+
tried. Grooming a backlog card does not count as work on it. Nothing of this leaves your machine.
|
|
139
|
+
- **Claude's work, live, in the card.** A task some Claude session worked on gets a switch next to
|
|
140
|
+
its comments: *Claude's work* lists what the session did on this task — the person's request, what
|
|
141
|
+
Claude wrote, every step (commands, files read and edited, searches, helper agents and how long
|
|
142
|
+
they ran), which steps failed and what the person answered to its questions. It updates by itself
|
|
143
|
+
while Claude works. A session that works through several tasks is cut by task, so each card shows
|
|
144
|
+
only its own part. Read from Claude Code's own transcripts on this machine; nothing is sent anywhere.
|
|
145
|
+
- **A card in work says whether Claude is working on it, waiting for you, or gone.** The badge follows
|
|
146
|
+
the Claude session live: *working*, *waiting for you* (a question, a permission, or it simply stopped
|
|
147
|
+
with the task still in work) and *session closed* when nobody is working on it anymore. The
|
|
148
|
+
dashboard's *Waiting for you* lists these tasks with how long they have waited, and when Claude
|
|
149
|
+
stops to wait for you the board plays the same sound and shows the same notification as for a task
|
|
150
|
+
ready for review, under the same settings.
|
|
151
|
+
- **▶ starts the tasks in Claude.** The *To do* column has ▶ next to its copy button, and a card that
|
|
152
|
+
Claude has not taken yet has ▶ in its header (a manual task, labelled `noclaude`, has none — and loses it
|
|
153
|
+
the moment it is labelled so): the board opens Claude in the project's folder with the
|
|
154
|
+
job already written — a new session in the Claude app, or a terminal running `claude`. A card some
|
|
155
|
+
session already worked on gets ↗, which opens that very session (or resumes it in a terminal) — the
|
|
156
|
+
quick way to answer a Claude that is *waiting for you*. **Settings → Claude Code → Start tasks** chooses
|
|
157
|
+
the app, the terminal, or copying the prompt only; *Automatically* takes the app when it is there.
|
|
158
|
+
- **Claude works right inside the board.** With `tmux` on the machine, ▶ opens nothing at all: Claude
|
|
159
|
+
starts at once in the background, in the project's folder, and the card opens on its new *Terminal*
|
|
160
|
+
tab — Claude's screen as it is, a field to answer it, the keys its questions need (a digit to pick an
|
|
161
|
+
option, the arrows, Esc, Shift+Tab) and a button to stop it. Claude keeps working when the board
|
|
162
|
+
restarts, and a Claude that has finished leaves its last screen. A second ▶ on a task that Claude is
|
|
163
|
+
already working on shows that Claude rather than starting another one. **Settings → Claude Code** has
|
|
164
|
+
*Inside the board* as a way to start tasks (and *Automatically* takes it first), and what Claude may
|
|
165
|
+
do there without asking: decide by itself what is safe (the default), edit files, ask about
|
|
166
|
+
everything, or only make a plan — skipping the checks altogether is not offered. A project without a
|
|
167
|
+
folder on this computer gets a one-click way out right there: create a new empty folder for it, or
|
|
168
|
+
choose the one with its code — and Claude starts as soon as it is set. The `claude` command keeps its
|
|
169
|
+
own sign-in, apart from the Claude app: when it is not signed in, the tab says so and signs it in
|
|
170
|
+
with one button, and the web addresses on its screen (the sign-in one included) are links. Claude
|
|
171
|
+
started there runs the board's own commands (`kb take`, `note`, `review`…) without asking, whatever
|
|
172
|
+
its mode — but not `kb done`, `cancel` or `rm`, and `kb mv` only to the working columns; and when it asks about every command in the manual
|
|
173
|
+
mode while the board is set to auto, the tab offers to switch it to auto in one click. It runs the
|
|
174
|
+
board's own `kb`, whatever version is on your PATH, and its card shows *Claude's work* even when the
|
|
175
|
+
`kb` it used did not say which session it was. Claude does not quit after handing a task in — it waits
|
|
176
|
+
for your answer — so the board closes its terminal by itself once every task it worked on is accepted,
|
|
177
|
+
cancelled or deleted; a task in *Review* keeps it, and a Claude in the middle of a reply finishes first.
|
|
178
|
+
The tab keeps the card as wide as the other tabs do: Claude's screen is laid out for the card, rather
|
|
179
|
+
than the card growing for the screen. A comment can go to that Claude too: the **>_** button next to the
|
|
180
|
+
send arrow hands it to Claude in the terminal and saves it, so Claude carries on with the task or the
|
|
181
|
+
talk without you switching tabs. It does that only while Claude waits for you at its prompt; while it
|
|
182
|
+
works or asks a question there, nothing is typed and the comment stays in the field.
|
|
183
|
+
|
|
184
|
+
- **Claude now: what Claude is working on, top to bottom.** A new item under *Dashboard* in the sidebar
|
|
185
|
+
lists every task in work across the projects, grouped by the run of Claude that holds it. A run says
|
|
186
|
+
how much of it is handed in (*handed in 1 of 3*, with a ring); each task shows its step and how far it
|
|
187
|
+
is — by its checklist when it has one, by its stage otherwise (Prep 25%, Doing 50%, Deploying 75%,
|
|
188
|
+
Review 100%). The task Claude is on right now is marked, the ones waiting their turn follow it, and
|
|
189
|
+
runs nobody leads any more — the session closed, or nothing moved for two hours — are folded at the
|
|
190
|
+
bottom, so stuck work is easy to find. The sidebar item counts the tasks in work and shows a dot while
|
|
191
|
+
some Claude is working; it all updates live, checklist ticks included.
|
|
192
|
+
- **Claude review: hand the acceptance of a project to Claude with one button.** A new sidebar item
|
|
193
|
+
under *Claude now* lists the tasks in Review by project, in the order of the sidebar. *Check in Claude* makes a check task in that
|
|
194
|
+
project — the tasks in Review at that moment are listed in it — and starts a fresh Claude on it: it
|
|
195
|
+
checks every task with tests of its own, simulates failures, moves what passes to Done and leaves the
|
|
196
|
+
report on the card of the check. While a check is open the button shows it instead — including when its Claude waits for an answer in the terminal, which opens right there — so the same tasks
|
|
197
|
+
are never checked twice at once — even two tabs pressing at once make one check. A check carries the
|
|
198
|
+
`check` label, so it is recognised on a board in any language, and the Claude started on it inside the
|
|
199
|
+
board moves exactly the tasks it lists to Done without asking; once that Claude has exited, the check
|
|
200
|
+
says its session is closed rather than that Claude is checking. The `kanban` skill says how such a
|
|
201
|
+
check is done.
|
|
202
|
+
- **The sidebar shows how much of your Claude limits is used.** The 5-hour and weekly windows of a Pro or
|
|
203
|
+
Max subscription sit at the foot of the sidebar, with the time the board heard of them. Claude Code hands
|
|
204
|
+
these figures only to its status line, so `kb statusline` forwards them: put it in front of your own
|
|
205
|
+
status line (`kb statusline | your-command`) or use `kb statusline --line` on its own. A window whose
|
|
206
|
+
reset time has passed is not shown, and with nothing current the footer says why: *not connected · connect* when
|
|
207
|
+
the status line does not go through the board (*not connected · how* when your own status line has to take
|
|
208
|
+
`kb statusline` by hand), *go to another board* when another board holds it, and *no data*
|
|
209
|
+
otherwise — which is what a board used only from the Claude desktop app gets, since the app runs no status line.
|
|
210
|
+
A click on it opens **Settings → Claude Code**. A board that hangs does
|
|
211
|
+
not slow your status line down: kb sends the figures and hangs up without waiting for an answer. Switch to
|
|
212
|
+
another Claude account (`/login`) and the footer shows that account's figures from its first reading on.
|
|
213
|
+
- **Answer Claude from the card.** When Claude Code is about to ask you something — a permission, a
|
|
214
|
+
question, a plan to approve — the PermissionRequest hook `kb hook permission` puts the request on top of
|
|
215
|
+
the card of the task the session works on, and the card's badge says *needs your answer*. Allow or deny it
|
|
216
|
+
with a reason, pick the answers (or write your own), approve or reject the plan with what to change.
|
|
217
|
+
Claude's own dialog stays usable all along, and whichever side answers first wins; a request answered in
|
|
218
|
+
Claude leaves the card by itself. An answer given the moment Claude has already taken one in its own window
|
|
219
|
+
does not pass for a given one: the card says it did not reach Claude. A tab whose answer lost to another tab's
|
|
220
|
+
says so, and a request the board lost when it was restarted is named on the card instead of vanishing. The whole command is shown, never cut short, and every answer is written
|
|
221
|
+
into the task's history — never sent to GitHub. Answers are taken from the board's page, which keeps other
|
|
222
|
+
web sites out but not programs on your computer — Claude included, if it may run `curl` without asking.
|
|
223
|
+
- **Connect the board to Claude Code in one command.** `local-kanban hooks install` adds the two entries
|
|
224
|
+
above to Claude Code's settings.json — the status line through `kb statusline`, in front of your own, and
|
|
225
|
+
the PermissionRequest hook — after showing what it will change and asking. Your other hooks and settings
|
|
226
|
+
stay, the previous file is kept in the board's backups, and `local-kanban hooks uninstall` takes off
|
|
227
|
+
exactly what it added. A settings.json made read-only, or a folder it cannot write, is reported and left as
|
|
228
|
+
it was. Your status line keeps getting all of its input whatever shape its command has,
|
|
229
|
+
and keeps working even if kb cannot start; a settings.json that is a link stays a link with the same
|
|
230
|
+
permissions, a file Claude Code changed while you read the change is not written over, and running the
|
|
231
|
+
command again after a Node upgrade brings the board's entries up to date. Your settings.json keeps its own
|
|
232
|
+
indentation and line ends, and the copy of the previous one is a `.json` file in the board's data folder —
|
|
233
|
+
in the setup wizard, the folder you chose there. A board removed without disconnecting it leaves Claude Code
|
|
234
|
+
quiet: the hook checks that the board is still there before it runs, and the README says how to take the
|
|
235
|
+
entries out by hand. The setup wizard offers the same step.
|
|
236
|
+
- **Settings → Claude Code.** One place to see whether the board's work with Claude Code can work on this computer:
|
|
237
|
+
the `claude` program, `tmux`, the Claude app and a terminal — the ways ▶ starts a task; the Claude folder, the
|
|
238
|
+
board's skill in it, the sessions and transcripts the cards read; whether the status line and Claude's questions
|
|
239
|
+
go through the board, and when the limits came last. Every missing piece says what does not work without it and how
|
|
240
|
+
to fix it, and a piece only one way of working needs — tmux, the Claude app, the connection — is marked as optional
|
|
241
|
+
(–), not as missing (✕). A copy of the board's skill that is not the version this board ships — one left from an
|
|
242
|
+
earlier version, or changed by hand — is said to be so, and **Settings → Skills** takes the board's version in one
|
|
243
|
+
click, keeping the old file among the backups. **Connect** writes the board's two entries into Claude Code's settings.json — the same as `local-kanban
|
|
244
|
+
hooks install`, after showing exactly what it will write — and **Disconnect** takes them off again. How tasks start
|
|
245
|
+
and what Claude inside the board may do moved here from General. The two switches at its top, **Show on the
|
|
246
|
+
board**, hide Claude's usage (the dashboard block and the card's line) and the limits footer — for anyone who
|
|
247
|
+
would rather not see them, or whose footer only ever says "no data" because they work in the Claude app. With two
|
|
248
|
+
boards on one computer only one can be connected: the section names the board that holds the connection, and
|
|
249
|
+
connecting this one asks before it takes the connection over.
|
|
250
|
+
- **What a task cost.** A card some Claude session worked on shows a usage line under its sessions: the
|
|
251
|
+
tokens first, then roughly what they would cost on the API (≈, at the prices of the date shown — with a
|
|
252
|
+
subscription the money is notional), and how full the conversation memory was on the last answer; hover it
|
|
253
|
+
for the breakdown (input, output, cache reads and writes). Helper agents started for the task count as its
|
|
254
|
+
usage. `kb show` and `kb take` print the same line. The dashboard shows Claude's usage for the chosen
|
|
255
|
+
period and the tasks that cost the most — click one to open it. It is counted from Claude Code's
|
|
256
|
+
transcripts on this machine, once and then only what is added; nothing is sent anywhere. Claude Code often
|
|
257
|
+
leaves out the final count of a helper's answers, so their output is under-recorded — the card says so
|
|
258
|
+
instead of pretending the number is exact.
|
|
259
|
+
- **Claude done.** A section under *Claude review* lists what Claude has finished in the last seven days: every
|
|
260
|
+
run — a batch started with ▶ or a single task — once none of its tasks is left in work, the most recently
|
|
261
|
+
finished on top, with how many of its tasks wait in Review and how many are accepted. Hand-ins made without a
|
|
262
|
+
session the board knows are put together by project and time and say so.
|
|
263
|
+
- **Check the Review column from the board.** The Review column of a project has the same button as *Claude
|
|
264
|
+
review*: it makes a check task for the tasks in the column and starts Claude on it; while a check is open, the
|
|
265
|
+
button opens its card instead.
|
|
266
|
+
|
|
267
|
+
### Changed
|
|
268
|
+
|
|
269
|
+
- **A phone opens the board its own way.** Until you pick otherwise, a phone gets the dark theme, Claude as a chat, and
|
|
270
|
+
Claude now on the chats of its runs (Terminals); the language follows the phone's, as on a computer. A computer —
|
|
271
|
+
and a tablet — keeps the light theme, the terminal and the list.
|
|
272
|
+
- **Claude reads a whole batch of tasks before starting the first.** Given several keys at once (▶ or 📋 on To do), the
|
|
273
|
+
board's skill had Claude read and do them one by one — what a later task said (a key, a decision, the same place)
|
|
274
|
+
reached it only after the first was done. Now it reads them all first and plans the order.
|
|
275
|
+
- **The first run is a whole screen.** The welcome wizard no longer sits in a small window: the words and the
|
|
276
|
+
choice are on the left, and on the right a live picture of the step — a card going to Claude and back for your
|
|
277
|
+
check, Claude's terminal on a card, what this computer has for Claude Code (the same check as Settings → Claude
|
|
278
|
+
Code), the board as the switches leave it, the task and its GitHub issue. Pointing at a way of starting Claude shows
|
|
279
|
+
what ▶ does that way. Under "reduce motion" the pictures stand still; on a narrow screen the words come alone.
|
|
280
|
+
A board that went through the earlier wizard shows the new one once after the update; projects, tasks and settings
|
|
281
|
+
stay as they are.
|
|
282
|
+
- **The project of a run opens its board.** In Claude now, Claude review and Claude done the project name at the top of
|
|
283
|
+
a run or a group is a link to that project's board.
|
|
284
|
+
- **The terminals of Claude now → Terminals are as wide as their columns.** A column lays its terminal out to its own
|
|
285
|
+
width again (the card's narrower width left the right part of it empty), and keeps showing the old screen while
|
|
286
|
+
Claude reprints the conversation for the new width, so the start of the session no longer scrolls by — the card's
|
|
287
|
+
Terminal tab does the same. When a card and a column (or two tabs) show one terminal, its window takes the narrower
|
|
288
|
+
width instead of changing back and forth. A screen scrolled up has a ↓ in its lower right corner that takes it back to the end.
|
|
289
|
+
- Enter in the title of a card moves on to its description instead of leaving the field.
|
|
290
|
+
- **The light theme is crisper.** Text is near-black instead of grey, borders and the selected item stand out from the
|
|
291
|
+
cream, the sidebar has a tone of its own, and the symbols in the background are a quieter haze.
|
|
292
|
+
- **The board opens in the light theme until you pick one.** It used to follow the system, so a computer in dark
|
|
293
|
+
mode got a dark board without anyone choosing it. *System* is still there in *Settings → Appearance*, and a theme
|
|
294
|
+
you already picked stays.
|
|
295
|
+
- **Two themes: light and dark.** The theme *Claude* looked the same as *Dark* in the new look, so it is gone; a board
|
|
296
|
+
set to it opens dark, and the theme cards show the real colours of each theme. *System* still follows the computer.
|
|
297
|
+
- **No note pops up at the bottom right when Claude starts to wait for you.** The board still rings, the system
|
|
298
|
+
notification still goes out when it is on, and the block on top of the sidebar lists what waits.
|
|
299
|
+
- **A long list inside a window shows its scrollbar** — the skills in *Settings → Skills* and an open dropdown such
|
|
300
|
+
as the deploy skill of a project — narrow and grey, so it is clear there is more below.
|
|
301
|
+
- **The sections of the sidebar start with a small grey icon** — the first letter of the name ("Pinned", "Other",
|
|
302
|
+
your own sections) — in line with the icons of Dashboard and Settings above them; the projects carry none.
|
|
303
|
+
- **The title of a screen stands alone.** The line of description right of it (counts, the key and domain of a
|
|
304
|
+
project, "quick task capture") is gone.
|
|
305
|
+
- **The header of the Terminal tab fits one line**: a few words ("Working", "Waits for you", "Waits for your
|
|
306
|
+
answer", "Finished · code 3") and a short "Stop" or "Close" button next to them, instead of a sentence that
|
|
307
|
+
wrapped to two lines and pushed the button down.
|
|
308
|
+
- **"Claude now" puts no dot in front of its tasks** — the run's badge already says what its Claude is doing — only
|
|
309
|
+
✓ in front of one handed in, and the task Claude is on is not highlighted — the line under its title says it.
|
|
310
|
+
- **The board no longer zooms by accident.** A pinch on a trackpad or a phone screen, Ctrl with the mouse wheel
|
|
311
|
+
and a double tap used to zoom the whole page, and the board slid past the edges of the window. These gestures
|
|
312
|
+
do nothing now; ⌘/Ctrl with + and − and the browser's View menu still zoom for whoever needs larger text.
|
|
313
|
+
- **Claude's work is a tab you switch on.** It is off by default now: *Settings → Claude Code → Show on the
|
|
314
|
+
board → Claude's work*. Off, the card does not show the tab or read the transcript for it, and a card with no
|
|
315
|
+
terminal shows no tabs at all — switched off while a card stands on that tab, the card goes back to its comments.
|
|
316
|
+
- **A card in work opens on its Terminal.** A task in Preparation, Doing or Deploy whose Claude runs inside the
|
|
317
|
+
board opens on the *Terminal* tab — there are no comments yet, and the terminal is what is going on.
|
|
318
|
+
- **The terminal of a card scrolls back.** Claude inside the board starts with Claude Code's classic renderer
|
|
319
|
+
(`CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN=1`): the fullscreen one draws on the terminal's alternate screen, which keeps
|
|
320
|
+
no history, so the card showed the 40 rows in sight and nothing above them. The card's screen now reaches 1000
|
|
321
|
+
lines back, and what you read up there stays put while Claude goes on printing. Terminals started before this keep
|
|
322
|
+
no history.
|
|
323
|
+
- **Words typed to the terminal of a task back in To do move it to Preparation**, and of a task in Review — back to
|
|
324
|
+
*Doing*, as the move of that Claude: it keeps the task when it takes it itself. Keys alone (Esc, the arrows, a bare Enter), a digit answering a question of
|
|
325
|
+
Claude's and a manual task move nothing.
|
|
326
|
+
- **"Claude now" shows a Claude of the board that is still at work** with none of its tasks in work — busy, or
|
|
327
|
+
with commands running in the background after handing its task in (*working in the background*). Such a run is
|
|
328
|
+
not in *Claude done* meanwhile.
|
|
329
|
+
- **A project Claude is at work in has a green pulsing dot** in the sidebar, in place of the orange one — also while
|
|
330
|
+
Claude works with commands in the background, or goes on after handing its tasks in; and a Claude that comes back
|
|
331
|
+
from the background to its prompt rings *waiting for you*.
|
|
332
|
+
- **A Claude of the board stopped at the usage limit says so.** Its tasks say *limit reached · until 12:50am* (the
|
|
333
|
+
reset as Claude Code gives it), the outline of a card in work stops turning, *Claude now* and *Waiting for you* say
|
|
334
|
+
the same, and the board rings and notifies once when Claude stops — before, the cards went on saying *working*. A
|
|
335
|
+
look at the terminals that tmux did not answer keeps the stop rather than ringing it again, and a dialog that only
|
|
336
|
+
quotes the limit's line is no stop.
|
|
337
|
+
- **Check in Claude waits for the work of its project.** While Claude is still at work on a task of the project
|
|
338
|
+
(Preparation, Doing or Deploy), the button in *Claude review* and the ▶ of the Review column are off, and a press
|
|
339
|
+
on them names those tasks. A blocked task, a task whose Claude session has closed, and one stuck for two hours with
|
|
340
|
+
no Claude on it do not hold the check. The press reads the project's tasks afresh, so a search narrowing the board
|
|
341
|
+
neither lets a check past work nor leaves tasks out of it.
|
|
342
|
+
- **The Terminal tab of a card says what its Claude is doing** — working, at its prompt with commands running in
|
|
343
|
+
the background, waiting for an answer, stopped at the usage limit, or done with its turn and waiting for a word —
|
|
344
|
+
instead of *Claude works in the background* over every live terminal, also of a Claude that handed its task in
|
|
345
|
+
hours ago.
|
|
346
|
+
- **"Claude review" no longer lists the report of a check**; a project with only reports in Review has no group, and
|
|
347
|
+
the count of the section in the sidebar leaves them out too.
|
|
348
|
+
- **The lists of "Waiting for you" on the dashboard fold** by their heading and stay folded on this computer.
|
|
349
|
+
- **The folders not on the board fold** under one row of the sidebar, folded by default.
|
|
350
|
+
- **No footer of Claude's limits while the status line does not go through the board** — it said *not
|
|
351
|
+
connected · connect* to everyone who works without it. Connecting stays in *Settings → Claude Code*.
|
|
352
|
+
- **Settings → Claude Code says why macOS keeps asking "node would like to access data from other apps".** Claude
|
|
353
|
+
inside the board runs under the board's `node` when pm2 runs the board (else under the app the board was started
|
|
354
|
+
from), macOS asks in its name and keeps no answer for a program without an app bundle. The row names which one to
|
|
355
|
+
give *Full Disk Access* — the path of that `node`, or the app — and opens that list.
|
|
356
|
+
|
|
357
|
+
- **The board finds Claude Code where it is, not only on its PATH.** Besides the PATH it looks where the installers put
|
|
358
|
+
`claude` and, on a Mac, at the copy of Claude Code the Claude app keeps for itself — so ▶ keeps starting Claude
|
|
359
|
+
inside the board when the command-line install is gone. Settings → Claude Code says where it was found; when it is
|
|
360
|
+
nowhere, the section shows the install command itself.
|
|
361
|
+
- **▶ in the Claude app no longer moves the tasks to Preparation.** The app only gets the prompt — you send it — and the
|
|
362
|
+
task waited in Preparation, a column only Claude moves, even when nothing was sent. Claude moves its tasks itself.
|
|
363
|
+
- **`kb take` names the cards left for you.** When To do holds only tasks you do by hand, `kb take`
|
|
364
|
+
and `kb next` answer `empty (2 by hand: CK-12 CK-14)` instead of a bare `empty`, so Claude tells you
|
|
365
|
+
there is nothing for it rather than that the column is empty.
|
|
366
|
+
- **`kb take` takes the task in one step on the board, a pinned card first.** Two sessions that took a
|
|
367
|
+
task at the same moment could both get the same one; now the board picks and moves it at once. A card
|
|
368
|
+
the person pinned (📌) in To do is taken first, and `kb` prints the pin in its lists. `kb lbl` adds and
|
|
369
|
+
removes labels instead of writing the whole set back, so calls side by side keep each other's labels.
|
|
370
|
+
- **The server runs on Fastify 5.** Fastify 4 went out of support on June 30, 2025, and was never
|
|
371
|
+
meant for Node 24 and 26, which the board supports. Nothing changes in how the board looks or
|
|
372
|
+
behaves; the same security headers are sent with every page.
|
|
373
|
+
- **A task you start goes to *Prep* at once.** ▶ on *To do* or on a card used to leave the tasks in *To do* until
|
|
374
|
+
Claude came up and took them — a good ten seconds, and in the Claude app until you pressed Enter there. Now they
|
|
375
|
+
move to *Prep* the moment Claude starts, whichever way it is started, and the card says *starting* until Claude
|
|
376
|
+
is up. The Claude that was started holds them, so another session cannot take them meanwhile — a second ▶ while the
|
|
377
|
+
first one is still starting Claude is refused, and a second Claude is not given a task another one works on. A start that is
|
|
378
|
+
refused or fails leaves the tasks where they were.
|
|
379
|
+
- **Claude started inside the board shows no next-prompt suggestions.** In the card's terminal the dim
|
|
380
|
+
suggestion Claude Code puts in its empty prompt looked like text typed and not sent, and the card's ↵ on an
|
|
381
|
+
empty field sends a bare Enter. The board now starts its Claude with suggestions off — the variable Claude
|
|
382
|
+
Code documents for it, `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false`. Claude you start yourself keeps them.
|
|
383
|
+
- **Updating from Settings → About brings the Claude Code skills along.** The skills the setup copied into the Claude
|
|
384
|
+
folder were left as they were, so Claude kept reading the rules of the version it was installed with until you ran
|
|
385
|
+
`local-kanban skills`. Now a copy that matches the board's version is brought up to date with the board, and one
|
|
386
|
+
that already differs from it stays as it is — for the board's own skill **Settings → Claude Code** says so and leads
|
|
387
|
+
to the button that takes the board's version. `local-kanban skills` and that button never write through a link —
|
|
388
|
+
a skill file linked to a file of your own is left alone. The README's steps for updating by hand say to restart
|
|
389
|
+
the board too.
|
|
390
|
+
- **`kb mv` no longer closes a task.** Done and Cancelled are your word, so they are `kb done` and `kb cancel`
|
|
391
|
+
only: `kb mv <key> done` (or `cancelled`) is refused with exit code 2 and names the command to use. Claude started
|
|
392
|
+
inside the board runs `kb mv` without asking, and through it could move any task to Done without the question
|
|
393
|
+
`kb done` gets.
|
|
394
|
+
- **A card in work is easier to see and to read.** Its moving contour is twice as thick and visible all the way
|
|
395
|
+
round, and the card has a warm tint under its text; the middle is drawn on a layer of its own, so a browser that
|
|
396
|
+
composites with the graphics card does not let the moving colour through under the text.
|
|
397
|
+
- **The icon left of a section's title** is as tall as the title's capitals and centred on them.
|
|
398
|
+
|
|
399
|
+
### Fixed
|
|
400
|
+
|
|
401
|
+
- **Typing the title of a new task on an iPhone no longer throws the card down.** Once the task was created, the board
|
|
402
|
+
scrolled its new card into sight, and with the keyboard up that moved the whole page: the title went off the top and
|
|
403
|
+
the comment field took its place. On a narrow screen the board now scrolls only its own columns.
|
|
404
|
+
- **A picture can be added to a task from a phone.** A phone can neither paste nor drop a picture, and a new task had no
|
|
405
|
+
way to add one at all. The card now has a "picture" chip beside "+ label": it picks pictures from the device, and a new
|
|
406
|
+
task is created by them as by a pasted one.
|
|
407
|
+
- **No scroll bar in a column on an iPhone.** iOS drew its own bar at the edge of a column scrolled with a finger,
|
|
408
|
+
whatever the page asked; the column now cuts that strip off.
|
|
409
|
+
- **`kb review` leaves no note when the move is refused.** It wrote the note first and moved the task after, so a task
|
|
410
|
+
that could not go to review (straight from To do) still got the note, and the retry added a second one. Now the task
|
|
411
|
+
moves first and the note follows; if the note does not save, kb says the task is in review and how to add it.
|
|
412
|
+
- **Words sent to a Claude at work no longer vanish from the chat.** Claude Code holds what you send while Claude is in
|
|
413
|
+
the middle of a step (a command of several minutes, say) and takes it only when the step ends; the chat said
|
|
414
|
+
"sending…" for a minute and then dropped the words, as if they were lost. Now the chat shows them as "Claude reads it
|
|
415
|
+
when the step it is on ends" for as long as Claude Code holds them — after a reload and on another device too.
|
|
416
|
+
- **A note from another Claude no longer takes the task away from the Claude working on it.** A Claude of one session
|
|
417
|
+
that left a note (or ticked a checklist item) on a task another Claude was working on became that task's latest
|
|
418
|
+
session — the card lost "session interrupted" and Continue of the real one. Now a note or a tick ties a new session to
|
|
419
|
+
a task only when no other session works on it; moving its status still does.
|
|
420
|
+
- **Claude sessions go on after the computer restarts.** When the Mac froze or restarted, every terminal of the board
|
|
421
|
+
went with it, and its sessions read "session closed" with no way back — the chat even said the Claude was not started
|
|
422
|
+
inside the board. Now such a session reads "session interrupted" with **Continue** in the card's chat, in Claude now
|
|
423
|
+
and in its column of Terminals, as long as its conversation is on disk: Claude comes back to the same conversation.
|
|
424
|
+
Such sessions have their own view, **Broken terminals**, beside Terminals in Claude now (with how many there are), so
|
|
425
|
+
Terminals keeps only the Claudes that are running.
|
|
426
|
+
- **The board on a phone.** The sidebar stood beside everything and left the board, a card and the columns of Claude
|
|
427
|
+
now 170 points of 390 — the page ran off the side. On a narrow screen the sidebar now hides: ☰ in the top bar opens
|
|
428
|
+
it over the page, and a pick in it, a tap beside it or Esc closes it; a card opens over the board, the whole width.
|
|
429
|
+
Closed, the panel is out of the way of Tab too — the focus no longer goes into it unseen.
|
|
430
|
+
- **A long link or line in a comment wraps** instead of running past the edge of the card, where it was cut off unread.
|
|
431
|
+
- **The session of a chat is chosen in the chat's own style** — a quiet chip with a chevron, like the model in the
|
|
432
|
+
field, and its list the chat's menu with a check by the session shown.
|
|
433
|
+
- **A session picked in a chat that does not load says so.** The chip named the session picked while the chat, and its
|
|
434
|
+
field, stayed on the other one, with no word; the list now goes back to the session shown and the chat says why.
|
|
435
|
+
- **A command of the chat runs as its block says.** Typed into the zsh of a Mac's Terminal, a block was read by zsh: a
|
|
436
|
+
`# comment` ran as a command or became the arguments of the one before it (`rm -f x # old log` removed `old` and
|
|
437
|
+
`log`), a `!` in a string failed, and a ```bash block split its words the zsh way. The block now goes whole to the
|
|
438
|
+
shell it names (bash, or zsh for a ```zsh block). A block longer than the board runs has no Run button.
|
|
439
|
+
- **Continue, once.** A Claude of the board killed outright (SIGKILL) read "Finished" and folded away instead of
|
|
440
|
+
"Session interrupted" with Continue; two Continues of one session from two of its cards at once started it twice
|
|
441
|
+
(the second failed, or stopped the first); and Continue took a task the session never held along with its own.
|
|
442
|
+
- **The pictures of a message do not weigh on the board.** The ten pictures of one message, asked for together, each
|
|
443
|
+
read and parsed the whole message — 400 MB of memory for 30 MB of pictures; the message is read once for them now.
|
|
444
|
+
A WebP or JPEG thumbnail keeps its place before it decodes, as a PNG did (the next words no longer jump), and a wide
|
|
445
|
+
thumbnail beside a tall one keeps its shape.
|
|
446
|
+
- **A question read off the screen keeps an option's description apart from its label** — at a narrow width a label
|
|
447
|
+
that ended near the edge took the description in, and the "recommended" mark was lost — and keeps the lines of its
|
|
448
|
+
text.
|
|
449
|
+
- **A chat spread over the window leaves the chats beside it where they were read.** In Safari the columns beside it
|
|
450
|
+
jumped by a few lines as it went over the window.
|
|
451
|
+
- **Opened steps come into view.** "N steps" right over the chat's field opened under the edge, and the steps had to be
|
|
452
|
+
scrolled to; the chat now scrolls along as the steps open, until the last of them is over the field (or the head of a
|
|
453
|
+
long list is at the top).
|
|
454
|
+
- **Every question of Claude in the chat is a form.** A question whose request never reached the board (the board was
|
|
455
|
+
restarted while it waited, or it waited past half an hour), and a permission Claude asks in its terminal, were the last
|
|
456
|
+
rows of its screen — cut off at the top — with the keys 1 2 3. The chat now reads it off the screen and shows the same
|
|
457
|
+
form as any question: the whole text, a row per option with its description, an answer of your own; a long one fades
|
|
458
|
+
at its edge while there is more below.
|
|
459
|
+
- **The board away for a moment.** A refresh of the board while it did not answer left "Failed to fetch" uncaught —
|
|
460
|
+
in the browser's console and, once the board was back, in Settings → Errors — and the list unread. The board now
|
|
461
|
+
says "tasks did not load" by the title and reads them again once it answers, and a card the board reopens after a
|
|
462
|
+
move no longer stacks "The board is not responding" over the window: it follows the move when the board is back.
|
|
463
|
+
- **A cleanup of leftover hooks no longer stops Claude's sessions of the board.** The board's hook for Claude's questions
|
|
464
|
+
went on the command line of every Claude it started, so `pkill -f "kb hook permission"` (meant for leftover hooks)
|
|
465
|
+
stopped all of them at once. The hook now goes to Claude as a file in the board's data folder. Other words of the
|
|
466
|
+
command line (the task's key, the allowed `kb` commands) are still there — never stop processes by a pattern.
|
|
467
|
+
- **A command Claude Code moved to the background is background work.** A command that outruns its two minutes goes on
|
|
468
|
+
in the background by itself, and a skill can run as a helper there; the chat now names such work over its field with
|
|
469
|
+
the time it started, and a Claude done with its turn while only such commands run is said to wait for you — not
|
|
470
|
+
«Claude works in the background…» over nothing.
|
|
471
|
+
- **The chat holds up under odd answers and a busy hand.** A long run of spaces in a heading, deep quotes or a line of
|
|
472
|
+
brackets in Claude's answer no longer hangs the tab or blanks the chat, and a wide table scrolls instead of squeezing
|
|
473
|
+
its words to a letter a line. Words the board could not deliver come back to the field of their own task, before
|
|
474
|
+
anything typed since, even after you went to another task; a picture put to a message and sent at once goes with it;
|
|
475
|
+
the light of a stopped Claude goes out after a failed look too, and a closed card stops asking the board. Words sent
|
|
476
|
+
"Now" from the queue stay in the chat until Claude takes them, and the queue waits its two seconds after them.
|
|
477
|
+
- **The chat says why a message was not sent.** With too many messages already waiting for a busy Claude, the refusal
|
|
478
|
+
flashed and went; it now stays under the chat, in words that say what is wrong, until the words are edited. A chat
|
|
479
|
+
that could not load says so and tries again instead of "Loading…" for good, and background work Claude stopped
|
|
480
|
+
itself no longer runs in the chat forever.
|
|
481
|
+
- **A chat column on a phone has a height of its own**, as the terminal has: it no longer grew to the whole
|
|
482
|
+
conversation and opened at its first words.
|
|
483
|
+
- **⌘F in fields.** The search shortcut rebound to a bare letter no longer swallows that letter while typing in a
|
|
484
|
+
field, and ⌘F opens the search from the chat's field too.
|
|
485
|
+
- **The first-run wizard.** A change of language no longer leaves the page one solid colour when the board does not
|
|
486
|
+
answer; Back stands with its arrow on the edge of the words above it; and a failed check of the computer in the step
|
|
487
|
+
Permissions says so with a button to check again, instead of the macOS row silently going.
|
|
488
|
+
- **A check of Review moves what passes to Done without asking again.** Its Claude moved the tasks with a loop, which
|
|
489
|
+
the permission check of Claude Code sometimes refused, and the person had to say "move them yourself". The check now
|
|
490
|
+
tells it to move each task with a command of its own — the one the board allows it.
|
|
491
|
+
- **A card left open while its task moves to another project follows it.** Moved from another tab or by `kb`, the
|
|
492
|
+
task's open card went on showing its old key and no "Moved from"; it now opens again under the new key, with an edit
|
|
493
|
+
in progress saved and a half-typed comment kept.
|
|
494
|
+
- **The answer field of Claude now → Terminals no longer lags.** With a few columns open, every letter typed laid out
|
|
495
|
+
their screens of a thousand rows again; a key now costs what it costs with no screens at all.
|
|
496
|
+
- **Words typed to a task in Review that are not about it no longer leave it in Doing.** Typing into the terminal of a
|
|
497
|
+
handed-in task sends it back to Doing, as before; once Claude's turn is over, a task it did not touch — no move, no
|
|
498
|
+
note, no commit and no changed file in the project, an edited file git does not track yet included — goes back to
|
|
499
|
+
Review by itself, with the time it had. So does one whose Claude moved on another of its tasks in that turn: the
|
|
500
|
+
words were about that one. The card's timeline says which moves were made by typed words and which the board undid.
|
|
501
|
+
- **`kb` stops quietly when the reader of its output goes away** (`kb show KEY | head -1`), instead of printing a
|
|
502
|
+
stack and exiting with the code that means "the board is not responding".
|
|
503
|
+
- **Claude now shows a Claude that put its task back to To do and waits for your answer.** An `ask` task goes back
|
|
504
|
+
to To do with Claude's questions; its terminal waited at the prompt, and the section was empty. A task the person
|
|
505
|
+
moved to To do afterwards does not count.
|
|
506
|
+
- **A terminal in Claude now → Terminals opens at its end, not at the start of the session.** A column widened its
|
|
507
|
+
terminal's window on every opening of the section, and Claude Code then printed the whole conversation again from
|
|
508
|
+
its first line. A column now only narrows a window its lines do not fit.
|
|
509
|
+
- **The background of symbols no longer fades out and back when the window is hidden.** The last frame stays, and
|
|
510
|
+
the clouds go on from where they were once the window is back.
|
|
511
|
+
- The ✕ of a column in Claude now → Terminals is as tall as "Open in the card" beside it.
|
|
512
|
+
- **A task handed in stays in Review when you go on to the next one in the same terminal.** Words typed to a card's
|
|
513
|
+
terminal send its task from Review back to Doing — and after a hand-in, words like "now take the next one" did that
|
|
514
|
+
too: the finished task sat in Doing and kept its run in Claude now. When the same Claude takes another task into work
|
|
515
|
+
without having touched this one since, it goes back to Review with the time it had — and the task Claude went on to
|
|
516
|
+
is the one its card and Claude now say it works on.
|
|
517
|
+
- **Copying from a short terminal screen keeps the lines Claude ended apart.** On a fresh screen, where no text had
|
|
518
|
+
reached the edge yet, the longest line was taken for the width of the window, and `git push` under
|
|
519
|
+
`git commit -m "…"` was copied as part of it.
|
|
520
|
+
- **New task shows every task added last.** A task added from outside right after another (`kb add` in a batch) did not
|
|
521
|
+
show under the form until something else happened on the board.
|
|
522
|
+
- **Handing in one of two tasks in work leaves Claude on the other.** A Claude with two tasks in Doing that handed one
|
|
523
|
+
in was on no task at all: the card of the other did not say "working", and Claude now marked none of its tasks.
|
|
524
|
+
- **Text copied from a terminal is the text Claude wrote.** A selection on the screen of a card's Terminal tab or of
|
|
525
|
+
a Terminals column used to copy the screen's rows: a command Claude laid out over three rows of a narrow window came
|
|
526
|
+
with line breaks and indents inside it and broke in the shell. Now the rows the width broke go back together, the
|
|
527
|
+
indent the whole selection shares goes, and lines Claude ended stay ended.
|
|
528
|
+
- **A Claude that waits for a command of its own no longer calls you.** When the turn that just ended started work in
|
|
529
|
+
the background (a measurement, a build, a background agent) that is still running, the card and Claude now say
|
|
530
|
+
"working in the background" and nothing rings: the end of that work wakes Claude by itself. A tunnel or a dev server
|
|
531
|
+
left running does not count — Claude does not wait for those — and after two hours it calls you again.
|
|
532
|
+
- **Claude now no longer says "working" over runs whose tasks are all done.** Newer Claude Code marks a Claude at
|
|
533
|
+
its prompt with commands still running in the background as `shell`, and the board took the unknown word for a
|
|
534
|
+
turn in progress. Such a Claude now reads "working in the background" — on cards, in *Claude now* and in the
|
|
535
|
+
card's *Terminal* tab — and a terminal whose tasks were all accepted closes again. A Claude with no task in work
|
|
536
|
+
that has sat at its prompt for over two hours, a background command still running, leaves *Claude now* for
|
|
537
|
+
*Claude done*: a command that long with no turn of Claude is a leftover, not work.
|
|
538
|
+
- **Terminals of the board that only wait no longer pile up.** A terminal whose tasks are all in Review (or put
|
|
539
|
+
back), with its Claude idle at the prompt for six hours, now closes by itself, as one whose tasks were accepted
|
|
540
|
+
does; a question on its screen or a command still running in the background keeps it. Forty such terminals,
|
|
541
|
+
some ten days old, held 12 GB of a 16 GB Mac. The conversation stays: ↗ on the card picks it up again.
|
|
542
|
+
- **The tabs of a card stay on one line.** In a card 360 pixels wide *Claude's work* and its count, and
|
|
543
|
+
*Terminal* and its dot, broke onto a second line. A count over 999 is written short (*1k*), and only the
|
|
544
|
+
words of a tab give way, so the count and the dot always show.
|
|
545
|
+
- **A clicked card keeps its ring while it opens.** A board event arriving meanwhile (Claude moving cards) put the
|
|
546
|
+
ring back on the card open before; and the answer to an earlier, slower click no longer replaces the last one.
|
|
547
|
+
- **Claude's screen on the Terminal tab follows its answer.** Pressing a key or sending an answer lets go of a
|
|
548
|
+
selection on the screen, which used to hold the screen still; a mouse button pressed on the screen holds the
|
|
549
|
+
redraw too, so a slow drag selects.
|
|
550
|
+
- **A question of a board's Claude always rings.** One that the page first heard of from its own refresh used to
|
|
551
|
+
be taken as known and never rang; a line of Claude quoting a question's footer no longer reads as a question.
|
|
552
|
+
- **One run is never in *Claude now* and *Claude done* at once.** A manual task in work stands on its own in
|
|
553
|
+
*Claude now* and no longer holds Claude's run there.
|
|
554
|
+
- **The Review column's ▶ wakes up after another tab made the check,** instead of staying dead until a refresh.
|
|
555
|
+
- **Settings:** the install command of Claude Code (and every command shown to be run) can be selected and
|
|
556
|
+
copied; the effort list stays inside the Settings window; a stored effort level the board does not know is not
|
|
557
|
+
sent; the advice for an API key names both places it comes from; *GitHub sync* says above its fields that the
|
|
558
|
+
repository is made by you and that `gh` needs the `project` scope.
|
|
559
|
+
- **Settings → Claude Code tells the truth in more corners.** "The status line runs" is shown only for a recent
|
|
560
|
+
reading while the status line goes through this board; a `KB_CLAUDE_DIR` pointing at a missing folder disables
|
|
561
|
+
Connect instead of creating it; a `KB_CLAUDE_BIN` pointing nowhere is blamed on the variable; a Claude folder that is
|
|
562
|
+
not writable no longer offers Connect or keeps a copy of settings.json on every try; a refusal is said once; losing
|
|
563
|
+
the connection keeps the list on screen; and a double click on Connect no longer closes the confirmation. Installing or refreshing a skill — from Settings → Skills, by an update, by `local-kanban skills` or the setup — no
|
|
564
|
+
longer creates a missing `KB_CLAUDE_DIR` folder either. An update of a clone no longer logs that its own skill "did
|
|
565
|
+
not come along".
|
|
566
|
+
- **Smaller fixes found while accepting this release.** A hook written by an earlier version of the board reads as
|
|
567
|
+
"written by an earlier version — Connect brings it up to date", not as a board that moved. Duplicate on one of two
|
|
568
|
+
open checks opens the other one instead of advising ▶, which that check would refuse. A tmux that does not answer in
|
|
569
|
+
time no longer turns a fresh start of Claude into "session closed". An open card's status log keeps two moves made
|
|
570
|
+
outside that end where they began. Answering the refusal of Send back keeps the reason you typed. Settings → Skills
|
|
571
|
+
says a refusal in the board's words, not the server's.
|
|
572
|
+
- **Settings → Skills names the right folder.** It used to say the skills live in `~/.claude/skills` even when the
|
|
573
|
+
board reads them from `KB_CLAUDE_DIR` or `CLAUDE_CONFIG_DIR`; it now shows the folder it really uses and where that
|
|
574
|
+
comes from, as Settings → Claude Code does.
|
|
575
|
+
- **`local-kanban hooks` and `local-kanban skills` keep their copies with the right board.** Run from a terminal,
|
|
576
|
+
they kept the copy of the file they replaced in the data folder of their own process, so a board with its data
|
|
577
|
+
elsewhere never showed it under Backups. They now ask the running board where its data is; when it does not
|
|
578
|
+
answer, they write nothing unless you name the folder with `--data <dir>`.
|
|
579
|
+
- **A refusal of the board is said in its words, everywhere.** On a task deleted in another tab, removing a
|
|
580
|
+
link, adding a checklist item, deleting a comment, Send back, Accept and ▶ now say the task is gone and close
|
|
581
|
+
its card, instead of failing without a word. An edit of an open task the board fails or refuses is said in the
|
|
582
|
+
card — a failure waits behind "not saved" and is sent again — instead of being lost. Settings, the project
|
|
583
|
+
wizard, the project's page and Chaos say why something was refused in the board's language.
|
|
584
|
+
- **An image too large for the board is said to be too large in Safari too.** Pasting an image over 6 MB
|
|
585
|
+
into a card, a comment or Chaos said "no connection to the board" in Safari about half the time; the board
|
|
586
|
+
now checks the size before sending and says the image is larger than it takes.
|
|
587
|
+
- **An open card's status log follows a move made elsewhere.** When a task is moved by `kb mv`, in another
|
|
588
|
+
tab or by starting Claude, the open card's status log now shows the new line at once, not only after the card
|
|
589
|
+
is opened again.
|
|
590
|
+
- **Uploading a backup can no longer delete files.** A JSON request to the upload route could name any
|
|
591
|
+
file — the board's own database included — and the board deleted it; the route now takes only the uploaded
|
|
592
|
+
file itself, and a broken upload no longer blocks every later one. A board opened from a backup no longer
|
|
593
|
+
writes to the live board's files, takes no snapshots of itself and cannot update the code it shares with
|
|
594
|
+
the live board, and copying its attachments no longer freezes the live board for half a second.
|
|
595
|
+
- **A snapshot is never rotated away right after it is taken.** From schema version 10 on, the snapshot
|
|
596
|
+
taken before a migration would have been deleted at once; west of Greenwich, *Back up now* right after the
|
|
597
|
+
update deleted the snapshot it had just taken; saving the `deploy` skill removed the snapshots
|
|
598
|
+
of `deploy-tickets` and its own; two saves within a second lost the previous text. Unfinished snapshot
|
|
599
|
+
files left by a crash are cleaned up at start, and snapshot names and the times under Backups follow the
|
|
600
|
+
local clock instead of UTC — the snapshot taken before a migration, the one made with *Back up now* and the
|
|
601
|
+
copies kept when a skill or a project's CLAUDE.md is saved included, with the UTC offset in their names so that older names still sort
|
|
602
|
+
in their true order.
|
|
603
|
+
- **The card keeps your edits, and only yours.** An edit made elsewhere while the cursor sat in a field is
|
|
604
|
+
no longer undone by the next click in the card; a card left open on the dashboard or in Chaos follows the
|
|
605
|
+
task; a closed card is never saved again as a copy (Cmd+Enter with the sidebar pinned, or a retry after
|
|
606
|
+
the server came back), and an edit made while the server was down reaches it even after the card is
|
|
607
|
+
closed. Project settings and the CLAUDE.md and skill editors ask before dropping typed text, Save sends
|
|
608
|
+
only what changed, the board's keys stay out of open windows, and an open tab picks up a new version of
|
|
609
|
+
the page's markup or styles.
|
|
610
|
+
- **A big board stays light.** The card loads Claude's work only on its tab, and a session with dozens of
|
|
611
|
+
helper agents no longer re-reads all their transcripts on every update (with 30 helpers that kept the
|
|
612
|
+
board above its memory limit). A note, a link or an attachment changes one card instead of reloading the
|
|
613
|
+
whole list in every tab, a burst of events is drawn once, the dashboard stops recounting on events that
|
|
614
|
+
change none of its numbers, and the endless pulses no longer redraw the page every frame (reduced motion
|
|
615
|
+
stops them). The list of all projects no longer comes back empty from 16,384 tasks on.
|
|
616
|
+
- **Search shows the answer to what you typed.** A slow answer to an earlier, shorter query could stay on
|
|
617
|
+
the board as the result; now only the latest request counts, typing waits a little longer before asking,
|
|
618
|
+
and a task that arrives while a search is on is filtered like the rest.
|
|
619
|
+
- **`kb` and the API refuse malformed input instead of acting on it.** A task key went into the address
|
|
620
|
+
as is (`kb note '../backups?' …` took a database snapshot), `kb constructor` crashed, a foreign service on
|
|
621
|
+
`KB_URL` passed for the board, `prefix: null` renamed every task to `NULL-N`, and a slug with `../` wrote
|
|
622
|
+
outside the data folder. Errors now name the field. The error log no longer loses its history to one
|
|
623
|
+
failure repeated on many tasks; `local-kanban skills` refreshes the skills in place and keeps a copy of
|
|
624
|
+
what it replaces; `--data=~/x` lands in the home folder; deleting the demo closes its GitHub issues.
|
|
625
|
+
- **Claude's exit code shows on Linux too.** tmux there sometimes missed the signal of Claude's exit, and
|
|
626
|
+
the card said only "Claude has finished"; the board now reminds tmux once.
|
|
627
|
+
- **A task you have just made is a whole card at once.** A task made with **+** had no ▶ in its card, no
|
|
628
|
+
*+ link*, no status log and no *Cancelled* among its statuses until the card was closed and opened again —
|
|
629
|
+
so it could not be started in Claude right away. Now they are there as soon as the task is made.
|
|
630
|
+
- **Smaller interface fixes.** A right-click change or a comment made while the server is down waits for it
|
|
631
|
+
instead of failing silently; the Russian board writes sizes and hours with a decimal comma, names the
|
|
632
|
+
Local and Other sections in Russian and puts the word for "subfolders" in the right form for the number.
|
|
633
|
+
- **Claude inside the board: a language, long replies, an honest start.** A board run by pm2 has no
|
|
634
|
+
`LANG`, so its Claude worked in the C locale — `grep -i` missed capital Cyrillic, `wc -m` counted bytes;
|
|
635
|
+
it now gets the person's language or a UTF-8 one. A reply or a comment longer than about 8 000 Cyrillic
|
|
636
|
+
letters failed with "command too long"; text now reaches Claude whole up to the promised 14 336
|
|
637
|
+
characters, and a key name in a reply (`C-c`) is typed, not pressed. A prompt longer than tmux takes is
|
|
638
|
+
refused before anything starts, and *auto* takes it to the app or the Terminal instead. A project whose
|
|
639
|
+
folder is not on this computer no longer starts Claude in the home folder from the Terminal or the app —
|
|
640
|
+
the board offers to make the folder, as it already did inside the board. The *working* badge no longer
|
|
641
|
+
trusts a process id that another program got later. The Terminal tab looks at the screen only after the
|
|
642
|
+
last look came back, with one call to tmux, and is sent the screen only when it changed.
|
|
643
|
+
- **A retried GitHub issue no longer comes twice.** When the answer to creating an issue was lost, the
|
|
644
|
+
retry looked for the issue through GitHub's search, which indexes minutes late — exactly when the retry
|
|
645
|
+
comes — and made a second one. It now looks among the newest issues first, and searches only after that.
|
|
646
|
+
- **▶ right after the last Claude of the board was stopped no longer fails.** tmux was still shutting down
|
|
647
|
+
its server, and the start got "server exited unexpectedly"; the board now tries such a start once more.
|
|
648
|
+
- **The board always starts on matching page and code.** Safari, and the board installed from it as an app,
|
|
649
|
+
reopens a window and goes back and forward from its cache without asking the board — telling it to check
|
|
650
|
+
first does not stop that. After an update this could pair the new code with the old page: the board stayed
|
|
651
|
+
on its loading placeholder and then came up empty, and *New task* did nothing. The page, its code and its
|
|
652
|
+
styles are no longer kept in the browser cache, the installed app takes the page from the board every time,
|
|
653
|
+
and should a script of the board still fail while the board loads, the page reloads once by itself.
|
|
654
|
+
- **Found while these fixes were accepted.** One helper transcript the board cannot read no longer turns the
|
|
655
|
+
whole *Claude's work* tab into an error; a board whose first load failed (the server answered 500 for a
|
|
656
|
+
moment) tries again instead of staying empty until the page is reloaded; `kb lbl` against a board that was
|
|
657
|
+
updated but not restarted says to restart it instead of printing labels it did not set; and `local-kanban
|
|
658
|
+
skills` names a skill it could not refresh and exits with code 1. Twenty requests for *What's new* or the
|
|
659
|
+
update check that arrive together share one trip to GitHub instead of twenty (and one run of `gh` when the
|
|
660
|
+
anonymous request is refused); a `kb take` of an older version can no longer take a task another session
|
|
661
|
+
already has in *Prep* — it is told the task is taken, and the kanban skill tells Claude to leave such a task
|
|
662
|
+
and say so; and a page whose code failed to download at start
|
|
663
|
+
reloads once instead of staying empty.
|
|
664
|
+
- **The Update button on a clone installs the dependencies too.** It ran `git pull` and nothing else, so
|
|
665
|
+
a release that changed the dependencies restarted the board on new code with the old packages. It
|
|
666
|
+
now runs `npm install` after the pull, the way `npm run update` always has. A clone that picks up
|
|
667
|
+
this release with a plain `git pull` (which is all the button did until now) keeps working on its old
|
|
668
|
+
packages until `npm install` runs.
|
|
669
|
+
- **Claude's work keeps the step that handed a task in.** Status changes are stored to the second, so a `kb
|
|
670
|
+
review` run within the same second as the move fell out of the task's feed, or showed up in the next
|
|
671
|
+
task's. That second now belongs to the task handed in, and a step whose answer came after the move shows
|
|
672
|
+
how long it took and whether it failed.
|
|
673
|
+
- A card that Claude takes while it is open now locks right away (also in Preparation) and hides “+ label”,
|
|
674
|
+
“ask?”, “+ link” and the link and checklist delete buttons; when the task leaves work the card unlocks
|
|
675
|
+
with those buttons back and shows what Claude changed meanwhile — no need to reopen it. Before, a label
|
|
676
|
+
picked on such a card showed up but was never saved, and taking `noclaude` off a task in work was lost. The card's ⋯ menu and the link picker, if open at that moment, close too.
|
|
677
|
+
- When the server does not answer while you switch projects or search, the board keeps the project and the
|
|
678
|
+
tasks you had, tells you so (“project did not open”, “search did not reach the server” next to the title),
|
|
679
|
+
and finishes the switch or the search by itself once the connection is back — a click on the notice
|
|
680
|
+
retries at once. When the server answers with an error instead, the board says so and tries again by itself in a few seconds; the first load of a board that fails shows its columns with a note and a “Try now” button, and a switch that takes a moment shows the loading skeleton instead of the previous project's cards under the new title. Before, the board went blank and lost the selected project without a word.
|
|
681
|
+
- A change made with the right click on a task that was deleted elsewhere now says “This task no longer
|
|
682
|
+
exists” in the board's language and takes the leftover card off the board, instead of “Not saved: task not
|
|
683
|
+
found”.
|
|
684
|
+
- The rest of the task card speaks the board's language too. The link picker, typing into Claude's
|
|
685
|
+
terminal, starting Claude and pasting an image say why the server refused in the board's words instead
|
|
686
|
+
of its English (“the task to link to was not found”, “limit of attachments per task: 30”); pinning,
|
|
687
|
+
cancelling or deleting a task that was deleted elsewhere says so and clears the leftover card instead
|
|
688
|
+
of doing nothing. A server error now says the board answered with an error and that the details are
|
|
689
|
+
under Settings → Errors, rather than that the board is not responding.
|
|
690
|
+
- A comment sent while the server is down now stays in the card's comments as “not sent — goes out once the
|
|
691
|
+
connection is back” (with × to drop it) and is sent once when the connection returns; sending the same
|
|
692
|
+
text again while it waits no longer makes a duplicate.
|
|
693
|
+
- The “working” dot of the card's Terminal tab goes out when Claude exits — no need to reopen the card, and also when the task was still in To do or Backlog.
|
|
694
|
+
- A new task the server does not create says why at the top of its form — no connection, a server error
|
|
695
|
+
(it is retried from the “not saved” badge or with your next change) or a refusal in the board's words —
|
|
696
|
+
instead of failing silently, and typing on no longer sends a request for every letter.
|
|
697
|
+
- **Claude is never started on a task you do by hand.** ▶ and the copy button on *To do* put every task of the
|
|
698
|
+
column into Claude's job, the ones labelled `noclaude` too, and `kb take` could pick such a task. Now both buttons
|
|
699
|
+
leave manual tasks out (a column of manual tasks only has neither), the board refuses to start Claude on one —
|
|
700
|
+
also from a tab that has not heard of the label yet, which then says why and loses its ▶ — and `kb take` passes
|
|
701
|
+
manual tasks by.
|
|
702
|
+
- **The button that archives a project says so on the Russian board.** It read as the name of the settings
|
|
703
|
+
section: the Russian dictionary held the word twice and the second translation won without a word. Each
|
|
704
|
+
word is in the dictionary once now (the English name of that settings section is *Archived*), and a test
|
|
705
|
+
keeps it that way.
|
|
706
|
+
- **The status line's limits reach a board that reads the request a moment late.** `kb statusline` hung up the
|
|
707
|
+
moment its request was out, and a board with an asynchronous step before reading it lost the reading. kb now
|
|
708
|
+
waits up to 300 ms for the board's answer — a board that never answers still costs the status line a moment,
|
|
709
|
+
not a second.
|
|
710
|
+
- **A second open check is no longer made silently.** Putting the check label on a task, or sending the report of
|
|
711
|
+
an earlier check back to To do, while the project has an open check goes through and says so — on the page and in
|
|
712
|
+
`kb`. *Duplicate* on the open check itself says it is still open and how to start it again, instead of opening the
|
|
713
|
+
same card, and no longer lands in Settings → Errors; a check in Backlog can be copied.
|
|
714
|
+
- **A Claude that exited at once, or a start nobody sent in the Claude app, no longer reads as starting or
|
|
715
|
+
checking.** A Claude started inside the board that exited right away (not signed in, crashed) showed *starting*
|
|
716
|
+
for two minutes; now its card says *session closed* at once. A task or a check started in the Claude app says
|
|
717
|
+
*waiting to start in the app* until someone presses Enter there, and *session closed* after two hours — the
|
|
718
|
+
Claude review section used to say *Claude is checking* for good.
|
|
719
|
+
- **Claude started in the Terminal or the Claude app works with the board that started it.** Its `kb` went to
|
|
720
|
+
the board on the default port (3100), so on a board on another port Claude moved tasks on a different board.
|
|
721
|
+
The Terminal command now carries the board's address, and for the Claude app (and a copied prompt) the prompt
|
|
722
|
+
ends with a line naming it — only when the board is not on the default port.
|
|
723
|
+
|
|
724
|
+
### Security
|
|
725
|
+
|
|
726
|
+
- **`@fastify/static` 10.1.3 closes two advisories** — a path-traversal bypass of route guards
|
|
727
|
+
(GHSA-83w8-p2f5-377r) and a bypass of `allowedPath` (GHSA-8pvw-jcv7-9cmj). The board was not
|
|
728
|
+
exposed to either, because it protects every request the same way rather than individual static
|
|
729
|
+
files, but `npm audit` reported them to everyone who installed the package. The version is pinned
|
|
730
|
+
on purpose: later releases need Node 22.12 or newer, and the board still supports all of Node 22.
|
|
731
|
+
|
|
11
732
|
## [1.15.0]
|
|
12
733
|
|
|
13
734
|
### Added
|