Capture / Install lwis on your machine
Install lwis on your machine
lwis is a single binary: the command line and the daemon that delivers captures into your agent sessions. Releases are published for Linux x86_64.
Run the installer
curl -fsSL https://lookwhatisee.xyz/install.sh | sh
The script downloads the release for your machine and refuses to install unless every check passes:
- Signature. The binary's minisign signature must verify with the release key embedded in the script. It uses
minisignif installed, otherwise OpenSSL 3 (openssl). With neither, it stops. - Release key in DNS. The embedded key must equal the key published in the TXT record
_lwis-release.lookwhatisee.xyz, read over DNS-over-HTTPS from two independent resolvers (Cloudflare and Google) that must agree. A compromised web server alone can't swap the key. - Checksum. When the TXT record
_latest._lwis-release.lookwhatisee.xyznames the same version, the binary's SHA-256 must match it too.
It then installs lwis into ~/.local/bin (set LWIS_BIN_DIR to choose another directory) and tells you if that directory isn't on your PATH.
Offline or air-gapped?
LWIS_INSTALL_SKIP_DNS=1skips the DNS check. The script then prints a warning, and you must compare the printed key with the one in Verifying releases yourself.
Start the daemon
The daemon is lwis up. Run it as a service so it keeps running across logins:
lwis install-service --enable
On Linux this writes a systemd user unit, ~/.config/systemd/user/lwisd.service, then runs systemctl --user daemon-reload and systemctl --user enable --now lwisd. Without --enable it only writes the unit and prints the command to enable it. On macOS it writes a launchd agent instead.
To run it by hand instead:
lwis up # in the foreground
lwis up --idle-exit 60 # exit after an hour with nothing attached or pending
lwis down # stop it
lwis pair, lwis setup claude and a few other commands start the daemon in the background if it isn't running. The Claude Code hooks and MCP servers never start it: with the daemon down, they only say so. A daemon started in the background logs to ~/.local/state/lwis/lwisd.log.
Update
lwis self-update --check # only say whether an update is available
lwis self-update # download, verify and replace this binary
self-update verifies the download with the release key built into your installed binary, never with a key the server hands out. It also checks that key against DNS through the same two resolvers, refuses anything older than your version, and checks the SHA-256 from DNS when it names the same version. The previous binary is kept as lwis.old next to the new one.
If the daemon was running, self-update stops it: start it again with systemctl --user restart lwisd or lwis up. Other flags: --force reinstalls the current version (it never downgrades), and --skip-dns skips the DNS check when you're offline.
Root shells, containers and remote machines
In a root shell, a container or on a server you reach over SSH, see Remote machines and containers: the runtime directory, keeping the daemon running after you log out, and pairing a machine with no screen.
Where lwis keeps things
| What | Where |
|---|---|
| Configuration, keys, pairings | ~/.config/lwis (mode 0700; LWIS_CONFIG_DIR overrides) |
| Optional defaults | ~/.config/lwis/config.json |
| Hosted agent profiles | ~/.config/lwis/agents/*.toml |
| Audit log | ~/.config/lwis/audit.jsonl (lwis log) |
| Socket | $XDG_RUNTIME_DIR/lwis/lwisd.sock |
Check the installation
lwis doctor
It checks the directories, the socket, the service, the pairings, the browsers, and how captures reach each session. Next: 201 · Pair your agent.