Changelog
2026-08-13v0.50.0· Named Files
Added
-
Task files are now named after what they are. A new task lands in
tasks/t293_fix_login_button.mdinstead oftasks/t293.md, so agit diff --stat, a pull request file list, your editor tabs and agrep -rlall read as English. Three words, lowercase ASCII, taken from the title; accents are flattened, a leading[CATEGORY]tag is ignored, and a title that yields nothing printable (emoji-only, CJK, Cyrillic) keeps the bare<id>.mdrather than inventing a placeholder.The id is still the only identifier. It lives in the
id:frontmatter, sodepends_on,[[t232]]links, deep links and branch names cannot be broken by a rename, and both filename forms keep working forever, side by side in the same folder. Every reader, the CLI, the TUI, the daemon and the web app, resolves an id through one shared pure module (src/lib/task-filename.ts) rather than rebuilding a path from the id.The slug is frozen at creation: editing a title never touches the filesystem. Bringing older tasks in line is an explicit
kandown reslug <id>, orkandown reslug --all, with--dry-runto preview andgit mvunder the hood so history follows the rename.kandown workmentions the leftovers and asks the agent to offer the rename, never to perform it unprompted.
Fixed
- The per-daemon API auth token declared as M5 in
daemon.ts:42is finally wired end to end. The daemon now mints a 32-byte random token at boot, stores it next to the port in.kandown/daemon.json, injects it into the served HTML aswindow.__KANDOWN_TOKEN__, and refuses every API request that does not carry the matchingX-Kandown-Tokenheader (or?token=query parameter forEventSource).GET /api/daemonstays open without a token because it is the liveness check. The CORSAccess-Control-Allow-Originstops being a wildcard: every response now echoes the daemon's ownhttp://127.0.0.1:<port>origin, so a foreign page can no longer read or rewritetasks/*.mdwith a plainfetch. The vite dev server is exempt by design (localhost only, dev tree only) and the choice is documented invite.config.ts.