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:

  1. The CLI authenticates with your team API key or OAuth token
  2. The backend registers the machine and returns a unique machine ID
  3. The ID is cached in ~/.spectral/machine.json

Machine Fields (from GET /api/machines)

FieldDescription
idUnique machine identifier
nameDisplay name (hostname by default)
hostnameSystem hostname
versionSpectral CLI version
onlinetrue when the CLI WebSocket is connected
lastSeenAtISO timestamp of last activity
pidOS 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
  • lastSeenAt timestamp 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

VisibilityWho can see and connect
PRIVATEOnly the machine owner
SHAREDAll 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 Desktop
    arturs-mac-studio.local
    Artur Czemiel
  • Home Laptop
    arturs-mbp.local
    Artur 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

WhatPer-Machine?
ProjectsYes (local SQLite)
SessionsYes
Messages & tool callsYes (stored locally only)
Machine identityYes
Team API keyShared across all machines in the team

Next Steps