- Settings (⋯ → Settings…, palette): theme, terminal text size, interface
size, notifications, Remote Control & privacy. The ⋯ menu shrinks.
- Remote Control per session: registry choice > Settings default >
DEVDESK_REMOTE_CONTROL. Switching an idle session restarts its Claude
on the same conversation; busy sessions change at the next start.
rc_active comes from the running process; RC tag on sessions.
- --delete-convo: remove a conversation's local transcript and subagent
files; refused while in use. Delete… in Search past conversations.
Closes#61
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WHRLCCdXYm41Qx5kNhehaP
- Ops Alerts → Ask Claude now calls `devdesk attach --investigate SESSION UID`.
The server looks the alert up, writes the prompt and starts Claude in a new
alert-<name> session with it as the first prompt, already sent. Prompts are
stored in prompts/<session>.txt and consumed once by devdesk-claude-run.
A session that is already running is just opened.
- The prompt has the rule, query, summary, details and labels, and where it
runs: the CT/VM id, the node it is on now, status and HA state, and
`ssh <node> pct exec <id> --`. It reminds Claude that HA guests move
(`devdesk guests <id>`), and gives aggregate rules a hint.
- `devdesk guests`: Proxmox inventory over SSH (DEVDESK_PVE_NODES). pvesh
gives the cluster view; each node gives lxc-info and guest-agent IPs.
Cached in guests.json, keeping last-seen IPs for stopped guests; --alerts
refreshes it in the background every 5 minutes.
- Alerts carry uid, query, description and targets, matched by instance
IP/host or by name; each card shows the target.
- cmd_alerts moves to libexec/devdesk-ops.sh.
Closes#39
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- run_resume falls back to a new conversation only when the transcript file
is gone; other failures end at the menu with the recorded id intact.
- The SessionStart hook resolves the session name under the registry lock;
rename holds it across tmux rename-session and the registry move
(dd_registry_locked, nestable).
- dd_load_env parses KEY=value like systemd instead of sourcing the files.
- devdesk-deploy: DPkg::Lock::Timeout, explicit FAILED lines on stdout and in
the log; the hook answers synchronously and CI checks the HTTP status.
logrotate for the deploy log.
- postinst drops duplicate terminal-features entries; hooks sweep stale
temp files.
Closes#12
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- devdesk attach --search (grep + jq over ~/.claude/projects, six files at
a time) and --resume-convo NAME ID [fork]; devdesk-claude-run passes
--fork-session once. Search dialog with Resume / Fork / Open.
- statusLine snapshots rate_limits and pr; footer/menu meters with a 90 %
warning; PR chip on session rows.
- CLAUDE_CLIENT_PRESENCE_FILE per tmux session id; --presence on|off with a
self-expiring marker; the page heartbeats it while visible.
Closes#24Closes#25Closes#26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- `devdesk attach --repo NAME` / `devdesk repo NAME`: git state of the session's
folder (branch, ahead/behind, uncommitted changes) plus the Gitea commit
status of HEAD and open PR count. Uses the anonymous API for public repos,
or /etc/devdesk/gitea-token when present. Runs over the ttyd channel, so no
sidecar is needed. The panel links to the repo, the CI run and PRs, and a
notification fires when HEAD's CI finishes while the tab is in the background.
- /etc/devdesk/env.local is read after the packaged env and never shipped, so
upgrades no longer stop at a conffile prompt.
- Hooks and status line only record for panes on DevDesk's own tmux server; the
Claude wrapper re-reads env before every launch (so the Remote Control toggle
applies on the next Claude restart).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Sessions no longer need a project folder: any name works and starts in
DEVDESK_DEFAULT_DIR unless it matches a project; `devdesk new NAME [PROJECT]`.
- Rename (✎) and end/forget (×) sessions from the Sessions panel, plus
`devdesk rename`. The browser runs them as `devdesk attach --new|--rename|--end`
through ttyd. Renames keep the running Claude and its recorded conversation:
the hook, the run-wrapper and the statusline ask tmux for the current name.
- Claude Context panel is live: devdesk-statusline snapshots model,
context-window use, cost and edits per session, which --list reports;
Claude's footer gets a one-line summary. The panel now sits under Sessions.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ttyd serves a single-file xterm.js UI styled with the LotusGuild TDS
(web_template base.css). Sessions live in a dedicated tmux server unit
(devdesk-tmux.service), so restarting or upgrading the web unit never
stops Claude. Each named session maps to a project directory. A Claude
SessionStart hook records the conversation ID, so after a reboot the
session resumes that exact conversation.
- bin/devdesk: attach / new / ls / end / pick, with an fzf picker
- ttyd requires a credential that NPM injects; origin check enabled
- debian/: dh 13 with --no-stop-on-upgrade for the tmux unit, bundled
sha256-verified ttyd 1.7.7, lintian overrides, man page
- CI: lint, test, build, smoke-test, artifact; v* tags publish to the
Gitea apt registry and create a release
Refs: tinker ticket 887531976
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>