BMCLI bench
bench is the first-party configuration layer shared by users, AI harnesses,
shell scripts, and Python automation. One .bmcli directory is one target and
one bench; that bench may contain multiple logical networks and physical
channels. It separates portable target/network/node intent from machine-local
analyzer identity, wiring, and paths:
.bmcli/target.jsonmay be versioned with the project..bmcli/bench.local.jsonis local and is ignored by the generated.bmcli/.gitignore.
bmcli bench init --target=vehicle-a --kind=vehicle \ --network=vehicle-can --channel=10356/0 --nbitrate=500 --dbitrate=2Mbmcli bench init --network=sensor-private-can --node=sensor-controller \ --channel=10356/1 --nbitrate=500 --dbitrate=2M --termination=120 \ --request-id=0x791 --response-id=0x799 --database=network/body.dbc \ --validated-by=enumerate+autoset+uds-discoverbmcli bench show --format=jsonbmcli bench validate --format=jsonbmcli bench validate --hardware --format=jsonbench init updates the selected network, node, and local connection while
preserving all other entries. The first network and node become defaults. It
accepts repeatable, protocol-neutral --database references for DBC, LDF, A2L,
or future supported database types; --database=none clears the list. --dbc
is a mutually exclusive single-DBC convenience form. It
rejects order-dependent numeric channel indices. It does not enumerate,
AutoSet, transmit a functional UDS request, or stop/start the daemon; perform
those separately with the applicable authorization, then persist confirmed
results. --force is required to replace malformed existing JSON. Use
--global only to create or update the per-user fallback.
Without an explicit --project, BMCLI searches from the current directory to
the nearest parent .bmcli; when none exists it reads the per-user default.
Project and global profiles are not merged. An explicit physical channel always
works as before. A configured logical name is also accepted wherever the
existing --channel option is accepted:
bmcli message recv --channel=vehicle-can --duration=10 --format=jsonlbmcli message recv --channel=10356/0 --duration=10 --format=jsonlThe client resolves logical names to local physical bindings before BMAPI access
or daemon forwarding. Node definitions are returned by bench show; automatic
selection of one diagnostic node among several is not performed.
bench validate checks network/node/connection references, required timing,
database and local paths, and stable persisted channels. With --hardware, it
also enumerates every configured binding and verifies that channel capabilities
match the declared bus. Its state is READY, DEGRADED (for example, no DBC
but raw CAN remains possible), or NEEDS_INPUT; required-value, stale-path,
JSON, capability, and hardware mismatch failures return nonzero.
The complete schema, ownership, lookup, and acceptance contract is recorded in
bench_configuration_plan.md.
Source of truth: bmcli_reference.md in the BMCLI repository. Run bmcli help <category> <action> --format=json for the exact contract of the installed version.