Skip to content

Devices & Fleet

A device is a single managed endpoint running the Lander agent. The fleet is every device that has checked in. This page covers how a device comes to exist in the control plane and what you can see about it.

When Lander first runs serve on a host, it:

  1. Probes the machine’s hardware identity — on macOS, the serial number via ioreg and model via sysctl hw.model. If hardware probing fails, it persists a random UUID and uses the hostname as the model.
  2. Ensures a device key pair and certificate exist under ~/.lander/certs/.
  3. Authenticates the user. Enrollment is authenticated, and Lander drives this itself: running in the user’s GUI session, it opens a browser to the Connector’s sign-in page and waits for them to authenticate and approve. Until somebody does, there is nothing to attribute the device to, so it stays unenrolled and keeps serving the local proxy.
  4. Registers with the control plane at POST /v1/devices/register, sending the serial, brand, model, and certificate, signed with the device key and carrying the authenticated user’s bearer token.
  5. Receives a server-assigned deviceId and persists registration state to ~/.lander/device.json.

Registration requires both proofs, and neither substitutes for the other: the certificate signature proves which device is calling, and the bearer token proves which human it belongs to. The control plane takes ownership from the token’s subject, so a device cannot enroll as somebody else by asserting their email address.

Registration is idempotent — if the device is already registered with the same certificate and owner, Lander skips the network call. See the Lander install guide for what the user sees, and Authentication for how the prompt behaves unattended on an MDM-managed fleet.

Each device record includes:

FieldDescription
deviceIdServer-assigned UUID
serialNumberHardware serial (or a persisted fallback UUID)
brand / modele.g. Apple / Mac16,8
ownerEmailPerson the device is associated with — resolved from the authenticated user at registration, not self-asserted by the endpoint
certificateFingerprintSHA-256 of the device certificate
statusonline, offline, or error
versionLander version reported on check-in
agentTypesAI agents discovered on the device
MCP countsHow many MCP servers are configured / enabled
lastReportedAtLast successful check-in

Administrators browse devices through GET /admin/devices, drill into one with GET /admin/devices/:id, and review change history and the last inventory snapshot via GET /admin/devices/:id/history and GET /admin/devices/:id/inventory.

The control plane aggregates devices into fleet-wide views:

  • Fleet metrics (GET /admin/fleet/metrics) — totals and health across the fleet: device counts by status, agent counts, MCP adoption.
  • Fleet graph (GET /admin/fleet/graph) — a network graph of agents, devices, and MCP servers and the connections between them, rendered on the dashboard so you can see which agents reach which MCPs across the fleet.
flowchart LR
  subgraph Fleet
    D1["Device A"]
    D2["Device B"]
    D3["Device C"]
  end
  D1 --> AG1["Claude Code"]
  D2 --> AG1
  D2 --> AG2["Gemini CLI"]
  D3 --> AG2
  AG1 --> MCP1["github MCP"]
  AG1 --> MCP2["filesystem MCP"]
  AG2 --> MCP1

The graph makes it obvious, for example, that a sensitive MCP server is reachable from more agents and devices than you expected — a starting point for tightening mirroring and policy.

After registration, Lander pushes an inventory snapshot and then keeps it current by watching the agents’ config files (via fsnotify, debounced) with a periodic poll as a backstop. Any change — a new MCP added to Claude Code, an agent removed — triggers a fresh inventory push so the fleet view reflects reality within seconds. The mechanics are covered in AI agents.

Next: the agent types Alien Giraffe discovers — AI agents.