devdesk (0.8.2) bookworm; urgency=medium * Click file paths in the terminal (#21): a path Claude prints (web/src/files.js, ./notes.md:12, /root/code/x/y.py:3) is a link when it is a file of the session; it opens in Files, at that line if given. * Alerts: "In a new session" (#18) opens (or reuses) alert- in the default folder and types the investigation prompt there once Claude is up, without sending it. * Ops trail and guard (#27): - devdesk-guard, a PreToolUse hook for Bash, makes Claude ask before commands that destroy things (pct/qm destroy, zfs/zpool destroy, Ceph pool/OSD removal, rbd rm, wipefs/mkfs/dd to /dev, rm -r of / or a top-level folder, git push --force, DROP TABLE, stopping devdesk-tmux, reboot/poweroff…), also in auto mode. It never blocks or allows on its own. DEVDESK_GUARD=0 turns it off; /etc/devdesk/guard.local adds rules (regexreason). - Every Bash command is logged per session (last 500); sessions are tagged with the hosts they work on (ssh targets, CT/VM ids), shown in the session list, the switcher and the palette; Peek lists the last commands. * Sessions pick up the new hooks when Claude next starts (/exit, then ⏎). -- Jared Vititoe Sat, 10 Oct 2026 20:36:32 -0400 devdesk (0.8.1) bookworm; urgency=medium * Answer sessions from the πŸ”” inbox without switching to them: - Allow / Deny (#22): a PermissionRequest hook records what Claude wants to run (tool, command/file/URL, Claude's description); the inbox shows it with Allow, Deny and Open. The key is pressed in that session's Claude window only if the same wait is still on and the permission prompt is on screen, so a stale button never types into Claude. - Peek & reply (#23): the last thing you asked and Claude's latest answer (from the session's transcript), and a reply box; the reply is pasted as one bracketed paste and sent. Available for sessions that wait for input and from "finished" entries. - Matrix "needs you" messages include the command. * New attach commands: --answer SESSION SINCE allow|deny, --peek SESSION, --reply SESSION BYTES (text streamed like uploads). * Sessions pick up the new PermissionRequest hook when Claude next starts (/exit, then ⏎). -- Jared Vititoe Sat, 10 Oct 2026 20:22:37 -0400 devdesk (0.8.0) bookworm; urgency=medium * Edit and save files in the Files pane (#20): - Text files open editable; ● marks unsaved tabs; Ctrl+S or Save writes through `devdesk attach --fs-write`: a temp file in the same folder, mode and owner kept, swapped in with mv. - Conflict detection: the save carries the sha256 of the version you opened; if Claude (or anyone) changed the file since, nothing is written and you choose Compare (diff of disk vs yours), Overwrite or Cancel. - A file that changes on disk while you edit it shows a banner (Compare, Reload, Keep mine) instead of replacing your text; clean files still reload in place. - Unsaved edits are mirrored to the browser as drafts (flushed when the page closes), so a reload, a crash or a session switch doesn't lose them; a draft for a file that changed since offers Compare/Restore/ Discard. - Closing a tab with unsaved changes asks Save / Don't save / Cancel; leaving the page warns. - οΌ‹ New file (missing folders are created; never outside the session folder, and never through a symlink out of it). - Markdown previews show unsaved Source edits. Latin-1 files stay read-only. -- Jared Vititoe Sat, 10 Oct 2026 20:09:49 -0400 devdesk (0.7.3) bookworm; urgency=medium * Fix (#38): links that mean "go to that session" no longer re-create one that was ended. The πŸ”” inbox, the session switcher, palette switches, the "needs you" chip and Matrix links (now ?arg=NAME&existing=1) open sessions existing-only; an ended one shows "NAME has ended" with an explicit "Start NAME again". Inbox entries for ended sessions are marked as such, and entries older than 7 days are dropped. -- Jared Vititoe Sat, 10 Oct 2026 19:57:52 -0400 devdesk (0.7.2) bookworm; urgency=medium * Fix: Go to file failed in big non-git folders such as /root/code: the file walk was cut off at its cap with SIGPIPE, which failed the command and truncated its reply. Producers piped into a cap now tolerate it (also for very large folders and git status). Outside git, Go to file skips build/cache folders and stops at 10,000 files. * Large side-channel replies no longer cost quadratic time in the browser. -- Jared Vititoe Thu, 08 Oct 2026 01:50:50 -0400 devdesk (0.7.1) bookworm; urgency=medium * Files pane reworked like VS Code (#37): - Explorer tree beside the editor: folders expand in place (also with the keyboard: arrows, Enter), the open file is highlighted and can be revealed, git colours on names, change dots on folders, gitignored entries dimmed, file-type badges. A drag handle sizes the explorer. - Tabs: a click opens a preview tab (italic) that the next click replaces; double-click or Enter keeps it. Switching tabs is instant and keeps the scroll position. Files Claude changes reload in place. - Go to file (Ctrl+P in the pane, the βŒ• button, the palette): fuzzy search over git ls-files, or a capped find outside git. - Explorer and Changes are two views of the left column; diffs open as tabs. - Expanded folders, open tabs and the active tab are remembered per session; an empty editor offers recent files and the change count. - Narrow panes and phones: the explorer slides over the editor. -- Jared Vititoe Thu, 08 Oct 2026 01:40:47 -0400 devdesk (0.7.0) bookworm; urgency=medium * Files pane (#19): a Files button (Ctrl+Shift+E) next to Panels opens the session's folder beside the terminal (a drag-resizable split on wide screens, an overlay on narrow ones and phones). - Browse folders; read files with syntax highlighting (CodeMirror, read-only, Ctrl+F search, line wrap toggle), markdown rendered as a sanitized preview with its relative images, images shown inline. - Changes tab: uncommitted git changes with line counts and a "C" badge on files Claude edited (recorded by the state hook from Edit/Write); diff against HEAD for any changed file. Non-git sessions list the files Claude edited there. - "β†’ Claude" types @path into the prompt; Copy path. - After Claude's turn the list refreshes, and an open file that changed on disk offers a reload. - Paths stay inside the session folder (no absolute paths, no symlink escapes). Read-only for now; editing is v0.8.0. - The editor (~600 KB) is not in the page: it ships in /usr/share/devdesk/assets, is fetched over ttyd the first time Files opens, checked against the page's SHA-256 and cached in the browser. * Fix: the state hook mis-read hook fields when Claude's message was empty. -- Jared Vititoe Thu, 08 Oct 2026 01:16:26 -0400 devdesk (0.6.1) bookworm; urgency=medium * Inbox bell (#36): sessions waiting on you, firing alerts, and what happened while you were away (a background session finished or started waiting, CI passed or failed). Click to jump there; shared by all tabs. Replaces the count on the Panels button. * Phone header: theme in the β‹― menu, Panels as an icon, so the bell fits. -- Jared Vititoe Thu, 08 Oct 2026 00:50:56 -0400 devdesk (0.6.0) bookworm; urgency=medium * Light mode, like the other web_template apps (#31): the β˜€/◐ button in the header, shared lt_theme preference (OS setting until you choose), applied before first paint and synced across tabs. The terminal has a light palette; Claude runs with its dark-ansi theme so its colours come from that palette, and the light palette maps bright white to ink, so Claude's text, scrollback included, stays readable in both modes. tmux and the statusLine use ANSI colours so they follow the theme too. Sessions pick up Claude's theme the next time Claude starts in them. * Command palette (#32): βŒ• button or Ctrl+Shift+P. Switch, create, rename and end sessions, Claude/Shell window, scroll back, detach, theme, panels, text size, fullscreen, notifications, copy link, open the repo / PRs / CI run, show alerts, keyboard help. * Dialogs instead of browser prompt/confirm for rename, end and new session (name check inline, project folder picker), and a keyboard shortcuts sheet in the β‹― menu, the palette and the footer (#33). * Toasts for results: created, renamed, ended, uploads, link copied, CI finished, errors (#34). * Fix: renames, ends and new sessions often reported "no response" although they worked; ttyd dropped the reply of commands that exit right after printing. Replies now wait for the browser to hang up (#35). * Fix: the Sessions panel showed stale names right after a rename or end. -- Jared Vititoe Thu, 08 Oct 2026 00:32:11 -0400 devdesk (0.5.1) bookworm; urgency=medium * A session created by opening its URL shows up in the Sessions panel and the switcher right away instead of at the next poll. -- Jared Vititoe Wed, 07 Oct 2026 23:42:01 -0400 devdesk (0.5.0) bookworm; urgency=medium * Security (from the 2026-10-07 review): - ttyd :7681 is firewalled to NPM in CT 126 and its credential was rotated (#1). - "Ask Claude" strips control characters from Grafana text and pastes it as bracketed paste, so alert text can never run a command (#2). - OSC 52 clipboard is write-only: terminal output can no longer read the browser clipboard; tmux allow-passthrough is off (#7). - Gitea/Grafana tokens reach curl on stdin, never on its command line; remote URLs lose any userinfo (#11). * Fixes: - Ending the session you are in no longer leaves a ghost entry (#3). - Reconnecting after a drop never re-creates a session that was ended or renamed meanwhile (`attach --existing`) (#4). - Repo panel uses git --no-optional-locks and drops the safe.directory override (#5); uploads get unique names and are cleaned up on hangup (#6); uploads are size-checked first and streamed in slices with an idle timeout (#9); paths with tabs no longer break the session list (#10). - ttyd allows 32 clients; side-channel calls run two at a time and one tab polls for all open tabs (#8). * Header: the SSO chip is gone ("Sign in again" appears only when the session expires); the session chip shows Claude's state as a dot and opens a session switcher; LIVE is a dot; text size, notifications (with mute) and fullscreen move into a β‹― menu; the Panels button shows a badge for waiting sessions and alerts (#13, #16). * A bare URL reattaches your last session instead of opening the picker (#16). * Notifications when *other* sessions start waiting, and alerts are polled with the panels closed (#15). * Sidebar: the Claude Context panel is folded into a context bar in each session row; Repo/CI collapses for non-git folders and offers "Ask Claude to fix CI"; the new-session form hides behind "+ New"; more legible labels (#17). * Phone: key bar (Esc, Tab, ⇧Tab, ^C, arrows, ⏎, Claude/Shell), drawer with backdrop, layout that follows the on-screen keyboard, DOM renderer on touch devices, no clock in the tmux status line (#14). * Matrix "Claude needs you": a wait that lasts 30 s with nobody attached posts one message with a link to the Devdesk hookshot webhook (#28). -- Jared Vititoe Wed, 07 Oct 2026 23:34:48 -0400 devdesk (0.4.0) bookworm; urgency=medium * Session status at a glance: Claude hooks record whether each session is working, waiting on you (with Claude's message) or idle. The sidebar shows it with context %, the header shows the current session's state, and a pulsing "needs you" chip jumps to sessions waiting for input. * File & image drop: drag files onto the terminal or paste a screenshot. They're uploaded through ttyd to /var/lib/devdesk/uploads// (25 MB max, pruned after 7 days) and the path is pasted into Claude, which attaches images itself. * Ops Alerts panel is live: firing/pending Grafana alert rules with severity, instances, summary and a link, plus an "Ask Claude" button that types an investigation prompt into the current session. -- Jared Vititoe Wed, 07 Oct 2026 19:24:15 -0400 devdesk (0.3.1) bookworm; urgency=medium * Auto-deploy: tagged releases trigger CT 126's webhook listener (house HMAC pattern), which runs /usr/lib/devdesk/devdesk-deploy to upgrade the package from the apt registry. Running sessions are untouched. -- Jared Vititoe Wed, 07 Oct 2026 13:20:58 -0400 devdesk (0.3.0) bookworm; urgency=medium * Repo / CI panel is live: branch, ahead/behind, uncommitted changes, the Gitea CI status of HEAD (linked to the run) and open PRs for the current session's folder, via `devdesk attach --repo` over the ttyd channel. No sidecar needed; public repos need no token (optional /etc/devdesk/gitea-token for private ones). A notification fires when CI for HEAD finishes while the tab is in the background. * Remote Control verified with resume (same claude.ai session link). * Local settings now go in /etc/devdesk/env.local (read after the packaged env, never shipped), so upgrades no longer stop at a conffile prompt. -- Jared Vititoe Wed, 07 Oct 2026 12:57:04 -0400 devdesk (0.2.1) bookworm; urgency=medium * Session hook and status line only record for panes on DevDesk's own tmux server (Claude run with these settings elsewhere no longer writes into DevDesk's state). * The Claude wrapper re-reads /etc/devdesk/env before every Claude launch, so Remote Control and CLAUDE_ARGS changes apply on the next restart. -- Jared Vititoe Wed, 07 Oct 2026 12:54:06 -0400 devdesk (0.2.0) bookworm; urgency=medium * Sessions no longer need a project folder: any name works and starts in DEVDESK_DEFAULT_DIR unless it matches a project; new NAME [PROJECT]. * Rename and end sessions from the Sessions panel (and devdesk rename). Renames keep the running Claude and its recorded conversation. * Claude Context panel is live: a statusLine command snapshots model, context-window use, cost and edits per session; Claude's footer shows a one-line summary. * Drop GANDALF from the Ops Alerts panel. * CI: bash shell, download retries, Node 22 test invocation, build-essential, smoke-test pipe fix. -- Jared Vititoe Wed, 07 Oct 2026 03:01:21 -0400 devdesk (0.1.0) bookworm; urgency=medium * Initial release: persistent browser terminal for Claude Code (ttyd + tmux) with LotusGuild TDS styling, multiple named sessions, per-session conversation resume and Debian packaging. -- Jared Vititoe Tue, 06 Oct 2026 22:58:26 -0400