The headline addition this release is a full card comments feature: flat threaded comments with @mention resolution, unread state, a pinned teaser, and keyboard shortcuts. Alongside that, local board agents ship — account-owned AI agents that run on your own machine and coordinate via a companion process. Markdown attachment previews land too, rendering .md files with a Preview/Raw toggle. A security fix tightens the agent ingress gate by binding the proxy to loopback only. Several internal items round out the release: Claude Code GitHub workflows, linter cleanup, and documentation.
New
- Comment threads on cardsCards now have a flat comment thread: write and post comments, @mention board members (with avatar chips for resolved mentions), delete your own posts, and see an unread badge on the board tile. The thread opens scrolled to the newest comment, and the board tile's comment glyph opens straight to the comments view. Keyboard shortcuts
⌘↵posts and closes the composer;Escapepreserves an unposted draft.8f841c0678d0bf - Markdown attachment previews with a Preview/Raw toggleOpening a
.mdattachment now renders it as formatted markdown instead of raw text, with a Preview/Raw switch above the page. The renderer gains fenced code, inline code, blockquotes, tables, horizontal rules, andh4–h6support; styles are shared with the card description via a.markdown-renderclass.98c7912 - Account-owned local board agentsAccounts can now set up local AI agents that run on their own machine via the companion process. Agents appear on boards, coordinate on card comments, and are managed through a new onboarding UI in settings. The companion CLI handles pairing, approval, and HTTPS setup.
d05e9a546dd8dd
Improved
- All buttons use a consistent rounded-full pill shapeThe shadcn
Buttoncomponent's default shape changed fromrounded-mdtorounded-full, aligning every dialog, dashboard, and card button with the app's existing pill-shaped controls. No call-sites needed updating.8f841c0
Security
- XSS fix in markdown link rendering
escapeHtmlnow escapes double quotes, closing a hole where a URL containing a"could break out of anhrefattribute and inject an event handler. This path was first reachable via uploaded file bytes in the new attachment preview.98c7912 - Agent ingress gate: proxy bound to loopback onlyThe kamal proxy previously published on
0.0.0.0:80and0.0.0.0:8443, making theCF-Connecting-IPheader that the pairing rate-limiter trusts forgeable by any host that could reach the box.proxy.run.bind_ipsnow pins both ports to loopback. The ingress verification script was also corrected for Docker's firewall scoping and nftables/iptables compatibility.85c8cf7