Run
Rewrite the worker pool
spawned by · session 01a0
Work that is happening. Queued, running, paused, done.
Laser is a desktop app for coding agents. It runs them across every project on your machine and draws all of them through one interface. One command installs it. You never open a terminal again. Phone remote control is coming soon.
$curl -fsSLo laser-install.sh https://github.com/youssefsiam38/laser/releases/latest/download/install.sh && sh laser-install.shDownloads to a file first, so you can read it before you run it. Nothing is piped into a shell.
Ordinary light goes everywhere at once. A laser is the same light, in phase.
The problem
In a terminal the only surface is lines of text, so each package draws its own progress bar, its own prompt, its own idea of what "done" looks like. Put five of them in one window and you have five applications wearing a trench coat.
Laser does not pass presentation through. A package declares what it has — one of six kinds of panel — and Laser decides how it looks and where it goes. A package that has never heard of Laser still renders correctly.
Before — five vocabularies
pi-subagents › ▓▓▓░░ 3/5 workers
[tasks] queued=2 running=1 done=8
*** REVIEW READY (y/n) ***
plan.md · step 2 of 6 · ~4m
notify: build finished
After — one
The contract
A package says which of these it has and how urgent it is. Laser owns where it lands, how big it gets, and what it looks like when it needs you. Panels grow and shrink in place — the same element, never a new one popping in.
Rewrite the worker pool
spawned by · session 01a0
Work that is happening. Queued, running, paused, done.
Delete 3 stale branches?
feat/relay-rotate
fix/asar-entry
chore/pin-node
Something is waiting on a person.
Build output
resolved 815 packages
linked 691
built @laser/protocol
built @laser/host
Output as it arrives.
Steps, and which one it is on.
+ const runtime = resolveBundled(app)
- const runtime = which("node")
return spawn(runtime, args)
Something to read, or a diff to approve.
Many of something, countable.
Self-contained
The app carries its own runtime and its own agent. On a machine that has never had Node, npm, or a coding agent on it, the install is still one line.
Not a companion app with a subset of features. The interface you use at your desk, reaching your phone over a relay that forwards bytes and cannot read them.
It links no crypto library and parses nothing but a channel id. Pairing is a QR code and six words you check on both screens.
Colour, type, size, density, corners, contrast, motion. No component holds a literal — the whole interface is tokens you change in Settings, live.
Install
Version 0.1.0 downloads from the public GitHub repository. It verifies the app against a signed checksum manifest and Laser's GitHub build provenance before anything is written. On Ubuntu, Debian, Fedora and related systems it installs the native package, asks for the normal administrator password once, and registers a signed update feed.
$curl -fsSLo laser-install.sh https://github.com/youssefsiam38/laser/releases/latest/download/install.sh && sh laser-install.shDownloads to a file first, so you can read it before you run it. Nothing is piped into a shell.
You need curl and GitHub CLI 2.49 or newer. No GitHub account or sign-in is required. Those tools only fetch and verify the release; Laser itself brings everything it runs on.
Future releases appear in your operating system's normal software updater.--uninstallremoves the package and its update source. Use--format appimagefor a no-root per-user install instead.
Every format
x86-64 and arm64. The AppImage is statically linked, so it does not want libfuse2.
In short
--uninstall removes exactly what it created, and asks before touching anything you made.