Highlights
⚠️ Machine-readable output contract (breaking changes)
JSON output now follows a documented contract — see the new Machine-readable output guide. Three changes are breaking:
- Binary values in JSON output are now single-key
{"$hex": "..."}objects instead of the string"<hexdigits>"— unambiguous and mechanically decodable (bytes.fromhex). - Timestamps in JSON output are ISO 8601.
- Data moved from stderr to stdout:
processes pgrepnow prints a[{"pid", "name"}]JSON list, and the dict-record streams (developer dvt energy/notifications/graphics,diagnostics battery monitor,notification observe/observe-all) emit NDJSON — one JSON object per line — instead of Python dict reprs via the logger.
pymobiledevice3 diagnostics battery monitor | jq .CurrentCapacity✨ NDJSON --format json for human-rendered streams
Streams with a real text rendering keep it as the default and gain --format json: developer dvt oslog, developer dvt netstat, developer accessibility notifications and crash watch, joining the existing syslog live. In JSON mode stdout is pure NDJSON with stable record shapes:
pymobiledevice3 crash watch --format json | jq .name🐛 Correct help and suggestions for collapsed command groups
Single-command groups (btlogger, pcap, power-assertion, version) now show up in the top-level help under their real invocation name, and "did you mean" no longer advertises phantom paths such as btlogger capture or pcap pcap.
📚 Device-operator skill: output contract and full CLI routing
The agent skill now points at the machine-readable output conventions, routes the cryptex group (DDI install on iOS 26+), and a new CI drift test guarantees every top-level CLI group stays routed in the task map.
What's Changed
- 41cb600 skill: Route the cryptex group in the task map, enforce coverage in CI (#1841) (@doronz88)
- 775b1f8 skill: Point the device operator at the machine-readable output contract (#1839) (@doronz88)
- fad7d0f docs: Document the machine-readable output contract (#1839) (@doronz88)
- 0c8b624 crash: Add NDJSON --format to watch (#1839) (@doronz88)
- 948f3ae accessibility: Add NDJSON --format to notifications (#1839) (@doronz88)
- d7c1386 notification: Emit observe events as NDJSON on stdout (#1839) (@doronz88)
- 899c613 diagnostics: Emit battery monitor samples as NDJSON on stdout (#1839) (@doronz88)
- f29bc74 dvt: Emit stream records as NDJSON on stdout (#1839) (@doronz88)
- 1779130 processes: Emit pgrep matches as JSON on stdout (#1839) (@doronz88)
- 78c2b24 cli: Encode bytes as tagged $hex objects and datetimes as ISO 8601 in JSON output (#1839) (@doronz88)
- dc6ab3e cli: List collapsed single-command groups under their dispatch key (#1840) (@doronz88)
- 77816c3 cli: Suggest collapsed single-command groups by their real invocation (#1840) (@doronz88)
- 47e5c5a syslog: Reword --label help so the generated docs build again (#1838) (@doronz88)
Full Changelog: v10.4.1...v10.5.0