Managing Machines
Multiple machines can connect to one Aexol account. Each machine has its own identity, SQLite database, and project/session state.
Machine Identity
When spectral serve runs:
- The CLI authenticates with your team API key or OAuth token
- The backend registers the machine and returns a unique machine ID
- The ID is cached in
~/.spectral/machine.json
Machine Fields (from GET /api/machines)
| Field | Description |
|---|---|
id | Unique machine identifier |
name | Display name (hostname by default) |
hostname | System hostname |
version | Spectral CLI version |
online | true when the CLI WebSocket is connected |
lastSeenAt | ISO timestamp of last activity |
pid | OS process ID of spectral serve (null when offline) |
visibility | "PRIVATE" or "SHARED" |
Naming a Machine
The display name defaults to your system hostname. The backend distinguishes machines by (team, name). Multiple machines with the same name: the most recently registered takes precedence.
Online / Offline
A machine is online when its WebSocket to the relay is established (green indicator in the picker). It goes offline when the process stops or the connection drops.
Offline machines stay in the picker with:
- Grayed-out status
lastSeenAttimestamp showing when they were last active
Browser sessions subscribed to an offline machine stay open and auto-reconnect when it comes back online.
Machine Visibility
| Visibility | Who can see and connect |
|---|---|
PRIVATE | Only the machine owner |
SHARED | All team members |
Machines registered with a team API key default to SHARED. Personal OAuth registrations default to PRIVATE.
Machine Picker
The machine picker in the browser UI lists all machines in your teams:
- Office Desktoparturs-mac-studio.localArtur Czemiel
- Home Laptoparturs-mbp.localArtur Czemiel
- Staging Server(offline)staging-01.internal
Disconnecting a Machine
Delete a machine from the picker to revoke its registration. The backend sets revokedAt and kicks the CLI WebSocket with close code 4001 "machine-revoked", which exits spectral serve.
Machine API
GET /api/machines → list all user's machines (across teams)
DELETE /api/machines/:id → revoke registration (disconnect)
PATCH /api/machines/:id/visibility → set PRIVATE or SHARED
Per-Machine vs Shared
| What | Per-Machine? |
|---|---|
| Projects | Yes (local SQLite) |
| Sessions | Yes |
| Messages & tool calls | Yes (stored locally only) |
| Machine identity | Yes |
| Team API key | Shared across all machines in the team |