Agent-friendly bench power supply control (B&K Precision 1685B/1687B/1688B, Manson HCS)
Strong domain-specific tool design with clear safety semantics and good descriptions. All 8 tools have descriptions (avg 180 chars, within baseline 194). All parameters are typed and described. Tool names follow verb_noun pattern (list_, get_, set_, output_, power_). However, output schemas are not explicitly documented in the code, responses are inferred from context (e.g., get_status returns dict, set_voltage returns dict with port/location/settings). No enum constraints on port parameter despite it being a critical identifier. Error handling is present (SupplyError) but recovery guidance is minimal. Safety gating via elicitation is well-designed but not reflected in tool annotations (destructiveHint/readOnlyHint missing).
Full snapshot: setpoints, live output readings (V/A/CV-or-CC), OVP/OCP limits, model max.
Probe USB-serial ports for supplies (port + model max V/A). Probing writes a benign query to candidate serial ports; prefer a pinned DEVPSU_PORT on benches with other serial devices.
Switch the output OFF, cutting DUT power immediately. Do not use mid-flash. (Never gated - cutting power is always allowed.)
Switch the output ON at the present setpoints (session-limit gated). Returns live readings.
Power-cycle the DUT: output off, wait hold_seconds, back on. The go-to hard reset for a wedged DUT. Restores power at the present setpoints, so those are checked against the session limits. Blocks for hold_seconds; give the DUT time to boot before talking to it.
Set the current limit. A tight current limit is the cheapest DUT protection - set it before output_on.
Output schemas not documented. Tools return dicts (e.g., get_status, set_voltage) but no schema definition visible in code. LLMs cannot plan downstream calls without knowing response structure.
Port parameter lacks enum or validation. Accepts 'string' but no guidance on format (device path vs USB location). Should document expected formats or provide discovery via list_supplies first.
Tool annotations missing. set_voltage, set_current, output_on, power_cycle, set_protection are destructive/reversible but lack destructiveHint or idempotentHint. get_status and list_supplies lack readOnlyHint.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Set the supply's own over-voltage / over-current protection limits (extra safety layer, never gated).
Set the output voltage setpoint (does not switch the output on). Gated by session safety limits: the user is prompted on first use and must approve anything above the session max.
Error recovery guidance minimal. SupplyError exceptions are raised but LLM receives no actionable next steps (e.g., 'session limits not set, call list_supplies first' or 'user declined, try lower voltage').
Numeric parameter ranges undocumented. volts, amps, ovp_volts, ocp_amps, hold_seconds lack min/max constraints. LLMs may pass invalid values (negative voltage, 1000A current) without validation.