Open source · AGPL-3.0 · Focused on ECU development

The hardware runtime for embedded coding agents.

BenchPilot gives humans, CI jobs and AI coding agents one stateful interface to real embedded targets: power them, flash them, observe them, diagnose them and validate behavior.

benchpilot — session: radar
$ benchpilot power on radar psu.main 12.0 V · 0.08 A $ benchpilot flash radar firmware-latest.bin probe.radar J-Link ✓ 1.8 s $ benchpilot wait-signal radar RadarStatus RUNNING uart.radar "RadarStatus: RUNNING" ✓ 2.4 s $ benchpilot assert-current radar --lt 100mA ✓ 92 mA $ benchpilot capture-failure-window radar # ring buffer saved: last 5 s of serial + CAN

The product loop is intentionally narrow —

Build
Flash
Run
Observe
Diagnose
Fix

Not a CANoe clone: CAN/CAN FD, DBC, ISO-TP, UDS and DoIP are added when they complete this loop — not for their own sake.

Why BenchPilot

Tools expose devices. Agents need targets.

A coding agent can edit and build firmware, but a real ECU is surrounded by fragmented tools with device-centric primitives and independent state. BenchPilot adds the ECU-centric layer:

Target: radar
power → psu.main
flash → probe.radar
serial → uart.radar
can → can.vehicle

The caller asks for the radar target and a semantic operation — flash, wait_boot, wait_signal, assert_current, capture_failure_window — instead of forcing a language model to consume unbounded raw serial/CAN streams.

Runtime model

Exactly one owner of live hardware state.

Human
CI
Agent (MCP)
CLI
MCP adapter
Studio
Benchpilot.Client
local /api/v1
benchpilotd — state + safety
Power · SCPI
Probe · J-Link
Networks · SocketCAN / PCAN
ECU

One safety boundary

benchpilotd is the resident process. CLI, MCP and GUI clients must not open hardware independently.

Loopback-only transport

The foundation transport is HTTP JSON bound to loopback only; benchpilotd refuses non-loopback binding until an authenticated remote-bench transport exists.

Agent-first operations

Semantic, bounded operations designed so a language model verifies behavior instead of parsing raw streams.

Current status

Honest about where it is.

Runtime foundation validated. A resident Runtime, versioned local API, CLI and MCP adapter share one simulated bench state; the next milestone is real serial + J-Link + SCPI hardware.