Repository navigation
Releases
prot v0.2.1
prot 0.2.1
A small release: shell tab completion, a multiline command field in the desktop app, and a fix for the Arch packages. There
are no daemon or API changes, and nothing to migrate.
Tab completion
prot now completes in bash, zsh and fish. prot completion <shell> prints the script, which asks prot itself for
suggestions, so the three shells agree.
- Commands, subcommands and options complete.
- The daemon supplies service and tunnel aliases, discovered process ids, and the machines in
~/.ssh/config. Each
lookup waits at most 1.5 seconds and stays silent when the daemon is down. - The
.deb,.rpmand AURprotpackages install the scripts where the shells read them on their own, and the release
archive carries them. The curl installer writes them to your user directories for the shells it finds. Two shells need
a step of their own (bash without thebash-completionpackage, zsh without the directory onfpath), described in the
installation guide.
Desktop app
- The Command field of the New Server and Edit Server sheets is a multiline text area. Lines wrap at the edge, the
box is as tall as its text (never fewer than three lines) and has no drag handle. Enter adds a line and Ctrl or Cmd +
Enter creates or saves. The daemon already runs commands throughsh -c, so each line runs in turn. A server card shows
the first line with a mark for the lines that follow.
Arch Linux
yay -S protno longer compiles the desktop app. The three packages used to share one PKGBUILD, and makepkg runs the
build once for all of them, so installing the CLI built the Tauri app and pulled in Rust, Node and WebKit.protdand
protare now their own AUR package, built from Go alone, andprot-desktopis a separate package that builds only
when you install it. The package names and what they contain are unchanged.- The previous AUR package,
0.2.0-1, installs the desktop app together with everything else and was built before the
completions existed.0.2.1-1replaces it.
Other
- A GitHub release is now marked as the latest release and not a pre-release when the workflow finishes. Until now
prot updateand the install script could not find the newest version unless that was changed by hand. - Documentation: a roadmap for local HTTPS and public
exposure. Both are proposals and neither is implemented. - Website: social preview image and page metadata, install buttons for each platform, and a short install URL
(curl -fsSL https://prot.adityagupta.dev/install | bash, which is the same script as before).
prot v0.2.0
prot 0.2.0
0.2.0 adds SSH tunnels, which is the biggest thing since 0.1.0, makes the MCP server and the supervisor more trustworthy,
and gives prot a website. It is mostly additive, but there are a few behaviour changes you should read before upgrading.
SSH tunnels
Reach a port on another machine at a stable name, the same way you reach a local server:
prot tunnel add proxmox --host root@192.168.0.109 --remote-port 8006 --auto-connect
# http://proxmox.localhost:8080 now reaches port 8006 on that machine- Real OpenSSH. prot runs your system's
ssh, reconnects when the link drops, and only reports a tunnel as
connected once the forwarded port actually answers. Tunnels are restored whenprotdstarts and stopped when it exits. - Machines from
~/.ssh/config.--hostaccepts a name from your SSH config (prot ssh lslists them), and the desktop
app offers them in a dropdown with their user, port and key prefilled. Change nothing and the tunnel keeps following
your config. - Passwords and key passphrases are kept in the OS keyring (Secret Service on Linux, Keychain on macOS), never in
prot's database, logs or a command line. Add one with--passwordor--password-stdin, change or clear it with
prot tunnel password. prot refuses to store a password at all if there is no keyring. - Edit in place.
prot tunnel edit, the settings button on a tunnel card andPATCH /v1/tunnels/{id}change a tunnel
without recreating it. A connected tunnel reconnects with the new settings; a stopped one stays stopped. Renaming moves
its.localhostaddress. - Desktop app. A Tunnels tab to create, edit, start, stop and delete tunnels, with the reason shown when one cannot
connect (host key not trusted, wrong password and so on). prot never accepts an unknown host key for you. - Agents. The MCP server gains
list_tunnels,start_tunnelandstop_tunnel. Creating or editing a tunnel and
touching a password are deliberately not available to agents: that would let one open an SSH connection to an
arbitrary host.
See docs/tunnels.md for setup (keys, host keys) and
troubleshooting.
Desktop app
- Removing a server or a tunnel now asks "Remove this ...?" inline, with Cancel and Delete. It never times out, and
Escape cancels. - The New Tunnel sheet has SSH user and port fields next to the host.
MCP server
prot mcpis now a thin bridge to the runningprotdinstead of a second supervisor of its own. An agent sees the
same services, logs and process state as the CLI and the desktop app, and processes it starts keep running when the agent
disconnects.protdmust be running (systemctl --user start protd); otherwise the bridge says so clearly.- Every tool that targets a service takes
id_or_alias,set_aliasrenames a real service, stopping an already
stopped service succeeds, and notifications no longer get a reply.
Reliability and security
- Supervisor rewritten around a per-run completion channel, fixing races around restarts and stops. Crash restarts
back off exponentially and a run that lasts 10 seconds resets the backoff. prot updateverifies downloads againstchecksums.txt, caps download sizes, stages both binaries before replacing
either, and refuses to run at all on installs managed by a package manager (it points you at pacman, apt or dnf).- Management API: removed an unused empty-token bypass; tests now cover that it fails closed.
- Followed logs (
prot logs -f) are delivered exactly once; the gateway no longer reserves/v1/and/mcppaths that
belong to your apps; start, stop and restart of an unknown service return 404. - The database now has versioned migrations and trims its event log. Upgrading migrates it automatically (to schema
version 3); there is no way back to 0.1.0 with the same data directory.
Website
prot has a landing page, at the project's GitHub Pages address, built from real captures of the app and real CLI output.
Changes to be aware of
- Windows is not a target. It was never released; the leftovers are gone, and the support matrix lists Linux and macOS.
set_alias(MCP) no longer acceptstarget_url. It renames a service's alias.protdhonoursPROT_DATA_DIR, like the CLI always did.- If
protdis killed with SIGKILL it can leavessh -N -Lprocesses behind; a normal stop cleans up. This is
documented in the tunnels guide.
Install or upgrade
curl -fsSL https://raw.githubusercontent.com/terastal-hq/prot/main/scripts/install.sh | bash # or: prot update
yay -S prot prot-desktop # Arch
systemctl --user restart protdv0.1.0
Changelog
- bb4ca6a build: AUR packaging for protd, prot and prot-desktop
- edc52a5 build: drop Windows from GoReleaser (supervisor is Unix-only for now)
- efc812e build: generate all app icons from design/icon.png and register desktop entry
- 2628209 ci: add automated version bumping workflow and cross-project semver synchronization
- 9eb8470 ci: use go.mod Go version and publish AUR packages on release
- 5ef23d1 feat(cli): add --auto-start to prot add
- 9589da7 feat(desktop): add discovery search, move settings to header gear key
- 09bffc7 feat(desktop): apply prot design system with portrait bottom-nav layout
- e43907e feat(desktop): cap window size and document floating rules
- 58fa142 feat(desktop): custom title bar (decorations off) with minimize and close
- 7bc7896 feat(desktop): make content text selectable
- ea496af feat(updater): refuse self-update when a package manager owns the binary
- 8b0badd feat: complete M1 core daemon, REST API, native MCP server, and Tauri 2 desktop app
- c75a951 feat: complete end-to-end packaging, one-line curl installer, Tauri sidecar bundling, and release CI
- 3c68849 feat: edit server settings from the GUI (PATCH /v1/services/{id} accepts all fields)
- 842b074 feat: implement native 'prot update' self-updater and in-place upgrade mechanism
- fb59d5d feat: initial repository scaffold and M0 engineering foundation
- e099d6a feat: prominent service URL with in-place alias editing (PATCH /v1/services/{id})
- f00a992 feat: query cached discovery from daemon in 'prot discover' to avoid internal port noise
- 5fa51f0 fix(cli): decode daemon health into typed struct to prevent scientific notation formatting for PID
- 806b7bd fix(desktop): embed release assets, add CORS headers, auto-connect auth token, and verify Niri/Wayland
- 62ff2c6 fix(desktop): remove mascot art from the app UI, keep it for branding only
- 07c8c68 fix(desktop): stop MCP code block from shrinking or scrolling in small windows
- 9fc168c fix: ensure install script always builds and installs optimized release binary for prot-desktop
- 4d8ecf5 refactor: apply Go code style conventions, fix slice initializations, and prevent process/goroutine leaks
- 2409c96 style(desktop): Doom meets Office 2000 design system v2
- 21592ff style(desktop): add bottom padding so card actions clear the bevel
- 1344fb8 style(desktop): compact list rows for the Found tab
- b1d8a5d style(desktop): de-emphasise the gateway port in service URLs
- 2a94255 style(desktop): drop bevel border from the Found list
- 842af12 style(desktop): hide number input spinners
- bea62db style(desktop): merge title bar into the app header
- 73afe1e style(desktop): no underline on the gateway port
- 695601c style(desktop): remove orange line under header
- 948dab4 style(desktop): themed dropdown and checkboxes, alias field in the edit sheet
- fd8818b style(desktop): use JetBrains Mono throughout instead of stylized fonts
- b54dd64 style(desktop): use retro two-gear icon for settings key
- 0a6f050 style: Improve readme