feat: DevDesk v0.1.0, a persistent browser terminal for Claude Code
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>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
.TH DEVDESK 1 "October 2026" "devdesk" "User Commands"
|
||||
.SH NAME
|
||||
devdesk \- persistent Claude Code sessions in tmux, shared by the browser and SSH
|
||||
.SH SYNOPSIS
|
||||
.B devdesk attach
|
||||
.RI [ NAME ]
|
||||
.br
|
||||
.B devdesk new
|
||||
.I NAME
|
||||
.br
|
||||
.B devdesk ls
|
||||
.br
|
||||
.B devdesk pick
|
||||
.br
|
||||
.B devdesk end
|
||||
.I NAME
|
||||
.SH DESCRIPTION
|
||||
.B devdesk
|
||||
manages the named sessions served at https://dev.lotusguild.org. Each session is
|
||||
a tmux session on the DevDesk server (\fI/run/devdesk/tmux.sock\fR, run by
|
||||
\fBdevdesk-tmux.service\fR) with a \fIclaude\fR window and a \fIshell\fR window,
|
||||
rooted in a project directory under \fBDEVDESK_PROJECTS_ROOT\fR.
|
||||
.PP
|
||||
Claude's conversation ID is recorded per session, so after a reboot the session
|
||||
resumes its own conversation.
|
||||
.SH COMMANDS
|
||||
.TP
|
||||
.B attach \fR[\fINAME\fR]
|
||||
Attach to session \fINAME\fR, creating it if needed. The default session
|
||||
(\fBmain\fR) uses the projects root; other names map to the project directory of
|
||||
that name or slug (\(lqtest code\(rq becomes \fBtest-code\fR). Without \fINAME\fR,
|
||||
opens the picker.
|
||||
.TP
|
||||
.B attach --list
|
||||
Print sessions and projects as JSON (used by the web UI).
|
||||
.TP
|
||||
.B new \fINAME\fR
|
||||
Create session \fINAME\fR detached, if it does not exist.
|
||||
.TP
|
||||
.B ls
|
||||
List running (\(bu) and dormant (\(ci) sessions.
|
||||
.TP
|
||||
.B pick
|
||||
Interactive picker (fzf).
|
||||
.TP
|
||||
.B end \fINAME\fR
|
||||
Stop the session and forget its recorded conversation.
|
||||
.SH FILES
|
||||
.TP
|
||||
.I /etc/devdesk/env
|
||||
Port, projects root, Claude binary and arguments, Remote Control switch.
|
||||
.TP
|
||||
.I /etc/devdesk/secret.env
|
||||
ttyd credential; the reverse proxy must send it as HTTP basic auth.
|
||||
.TP
|
||||
.I /var/lib/devdesk/registry.json
|
||||
Session to directory and Claude session ID mapping.
|
||||
.SH SEE ALSO
|
||||
.BR tmux (1),
|
||||
.BR claude (1)
|
||||
Reference in New Issue
Block a user