Documentation
Build with the Oplut CLI
Oplut is software that runs on existing boards and robot computers. The CLI installs, authenticates, sets up supported surfaces, captures accepted baselines, and checks what changed.
Software shape
API
Stores compact evidence, device identity, setup events, baselines, and checks when the user syncs.
CLI
pipx install oplut runs setup, baseline, check, and local runtime workflows.
SDK
Existing robot code can report component metrics and events without custom Oplut hardware.
Web
Software entry point, dashboard, device approval, billing, and evidence review.
Overview
The user journey is terminal first.
A user signs up, SSHes into their Raspberry Pi or opens a terminal on the board, installs Oplut, authenticates with a browser device code, runs setup, captures a baseline, and checks whether the physical unit still matches the version that worked.
sudo apt install -y pipx
pipx ensurepath
pipx install oplut
oplut auth
oplut setup --goal network-stream --execute
oplut baseline --upload
oplut check --uploadInstall
Install the CLI on the board.
Oplut is installed where setup and local checks need to run: on the Raspberry Pi, Jetson, laptop, or robot computer. The first supported path is Raspberry Pi hardware, while SDK metrics let teams integrate custom stacks.
sudo apt install -y pipx
pipx ensurepath
pipx install oplut
oplut --helpRaspberry Pi OS blocks global pip installs because system Python is externally managed. pipx keeps Oplut isolated and still exposes the oplut command.
Authentication
The device gets approved in the browser.
The CLI creates a short-lived device code, opens the browser approval page, polls until the account approves it, and stores local credentials. Manual API-key auth can remain as a fallback, but the default path is safer for SSH and headless boards.
oplut auth
# open the approval URL
# enter the code shown in your terminalSetup
Setup returns verified commands.
oplut setup detects the board and OS, asks what surface and goal the user wants, calls POST /v1/setup, and executes each returned step with terminal output.
oplut setup --goal network-stream --execute
Board detected: raspberry-pi-4 (bookworm-64bit)
Peripheral: pi-camera-module-2
Goal: network-streamLocal first
The core loop cannot require internet.
Field robots and lab rigs are not always online. Oplut should still detect hardware, capture baselines, run checks, write evidence, and explain drift locally. The dashboard and cloud are review surfaces for synced summaries, not a dependency for knowing whether the unit changed.
oplut baseline
oplut check
oplut diff
# later, when connectivity is useful:
oplut syncBaseline check
Make the accepted state visible.
Setup gets a surface working. Baseline and check make that working state useful later. Oplut stores compact evidence locally first, then optionally syncs summaries to the dashboard for review across devices.
oplut baseline --upload
oplut check --upload
oplut diff
oplut describeFoundation test
The first loop has to be right.
Oplut should not expand from a weak first proof. The foundation is one real hardware stack where setup works, an accepted baseline is captured, a physical change is introduced, the check detects it, and the diagnosis tells the builder what to do next.
oplut setup --goal network-stream --execute
oplut baseline
# introduce a real change:
# stop service, change config, unplug bridge, or alter timing
oplut check
oplut diffCLI commands
The command surface is small but real.
oplut authStart the browser device-code flow and save approved credentials.
oplut logoutRemove local credentials.
oplut doctorShow detected board, OS, peripherals, API base URL, and credential status.
oplut catalogPrint the supported catalog from the API.
oplut setupDetect the board, ask for the desired goal, fetch the verified setup, and run it.
oplut baselineCapture accepted behavior for the current hardware surfaces.
oplut checkCompare current behavior against the latest baseline.
oplut diffCreate a builder-readable physical diff from local evidence.
oplut describeSummarize local device, setup, baseline, check, and evidence state.
oplut componentsRegister physical components that SDK metrics refer to.
oplut metricWrite compact custom hardware metrics from scripts or robotics code.
oplut eventWrite compact custom hardware events from scripts or robotics code.
oplut moduleRun the local Oplut runtime loop for always-on checks.
SDK contract
Existing robot code can report evidence.
Enterprise teams should not need Oplut-specific hardware. The Python SDK lets custom hardware stacks report device identity, components, compact metrics, events, baselines, checks, and local-only evidence boundaries.
Device identity
Bind emitted evidence to a stable device identity without exposing raw private data by default.
Component registration
Name cameras, IMUs, motors, bridges, encoders, sensors, and custom hardware surfaces.
Metrics and events
Report compact facts such as sample rate, latency, jitter, drift class, and command results.
Baseline/check upload
Attach SDK evidence to accepted baselines and current-vs-baseline checks.
Privacy boundary
Raw camera frames, audio, full IMU logs, and private files stay local unless explicitly uploaded.
Board detection
Detection reads local system files.
The CLI runs on the board itself, so it can read OS, architecture, service, USB, serial, and network facts directly. Those facts become setup context and later evidence context.
/proc/cpuinfoRaspberry Pi model
/etc/os-releaseOS name and version
platform.machine()CPU architecture
/etc/nv_tegra_releaseJetson model and JetPack version
Config format
Profiles create measurable surfaces.
A setup profile contains board, peripheral, OS, goal, tier, steps, verification checks, expected result, and tested-on metadata. The profile is useful because it creates a surface Oplut can baseline and check later.
{
"id": "rpi4-picamera2-network-stream",
"board": "raspberry-pi-4",
"peripheral": "pi-camera-module-2",
"os_version": "bookworm-64bit",
"goal": "network-stream",
"tier": "free",
"steps": [
{
"title": "Install camera packages",
"type": "command",
"command": "<server-returned command>",
"expected_output": "<server-returned check>"
}
],
"verification": {
"command": "<server-returned verification>",
"expected_output": "<server-returned result>",
"success_message": "Hardware output verified."
}
}API
The API stores compact physical evidence.
POST
/v1/setupValidate device access, check tier, return the verified setup path for a hardware surface.
GET
/v1/catalogReturn supported board, peripheral, goal, tier, validation, and evidence metadata.
POST
/v1/auth/device/startCreate a short-lived CLI device code.
POST
/v1/auth/device/tokenUsed by the CLI to poll until browser approval is complete.
POST
/v1/baselinesOptionally sync accepted baseline metadata for a device or component.
POST
/v1/baseline-checksOptionally sync current-vs-baseline checks and what-changed summaries.
POST
/v1/health-observationsOptionally sync compact SDK metrics and events without raw sensor upload by default.
POST
/v1/evidence-artifactsAttach local evidence metadata to setup, baseline, check, calibration, or session records.
Errors
Failure states should be useful.
401
No or invalid API key
Run oplut auth again and approve a fresh browser code.
403
Device limit reached
Remove an old device or upgrade the account tier.
402
Plan upgrade required
The profile exists, but the user's tier does not unlock it.
404
Unsupported combination
The request is logged so Oplut knows which path to verify next.
Step failed
Command returned non-zero
Show stderr and the verified error-handling note for that step.
Setup profiles
Profiles are implementation support.
Setup profiles tell the runtime how to run the baseline loop for a supported surface. They are not the product and should not be treated like a public marketplace of proprietary hardware combinations.
Verification
No profile ships on a guess.
- Flash a clean OS image.
- Research the actual working path across official docs, forums, and source repos.
- Execute on real hardware.
- Convert the working sequence into an Oplut setup profile.
- Flash clean again and run only the profile steps.
- Add error handling for likely failures.
- Mark verified with board, OS, date, and tester.
Acceptance test
The loop is ready after a clean-board pass.
A release is not complete just because the site deploys. The package, production API, auth, setup profiles, installed services, baselines, checks, dashboard review, and SDK examples should pass together.
sudo apt install -y pipx
pipx ensurepath
pipx install oplut
oplut auth
oplut setup --goal network-stream --execute
oplut baseline --upload
oplut check --upload- Install from PyPI or pipx on a fresh Raspberry Pi OS image.
- Run oplut auth without OPLUT_API_BASE_URL.
- Run oplut setup from plain choices, not only exact slugs.
- Capture a local baseline after setup.
- Run oplut check after changing or stopping a managed surface.
- Confirm the dashboard shows setup, baseline, check, and health evidence.
Roadmap
CLI first, SDK and dashboard with it.
The CLI proves the local loop. The SDK lets teams integrate custom hardware. The dashboard turns synced evidence into device review, team history, and later population intelligence across many specific physical units.