EXECUTION RUNTIME: GROK BOT LINUX SANDBOX (/workspace) LIVE TEMPLATES: 15 AVAILABLE (FREE + $19, $29, $39 & $49 · CARD) · ZERO SUBSCRIPTIONS PRIVACY: LOCAL CREDENTIAL VAULT · ZERO DATA EXFILTRATION
● AVAILABLE NOW · PHASE 1 RELEASE · $49 · card (ONE-TIME · 3 REBINDS)

robotics-telemetry-inspector · Category: Robotics & Physical AI / Humanoid & Fleet Telemetry

Humanoid & Fleet Telemetry Inspector — Find the overheating knee, the weak cell and the dropped topic before the robot runs again.

Your actuator logs, BMS exports, ROS 2 bags, flight logs, URDF models and CAN captures already say what is about to fail. This inspector reads them offline, checks harmonic-drive duty cycles and joint limits, 16S LiFePO4 cell spread and sag, ROS 2 topic rates, QoS, clock skew and TF-tree integrity, and PX4 / ArduPilot EKF, vibration, GNSS and ESC readiness, then writes a prioritised preventive-maintenance checklist. It never talks to the robot.

SKU: robotics-telemetry-inspector · Skills: robotics-telemetry-inspector-setup + robotics-telemetry-inspector · Runtime: 3,245 lines stdlib Python · Price: $49.00 USD one-time · card, Apple Pay or Google Pay

⚡ Works in Grok Bot + Cursor + Claude Code + Any Terminal (Zero-Dep Python 3 CLI Included)
Install in Grok Bot → See Real Sample Audit View in Homepage Catalog

What It Does: The 4-Bucket Technical Breakdown

  • Local-only inputs: actuator and joint CSV / JSON, BMS CSV / JSON, ROS 2 bags (.db3, .mcap, metadata), PX4 .ulg and ArduPilot logs, URDF / SDF models, and candump / CSV / JSON CAN or RS485 captures. Archives and XML are parsed with hardened limits (ARCHIVE_SAFETY_VIOLATION, XML_ENTITY_SAFETY_VIOLATION).
  • 4 deterministic audit buckets:
    1. Actuator, Joint & Harmonic-Drive Duty Cycles (with URDF / SDF and CAN bus cross-checks): stator temperature against each joint's limit, duty cycle, peak and continuous torque, velocity and position against the model, backlash and service hours, and CAN error frames, bus-off, EMCY and heartbeat loss. ACTUATOR_THERMAL_OVERLOAD ACTUATOR_HIGH_DUTY_CYCLE JOINT_TORQUE_LIMIT_EXCEEDED JOINT_VELOCITY_LIMIT_EXCEEDED JOINT_POSITION_LIMIT_EXCEEDED HARMONIC_DRIVE_WEAR_THRESHOLD CAN_BUS_FAULT_OR_TIMEOUT ACTUATOR_ERROR_FLAGS_SET URDF_JOINT_LIMIT_INVALID ACTUATOR_JOINT_NOT_IN_MODEL.
    2. 16S LiFePO4 / LiPo Battery Management System: per-cell spread under load versus rest, weakest-cell sag, MOSFET and pack temperature, discharge C-rate and state of health against rated cycles. BMS_CELL_IMBALANCE_DELTA BMS_CRITICAL_CELL_SAG BMS_MOSFET_THERMAL_RISE BMS_DISCHARGE_CRATE_EXCEEDED BMS_SOH_DEGRADATION BMS_CELL_COUNT_MISMATCH.
    3. ROS 2 Bag, TF Tree & QoS Integrity: per-topic message rate and gaps against expected Hz, backward timestamp jumps and inter-sensor clock skew, publisher-versus-subscriber QoS, and cycles or disconnected roots in the /tf + /tf_static graph. ROSBAG_TOPIC_DROPOUT ROSBAG_CLOCK_DRIFT_OR_JUMP QOS_INCOMPATIBLE_MISMATCH TF_TREE_CYCLE_OR_DISCONNECT.
    4. PX4 / ArduPilot Flight Readiness & Preventive Maintenance: EKF innovation ratios, IMU vibration and clipping, GNSS fix quality, ESC desync, overheat and RPM spread, failsafe and pre-arm faults, plus the checklist CSV. EKF_INNOVATION_DIVERGENCE IMU_VIBRATION_CLIPPING GNSS_DEGRADED_FIX ESC_DESYNC_OR_OVERHEAT FLIGHT_FAILSAFE_OR_PREARM_FAULT.
  • Cross-cutting: EMBEDDED_TELEMETRY_CREDENTIAL (HIGH) flags a Wi-Fi password, key or token inside a bag, MCAP, ULog, URDF or YAML metadata record, with the value redacted.
  • Recurring delta mode (--state PATH --delta): reports BMS_CELL_DELTA_SPIKE ACTUATOR_THERMAL_DRIFT SOH_DEGRADATION_STEP TOPIC_RATE_REGRESSION between runs, plus new, changed and resolved findings, suited to a scheduled UpdateRoutine after each shift or flight.

How It Runs (5 Steps)

1 · License pre-flight
.wattcoin_license_check.py --sku robotics-telemetry-inspector must return "state": "OK" before every run.
2 · Pinned runtime check
Setup verifies the canonical SHA-256 of robotics_telemetry_inspector.py and bot_common.py against the pinned values; any mismatch stops the run.
3 · Parse logs & models
--actuators, --bms, --rosbag, --flight-log, --urdf, --can-log; credentials in tables or arguments are refused (exit 10).
4 · 4-bucket audit
Actuator and bus, BMS, ROS 2 bag and flight-readiness checks, with URDF and CAN cross-references.
5 · Report, checklist, diff
Text / Markdown / HTML / JSON report, --maintenance-out checklist, optional --state --delta events, and a fail-closed exit code.

Real Sample Audit: 12-DOF humanoid, dual battery pack, ROS 2 and PX4 fleet

Sample disclosure: this is a representative sample, not a customer report. It was produced against public or fictional test targets; account and credential values are placeholders or redacted (for example wck_<REDACTED>), and no private keys, seed phrases or secrets are ever shown. Your own report will differ in content and length.

Excerpt from --self-check --format markdown --now 2026-10-27T00:00:00Z on the built-in synthetic fleet (12-joint harmonic-drive humanoid on CAN, a 16S LiFePO4 main pack and 6S LiPo auxiliary pack, a ROS 2 navigation bag with an expectations file, an MCAP fleet bag and a PX4 quadrotor log). All joints, packs, bags and frames are fabricated for illustration and no robot, vehicle or network was contacted. Output is unedited; omitted parts are marked. Exit 3: the worst finding is CRITICAL. The Wi-Fi password in the MCAP metadata is redacted in the report.

# Humanoid & Fleet Telemetry Inspector Report

```
snapshot   2026-10-27 00:00:00 UTC | tool=robotics-telemetry-inspector
endpoints  local-files
```


## Summary

Inputs: 12 actuator row(s), 2 BMS pack(s), 2 bag(s) / 7 topic(s), 10 flight record(s), 121 CAN frame(s), 12 URDF/SDF joint(s)

| critical | high | medium | low | info | worst |
|---|---|---|---|---|---|
| 12 | 21 | 4 | 1 | 0 | CRITICAL |


## Bucket 1 - Actuator, joint & harmonic-drive duty cycles

| joint | stator C | max C | peak Nm | rms Nm | vel rad/s | duty % | hours | backlash arcmin |
|---|---|---|---|---|---|---|---|---|
| l_hip_yaw | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |
| l_hip_roll | 55.0 | 90.0 | 60.0 | 20.0 | 7.20 | 40 | 1000 | 1.00 |
| l_hip_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |
| l_knee_pitch | 104.0 | 90.0 | 135.0 | 20.0 | 3.00 | 88 | 1000 | 3.40 |
| l_ankle_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |
| l_ankle_roll | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |
| r_hip_yaw | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 8100 | 1.00 |
| r_hip_roll | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |
| r_hip_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |
| r_knee_pitch | 93.0 | 100.0 | 60.0 | 45.0 | 3.00 | 40 | 1000 | 1.00 |
| r_ankle_pitch | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 74 | 7300 | 1.00 |
| r_ankle_roll | 55.0 | 90.0 | 60.0 | 20.0 | 3.00 | 40 | 1000 | 1.00 |

[... CAN bus summary table omitted ...]

- **CRITICAL** `ACTUATOR_THERMAL_OVERLOAD` l_knee_pitch stator 104.0 C is at/over its limit (90.0 C max, 100 C absolute)
- **CRITICAL** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0 entered bus-off (controller disconnected itself after repeated errors)
- **CRITICAL** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0: 1 emergency / fault frame(s) (cob_id 0x082)
- **CRITICAL** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0: 7 of 121 frames are error frames (5.8%; CRC 6, stuff 6, form 0)
- **CRITICAL** `JOINT_TORQUE_LIMIT_EXCEEDED` l_knee_pitch peak torque 135.00 Nm exceeds the 120.00 Nm limit (URDF/SDF effort)
- **HIGH** `ACTUATOR_HIGH_DUTY_CYCLE` l_knee_pitch duty cycle 88.0% (limits: >70% MEDIUM, >85% HIGH)
- **HIGH** `ACTUATOR_THERMAL_OVERLOAD` r_knee_pitch stator 93.0 C is within 10 C of its limit (100.0 C max) or at/over 85 C
- **HIGH** `CAN_BUS_FAULT_OR_TIMEOUT` bus can0: heartbeat timeout on node 0x01 (4.00 s silent)
- **HIGH** `HARMONIC_DRIVE_WEAR_THRESHOLD` l_knee_pitch harmonic drive: backlash 3.40 arcmin exceeds the 3.00 arcmin limit
- **HIGH** `JOINT_POSITION_LIMIT_EXCEEDED` l_hip_roll observed position 0.900..0.900 is outside the model range [-0.600, 0.500]
- **HIGH** `JOINT_TORQUE_LIMIT_EXCEEDED` r_knee_pitch RMS torque 45.00 Nm exceeds the 40.00 Nm rated torque (continuous overload)
- **HIGH** `JOINT_VELOCITY_LIMIT_EXCEEDED` l_hip_roll velocity 7.20 rad/s exceeds the 6.00 rad/s limit
- **MEDIUM** `ACTUATOR_HIGH_DUTY_CYCLE` r_ankle_pitch duty cycle 74.0% (limits: >70% MEDIUM, >85% HIGH)
- **MEDIUM** `HARMONIC_DRIVE_WEAR_THRESHOLD` r_hip_yaw harmonic drive: 8100 operating hours reached the 8000 h service interval
- **LOW** `HARMONIC_DRIVE_WEAR_THRESHOLD` r_ankle_pitch harmonic drive: 7300 operating hours is 91% of the 8000 h service interval

## Bucket 2 - 16S LiFePO4 / LiPo battery management system

| pack | chem | cells | V | A | min mV | max mV | delta mV | state | MOSFET C | pack C | SOH % | cycles |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| HUM-PACK-A | LiFePO4 | 16 | 51.2 | 160.0 | 2440 | 3248 | 808 | load | 78.0 | 41.0 | 78.0 | 3250 |
| AUX-PACK-B | LiPo | 6 | 23.1 | 4.0 | 3830 | 3840 | 10 | rest | 31.0 | 28.0 | 97.0 | 40 |

- **CRITICAL** `BMS_CELL_IMBALANCE_DELTA` HUM-PACK-A (LiFePO4) cell spread 808 mV (2440..3248 mV) under load; balancer active
- **CRITICAL** `BMS_CRITICAL_CELL_SAG` HUM-PACK-A (LiFePO4) weakest cell 2440 mV is below the 2500 mV critical floor
- **HIGH** `BMS_DISCHARGE_CRATE_EXCEEDED` HUM-PACK-A (LiFePO4) drawing 1.60 C (160.0 A / 100.0 Ah) over the 1.50 C limit
- **HIGH** `BMS_MOSFET_THERMAL_RISE` HUM-PACK-A (LiFePO4) MOSFET 78.0 C / pack 41.0 C is above the warning limit (75 C / 50 C)
- **MEDIUM** `BMS_SOH_DEGRADATION` HUM-PACK-A (LiFePO4) state of health 78.0%, 3250 cycles (rated 3000)

## Bucket 3 - ROS 2 bag, TF tree & QoS integrity

[... per-topic rate tables omitted ...]

- **CRITICAL** `ROSBAG_TOPIC_DROPOUT` nav.db3: required/safety topic /cmd_vel recorded 0 messages (expected 10.0 Hz)
- **CRITICAL** `TF_TREE_CYCLE_OR_DISCONNECT` nav.db3: /tf + /tf_static frame graph contains a cycle (base_link -> lidar -> map -> odom -> base_link); transform lookups will loop or fail
- **HIGH** `QOS_INCOMPATIBLE_MISMATCH` nav.db3: sensor topic /scan QoS mismatch: BEST_EFFORT publisher vs RELIABLE subscriber; endpoints will not connect or will silently drop data
- **HIGH** `ROSBAG_CLOCK_DRIFT_OR_JUMP` nav.db3: topic /imu/data has 2 backward timestamp jump(s) (bag time 1, header stamp 1)
- **HIGH** `ROSBAG_CLOCK_DRIFT_OR_JUMP` nav.db3: inter-sensor clock skew 67.0 ms (/imu/data vs /joint_states); sensor fusion will mis-associate samples
- **HIGH** `ROSBAG_TOPIC_DROPOUT` nav.db3: topic /imu/data has a 0.52 s message gap, over 5x the 0.020 s period (50.0 Hz expected)
- **HIGH** `ROSBAG_TOPIC_DROPOUT` nav.db3: topic /scan ran at 3.00 Hz, 30% of the expected 10.0 Hz
- **HIGH** `ROSBAG_TOPIC_DROPOUT` nav.db3: topic /scan has a 4.25 s message gap, over 5x the 0.100 s period (10.0 Hz expected)
- **HIGH** `TF_TREE_CYCLE_OR_DISCONNECT` nav.db3: /tf + /tf_static frame graph has 2 disconnected root frames (arm_base, world); expected a single tree
- **MEDIUM** `QOS_INCOMPATIBLE_MISMATCH` nav.db3: topic /joint_states uses KEEP_ALL (depth 0): unbounded queue memory risk on a long run

## Bucket 4 - PX4 / ArduPilot EKF, IMU, GNSS & ESC flight readiness

[... EKF / vibration / GNSS and ESC tables omitted ...]

- **CRITICAL** `EKF_INNOVATION_DIVERGENCE` EKF velocity innovation test ratio peaks at 1.12 (>=0.7 HIGH, >=1.0 rejects the measurement)
- **CRITICAL** `ESC_DESYNC_OR_OVERHEAT` ESC 1: 3 desync event(s), peak temperature 108.0 C
- **CRITICAL** `FLIGHT_FAILSAFE_OR_PREARM_FAULT` a failsafe was active during the log
- **HIGH** `ESC_DESYNC_OR_OVERHEAT` ESC mean RPM spread 21.2% (5200..6600) exceeds 15%: a motor/prop/ESC is working harder or slipping
- **HIGH** `FLIGHT_FAILSAFE_OR_PREARM_FAULT` pre-arm check failure logged: Preflight Fail: Accel inconsistent
- **HIGH** `GNSS_DEGRADED_FIX` outdoor GNSS degraded: min fix type 3, min satellites 5, max HDOP 2.70 (fix<3, sats<6 or HDOP>2.5)
- **HIGH** `IMU_VIBRATION_CLIPPING` IMU vibration RMS peaks at 35.0 m/s^2 (x 35.0, y 28.0, z 17.5; >30 HIGH, >60 CRITICAL)

Preventive maintenance & flight-readiness checklist (53 row(s); full list with --maintenance-out)

| prio | category | asset | check | status | due |
|---|---|---|---|---|---|
| 0 | Flight readiness | OVERALL | Heuristic readiness gate over the supplied logs (not an airworthine... | NO-GO | - |
| 1 | Actuator / joint | l_knee_pitch | l_knee_pitch stator 104.0 C is at/over its limit (90.0 C max, 100 C... | NO-GO | before next operation |
| 1 | Actuator / joint | l_knee_pitch | l_knee_pitch peak torque 135.00 Nm exceeds the 120.00 Nm limit (URD... | NO-GO | before next operation |
| 1 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) cell spread 808 mV (2440..3248 mV) under load;... | NO-GO | before next operation |
| 1 | Battery / BMS | HUM-PACK-A | HUM-PACK-A (LiFePO4) weakest cell 2440 mV is below the 2500 mV crit... | NO-GO | before next operation |
| 1 | CAN / RS485 bus | can0 | bus can0 entered bus-off (controller disconnected itself after repe... | NO-GO | before next operation |

[... 34 more checklist rows omitted ...]

## Other

- **HIGH** `EMBEDDED_TELEMETRY_CREDENTIAL` fleet.mcap: field metadata:network:wifi_password holds what looks like a credential field (value redacted); rotate it and re-export the log without it

exit_code 3 (fail-on=medium)

---

[... SCOPE_NOTE omitted (printed in full with every report) ...]

CLI Reference: Flags & Exit Codes

FlagMeaning
PATH ... / --dir DIRTelemetry files, .zip archives or directories (roles auto-detected). --dir discovers files recursively; symlinks it finds are skipped and reported as degraded sources.
--actuators PATHActuator / joint log (CSV or JSON): stator and max temperature, RMS and peak torque, velocity, duty cycle, operating hours, backlash, error flags, optional position.
--bms PATHBMS export (CSV or JSON): chemistry, series cells, pack voltage and current, per-cell mV, load state, MOSFET and pack temperature, SOH, cycles.
--rosbag PATHROS 2 bag (.db3, .mcap, metadata.yaml / JSON summary) or an expectations file (topics, expected Hz, required, subscriber QoS). Repeatable.
--flight-log PATHPX4 .ulg or ArduPilot .bin / CSV / JSON: EKF innovations, vibration, GNSS, ESC, failsafe and pre-arm. Repeatable.
--urdf PATHURDF or SDF model: joint position, velocity and effort limits cross-checked against the actuator log.
--can-log PATHcandump-style text, or CSV / JSON bus export: error frames, bus-off, EMCY frames, heartbeats.
--maintenance-out PATHWrite the full preventive-maintenance and flight-readiness checklist as a new CSV (refuses input paths).
--state PATH --deltaStore a snapshot (0600) and report events, new, changed and resolved findings against it. Degraded runs never overwrite it.
--self-checkAudit the built-in synthetic fixtures (written to a private temp dir) and verify every expected finding code fires. Exits with the audit code, or 11 with SELF_CHECK_FAILED if one is missing.
--now ISOOverride the report clock (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ) for reproducible runs and maintenance due dates.
--format {text,markdown,md,json,html} / --json / --out PATHReport format and destination.
--fail-on {none,info,low,medium,high,critical}Exit threshold (default medium).
Exit codeMeaning
0Completed with nothing at or above --fail-on.
1Worst finding is MEDIUM (or LOW/INFO with a lower threshold).
2Worst finding is HIGH.
3Worst finding is CRITICAL.
10Bad input or refusal: missing file, bad flag, --delta without --state, a symlink input, or a credential / token / signing key in arguments or tables.
11Degraded: unreadable, malformed or unsafe input, a skipped symlink, or nothing to audit. Never a clean result.

Mandatory Refusal Boundaries

  • Offline and strictly read-only. No network request. It never issues motor or actuator commands, torque setpoints, CAN frames, MAVLink parameter writes or BMS register writes, never overrides a safety interlock, and never modifies an input file. --state, --out and --maintenance-out only create new files and refuse any input path.
  • No credentials. Fleet API tokens, passwords, seed phrases, MAVLink signing keys, ROS 2 DDS security private keys, Wi-Fi passwords and SSH keys in arguments, tables or candump logs are refused (exit 10) and never echoed. A credential inside a bag, MCAP, ULog, URDF or YAML metadata record raises EMBEDDED_TELEMETRY_CREDENTIAL with the value redacted.
  • Your logs only. It audits telemetry from robots and vehicles you own or are authorised to review. Symlinked inputs are refused and all reads are opened without following links.
  • Heuristic, not certification. Findings are offline diagnostics on exported logs, not airworthiness, FAA / EASA flight certification, or functional-safety (ISO 13849 / IEC 61508 / ISO 10218) approval. A GO on the readiness checklist is not a flight or operation clearance.

Scope note (printed with every report): 100% offline, local, read-only inspection of the actuator, BMS, CAN / RS485, ROS 2 bag (.db3 / .mcap / metadata), PX4 ULog / ArduPilot and URDF / SDF files you supply. Findings are offline diagnostic heuristics on exported logs, not airworthiness, FAA / EASA flight certification, or functional-safety approval. No network request is made and no hardware is commanded.

Pinned Runtime Hashes (SHA-256 Verified)

Runtime URLs are license-gated: send X-License-Key: wcl_... or X-Agent-Key: wck_... (unauthenticated requests get 401). The served file carries a per-license watermark block (5 lines), so compare the X-Canonical-SHA256 response header (or the SHA-256 after stripping the block) against the pins above. The recommended path is the setup skill installer:

python3 /workspace/.wattcoin_license_check.py --sku robotics-telemetry-inspector --install-runtime ... --expected-sha256 aa45c09553b0c989a988c4f2375a7d9e596f338afa5f98969db09896eb6c6b17

The setup and audit skills verify both canonical digests before every run and refuse to execute either file on a mismatch. Both are locked at chmod 500. The runtime is stdlib-only Python and is covered by 724 unit tests.

Technical FAQ

Which robot and fleet files does it read?
Actuator and joint logs (CSV or JSON), 16S LiFePO4 / LiPo BMS exports (CSV or JSON), ROS 2 bags (rosbag2 SQLite .db3, .mcap, and metadata.yaml or JSON summaries), PX4 .ulg and ArduPilot .bin / CSV / JSON flight logs, URDF and SDF models, and candump-style CAN / RS485 text logs or CSV / JSON bus exports. Files can be passed as positional paths, with --dir, or as .zip archives; the role of each file is auto-detected or set with --actuators, --bms, --rosbag, --flight-log, --urdf and --can-log.
Does it connect to my robot, CAN bus or BMS?
No. It is 100% offline and read-only: it opens no CAN socket, serial port, ROS graph, MAVLink link or network connection, and it never issues motor or actuator commands, CAN frames, MAVLink parameter writes or BMS register writes. It never modifies an input file; --state, --out and --maintenance-out only write new files and refuse any input path.
What do I get besides findings?
A preventive-maintenance and flight-readiness checklist: priority-ordered NO-GO, ACTION_REQUIRED, SCHEDULE, OVERDUE and DUE_SOON rows with a due-by horizon. The report prints a summary and --maintenance-out PATH writes the full checklist as a new CSV. It is a heuristic gate over the logs you supplied, not an airworthiness or safety certification.
How does the ROS 2 bag audit know about subscriber QoS?
A bag records only publisher QoS, so QOS_INCOMPATIBLE_MISMATCH needs an expectations file: a second --rosbag JSON or YAML with topics[].expected_hz, required and qos.subscriber and no message counts. It is applied to bags that share a topic, or to the only bag supplied. A required topic that is absent from the bag counts as zero messages and is CRITICAL. Compressed MCAP chunks (zstd / lz4) are not decoded: you get summary statistics and a degraded-source note.
What does delta mode watch?
With --state PATH --delta the inspector stores a snapshot and reports four event types on later runs: BMS_CELL_DELTA_SPIKE (cell spread up 25 mV, HIGH at +50 mV or 80 mV total), ACTUATOR_THERMAL_DRIFT (stator up 10 C, HIGH at +20 C), SOH_DEGRADATION_STEP (state of health down 2 points, HIGH at 5) and TOPIC_RATE_REGRESSION (rate down 20%, HIGH at 50%), plus new, changed and resolved findings. Degraded runs never overwrite the snapshot, which is written 0600.
What does it refuse to do?
It refuses credentials in arguments, CSV / JSON table cells and candump logs: fleet API tokens, passwords, seed phrases, MAVLink signing keys, ROS 2 DDS security private keys, Wi-Fi passwords and SSH keys exit 10 and are never echoed. A credential embedded in a bag, MCAP, ULog, URDF or YAML metadata record raises EMBEDDED_TELEMETRY_CREDENTIAL (HIGH) with the value redacted, so the leaking file can still be audited. Symlinks given as input exit 10; symlinks found by --dir are skipped and reported as degraded sources (exit 11). It will not command hardware, override an interlock, or certify airworthiness or functional safety.

Licensing & Setup

$49.00 USD one-time, paid by card, Apple Pay or Google Pay, with up to 3 workspace-reset rebinds and no subscription. On Turn 1 the robotics-telemetry-inspector-setup skill installs the read-only license helper (0500), verifies and installs the SHA-256-pinned runtime, registers and activates /workspace/.wattcoin_env (0600, starter activation), binds your wcl_<64-hex> license via POST /api/v1/agents/license/claim, and runs the built-in --self-check. Every later run starts with the license gate.

One wcl_... key, two runtimes. Your license key works inside Grok Bot and from any local terminal or IDE agent (Cursor, Claude Code, Windsurf, CI/CD) via the standalone single-file Python 3 CLI (/runtime/robotics_telemetry_inspector.py) — Python 3.10+ standard library only, zero pip install dependencies, with --json / --markdown output.