.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 .RI [ PROJECT ] .br .B devdesk rename .I OLD NEW .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. Names matching a project folder (or its slug: \(lqtest code\(rq becomes \fBtest-code\fR) start there; any other name starts in \fBDEVDESK_DEFAULT_DIR\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 [\fIPROJECT\fR] Create session \fINAME\fR detached, in \fIPROJECT\fR's folder if given, otherwise in the folder its name maps to (a project of that name, or \fBDEVDESK_DEFAULT_DIR\fR). .TP .B rename \fIOLD NEW\fR Rename a running or dormant session; Claude keeps running and its recorded conversation moves with it. .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)