argent-tv-interact
Control and inspect TV apps via argent — Apple TV (tvOS), Android TV (leanback), and Amazon Fire TV (Vega). Boot the target, read focus, navigate with the D-pad remote, type, and screenshot. Use when a task targets a TV (runtimeKind "tv", or platform "vega"), or mentions Apple TV / tvOS / Android TV / leanback / Vega / Fire TV / VVD.
How do I install this agent skill?
npx skills add https://github.com/software-mansion/argent --skill argent-tv-interactIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill provides instructions for controlling and inspecting Apple TV, Android TV, and Amazon Fire TV applications using standard developer tools and CLI utilities. No malicious patterns were detected.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
Argent TV (Apple TV + Android TV + Fire TV)
Critical
- A TV is focus-driven, not touch-driven. Drive every interaction with
describe+tv-remote+keyboard; never usegesture-*/ coordinate taps — they don't apply on any TV platform. - Always
describebefore navigating to find the live cursor and your target — never guess focus from a screenshot. The cursor is the focused element; on Vega the toolkit often leavesfocusedfalse and marks the highlighted item[selected], so treat[selected]as the cursor when nothing reports[focused]. - Pass the
udidfromlist-devices— an Apple TV simulator UDID or an Android TV / Vegaserial. Dispatch is automatic from the id; the same tools drive all three.
The navigation loop
describe— find the cursor and your target (returns the focused element + all focusable ones, not a tap tree).tv-remote— move focus toward the target. Prefer one call with a path ending inselect, e.g.{button:["down","right","select"]}; count rows/columns from the frames to build the path.describeagain to confirm. On a miss, repeat.
Tools
describe {udid}— focus view: the focused /[selected]element + focusable elements with labels and normalized frames. The discovery tool — call before and after navigating. Empty tree → see the per-platform notes.tv-remote {udid, button}— D-pad / remote.buttonis one key or a whole path (run in one call). Keys:up/down/left/right,select,back,menu,home,playPause, plus media keysrewind/fastForward/next/previous/volumeUp/volumeDown/mute. Single:{button:"down"}; repeat:{button:"down", repeat:3}; path:{button:["up","right","select"]}.keyboard {udid, text}— type into the focused field (focus it withtv-remotefirst). Namedkeypresses (e.g.{key:"enter"}) work on Vega; on Apple TV / Android TV move focus withtv-remoteinstead.launch-app/restart-app/reinstall-app {udid, bundleId}—bundleIdfrom the app manifest. Vegareinstall-apptakesappPath= a.vpkg.screenshot {udid, scale?}— Apple TV viaxcrun simctl io(downscaled); Android TV / Vega host-side viaadb/screencap.
Per-platform
Apple TV (tvOS simulator)
- Boot like any iOS sim (
boot-device); the AX + HID daemons auto-start on the firstdescribe/tv-remote(first call may take a few seconds). Give the RN bundle a few seconds to render before the firstdescribe. - Media-transport / volume keys are rejected — the sim's HID stack ignores them (they work on Android TV / Vega).
- Dev build:
open-url {udid, url:"<scheme>://expo-development-client/?url=http%3A%2F%2F<HOST_IP>%3A8081"}(<HOST_IP>= your Mac's LAN IP, shown on the launcher).
Android TV (leanback emulator)
- Boot the leanback AVD like any emulator — see
argent-android-emulator-setup. describemay report zero focusables on a screen with visible tiles: manyreact-native-tvosscreens use RN's own focus engine, invisible to the OS accessibility tree.describeauto-falls-back to the full UI tree (and says so in the hint);tv-remotestill moves focus, so drive blind +screenshotto confirm.- Dev build:
adb -s <serial> reverse tcp:8081 tcp:8081, deep-link<pkg>://expo-development-client/?url=http%3A%2F%2F10.0.2.2%3A8081, dismiss the first dev-menu withadb shell input keyevent KEYCODE_DPAD_CENTER(not Back — Back exits the app).
Fire TV (Vega / VVD)
list-devicesshows aserial(use asudid) and avvdImage.boot-device {vvdImage}(e.g."tv") starts the single SDK-managed VVD; skip if one already runs.- Stop the VVD with
vega virtual-device stopin your shell. The CLI only tracks VVDs it started in the foreground, so it may report "not running" for one started viaboot-device; to restart that one useboot-device {vvdImage, force:true}(stops then re-boots). - Empty
describetree →restart-app(the automation toolkit attaches at launch), then retry. Input ignored → enable developer mode in the VVD:vsm developer-mode enable. - Editing
node_moduleshas no effect on a Release build — only Debug.vpkgbuilds load patchable JS. - Profiling / crashes →
amazon-devices-buildertools-mcpserver (analyze_perfetto_traces,get_app_hot_functions,symbolicate_acr); docs via itssearch_documentationtool.
Common gotchas
- Empty focus right after
launch-app/restart-appis the splash / loading window —describeretries internally; wait ~2-3s and retry on a cold start. - Passing a phone/tablet (
runtimeKind: "mobile") udid totv-remotefails with a clear "tvOS-only" / "Android-TV-only" error — pick a TV target fromlist-devices.
Fast Refresh (dev builds)
Needs a Debug build + Metro running. argent only connects to Metro — start Metro and port-forward yourself (any platform). Metro is fixed on :8081.
- Apple TV / Android TV: use the dev-build deep-links above;
npm startfor Metro. - Vega: build/install a Debug
.vpkg(vega device install-app -p <path>),npm start,vega device start-port-forwarding --port 8081 --forward false, thenvega device launch-app -a <appId>. Confirmhttp://localhost:8081/json/listshows aHermes React Nativetarget;.tsxedits then hot-reload.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/software-mansion/argent/argent-tv-interact">View argent-tv-interact on skillZs</a>