Skip to main content
An overview of how the Lager platform components fit together — from CLI commands on your laptop to instruments connected to your DUT.

High-Level Overview

All three entry points — developer CLI commands, developer custom scripts, and CI runners — share the same execution infrastructure. They all reach the Lagerbox through Tailscale VPN and hit Flask on port 5000, which executes the uploaded script or impl module inside the Docker container with full access to lager.* hardware libraries.

Terminology


Lagerbox Internals

Port Summary


Optional Control Plane Integration

Lager boxes expose an authenticated SSH-key-sync endpoint (POST /authorize-key on port 9000) that an external control plane can use to provision access without a human typing SSH commands. If /etc/lager/control_plane.json is present with an authorize_token, requests carrying that token as a Bearer token can add public keys to /etc/lager/authorized_keys.d/, which the box’s startup script and systemd path unit merge into ~/.ssh/authorized_keys. Lager itself does not require or run a control plane — this is a hook, not a dependency. Leaving control_plane.json absent simply disables the endpoint. Commercial control planes that build on this hook — for fleets that need org/RBAC/SSO, audit logging, and scheduling on top of Lager — are listed on the Professional Services directory.

Net Abstraction

A Net is the central abstraction that decouples CLI commands from physical hardware details.

Supported Net Types


Execution Flows

CLI Command Execution

Step-by-step data path for lager supply psu1 voltage 3.3 --yes:

Custom Script Execution (lager python)

The lager python command uploads a user-written Python script to the box for execution. It uses the same Flask :5000 execution path as CLI commands.
The script runs inside the Docker container with full access to lager.* hardware libraries, and output is streamed back in real time.

Physical Wiring

How instruments physically connect between the Lagerbox and the DUT:

Connection Types


GitHub Actions CI Integration

A CI runner is an ephemeral GitHub Actions VM that joins Tailscale and runs lager commands exactly like a developer would — no special CI-specific infrastructure is needed.

Required GitHub Secrets

Workflow Example