You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
both on your LAN network (find IP)
and via BT (find robots that are not on wifi) and set the wifi settings via BT (no need for app, logins and unbinding, and claude is able to setup a robot for you)
new dep for bluetooth (under go2 extras) uv sync --all-extras --no-extra dds
This PR adds a dimos go2tool CLI for discovering Unitree Go2 robots on the LAN via UDP multicast and over BLE, and for provisioning Wi-Fi credentials to the robot over Bluetooth without needing the official app.
ble.py: Implements the AES-CFB-128 GATT provisioning protocol (reverse-engineered from UniPwn), including BLE scan/discovery, chunked SSID/password writes, and retry helpers.
landiscovery.py: Sends a UDP multicast probe to 231.1.1.1:10131 and collects JSON replies; pins the probe to non-tunnel interfaces to avoid Tailscale/VPN route capture.
go2tool.py: Typer commands wiring BLE+LAN discovery and connect-wifi provisioning; correctly registers SIGINT/SIGTERM handlers to ensure BlueZ scan sessions are torn down.
Confidence Score: 4/5
Safe to merge with one fix: discover() in landiscovery.py probes interfaces sequentially despite documenting parallel behavior, causing discovery time to scale with interface count.
The BLE provisioning and CLI wiring are well-structured. The LAN discovery has a real behavioral defect: with multiple non-tunnel interfaces the blocking _probe_iface loop multiplies the latency by the number of interfaces, and discover_lan's inter-poll sleep is calculated against a single-interface budget — so on a typical dev machine with wired and wireless interfaces the poll cycle will already be twice as long as documented.
dimos/robot/unitree/go2/cli/landiscovery.py — sequential interface loop in discover() and the downstream sleep math in discover_lan()
Important Files Changed
Filename
Overview
dimos/robot/unitree/go2/cli/ble.py
New BLE provisioning module: AES-CFB encrypted GATT protocol, BLE scan/discovery, shared asyncio.Event for serial and ACK notifications (race condition noted in prior review)
dimos/robot/unitree/go2/cli/landiscovery.py
New LAN multicast discovery module: sequential interface probing mislabeled as parallel in docstring; socket resource leak on setsockopt failure (noted prior); correct timeout handling for Python 3.12+
dimos/robot/unitree/go2/cli/go2tool.py
New Typer CLI wiring BLE + LAN discovery and wifi provisioning; clean signal handling for BlueZ scan teardown; all code paths assign target before use
dimos/robot/cli/dimos.py
Adds go2tool sub-typer import and registration; two-line change, straightforward
pyproject.toml
Adds bleak>=3.0.2 and cryptography>=46.0.5 as mandatory top-level dependencies; minor whitespace fixes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
allows you discover robots
both on your LAN network (find IP)
and via BT (find robots that are not on wifi) and set the wifi settings via BT (no need for app, logins and unbinding, and claude is able to setup a robot for you)
new dep for bluetooth (under go2 extras)
uv sync --all-extras --no-extra dds