Holdwire · SSH That Never Drops

What runs on your server

Holdwire by Jiji Labs · PT JIJI LABS DIGITAL · facts for helper version 0.4.0

The short version:

  • One small program, holdwired, in ~/.holdwire in your home folder. Nothing else is installed.
  • It runs as your own user. No root, no sudo, no service.
  • It opens no port. It listens on a local socket that only you can use.
  • It makes no outbound network connection, unless you turn on agent alerts in the app.
  • You can remove it with three commands. Its source will be published under FSL-1.1-ALv2, a source-available licence (see below).

What holdwired is

holdwired is the session keeper behind Holdwire. Your shell runs inside it, so the shell keeps running when your iPhone sleeps, loses signal or closes the app. It remembers the most recent output (up to 1 MB per session, in memory) and replays what you missed when the app reconnects over your normal SSH login. It is one static program for Linux, macOS and Windows (Intel and ARM builds). The first time you connect, the app offers to copy it to your server over that SSH login; you can turn this off per server with “Keep sessions alive”.

How it runs

Where it keeps files

Only under ~/.holdwire (Windows: %USERPROFILE%\.holdwire):

PathWhat it is
bin/holdwiredthe program itself
run/<session>.sock, .lock, .jsonfor each live session: a socket, a lock, and a small JSON file (session id, process id, start time)
alerts.jsononly if you turn on agent alerts: the relay address, a route id and secret, the encryption key and your alert preferences (mode 0600)

If your home path is very long, the run folder moves to $TMPDIR/holdwire-<uid> (mode 0700). Session output is held in memory only; the helper never writes it to disk. Your shell keeps its own history file as usual.

Network

What it does not do

Who can reach a session

WhoCan they reach it?
Another user on the same machineNo. The run folder and socket are private to you and checked to be owned by you.
Someone on the networkNo. There is no network listener. They would first need your SSH login.
Root on the machineYes, as always. Holdwire does not defend against the machine’s own administrator.
Anyone holding your SSH credentialsYes. They could start a shell anyway, so protect your keys.
A malicious program running as youYes. It could connect to your socket. That is the same trust boundary as your own shell.

When sessions end

A session ends when its shell exits, when you stop it, when the server restarts, or after 30 days with no client attached. Output kept for resuming lives in memory until the session ends.

Remove it completely

Linux and macOS:

~/.holdwire/bin/holdwired list
~/.holdwire/bin/holdwired kill --session ID
rm -rf ~/.holdwire

Run list to see sessions still running, kill once for each of them, then delete the folder. Windows (PowerShell):

.\.holdwire\bin\holdwired.exe list
.\.holdwire\bin\holdwired.exe kill --session ID
Remove-Item -Recurse -Force $env:USERPROFILE\.holdwire

Run these from your home folder. Nothing else on the machine was changed, so there is nothing more to undo. If you edited an agent’s settings through a Holdwire alert hook, remove that hook first with holdwired remove-hook.

Licence and source

The helper is licensed under the Functional Source License 1.1 with an Apache 2.0 future licence (FSL-1.1-ALv2), copyright PT JIJI LABS DIGITAL. That is a source-available licence, not an open-source one at first: you may use, modify and redistribute it for any purpose except offering a competing product or service, and each version becomes plain Apache-2.0 two years after it is released. The Holdwire app itself is not under this licence. Its dependencies and their notices ship with the source.

Source repository: coming with the 1.0 release. There is no public link yet.

SHA-256 of the helper builds

These are the hashes of helper 0.4.0 built from the current source. Build it yourself with helper/build.sh once the repository is public and compare. We have not verified that every machine and Go version produces identical bytes, so a mismatch on another setup does not by itself mean something is wrong. Signed releases are not available yet.

These are the SHA-256 hashes of helper version 0.4.0, built from source with helper/build.sh (Go, -trimpath, no cgo).

FileSHA-256
holdwired-darwin-amd64981ef753e03098ed2b8a8ef0945c6b9ed21161b462b423b9a0d007c7c695f689
holdwired-darwin-arm6451ec216e58083baf59a774564b4760247960b29d2a8d3ed75faa8340fce61e2f
holdwired-linux-amd643d5e3cd740d353aacd0e8b206a4abad9c1557a54e5b9b2d5972fe2353d0fbcbd
holdwired-linux-arm64ad15577bbcea4d322e8ddf97f4f40cc4b82c32a6148e78d672eda48b48031f26
holdwired-windows-amd64.exe7adf25d0bbb749b409aefe4fdec913681e8ca44394ac806942883565fa6cf4b0
holdwired-windows-arm64.exec01c3f4aeff69ddc76f34cf80e9fc5434df469d153ef91fc2d94ed21a1d36d33

Questions

Write to support@jijilabsdigital.com.