devlisted
Install: claude install-skill asiraky/omniplex
# Running the dev server
## Never in the main checkout
The main checkout is probably running the live server that hosts the session
you are in. Starting or restarting a server there takes the user's session down
with it.
A worktree is identified by `.omniplex/worktree.env` — its own ports and its own
database. If that file is missing, you are in the main checkout: stop and say so.
`scripts/dev-link` refuses on its own, so prefer running it over `npm run dev`.
## Start it and share it
```sh
scripts/dev-link
```
Starts the server if it is not already up (idempotent — safe to run again to
re-read the link), waits for it to answer, and prints:
```
open http://omni.tailb9bafe.ts.net:8800
pair http://omni.tailb9bafe.ts.net:8800/pair#c=NLNKWRWAJEZV43WE
code NLNK-WRWA-JEZV-43WE
log .omniplex/dev.log
```
Give the user all three lines. Reasoning:
- **open** is the tailnet address off the startup banner, which is the only one
that works from the phone. Never hand over `127.0.0.1` or a `10.x`/`172.x`
address: the first is not their machine, the second is unencrypted.
- **pair** carries the code in the URL fragment, so one tap gets them in.
- **code** is the fallback for typing it in by hand.
Pairing is per origin, and the port is part of the origin — so a device paired
against production, or against another worktree, is not paired against this one.
It only has to be done once per worktree; the device token survives restarts in
`.omniplex/dev.db`.
The c