Live DAT Debugging with MCP (iOS)
Use this skill when a developer is debugging an iOS DAT app and has a local DAT
Inspector MCP server or DAT debug server available to the agent. This is the
live-runtime counterpart to dat-docs-mcp: use docs search for API lookup, and
use this skill for observed app/device behavior.
Ground rules
- Stay read-only unless the user explicitly asks for an app code change.
- Do not mutate Meta AI app, device, account, permission, registration, or app
state.
- Treat companion-app/device results as boundary diagnosis from app-visible DAT
events, not as direct access to companion app internals.
- Use live DAT evidence before guessing: registration, permissions, device
selection, link state, session state, stream state, typed errors, and SDK logs.
- If the MCP tools are not configured, ask the developer to enable their local
DAT debug setup and fall back to logs plus
search_dat_docs.
Normal agent loop
- Discover and connect to the running app debug server:
discover_debug_servers
connect_to_debug_server
- Establish the baseline with all three calls before diagnosing deeper:
get_connection_status
get_sdk_state
get_dat_readiness
Do not skip get_connection_status; it separates MCP/debug-server
connectivity from SDK, registration, permission, session, and stream state.
- If the issue looks like Meta AI app or device boundary behavior, inspect:
get_companion_boundary_diagnosis
get_device_path
get_permissions
get_device_properties
- Ask the developer to reproduce the failing iOS flow while connected.
- Wait for narrow evidence instead of polling everything:
wait_for_events with category or source
get_errors
get_event_digest
- For handoff, collect a redacted bundle:
Evidence map
- Configuration: app logs around
Wearables.configure()
- URL callbacks:
Wearables.shared.handleUrl(_:) return handling
- Registration:
Wearables.shared.startRegistration() and
wearables.registrationState
- Device availability: device selectors,
wearables.devices,
device.compatibility, and device.properties
- Device link:
device.linkState
- Permissions: DAT permission APIs,
device.permission, check_permissions,
and get_permissions
- Session:
DeviceSession creation/start, deviceSession.state,
session.state, and session errors
- Stream: stream start,
stream.state, frame counters, and stream errors
- DAM/DWA-visible transport:
sdk.usesDam and DAM/DWA error values
Diagnosis patterns
- Registration blocked: verify Info.plist DAT configuration, app URL scheme,
Developer Mode setup, and callback handling.
- No eligible device: inspect discovered devices, selector behavior, device
compatibility, and
device.linkState before changing stream code.
- Permission failure: use
get_permissions and get_companion_boundary_diagnosis;
do not assume iOS system permission is the same as DAT permission through the
Meta AI app/device boundary.
- Session fails before stream creation: inspect session errors and selected
device compatibility before changing camera code.
- Stream fails after session start: inspect stream state, camera permission, and
recent errors before changing frame processing.
Output expectations
When summarizing, name the evidence plane, the blocking state, and the next
developer action. Example:
DAT readiness is blocked at registration: the app-visible registration state is
not registered. Check the Info.plist DAT URL scheme and MetaAppID, complete the
Meta AI callback through handleUrl(_:), then retry while the MCP connection waits
for registration and device-link events.
1---2name: live-debugging-mcp-23description: Use this whenever debugging an iOS DAT app with local DAT Inspector MCP tools, live device events, Meta AI app/device boundary issues, permissions, registration, sessions, streaming, callbacks, or user reports that the app cannot communicate with glasses.4---56# Live DAT Debugging with MCP (iOS)78Use this skill when a developer is debugging an iOS DAT app and has a local DAT9Inspector MCP server or DAT debug server available to the agent. This is the10live-runtime counterpart to `dat-docs-mcp`: use docs search for API lookup, and11use this skill for observed app/device behavior.1213## Ground rules1415- Stay read-only unless the user explicitly asks for an app code change.16- Do not mutate Meta AI app, device, account, permission, registration, or app17 state.18- Treat companion-app/device results as boundary diagnosis from app-visible DAT19 events, not as direct access to companion app internals.20- Use live DAT evidence before guessing: registration, permissions, device21 selection, link state, session state, stream state, typed errors, and SDK logs.22- If the MCP tools are not configured, ask the developer to enable their local23 DAT debug setup and fall back to logs plus `search_dat_docs`.2425## Normal agent loop26271. Discover and connect to the running app debug server:28 - `discover_debug_servers`29 - `connect_to_debug_server`302. Establish the baseline with all three calls before diagnosing deeper:31 - `get_connection_status`32 - `get_sdk_state`33 - `get_dat_readiness`34 Do not skip `get_connection_status`; it separates MCP/debug-server35 connectivity from SDK, registration, permission, session, and stream state.363. If the issue looks like Meta AI app or device boundary behavior, inspect:37 - `get_companion_boundary_diagnosis`38 - `get_device_path`39 - `get_permissions`40 - `get_device_properties`414. Ask the developer to reproduce the failing iOS flow while connected.425. Wait for narrow evidence instead of polling everything:43 - `wait_for_events` with `category` or `source`44 - `get_errors`45 - `get_event_digest`466. For handoff, collect a redacted bundle:47 - `export_diagnostic_bundle`4849## Evidence map5051- Configuration: app logs around `Wearables.configure()`52- URL callbacks: `Wearables.shared.handleUrl(_:)` return handling53- Registration: `Wearables.shared.startRegistration()` and54 `wearables.registrationState`55- Device availability: device selectors, `wearables.devices`,56 `device.compatibility`, and `device.properties`57- Device link: `device.linkState`58- Permissions: DAT permission APIs, `device.permission`, `check_permissions`,59 and `get_permissions`60- Session: `DeviceSession` creation/start, `deviceSession.state`,61 `session.state`, and session errors62- Stream: stream start, `stream.state`, frame counters, and stream errors63- DAM/DWA-visible transport: `sdk.usesDam` and DAM/DWA error values6465## Diagnosis patterns6667- Registration blocked: verify Info.plist DAT configuration, app URL scheme,68 Developer Mode setup, and callback handling.69- No eligible device: inspect discovered devices, selector behavior, device70 compatibility, and `device.linkState` before changing stream code.71- Permission failure: use `get_permissions` and `get_companion_boundary_diagnosis`;72 do not assume iOS system permission is the same as DAT permission through the73 Meta AI app/device boundary.74- Session fails before stream creation: inspect session errors and selected75 device compatibility before changing camera code.76- Stream fails after session start: inspect stream state, camera permission, and77 recent errors before changing frame processing.7879## Output expectations8081When summarizing, name the evidence plane, the blocking state, and the next82developer action. Example:8384```text85DAT readiness is blocked at registration: the app-visible registration state is86not registered. Check the Info.plist DAT URL scheme and MetaAppID, complete the87Meta AI callback through handleUrl(_:), then retry while the MCP connection waits88for registration and device-link events.89```