Security
Remote control architecture
The desktop release is available now. Phone remote control is marked Soon: this page records its intended trust model without claiming that the pairing flow ships in 0.1.0.
Soon · The relay forwards bytes it cannot read
The planned phone experience is not a companion app with a subset of features. It is the same interface, reached through a relay whose job is to carry bytes from one end of a channel to the other.
What makes that claim checkable rather than reassuring is what the relay is built out of. It links no crypto library. It parses nothing but a channel id. There is no code in it that could decrypt your work, because there is no code in it that does cryptography at all, and none that inspects a payload, because it never looks past the identifier that tells it which socket to write to.
A relay that could read your work but promises not to is a policy. A relay with no ability to read your work is a property of the program. The second one survives a change of ownership, a subpoena, and a bad week.
Soon · Pairing is a QR code and six symbols
Pairing will show a QR code on one screen and six symbols on both. You will check that they match. That is the whole ceremony.
Six symbols compared directly are not security theatre; they are the part that a QR code alone cannot do. Scanning a code proves that a device saw a screen. Comparing a short phrase on both screens proves that the two devices agree about which channel they are on — and that is the thing an attacker in the middle would have to break, and cannot, without one of the two screens showing something different from the other.
What is verified before anything is written
- Integrity
- The download is checked against a checksum manifest signed by Laser's pinned maintainer key.
- Provenance
- GitHub's signed build provenance is verified offline, so what arrives is what the release workflow built.
- Order
- All checks run before the installer writes anything that stays.
- Privilege
- The default native package asks for the normal administrator password once. --format appimage is the no-root option.
- Interruption
- An interrupted install rolls back rather than leaving a half-state.
- Removal
- --uninstall removes what the installer created, and asks about anything you made.
The command itself downloads the script to a file and then runs it, rather than piping it into a shell. That is deliberate, and it exists so that you can read the thing before it runs. See the install page for the sequence in full.
What this page does not claim
Laser runs coding agents against the projects on your machine, with your permissions. It is not a sandbox and does not pretend to be one. An agent that can edit your repository can edit your repository; what Laser adds is that you can see it happening and stop it from either screen.
Nothing here is an audit, and nothing here should be read as one. These are statements about how the program is built, written so that they are specific enough to be wrong — which is the only kind of security claim worth printing.