Skip to content

Releases: jackgillette006/serverjack

v1.6.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 02:57

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 | bash

Existing 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.js is 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

Choose a tag to compare

@github-actions github-actions released this 16 Sep 14:25

serverjack 1.5.0: find any folder by typing part of its name.

curl -fsSL https://jackgillette.com/serverjack/install.sh | bash

Existing 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 and node_modules-style directories are skipped; SERVERJACK_DIR_DEPTH caps 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_DIR in 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-failure never 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

Choose a tag to compare

@github-actions github-actions released this 15 Sep 17:05

serverjack 1.4.0 is the first release with a one-command install.

curl -fsSL https://jackgillette.com/serverjack/install.sh | bash

Project 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.sh from this release, which verifies the archive checksum (the digest is embedded in the bootstrap itself, and cross-checked against SHA256SUMS) before unpacking under ~/.local/share/serverjack/releases/<version>/ with a current symlink. Read either script first if you prefer: curl -fsSLO it, less it, bash it.
  • Guided setup (bin/serverjack-setup): finds missing packages and offers one install command; installs or signs in to Tailscale, or skips tailscale serve for 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=off to opt out; your own -t theme= in TTYD_EXTRA_ARGS still 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

Choose a tag to compare

@jackgillette006 jackgillette006 released this 14 Sep 17:59

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

Choose a tag to compare

@jackgillette006 jackgillette006 released this 14 Sep 13:07

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

Choose a tag to compare

@jackgillette006 jackgillette006 released this 14 Sep 03:06

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
    becomes shell-3d-lab, sudo apt install ffmpeg becomes apt (or
    apt-src run 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

Choose a tag to compare

@jackgillette006 jackgillette006 released this 13 Sep 06:23

Added

  • bin/serverjack --version and bin/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 --version reports 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 lint job 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_DIRS defaults 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

Choose a tag to compare

@jackgillette006 jackgillette006 released this 13 Sep 05:21

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.sh

Requirements: 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_ARGS allowlist, symlink-safe socket handling.
  • Idempotent install.sh and a conservative uninstall.sh that only removes tailscale serve mappings 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.