Description
When another rn-dev-agent session's bridge owns a simulator, device_snapshot action=open fails with DEVICE_BUSY (holder PID/project/heartbeat shown — which is great). But the refusal is all-or-nothing: even read-only operations (screenshot, accessibility snapshot) are impossible against that device, because they all require opening a session first.
Real scenario: a verification-only session needed a screenshot of a simulator legitimately owned by another active session. CDP tools worked fine (they don't go through the arbiter), but the visual capture had to fall back to raw xcrun simctl. A read-only lease would have covered it without any risk of interfering with the owner's interactions.
Environment
| Field |
Value |
| Plugin version |
0.70.10 |
| CDP Bridge |
0.65.8 |
| OS |
Darwin 25.5.0 |
| Node.js |
v24.14.0 |
| Metro |
running (multiple instances across worktrees) |
| iOS Simulators |
3 booted |
| Android |
1 physical device connected |
| legacy agent-device |
0.17.5 (still installed) |
| maestro-runner |
1.0.9 |
Recent Tool Activity
Telemetry: stale (last event 52 days ago — telemetry capture is not active in this plugin version; removed with the Experience Engine, GH #200).
CDP State at Time of Report
Connected to the physical Android device target on Metro; 0 JS errors.
Steps to Reproduce
- Session A:
device_snapshot action=open on simulator X (holds the arbiter lease, heartbeating).
- Session B:
device_snapshot action=open on the same simulator (even with attachOnly=true) → DEVICE_BUSY.
- Session B now has no plugin-native way to screenshot or snapshot simulator X.
Workaround
Raw xcrun simctl io <UDID> screenshot / adb exec-out screencap for pixels; CDP tools (cdp_component_tree, cdp_evaluate) for structure, since they bypass the arbiter.
Suggested Fix
A read-only lease tier in the arbiter: device_snapshot action=open mode=readonly (or a session-less device_screenshot deviceId=...) that permits screenshot/snapshot on a busy device while still refusing taps, fills, and gestures.
Submitted via /rn-dev-agent:send-feedback — data sanitized automatically
Description
When another rn-dev-agent session's bridge owns a simulator,
device_snapshot action=openfails withDEVICE_BUSY(holder PID/project/heartbeat shown — which is great). But the refusal is all-or-nothing: even read-only operations (screenshot, accessibility snapshot) are impossible against that device, because they all require opening a session first.Real scenario: a verification-only session needed a screenshot of a simulator legitimately owned by another active session. CDP tools worked fine (they don't go through the arbiter), but the visual capture had to fall back to raw
xcrun simctl. A read-only lease would have covered it without any risk of interfering with the owner's interactions.Environment
Recent Tool Activity
Telemetry: stale (last event 52 days ago — telemetry capture is not active in this plugin version; removed with the Experience Engine, GH #200).
CDP State at Time of Report
Connected to the physical Android device target on Metro; 0 JS errors.
Steps to Reproduce
device_snapshot action=openon simulator X (holds the arbiter lease, heartbeating).device_snapshot action=openon the same simulator (even withattachOnly=true) →DEVICE_BUSY.Workaround
Raw
xcrun simctl io <UDID> screenshot/adb exec-out screencapfor pixels; CDP tools (cdp_component_tree,cdp_evaluate) for structure, since they bypass the arbiter.Suggested Fix
A read-only lease tier in the arbiter:
device_snapshot action=open mode=readonly(or a session-lessdevice_screenshot deviceId=...) that permits screenshot/snapshot on a busy device while still refusing taps, fills, and gestures.Submitted via
/rn-dev-agent:send-feedback— data sanitized automatically