
## Notedeck - 2026-08-22

### Added

- **agentium-core, agentium_cli**: agentium list shows a sayable `agentium:word-word-word` reference for each session (William Casarin)
- **agentium-core, agentium_cli**: agentium send <session> <text> to message a session from the CLI (William Casarin)
- **agentium-core, agentium_cli**: agentium: `list --json` now includes an agentium_uri field with the session's agentium: reference (William Casarin)
- **agentium-core, agentium_cli, dave**: Show bash command output inline in Dave conversations (William Casarin)
- **agentium-core, agentium_cli, dave**: agentium log --follow/-f to live-follow a session's transcript (William Casarin)
- **agentium-core, agentium_cli, dave**: agentium spawn command to create sessions on a (remote) host (William Casarin)
- **agentium-core, dave**: Fade Dave session status colors as a session goes stale (William Casarin)
- **agentium-core, dave**: Show approve/deny reply messages in Dave conversations (William Casarin)
- **agentium_cli**: Add `agentium resume <session>` to reopen a closed session's backend (William Casarin)
- **agentium_cli**: `agentium spawn --prompt-file <path>` reads the first message from a file or stdin (`-`) (William Casarin)
- **agentium_cli**: agentium CLI `list` command to enumerate Dave sessions (William Casarin)
- **agentium_cli**: agentium interrupt <session> to abort a session's turn from the CLI (William Casarin)
- **agentium_cli**: agentium messages <session> — print a Dave session's conversation transcript (William Casarin)
- **agentium_cli**: agentium show <session> — session detail (state, run-configs, usage, conversation summary) (William Casarin)
- **agentium_cli**: agentium: `list --deleted`/`--all` to show soft-deleted sessions (William Casarin)
- **chrome**: Add a browser-style top tab strip for switching between notedeck apps (William Casarin)
- **chrome**: Add real Notedeck UI integration tests with egui_kittest (alltheseas)
- **chrome**: Browser-style global back/forward navigation controls (history (William Casarin)
- **chrome**: Ctrl+W (Cmd+W) closes the active app tab (William Casarin)
- **chrome**: Cycle app tabs with Ctrl+Tab and Ctrl+Shift+Tab (William Casarin)
- **chrome, clndash, columns, dave, nostrverse, notedeck, ui**: Add sound effects on UI interactions (hover, click, like, zap, post, notifications) (William Casarin)
- **chrome, columns, dave, messages, nostrverse, notedeck, testing**: Wire Notedeck apps to the negentropy-backed full-history outbox runtime. (kernelkind)
- **chrome, columns, dave, notedeck, ui**: Internationalized user-facing strings and exported them for translations (Terry Yiu)
- **chrome, columns, notedeck**: Release channel selector in settings for update management (William Casarin)
- **chrome, dave**: Click an agentium session chip to open the session in Dave (William Casarin)
- **chrome, dave, messages, notedeck**: Show notification count badges on app tabs (unread DMs, Dave items needing input) (William Casarin)
- **chrome, headway**: Clicking an embedded Headway board or issue opens it in Headway (William Casarin)
- **chrome, headway, notebook, notedeck**: Render referenced nostr entities (headway issues/boards) inline in notebook notes (William Casarin)
- **chrome, horizon, ui**: Add Horizon, a timeblocking nostr calendar app (William Casarin)
- **chrome, notedeck**: Add --all-apps-active CLI option to keep all apps processing in the background (William Casarin)
- **chrome, notedeck**: Add startup sound (William Casarin)
- **chrome, notedeck, release**: Android APK self-update via nostr-based release discovery (William Casarin)
- **columns**: Add grouped zap notifications in notification feed (William Casarin)
- **columns**: Custom filter timelines with querystring serialization (William Casarin)
- **columns**: Follows list (Martti Malmi)
- **columns**: Follows view (Martti Malmi)
- **columns, dave, headway, notebook, notedeck, testing**: Mark relays as "private" to sync dave, headway and notebook privately across your devices (William Casarin)
- **columns, enostr**: Copy an account's npub or nsec by right-clicking it on the accounts screen (William Casarin)
- **columns, enostr, messages, nostrverse, notedeck**: Add relay routing preferences for outbox subscriptions (kernelkind)
- **columns, headway, notebook, notedeck**: Render referenced nostr notes inline in notebook notes (William Casarin)
- **columns, notedeck**: Add zap receipt verification on the notification feed (William Casarin)
- **columns, notedeck**: Added human-readable names to locales in settings (Terry Yiu)
- **columns, notedeck, ui**: Add "View As User" on profiles (Martti Malmi)
- **columns, notedeck, ui**: Add zap/reaction detail on notes (William Casarin)
- **columns, ui**: Display verified zap amounts on notes (William Casarin)
- **dashboard**: Clicking profile pictures in dashboard opens the profile in columns (William Casarin)
- **dashboard**: dashboard card showing new contact list creations by client (William Casarin)
- **dave**: A deleted agentic-session chip now shows a "Connecting…" state while a resume on another host is in flight (William Casarin)
- **dave**: Add Ctrl+` shortcut to open a new terminal window (kernelkind)
- **dave**: Add Exit button on tool permission prompts to cancel the current agent turn (kernelkind)
- **dave**: Add a dave-side "Auto Accept All" toggle (right-click the mode badge or Ctrl+Shift+M) that auto-accepts every tool call for the session, on any backend (William Casarin)
- **dave**: Add an Auto Execute permission mode to Dave (right-click the mode badge or Ctrl+Shift+M) that auto-runs all tool calls (William Casarin)
- **dave**: Add clipboard image paste support via right-click context menu (kernelkind)
- **dave**: Add git worktree creator for spawning new worktrees from a session (kernelkind)
- **dave**: Add named run configurations for launching shell commands per project (kernelkind)
- **dave**: Add right-click "New Session" option on CWD folder headers in session list (kernelkind)
- **dave**: Click a deleted session's inline chip to resume it (William Casarin)
- **dave**: Dave now shows call summaries for Skill, Agent and SendMessage tool rows (William Casarin)
- **dave**: Group agent session list by host and working directory with collapsible folders (kernelkind)
- **dave**: Interrupt remote agentic sessions with Esc / the Stop button (William Casarin)
- **dave**: Persist session list folder collapse state across app restarts (kernelkind)
- **dave**: Render agentium session references (agentium:<word-id>) inline as live chips (William Casarin)
- **dave**: Render inline references in Dave user messages and plan bodies (William Casarin)
- **dave**: Resume a closed Dave session, reviving its agentium: reference and history (William Casarin)
- **dave**: Resume a closed agentic session on another host by clicking its deleted chip (William Casarin)
- **dave**: Show Ctrl+J/K session-cycling hints on adjacent sessions in dave (William Casarin)
- **dave**: Show TaskCreate/TaskUpdate tasks in the Dave task list sidebar (William Casarin)
- **dave**: Show active model in agentic session header and allow model selection at session creation (William Casarin)
- **dave**: Show background subagents in Dave and update them when they finish (William Casarin)
- **dave**: Show line churn (+/-) in the dave git status line (William Casarin)
- **dave**: Show the bash command / edited file in answered permission prompts (William Casarin)
- **dave**: Suggest existing run configurations in the run config editor (kernelkind)
- **dave, horizon, nostr_calsync, ui**: Mirror macOS Calendar events into Horizon (opt-in via NOTEDECK_CALSYNC) (William Casarin)
- **enostr**: Add negentropy-backed full-history outbox reconciliation to enostr. (kernelkind)
- **enostr**: Fetch and apply NIP-11 relay limitations (kernelkind)
- **general**: Add Nostr-based auto-update system (William Casarin)
- **general**: Add notification dot on toolbar (William Casarin)
- **general**: Add realtime note stats (William Casarin)
- **general**: Imported Spanish translations (Terry Yiu)
- **headway**: Archive and restore cards in Headway boards (William Casarin)
- **headway**: Copy nostr references to headway issues (right-click) and boards (⋯ menu) (William Casarin)
- **headway**: Drag-reorder sub-issues in the Headway card detail view (William Casarin)
- **headway**: Filter the headway board by card word ids; pasting a full card reference jumps to it, switching boards when needed (William Casarin)
- **headway**: Filter the headway board by text and labels (William Casarin)
- **headway**: Headway agent tools expose card blocking edges and a ready-items (work-order frontier) query (William Casarin)
- **headway**: Headway card descriptions render inline card references as live status chips (William Casarin)
- **headway**: Headway cards animate sliding between columns when moved (William Casarin)
- **headway**: Headway cards can be blocked by other cards (dependency edges) (William Casarin)
- **headway**: Headway cards can be related to other cards (undirected see-also relations) (William Casarin)
- **headway**: Headway shared boards — join over SNS key-shares, read (William Casarin)
- **headway**: Manage headway board columns: add, rename, reorder and delete (William Casarin)
- **headway**: Migrate an existing Headway board to SNS so it can be shared, keeping all cards and ids (William Casarin)
- **headway**: Move or link a Headway card to another board from its right-click menu (William Casarin)
- **headway**: Render Headway card descriptions as markdown (William Casarin)
- **headway**: Render and edit card blocking dependencies in the Headway board app (William Casarin)
- **headway**: Render inline headway card references (board#word-word-word) as live cards (William Casarin)
- **headway**: Share Headway boards — new boards are sealed per-board so they can be shared to others (William Casarin)
- **headway**: Show a card's word-id reference in the Headway detail sheet (click to copy) (William Casarin)
- **headway**: Show a derived activity timeline (moves, renames, label and description edits) in headway card detail (William Casarin)
- **headway**: Show and edit card priority in the Headway board UI (William Casarin)
- **headway**: Show status circles on headway board column headers (William Casarin)
- **headway**: Subissues render on the board and in card detail: progress rollup, checklist, breadcrumb, and a set-parent context menu (William Casarin)
- **headway**: Switch between and create multiple Headway boards from the notedeck app (William Casarin)
- **headway**: headway: board header shows whether it's syncing to a private relay (William Casarin)
- **headway, headway_cli**: Add priority to headway cards (none/low/medium/high/urgent) (William Casarin)
- **headway, headway_cli**: Comment on headway cards from the board's card detail view (William Casarin)
- **headway, headway_cli**: Headway cards can be subissues of a parent card, with progress rolled up from the board (William Casarin)
- **headway, headway_cli**: Human-friendly word-id references for headway cards (e.g. headway-maple-river-canyon) (William Casarin)
- **headway, headway_cli**: Show when a card was created and last updated in the card detail view and headway CLI (William Casarin)
- **headway, headway_cli**: `headway migrate --dry-run` reports what a re-seal would change (William Casarin)
- **headway, headway_cli**: headway CLI `add` can tag a new card with labels via -l/--label (William Casarin)
- **headway, headway_cli**: headway CLI for reading and editing a board over a relay (William Casarin)
- **headway, headway_cli**: headway CLI: `rename` command to retitle a board (William Casarin)
- **headway, headway_cli**: headway CLI: `seq` to order cards within a container's work-order (William Casarin)
- **headway, headway_cli**: headway: card due dates and estimates (William Casarin)
- **headway, headway_cli**: headway: move and link cards across boards (`link` / `move-board`) (William Casarin)
- **headway, md-stream, ui**: Clickable task-list checkboxes in markdown (Headway card descriptions) (William Casarin)
- **headway_cli**: Add `headway migrate` to seal an existing board for sharing (William Casarin)
- **headway_cli**: `headway add --desc <text>`/`--desc-file <path>` set a card's description at creation (`-` reads stdin for heredoc'd markdown) (William Casarin)
- **headway_cli**: `headway block`/`unblock` CLI commands for card dependencies (William Casarin)
- **headway_cli**: `headway next` prints the work-order ready set for agents (William Casarin)
- **headway_cli**: `headway relate`/`unrelate` CLI commands for see-also card relations (William Casarin)
- **headway_cli**: headway CLI `login`/`logout` to store the signing key in a config file (William Casarin)
- **headway_cli**: headway CLI can comment on cards (`headway comment`, with `--reply-to` for threaded replies) and shows the thread in `show <card>` (William Casarin)
- **headway_cli**: headway CLI card refs like board#word-id now route to their board automatically (William Casarin)
- **headway_cli**: headway CLI: `show --all` prints every board at once (William Casarin)
- **headway_cli, notebook, notebook_cli, relay_sync**: notebook CLI for viewing and editing a canvas from the terminal (William Casarin)
- **headway_cli, relay_sync**: headway CLI: `board` command to switch between and list multiple boards (William Casarin)
- **horizon**: Horizon opens a fullscreen event detail view when you (William Casarin)
- **horizon**: Horizon reads NIP-52 calendar events from nostrdb (William Casarin)
- **horizon**: Horizon's month view now renders a day-cell grid with (William Casarin)
- **horizon**: Horizon: "until next" free-time indicator, event (William Casarin)
- **horizon**: Horizon: keyboard navigation (j/k/t) and a selection cursor in the day view (William Casarin)
- **horizon**: Horizon: press i/o to create calendar time blocks from the keyboard (William Casarin)
- **horizon**: Horizon: vim chords for view positioning (zz/zt/zb), zoom (zi/zo), event hopping (gj/gk), and hour alignment (ah) (William Casarin)
- **horizon**: Inline title editing for horizon timeblocks (c/s/A to edit, Enter to save, Esc to cancel) (William Casarin)
- **horizon**: Move, resize and delete timeblocks from the keyboard in Horizon (William Casarin)
- **horizon**: Push-move (Ctrl-j/k), push-expand (Ctrl-v) and lock (l) for horizon timeblocks (William Casarin)
- **horizon**: Render time blocks on the Horizon timeline (William Casarin)
- **md-stream, ui**: Render markdown bullet/ordered lists and task-list checkboxes (William Casarin)
- **messages**: Clicking profile pictures in messages opens the profile in columns (William Casarin)
- **nostrdb_relay**: nostrdb_relay speaks NIP-77 negentropy for efficient set reconciliation (William Casarin)
- **nostrdb_relay, notedeck**: Embedded localhost nostr relay (--relay-bind / --no-local-relay) (William Casarin)
- **notebook**: Animate node moves on the notebook canvas (William Casarin)
- **notebook**: Browse and reopen your notes in a notebook vault sidebar (William Casarin)
- **notebook**: Clicking a notebook node reference opens the node in the Notebook app (William Casarin)
- **notebook**: Copy/cut/paste context menu in the notebook note editor (William Casarin)
- **notebook**: Delete notebook edges by clicking the handle at their midpoint (William Casarin)
- **notebook**: Delete notebook notes via the Delete key or context menu (William Casarin)
- **notebook**: Drag a vault note onto the notebook canvas to embed it (William Casarin)
- **notebook**: Drag and select nodes in the Notebook canvas (William Casarin)
- **notebook**: Draw edges between notebook nodes by dragging from a node's side handle (William Casarin)
- **notebook**: Drop a nostr: reference on the notebook canvas to embed that note (William Casarin)
- **notebook**: Edit notebook text nodes inline (double-click to edit, double-click empty canvas to create) (William Casarin)
- **notebook**: Honor node and edge colors in the Notebook canvas (William Casarin)
- **notebook**: Longform note previews for nostr references in the notebook (William Casarin)
- **notebook**: Note-embed canvas nodes that reference a nostr note by naddr/nevent (William Casarin)
- **notebook**: Notebook canvases are backed by nostr and editable (nodes, moves, text, deletes) (William Casarin)
- **notebook**: Rename and delete longform notes from the notebook vault sidebar (William Casarin)
- **notebook**: Render notebook node references (notebook:<word-id>) inline as live chips (William Casarin)
- **notebook**: Resize notebook nodes by dragging their left/right edges (William Casarin)
- **notebook**: Show a document icon on each note in the notebook vault sidebar (William Casarin)
- **notebook**: Write and edit private longform notes in the notebook (William Casarin)
- **notebook, notebook_cli**: notebook CLI: refer to nodes by a human-friendly word-id (e.g. notebook@maple-river-canyon) (William Casarin)
- **notebook, notedeck**: Show each note's last-edited time in the notebook vault sidebar (William Casarin)
- **notebook_cli**: notebook CLI `vault` command to browse longform notes (William Casarin)
- **notedeck**: Add auto-update support from GitHub Releases (William Casarin)
- **notedeck**: Add design tokens module for consistent UI spacing and sizing (William Casarin)
- **notedeck**: Add semantic color API for consistent theming across widgets (William Casarin)
- **notedeck**: Added Fluent-based localization manager and added script to export source strings for translations (Terry Yiu)
- **notedeck**: Added French, German, Simplified Chinese, and Traditional Chinese translations (Terry Yiu)
- **notedeck**: Added Japanese and Portuguese (Portugal) languages (Terry Yiu)
- **notedeck**: Added Portuguese (Brazil) language and translations (Terry Yiu)
- **notedeck**: Sync private notes such as notebook longform across your devices through the account's private relays, regardless of which app is open. (William Casarin)
- **notedeck, ui**: Add support for processing and viewing giftwraps (William Casarin)
- **release**: Default to latest GitHub release in notedeck-release tool (William Casarin)
- **ui**: Add kittest UI testing infrastructure (William Casarin)
- **ui**: Render inline reference widgets (e.g. Headway cards) in notes (William Casarin)

### Changed

- **agentium-core**: Phrase agent question-set answers as prose instead of embedding JSON in the response (William Casarin)
- **agentium-core, agentium_cli**: Rename `agentium messages` to `agentium log`; add --role/-n/--color and paging (William Casarin)
- **agentium-core, dave**: Append in-order remote agent messages incrementally instead of reloading the whole conversation each poll (William Casarin)
- **agentium-core, dave**: Auto-accepted permission edits now start expanded so the diff stays reviewable (William Casarin)
- **agentium_cli**: agentium list renders full agentium: session URIs (no truncation) (William Casarin)
- **chrome**: Animate transitions when switching between apps (William Casarin)
- **chrome**: Scroll the sidebar app list when it overflows (William Casarin)
- **chrome**: Soften the app tab strip separator into a subtle fade (William Casarin)
- **chrome, dave, ui**: Autofocus an app's primary input the first time you switch to it (William Casarin)
- **chrome, notedeck, testing**: Store keys in an encrypted file by default instead of the OS keychain (opt back in with --use-keystore) (William Casarin)
- **chrome, ui**: Improve search and chat toolbar icon styling (William Casarin)
- **chrome, ui**: New colored icon for the Messages app (William Casarin)
- **chrome, ui**: New colored icons for the Dashboard, Headway and Notebook apps (William Casarin)
- **chrome, ui**: New custom icons for the Headway and Notebook apps (William Casarin)
- **columns**: Allow multiple hashtags in hashtag columns (Fernando López Guevara)
- **columns**: Auto focus input field on new posts (Martti Malmi)
- **columns**: Clean up the relay management row layout (William Casarin)
- **columns**: Made text in threads selectable (William Casarin)
- **columns**: Make app draggable on entire header area (Martti Malmi)
- **columns, dave, headway, notebook, notedeck**: Private sync relays for dave, headway and notebook are now stored as an encrypted kind-10013 (NIP-37) relay list instead of a custom NIP-65 marker, fixing the private flag not sticking and interoperating with other clients (William Casarin)
- **columns, dave, headway, notebook, notedeck, testing**: Dave no longer defaults its sync relay to relay.jb55.com; mark a relay private instead (William Casarin)
- **columns, enostr, messages, nostrverse, notedeck**: Rework outbox transparent routing and EOSE tracking (kernelkind)
- **dashboard**: Improve dashboard card sizing hierarchy and responsive layout (William Casarin)
- **dashboard, notedeck**: Improve dashboard visual design with design system tokens (William Casarin)
- **dave**: Collapse Allowed/Denied permission widgets into a chevron disclosure that reveals the approved operation (William Casarin)
- **dave**: Dave bash tool summaries now show the full command and drop the meaningless output-char count (William Casarin)
- **dave**: Dave: replaced the "Auto Accept All" toggle with Claude Code's native "auto" permission mode, now a step in the Ctrl+M permission-mode cycle (Manual → Plan → Accept Edits → Auto) (William Casarin)
- **dave**: Keep a Dave session marked Working while its background subagents are still running (William Casarin)
- **dave**: Model picker uses backend defaults instead of hardcoded models (William Casarin)
- **dave**: Rebind dave session switching to Ctrl+J/K (Ctrl+Tab now switches apps) (William Casarin)
- **dave**: Redesign Dave's tool-result rows: collapsed header truncates the command, expanding shows the full command and output together (William Casarin)
- **dave**: Replace raw git status codes with intuitive symbols (kernelkind)
- **dave**: Soften the stale Dave session status color fade (William Casarin)
- **dave**: Truncate long paths from the start so the meaningful end is always visible (kernelkind)
- **dave**: Use a throttled square loading spinner in dave to avoid continuous re-rendering (William Casarin)
- **dave**: dave: don't wrap single-session worktrees in a collapsible folder header (William Casarin)
- **dave**: dave: indent cwd folder groups under their host header in the session list (William Casarin)
- **dave, notebook, ui**: Render markdown in Notebook text nodes (William Casarin)
- **enostr**: Add bootstrap retry backoff for relay websocket slots (kernelkind)
- **enostr**: Faster detection of silently-dropped relay connections (~9s) (William Casarin)
- **enostr**: Improve outbox compaction drain fairness (kernelkind)
- **enostr**: Relay status updates instantly when a network route (e.g. a VPN tunnel) drops (William Casarin)
- **enostr**: Relays detect dropped connections much faster via TCP keepalive (William Casarin)
- **general**: Imported translations (Terry Yiu)
- **headway**: Card detail comments now always render below the card body instead of beside it on wide windows (William Casarin)
- **headway**: Card detail is now laid out like Linear's issue view, with status, labels and card actions in a right-hand properties sidebar on wide windows (William Casarin)
- **headway**: Card detail now matches Linear's visual style: status circles, panelled properties sidebar, breadcrumb topbar, and collapsed add-affordances (William Casarin)
- **headway**: Edit Headway card titles inline by clicking them (William Casarin)
- **headway**: Empty headway card descriptions show a quiet "Add description…" placeholder instead of an open editor (William Casarin)
- **headway**: Flatten the Headway card-detail properties sidebar — frameless sections, muted dependency headings, single-line dependency rows (William Casarin)
- **headway**: Flesh out the headway card detail sheet with status and move controls (William Casarin)
- **headway**: Headway boards are now stored as nostr events in nostrdb and persist across restarts (William Casarin)
- **headway**: Headway board↔card navigation now joins the chrome global back/forward history (William Casarin)
- **headway**: Headway card detail opens as a full-pane view instead of a floating dialog (William Casarin)
- **headway**: Headway detail sheet shows the card word-id as a muted click-to-copy caption under the title instead of in the header (William Casarin)
- **headway**: Headway labels can now be removed from cards (William Casarin)
- **headway**: Headway loads the board reactively instead of re-reading all events every frame (William Casarin)
- **headway**: Headway now stores your last-selected board in nostrdb instead of a local file (William Casarin)
- **headway**: Headway's default board is now a shareable per-board SNS channel that converges across your devices (William Casarin)
- **headway**: Include word ids in headway --json output (William Casarin)
- **headway**: Move card-detail blocker/dependency lists into the properties sidebar (William Casarin)
- **headway**: Polish the headway board, cards and card detail view (William Casarin)
- **headway**: Remove redundant Headway board title heading (William Casarin)
- **headway**: Render headway card comments with the shared note renderer (William Casarin)
- **headway**: Render inline headway issue references as compact chips (William Casarin)
- **headway**: Shared-board edits now count for any member holding the team key (William Casarin)
- **headway, headway_cli**: Headway card references use a GitHub-style '#' (e.g. headway#maple-river-canyon), shown muted on each board card (William Casarin)
- **headway, headway_cli**: Headway seeds a card-less default board with an In Review column (William Casarin)
- **headway, headway_cli**: headway move-board/link now keep a card in the same column on the destination board (William Casarin)
- **headway, headway_cli, notedeck, ui**: Headway card references are now URI-native (headway:board/word-id) so they survive note tokenization and need no shell quoting (William Casarin)
- **headway, ui**: Inline reference chips now sit on the text baseline instead of inflating the line (William Casarin)
- **headway_cli**: Hide archived cards in `headway show` by default (use `--archived` to list) (William Casarin)
- **headway_cli**: `headway migrate` now requires --new-channel to seal a board into a new channel (William Casarin)
- **headway_cli**: headway CLI `seed` now creates a sealed team-of-one board titled by its slug instead of a plaintext board titled "Headway" (William Casarin)
- **headway_cli**: headway CLI `show` accepts card ids to print only those cards (William Casarin)
- **headway_cli**: headway CLI lists the card word-id muted at the end of each line, after the title (William Casarin)
- **headway_cli**: headway CLI syncs over NIP-77 negentropy (O(diff) instead of re-pulling the board) (William Casarin)
- **headway_cli**: headway add prints the created card's reference (William Casarin)
- **headway_cli**: headway_cli: `show <card>` prints full card detail (William Casarin)
- **horizon**: Horizon drops the event inspector on tablet and (William Casarin)
- **horizon**: Horizon's week view shows three days instead of seven (William Casarin)
- **horizon**: Redesign the Horizon calendar with a three-pane layout (mini-month + agenda, day timeline, and event inspector) (William Casarin)
- **nostrverse**: Add stone path between rooms and URL tile image support (William Casarin)
- **nostrverse**: Improve demo scene with protoverse-style attributes (William Casarin)
- **notebook**: Highlight the target anchor when connecting notebook nodes and recolour edge sockets (William Casarin)
- **notebook**: Note-embed canvas nodes now render the full note document, not a preview (William Casarin)
- **notebook**: Notebook edge delete handles now appear only when hovering the edge (William Casarin)
- **notebook**: Notebook longform editor now uses a Write/Preview toggle instead of a side-by-side split (William Casarin)
- **notebook**: Notebook vault sidebar now lists canvases alongside notes — open one to switch the canvas, and create/rename/delete canvases from the sidebar (William Casarin)
- **notebook**: Notebook vaults are now stored as a private, shareable SNS workspace (William Casarin)
- **notebook**: Opening a notebook node from a reference now pans the canvas to it (William Casarin)
- **notebook**: Refine notebook edge rendering (thinner curves, tidier arrowheads, subtler connection points) (William Casarin)
- **notebook**: Refine notebook edge rendering (thinner lines, tidier arrowheads) (William Casarin)
- **notebook**: Resize notebook nodes from any edge or corner, including height (William Casarin)
- **notebook, notebook_cli**: Notebook node references are now URI-native (notebook:word-id) (William Casarin)
- **notebook, notebook_cli**: notebook CLI `show` now lists the whole vault (notes + canvases) and resolves any ref; `--canvas` takes a ref or id with no default (William Casarin)
- **notebook, ui**: Copy/cut/paste context menus now act on the selected text (William Casarin)
- **notedeck**: Internationalized time ago strings (Terry Yiu)
- **notedeck**: Replace GitHub-based auto-updater with Nostr-based release verification (William Casarin)
- **notedeck**: Sync sealed shared-board (SNS) edits off-foreground via the host (William Casarin)
- **ui**: Inline references wrapped in `backticks` now render as chips (William Casarin)
- **ui**: Inline references wrapped in bold/italic now render as chips (William Casarin)
- **ui**: Make buttons larger (William Casarin)
- **ui**: Render inline markdown code without a background box (William Casarin)

### Fixed

- **agentium-core**: Fix agent conversation events (e.g. permission prompts) floating out of order after a resync (William Casarin)
- **agentium-core**: Fix doubled tool name (e.g. "Bash Bash: ...") on remote/legacy Dave tool-call rows (William Casarin)
- **agentium-core**: Fix remote agent session messages sorting out of order on a freshly-synced machine (William Casarin)
- **agentium-core, agentium_cli, dave, notebook, notedeck**: Notebook now reveals long notes from the top instead of scrolling to their middle (William Casarin)
- **agentium-core, agentium_cli, dave, notedeck**: Deleted Dave sessions stay linked and clickable via their agentium: reference (William Casarin)
- **agentium-core, dave**: Auto Accept All no longer silently accepts AskUserQuestion and plan-review prompts; they always ask for a real decision (William Casarin)
- **agentium-core, dave**: Auto-accepted permission edits again start expanded for remote agent sessions (William Casarin)
- **agentium-core, dave**: Fix agent conversation events occasionally misordering within the same second (William Casarin)
- **agentium-core, dave**: Fix agent conversation messages floating out of order after a resync (William Casarin)
- **agentium-core, dave**: Fix agent user messages sorting to the bottom of the conversation (William Casarin)
- **agentium-core, dave**: Fix remote agent session messages sorting out of order on a freshly-synced machine (William Casarin)
- **agentium-core, dave**: Fix remote session status (e.g. NeedsInput) and renames being lost or stale after same-second updates (William Casarin)
- **agentium-core, dave**: Resuming a closed agentic session on another host from its deleted chip now resumes on that host instead of locally (William Casarin)
- **agentium-core, dave**: Show tool output in remotely-observed Dave sessions (William Casarin)
- **agentium-core, dave**: Wrap Dave tool output and keep it in full (truncate only for display / relay size) (William Casarin)
- **agentium_cli**: `agentium spawn --prompt`/`--prompt-file` now reliably delivers the first message even when the host is slow to answer (William Casarin)
- **agentium_cli**: agentium `list` now shows all sessions, not just the first to sync (William Casarin)
- **agentium_cli**: agentium list now reliably shows the full session set on the first read instead of racing the relay sync (William Casarin)
- **agentium_cli**: agentium spawn --wait no longer false-fails on a slow host; the bound is now 30s and tunable via --wait-timeout / $AGENTIUM_SPAWN_WAIT (William Casarin)
- **agentium_cli, enostr, headway_cli, notebook_cli**: Fix a rustls panic that broke wss:// relay connections in the agentium, headway, and notebook CLIs (William Casarin)
- **agentium_cli, headway_cli, nostrdb_relay, notebook_cli, notedeck**: Stop the embedded relay serving private rumors, which made headway commands wait out a 5s timeout every run (William Casarin)
- **chrome**: Android app hanging on splash screen after activity recreation (M)
- **chrome**: Cycle app tabs on macOS with Cmd+Shift+[ / Cmd+Shift+] (William Casarin)
- **chrome**: Fix Cmd+Shift+[ / Cmd+Shift+] tab cycling on macOS (William Casarin)
- **chrome**: Fix Ctrl+Tab app switching getting stuck on macOS (William Casarin)
- **chrome**: Fix Windows CI test failures in notedeck_chrome (William Casarin)
- **chrome**: Fix notedeck_chrome tabs cut off by macOS traffic lights (William Casarin)
- **chrome**: Fix previous app's content bleeding through when switching apps (William Casarin)
- **chrome**: Fix startup crash in debug mode (alltheseas)
- **chrome**: Restore keyboard focus when switching apps with Ctrl+Tab (William Casarin)
- **chrome, columns**: Fix some routing issues when routing from the Chrome (William Casarin)
- **chrome, columns**: Fix welcome screen login button immediately bouncing back (William Casarin)
- **chrome, notedeck**: Fix Android auto-updater not detecting or installing updates (William Casarin)
- **columns**: Fix Android mention selection and mention picker after newlines (kernelkind)
- **columns**: Fix Escape key not closing the media viewer (William Casarin)
- **columns**: Fix NWC copy/paste (William Casarin)
- **columns**: Fix compose note text and focus colliding across columns (William Casarin)
- **columns**: Fix crash if we remove the selected column (William Casarin)
- **columns**: Fix create people list inputs colliding across columns (William Casarin)
- **columns**: Fix default zap amount field stealing focus across columns (William Casarin)
- **columns**: Fix notification dot triggering randomly (William Casarin)
- **columns**: Fix notification sound playing for muted users (William Casarin)
- **columns**: Fix reply line overdrawing into the reply post box (William Casarin)
- **columns**: Fixed continuous search box autofocus (William Casarin)
- **columns**: Fixed localization issues (Terry Yiu)
- **columns**: Internationalize ShowNoteClientOptions labels (Terry Yiu)
- **columns**: Profile timeline now shows new posts after reopening (William Casarin)
- **columns**: disable ctrl-H back-nav when typing (William Casarin)
- **columns, dashboard, dave, enostr, messages, notedeck, testing**: Fix Windows CI test failures from oversized LMDB maps (William Casarin)
- **columns, dave, enostr, notedeck**: Fix perf issue where filters were getting created each frame (William Casarin)
- **columns, dave, notedeck, ui**: Fix missing zap button (William Casarin)
- **dave**: A message sent to a running session with `agentium send` now reaches the account's other devices, not just the session host (William Casarin)
- **dave**: A resumed agentic session's "Connecting…" chip now clears as soon as the session revives instead of lingering until a timeout (William Casarin)
- **dave**: Dave chat text wraps to the column again instead of truncating off the right edge (William Casarin)
- **dave**: Dave no longer drops live conversation events once an account has many sessions (nostrdb subscription cap) (William Casarin)
- **dave**: Dave no longer steals focus away from a session you just opened (William Casarin)
- **dave**: Dave now exports the correct, stable agentium session ref to spawned backends so an in-session agent identifies its own session (William Casarin)
- **dave**: Dave tool-execution summaries wrap to the column instead of being clipped off the right edge in the compact/scene view (William Casarin)
- **dave**: Don't auto-switch dave sessions while holding modifier keys (William Casarin)
- **dave**: Fix /clear command to reset the session like the Clear menu button (William Casarin)
- **dave**: Fix Ask button text not centered in Dave input box (William Casarin)
- **dave**: Fix Codex approval handling and permission response persistence issues (kernelkind)
- **dave**: Fix Ctrl+G external editor not updating input on Linux (William Casarin)
- **dave**: Fix Dave's question prompt escaping the column on mobile, making Submit unclickable (William Casarin)
- **dave**: Fix agent permission prompts floating out of order after restarting mid-sync (William Casarin)
- **dave**: Fix approve/deny reply message rendering twice on remote Dave sessions (William Casarin)
- **dave**: Fix auto-accepted permissions briefly triggering NeedsInput focus steal (William Casarin)
- **dave**: Fix being unable to create remote agentic sessions from thin clients (e.g. Android) (William Casarin)
- **dave**: Fix chat content overflow in Dave UI (kernelkind)
- **dave**: Fix clicking an agentium session chip in a Dave user message not opening the session (William Casarin)
- **dave**: Fix clone/clear session losing model override and permission deny being ignored (William Casarin)
- **dave**: Fix codex agent messages displaying as one paragraph with no line breaks (kernelkind)
- **dave**: Fix compact-and-proceed race condition in Dave sessions (William Casarin)
- **dave**: Fix conditional permission approval silently dropping user conditions on injection failure (kernelkind)
- **dave**: Fix context bar accuracy for Claude by including cache tokens (kernelkind)
- **dave**: Fix git status color codes showing raw ANSI escapes on macOS (kernelkind)
- **dave**: Fix infinite "computing..." state by adding timeouts to backend awaits (kernelkind)
- **dave**: Fix input textbox not scrolling when text overflows (kernelkind)
- **dave**: Fix long git branch names breaking the Dave status line layout (William Casarin)
- **dave**: Fix permission request events appearing out of order during mobile sync (William Casarin)
- **dave**: Fix remote agentic sessions freezing when a private relay is unreachable (William Casarin)
- **dave**: Fix resumed sessions losing their identity and replaying history after restart (William Casarin)
- **dave**: Fix severe slowdown rendering messages with many agentium reference chips (William Casarin)
- **dave**: Fix slow rendering of messages with many inline agentium session chips (William Casarin)
- **dave**: Fix table content truncation in Dave chat (kernelkind)
- **dave**: Fix table header backgrounds in Dave chat (William Casarin)
- **dave**: Fix text not vertically centered in Stop/Ask buttons (William Casarin)
- **dave**: Fix text overflow in Dave chat messages (kernelkind)
- **dave**: Keep deleted Dave sessions resolvable so an agentium: reference can still reopen them (William Casarin)
- **dave**: Persist renames of remote agent sessions across restart (William Casarin)
- **dave**: Preserve a session's resume id and custom title when it is deleted, so it can be revived and resumed later (William Casarin)
- **dave**: Render a user message injected into a running remote session on other observers watching it (William Casarin)
- **dave**: Show last-activity timestamp for remote agent sessions (William Casarin)
- **dave**: Show remote agentic sessions on remote-only devices (William Casarin)
- **dave**: Stop briefly showing already-deleted agent sessions while syncing (William Casarin)
- **dave**: Stop timing out Dave sessions that are waiting on user input (William Casarin)
- **dave**: dave: fix remote session messages syncing out of order, floating the permission prompt to the top (William Casarin)
- **dave**: dave: order live-streamed remote messages by sequence within each poll (William Casarin)
- **dave**: dave: rebuild a remote session's chat in order when live events arrive out of sequence (William Casarin)
- **dave, headway, ui**: Inline reference chips now wrap to their own line instead of folding or truncating mid-paragraph (William Casarin)
- **dave, messages, ui**: Fix context menus in dave and messages being too thin to tap (William Casarin)
- **dave, notedeck**: Fix panics when truncating strings containing emoji or non-ASCII characters (William Casarin)
- **dave, testing**: Retry the account's private-note history backfill after a transient relay failure instead of stranding history until the next resync (William Casarin)
- **dave, ui**: Make the focus-queue "next" button easier to tap on narrow layouts (William Casarin)
- **dave, ui**: Render inline reference chips inside markdown table cells (William Casarin)
- **enostr**: Fix agentic sessions briefly appearing then vanishing during initial sync (William Casarin)
- **enostr**: Fix dedicated routing and relay reconnect status semantics (kernelkind)
- **enostr**: Fix delayed transparent startup subscriptions on websocket open (kernelkind)
- **enostr**: Fix multicast broadcast queue retrying failed sends every frame (kernelkind)
- **enostr**: Fix outbox keepalive reconnect and pong-timeout behavior (kernelkind)
- **enostr**: Fix stale relay connections after sleep/resume (kernelkind)
- **enostr**: Fix the Android build failing to link (William Casarin)
- **enostr**: Fix unreachable relay test failing on Windows (William Casarin)
- **enostr**: Improve outbox recovery backoff behavior (kernelkind)
- **enostr**: Keep compaction since cursors from leaking into dedicated routes (kernelkind)
- **enostr**: Preserve pending outbox relay effects across bounded receive passes (kernelkind)
- **enostr**: Preserve relay reconnect timing and compaction (kernelkind)
- **enostr**: Preserve routing priority when reclaiming compaction capacity (kernelkind)
- **enostr**: Restrict outbox since optimization to compaction routes (kernelkind)
- **enostr, messages, notedeck**: stabilize messages E2E restart and high-volume relay behavior (kernelkind)
- **enostr, messages, testing**: clarify pong timeout API docs and make local note seeding kind-aware (kernelkind)
- **enostr, notedeck**: Fix background thread leaks in MediaCache, multicast poller, and JobPool (kernelkind)
- **general**: Fix text selection being offset on notebook text nodes in edit mode (William Casarin)
- **general**: Fixed Windows installer (alltheseas)
- **general**: Fixed export_source_strings.py to adjust for tr! and tr_plural! macro signature changes (Terry Yiu)
- **general**: isolate the heavyweight notedeck_messages messages_e2e suite into its own serialized CI step. (kernelkind)
- **headway**: Editing a shared board you own via a Dave/AI tool now seals into its channel and sees co-members' cards, instead of leaking a plaintext rumor (William Casarin)
- **headway**: Fix Escape closing the headway card detail sheet instead of opening the side menu (William Casarin)
- **headway**: Fix Headway "Add card" button being pushed off the bottom of the column (William Casarin)
- **headway**: Fix Headway back navigation after opening a card's subissue (William Casarin)
- **headway**: Fix Headway dropping board edits made in quick succession (William Casarin)
- **headway**: Fix a shared board rendering nothing when a plaintext board definition was written over its sealed one (William Casarin)
- **headway**: Fix browser ref parsing in headway comments (William Casarin)
- **headway**: Fix headway card labels squashing into vertical text when too many to fit (William Casarin)
- **headway**: Fix inline headway card chips not opening when clicked (William Casarin)
- **headway**: Fix subissue drag-reorder snapping cards to the top instead of the drop position (William Casarin)
- **headway**: Fix the Headway add-card button being cut off at the bottom of a scrolled column (William Casarin)
- **headway**: Fix the Headway card drop target not covering the whole column (William Casarin)
- **headway**: Headway board edits made via the headway CLI now sync to your other devices over your private relays (William Casarin)
- **headway**: Headway cards moved on another device no longer stay missing until an app restart (William Casarin)
- **headway**: Headway moves/deletes made in the same second a card was placed now take effect reliably (William Casarin)
- **headway**: Headway no longer gets stuck on "Loading shared board…" with no way to switch boards (William Casarin)
- **headway**: Headway shows co-members' cards on a shared board you own, and joined boards whose slug collides with your own are now reachable (William Casarin)
- **headway**: Inline headway card references now resolve to the board a card was moved to, not its original board (William Casarin)
- **headway**: Inline headway card references update in realtime while Headway is open (William Casarin)
- **headway**: Inline headway issue references now reflect edits (renames, labels, descriptions) instead of the card's original text (William Casarin)
- **headway**: Inline headway issue/board cards in the notebook now render left-aligned instead of centered (William Casarin)
- **headway**: Keep focus in the headway board filter field while typing (William Casarin)
- **headway**: Keep headway card comments in the order they were posted (William Casarin)
- **headway**: Live-update the Headway card detail view when a card is edited elsewhere (William Casarin)
- **headway**: Make Headway inline card creation easier — Enter adds the card, the field auto-focuses, and the composer stays open for rapid entry (William Casarin)
- **headway**: Make headway column drop targets fill the whole lane (William Casarin)
- **headway**: One-click copy of a card's word-id in the Headway detail sheet (was only copyable via a context menu) (William Casarin)
- **headway**: Seal Headway AI-assistant edits to shared boards instead of leaking plaintext (William Casarin)
- **headway**: Stop accidentally creating a stray board titled "Headway" (William Casarin)
- **headway**: Stop animating manually dragged Headway cards (William Casarin)
- **headway**: Sub-issue and parent links in the card detail no longer draw a stray border box (William Casarin)
- **headway, headway_cli**: Fix a shared board disappearing, or losing cards, when it has more than one channel (William Casarin)
- **headway, headway_cli**: Fix headway CLI edits to a shared board being invisible in the app (William Casarin)
- **headway, headway_cli**: Fix non-owner members being unable to edit shared boards (William Casarin)
- **headway, headway_cli**: Fix the headway CLI treating shared boards as private because it never synced their key-shares (William Casarin)
- **headway, headway_cli**: Stop headway CLI from re-flushing superseded card metadata (dependencies, ordering, relations) to the relay on every run (William Casarin)
- **headway, notebook, notedeck**: Headway and notebook now actually sync across devices when a relay is marked private (the previous release only published, never pulled) (William Casarin)
- **headway_cli**: Fix `headway label <card> -l a,b` clearing a card's labels instead of setting them (William Casarin)
- **headway_cli**: Fix headway CLI aborting on "replaced: have newer event" from replaceable-event relays like strfry (William Casarin)
- **headway_cli**: Fix the headway CLI leaking plaintext for, and failing to sync, SNS-sealed shared boards (William Casarin)
- **headway_cli**: Stop headway CLI from re-flushing superseded board edits to the relay on every run (William Casarin)
- **headway_cli**: headway CLI could seal the wrong board when `migrate` was run without naming a board (William Casarin)
- **headway_cli**: headway CLI no longer hangs against relays without NIP-77; it falls back to a NIP-01 sync (William Casarin)
- **headway_cli**: headway CLI now flushes edits made offline up to the app once a relay is reachable (William Casarin)
- **headway_cli**: headway CLI now works offline against its local cache when no relay is reachable (William Casarin)
- **headway_cli**: headway CLI word-id is now visibly muted in terminals (like urxvt) that don't support the ANSI dim attribute (William Casarin)
- **headway_cli**: headway CLI: `block`/`relate` no-ops and refused cycles no longer report the generic "unknown card or column?" error (William Casarin)
- **headway_cli, notebook_cli, relay_sync**: headway/notebook CLIs no longer panic on a broken pipe (e.g. `headway show | head`) (William Casarin)
- **horizon**: Horizon calendar is now usable on narrow/phone screens (William Casarin)
- **horizon**: Horizon's toolbar no longer overflows on phone screens (William Casarin)
- **horizon**: The active Day/Week/Month tab in Horizon no longer draws a stray border box (William Casarin)
- **messages**: Avoid per-participant DM relay-list prefetch subscriptions in Messages (kernelkind)
- **messages**: drop pre-recovery devices before expanded-visibility startup convergence checks (kernelkind)
- **messages**: harden Messages E2E convergence by waiting for full expected state while senders continue flushing (kernelkind)
- **messages**: harden Messages relay prefetch restart E2E readiness (kernelkind)
- **messages**: reduce high-volume mesh E2E flakiness by adding periodic convergence checks (kernelkind)
- **messages**: stabilize Messages E2E coverage for relay visibility and giftwrap dedupe (kernelkind)
- **messages, notedeck**: Fix intermittent message delivery failures in E2E tests (kernelkind)
- **messages, notedeck**: Fix missed DM messages caused by giftwrap since filter (kernelkind)
- **messages, notedeck**: join Messages background workers during teardown (kernelkind)
- **nostrdb_relay**: Embedded relay now streams all live subscription matches, not just the first (William Casarin)
- **nostrverse**: Fix blank scene when resetting nostrverse room (William Casarin)
- **notebook**: Notebook canvas edits made via the notebook CLI now sync to your other devices over your private relays (William Casarin)
- **notebook**: Notebook edges can now be drawn from a node on hover, without first selecting it (William Casarin)
- **notebook**: Notebook edges now anchor to the visible edge of nodes whose content overflows their height (William Casarin)
- **notebook**: Notebook edges now stay anchored to a node while editing its text (William Casarin)
- **notebook**: Notebook edges now stay anchored to the sides facing each connected node (William Casarin)
- **notebook**: Resize notebook nodes shorter vertically, down to their content (William Casarin)
- **notebook, ui**: Clickable task-list checkboxes in notebook text nodes (William Casarin)
- **notebook_cli**: notebook_cli: `-h` no longer collides with height; use `--height` (William Casarin)
- **notedeck**: Don't include the multicast placeholder relay in copied nevent links (William Casarin)
- **notedeck**: Fix --no-keystore flag setting wrong value (kernelkind)
- **notedeck**: Fix a cleared private (NIP-37) relay being resurrected by a stale replaceable-list re-delivery (William Casarin)
- **notedeck**: Fix fullscreen images loading at thumbnail resolution (kernelkind)
- **notedeck**: Fix messages not loading reliably (kernelkind)
- **notedeck**: Fix notes not updating until UI interaction (kernelkind)
- **notedeck**: Fix zap verification p-tag spoofing on note zaps (William Casarin)
- **notedeck**: headway/notebook CLI edits again sync to your other devices when a board/canvas reference is on screen in another app (William Casarin)
- **notedeck**: lower Windows test-runner NDB mapsize to reduce DbOpenFailed errors in messages E2E (kernelkind)
- **notedeck**: reduce Linux and Windows messages E2E mmap pressure and enforce app-first shutdown (kernelkind)
- **notedeck**: reduce Windows Messages E2E NDB footprint for test runs (kernelkind)
- **release**: Fix platform detection for deb, rpm, exe, msi, and dmg release artifacts (William Casarin)
- **release**: Include prereleases when defaulting to latest GitHub release (William Casarin)
- **renderbud, ui**: Fix snapshot tests crashing on headless CI environments (William Casarin)
- **ui**: Bold and linked text in notes no longer render with extra spaces around them (William Casarin)
- **ui**: Fix another wrapping issue (William Casarin)
- **ui**: Fix context menu items being too small to tap on Android (William Casarin)
- **ui**: Fix copy/cut acting on the whole note instead of the selection when right-clicking the vault editor (William Casarin)
- **ui**: Fix right-clicking the vault editor visibly clearing the text selection (William Casarin)
- **ui**: Fix snapshot tests crashing on headless CI environments (William Casarin)
- **ui**: Fix text wrapping glitches (William Casarin)
- **ui**: Fixed wrapping issues in Notes & Replies timeslines (William Casarin)
- **ui**: Inline references wrapped in both bold and backticks now render as chips (William Casarin)
- **wasm**: Fix macOS build failure caused by missing linker symbol (William Casarin)


### Removed

- **general**: Removed unused strings from translation files (Terry Yiu)

