Repository navigation
Releases: jackgillette006/serverjack
Release list
v1.6.0
serverjack 1.6.0: a full review of the UI on phones and desktops, with everything it found fixed.
curl -fsSL https://jackgillette.com/serverjack/install.sh | bashExisting managed installs: run serverjack-ctl update, or use the Update row on the page. Git checkouts: git pull --ff-only && bash install.sh. Project page: https://jackgillette.com/serverjack/
The landing page, the terminal page and what tmux and ttyd are handed were driven in Chromium, Firefox and WebKit at phone, tablet and desktop sizes. That found 127 confirmed glitches and usability problems, and all are fixed, most with a browser test that fails on 1.5.0. The test suite grew from 298 to about 1,090 checks.
Highlights
- Agent servers. A Remote Control or OpenCode server started from its card no longer reads "exited". Pressing Start again (or a restart with start at boot) used to kill and replace the running server; now it says "already running". Servers are found by serverjack's own marks, so two projects with the same folder name each get one, and a renamed server stays on its card.
- The terminal page reconnects by itself after a serverjack or ttyd restart, including the Update row, instead of sitting on "Press ⏎ to Reconnect". A session that ends never drops you silently into another one. Back after switching tabs no longer leaves the terminal on a different session than the highlighted tab.
- Phone keys that work. Paste and Copy respond to a tap on iOS. Swiping the key row scrolls it instead of sending the key under your finger. Holding an arrow repeats it without closing the keyboard. Ctrl works with punctuation and dictation. Typing after a scroll goes to the program, not to tmux's copy mode.
- Starting sessions. In the folder picker, a typed name picks the matching folder instead of creating an empty one. New folders come only from + New folder or a typed path. Forms keep what you typed through an error. Shortcuts can be edited.
- The landing page leads with Sessions when anything is running. It updates in place, and its menus fit the screen. It respects iOS Larger Text and Windows High Contrast, and touch targets are 44 px.
- Terminal and tmux. tmux's status line, hidden while a page has a session open, comes back when the last page leaves (1.5.0 hid it for SSH clients for good). The palette is readable, truecolor works, the COLSxROWS pill is gone, and the terminal no longer changes width under a line you are typing.
- Two screens on one session. The screen you are using takes the size back without a keystroke, and a quiet badge shows that the session is open elsewhere.
- Smaller pages. Pages and scripts are gzip-compressed, and
app.jsis cached under its hash.
Upgrading from 1.5.0. Reload any serverjack tab or pop-out left open, and close and reopen the home-screen app. A 1.5.0 page can't reconnect by itself after the update. The CHANGELOG's Upgrading from 1.5.0 list covers the behaviour that changes on purpose: the section order, Enter in the picker, the Ctrl+W prompt, tmux status and padding, and server marks.
Full details in CHANGELOG.md.
Assets: serverjack-1.6.0.tar.gz, serverjack-bootstrap.sh, SHA256SUMS.
v1.5.0
serverjack 1.5.0: find any folder by typing part of its name.
curl -fsSL https://jackgillette.com/serverjack/install.sh | bashExisting managed installs: serverjack-ctl update (or the Update row on the page). Git checkouts: git pull --ff-only && bash install.sh. Project page: https://jackgillette.com/serverjack/
What's new
- Directory search. Every directory picker (Start a session, each agent card, Add a shortcut, the terminal's new-session panel) is one box. Type part of a folder's name and it turns up wherever it is nested under your configured roots, least nested first, exact matches before prefixes before substrings; children of a match stay at the bottom. Arrow keys move, Enter picks, Tab fills the match with a trailing
/and shows its children so you can drill down like shell completion, and a tap fills it on the phone. Any path can still be typed and is created if new. Hidden folders andnode_modules-style directories are skipped;SERVERJACK_DIR_DEPTHcaps the index depth (default 5). - Default base directory, set in the app. "Starts in ~ · change" under the Start card. An empty box means that directory; relative paths resolve against it; the terminal page's new-session panel uses it too.
SERVERJACK_DEFAULT_DIRin the env file is the fallback. - Reliability. The units set
OOMPolicy=continue. Before, a kernel OOM kill of any process in a unit's cgroup (including agents started through serverjack, which share it) cleanly stopped the whole unit, and because that stop counted as success,Restart=on-failurenever brought the page back. Now an OOM-killed agent leaves the page up. - WSL. The guided setup detects WSL and offers port 7690 when 7680 is chosen, because Windows Delivery Optimization already listens on 7680 on the Windows side, so a Windows browser could never reach it; the installer's summary explains it too, and the README has a WSL section.
Full details in CHANGELOG.md.
Assets: serverjack-1.5.0.tar.gz, serverjack-bootstrap.sh, SHA256SUMS.
v1.4.0
serverjack 1.4.0 is the first release with a one-command install.
curl -fsSL https://jackgillette.com/serverjack/install.sh | bashProject page: https://jackgillette.com/serverjack/ (what it is, screenshots, prerequisites, what the guided setup asks).
What's new
- One-command managed install. The launcher above fetches
serverjack-bootstrap.shfrom this release, which verifies the archive checksum (the digest is embedded in the bootstrap itself, and cross-checked againstSHA256SUMS) before unpacking under~/.local/share/serverjack/releases/<version>/with acurrentsymlink. Read either script first if you prefer:curl -fsSLOit,lessit,bashit. - Guided setup (
bin/serverjack-setup): finds missing packages and offers one install command; installs or signs in to Tailscale, or skipstailscale servefor your own proxy; proposes an allow-list from your tailnet identity; asks whether other Linux accounts share the machine; runs the one-time root steps only after showing each command and asking, default no. No terminal to ask on means it prints what is left and stops; every question can be answered up front with flags. serverjack-ctl(~/.local/bin):status,versions,update(with automatic rollback if the new version's services or health check fail),rollback,uninstall(keeps config and tmux sessions),prune,setup(rerun the guided menu: change the allow-list, publish on/off).- Terminal theme: the terminal uses the app's own color palette by default (
SERVERJACK_TERM_THEME=offto opt out; your own-t theme=inTTYD_EXTRA_ARGSstill wins). - Agents installed under a private path (nvm, pnpm) no longer fail with "command not found" when started from the page.
- fzf 0.74.4; CI installs the same pinned ttyd real installs use.
Docs: the README now states what runs as your user, which one-time root steps exist, that an unset allow-list admits anyone who can reach the route on a shared tailnet, what was actually tested, how to update and roll back, and how to migrate an existing git checkout (bash uninstall.sh, then the command above).
Full details in CHANGELOG.md.
Assets: serverjack-1.4.0.tar.gz, serverjack-bootstrap.sh, SHA256SUMS. Existing git-checkout installs keep updating with git pull --ff-only && bash install.sh.
serverjack v1.3.0
serverjack 1.3.0
New mark. The Prompt Jack logo, a terminal chevron next to a J-shaped plug, now appears in the page headers, the terminal's All sessions link, the browser favicon and the iPhone home-screen icon. SVG and PNG share one set of outlines, and refreshed icon URLs replace the artwork browsers had cached.
The README is repositioned around what the project is for, "Jack into your server", with a demo GIF and a five-bullet proof list under the screenshots, and a social preview image so links posted elsewhere show a card instead of a blank.
docs/FAQ.md is new: why not plain ttyd, why not the vendors' own remote control, why Tailscale and not a password, whether it phones home (no), and how to run it without Tailscale.
No behavior change. Same install, same security model, same tests.
serverjack v1.2.1
Fixed
- The first card under "Agent servers" had square top corners: the rounding
rule keyed off the card following the heading directly, and an intro line
now sits between them. The first card of a run is rounded regardless of
what precedes it (same for the Sessions list).
serverjack v1.2.0
Added
- Every way to start a session (the Start a session card, the terminal page's
"+" popover,/start,/new//api/new,/tools/open, and a run shortcut)
now takes an optional name. Left blank, the session is named for its type
and directory instead of a bare kind — a shell in~/projects/3d-lab
becomesshell-3d-lab,sudo apt install ffmpegbecomesapt(or
apt-srcrun from~/src).
Changed
- Landing page: "Run a command" and "New shell" are replaced by one "Start a
session" card at the top — Shell (the default) or any installed agent, a
directory (defaults to~), and an optional command for Shell. Picking an
agent just runs its plain command (claude,codex, ...) in the chosen
directory; there's no remote-control/server-mode choice on this card any
more. The bottom accordion is renamed "Agent servers" and now only lists a
tool that needs installing, logging in, or has a server/daemon/extra action
to offer — a tool that's ready with nothing else to configure (just Gemini
CLI, by default) has no row there any more. Removed the "Open with remote
control" action from Claude Code's and Copilot's cards (an interactive
session now starts from the top instead; Claude's Remote Control server is
unaffected).
Full changelog: https://github.com/jackgillette006/serverjack/blob/main/CHANGELOG.md
serverjack v1.1.0
Added
bin/serverjack --versionandbin/serverjack --check(alias--doctor), a
read-only startup diagnosis: Python, tmux and ttyd versions, runtime and
config directory modes, env-file permissions, Tailscale reachability and
whether the listen target is free.install.sh --versionreports the same
number. The version shows in the page footer and in/api/status.docs/ARCHITECTURE.md: request flow, the security model as implemented, the
WebSocket proxy, tmux integration, the agent registry and the test strategy.tests/test_unit.py: 27 unit tests over the pure functions (form limits,
host validation, allow-list matching, tools.json merge, atomic config
writes), run before the browser suites.- A
lintjob in CI: shellcheck, pyflakes and a Python 3.9 compile check. docs/shots/make.sh: reproducible, neutral README screenshots.
Changed
- Clone anywhere: the quick start no longer suggests a path, and
SERVERJACK_DIRSdefaults to~/projects:~/src:~/code:~. - Fixed the four outstanding shellcheck warnings.
Full changelog: https://github.com/jackgillette006/serverjack/blob/main/CHANGELOG.md
Architecture: https://github.com/jackgillette006/serverjack/blob/main/docs/ARCHITECTURE.md
serverjack v1.0.0
First public release.
serverjack is a web front door to a home server, reached over Tailscale from a phone or a laptop: a landing page that runs a pasted command in a new tmux session, a session list with one-tap attach, a browser terminal (ttyd behind serverjack's own proxy) with a phone soft-key row, and cards that launch and log in to coding-agent CLIs. One Python file, no Node, no sudo.
Install
git clone https://github.com/jackgillette006/serverjack ~/projects/serverjack
bash ~/projects/serverjack/install.shRequirements: Linux, systemd, tmux, Python 3.9+, curl. Tailscale is optional but recommended. Read the README's security model before exposing the service: serverjack has no password of its own, so keep it behind tailscale serve or a reverse proxy that authenticates, never tailscale funnel.
What is in this release
- Landing page, session tabs, tmux window picker, phone soft keys, pop-out windows, PWA install on iOS, CRT effects toggle.
- Agent cards for Claude Code, Codex and others, with login and one-click actions; a JSON registry for adding your own.
- Identity from Tailscale headers (
SERVERJACK_ALLOW), a peer-uid check for other local accounts, a Unix-socket mode for shared machines. - Request-parsing hardening (body limits, strict Content-Length, chunked refused), owner-only config files, a restricted
TTYD_EXTRA_ARGSallowlist, symlink-safe socket handling. - Idempotent
install.shand a conservativeuninstall.shthat only removestailscale servemappings it owns. - Real-browser test suite (Chromium, Firefox, WebKit with iPhone emulation) plus HTTP and wrapper security regressions, run in CI on every push and pull request.
Verified on a clean Debian 13 install. Report vulnerabilities through the private advisory form (see SECURITY.md), not a public issue.