Skip to content

Requirements

  • CMF Watch Pro 2 (board JX402, Actions ATS3089C).
  • Firmware verified: 1.0.0.73. Other builds may differ and require a diff first.
  • A Bluetooth LE adapter supported by Bleak.
  • The watch is disconnected from the phone/Nothing X app, so that it advertises to the host.
  • For flashing: a charged watch and a host that remains awake for 10–30 minutes.
  • Python 3.12+.
  • uv for the Python workspace.
  • Git.
  • Optional: Ghidra 12.x for static analysis, Node 20+ and pnpm for the documentation site.
  • Optional: a UART adapter for investigating the physical debug shell (not required).

Windows notes:

  • Bleak uses the Windows BLE stack. The watch often stays at MTU 23; that is normal and still works, only slower.
  • Pairing state is stored in tools/.watch_state.json, which is gitignored and never shared.

The published dumps under dumps/binaries/ contain the stock firmware image for this device and the proof-of-concept image built from it. Vendor resources, watch-face packages and copyrighted animation frames are not published separately; they are obtained legally for the device in use and placed locally:

firmware/JX402_V1.0.0.73.bin
watchfaces/ # optional .wfdl packages

Both paths are gitignored.

  • Testing the watch in use requires permission.
  • Write and flash commands are limited to hardware that is owned or explicitly authorised.
  • The Limitations & risks page covers the risks that apply before the first write.