A Camera on Another Mac
Sooner or later a camera Pippa should be able to look through is plugged into a different Mac. The tempting design is a second Oriel on that machine: its own engine, its own store, its own eyes gate, its own page. That design gives the house two gates to keep in step, two places where "closed" might mean different things, and two records of who looked. Dad's framing (2026-11-02) was the opposite: Pippa looks through that camera the way she looks through the cameras at home, with one engine and one eyes gate. Macs are parts, like cameras (backend/satellites.py).
What a Satellite Is, and Is Not
A satellite is another Mac with two things on it:
- its own signed OrielRecorder, still the only process there that opens a camera, under that Mac's own Camera grant;
- an agent (
backend/satellite_agent.py) that relays between that recorder and the engine.
It has no engine, no store, no gate and no page. Every decision stays on the engine's Mac. The engine keeps a channel folder per satellite, laid out like the home recorder's, and a RecorderLink with the same gate writes it. One object, RecorderLinks, puts the home link and every satellite's behind a single face and sends each want, peek and move to the link of the Mac its device lives on. The consequence is the important part: a satellite camera is closed by default, opened only by an approval that names it, and parked when that approval closes, the way Manual treats a camera at home. The eyes modes never open it: a satellite's unique ID carries its Mac's name, so the gate counts it as outside home hardware and keeps it Manual in every mode. That one prefix is all the gate had to learn about satellites.
The Agent Dials Out. Nothing Listens There.
The agent opens no port. It long-polls the engine's HTTPS twin for the desired state, writes its recorder's desired.json with the engine's folder mapped to its own, posts the recorder's status.json once a second, and hands back each peek and move result. That is the same file channel from track two, stretched across a network with the direction fixed: the satellite asks, the engine answers.
The agent proves who it is with a bearer token minted on the engine's Mac. The engine keeps only its SHA-256, so a copy of the engine's config holds no usable token; the satellite keeps the token itself in a file readable only by its own account. A leaked config therefore cannot impersonate a satellite, and a stolen satellite token can be revoked by minting a new one.
Fail Closed Across a Network
A network adds a failure the home Mac never had: the engine can close the gate while the satellite cannot hear it. The agent's answer is to treat silence as a closed gate. When the engine has not answered for 15 seconds, the agent empties its recorder's desired state, so a gate that closes while the network is down leaves nothing open. Two more rules narrow what can leave the satellite at all:
- The agent drops any recording from what it relays. Satellites do looks and moves, not recordings, for now. A session that names a satellite camera is refused with that reason: its files would live on that Mac's disk, and nothing indexes them yet.
- Virtual cameras (screen-sharing or streaming software's fake devices) never leave the satellite. A real USB camera's unique ID is a USB location; a virtual camera's is a UUID, and the agent forwards only the first kind.
An ID That Says Where
Track two taught that a camera's unique ID is a place on a USB bus. Across Macs, the same place exists on every machine, so a satellite's IDs carry its name: <name>/<local unique ID>. The engine adds the prefix to everything the agent reports and strips it from what the agent fetches. Because of it, a camera on another Mac is never mistaken for an absent home camera of the same model, and a port move there is recognized by the serial number the agent read from its own Mac's device registry.
One small habit from the first install is worth copying. After the Camera grant was given to the recorder, Dad checked the privacy list on that Mac for anything else holding the camera (a media converter, a terminal, the ssh daemon). An outbound agent and a single gate mean little if some other process on the satellite can open the device on its own.