{
  "schema_version": 1,
  "type": "skill",
  "slug": "neon-mirror",
  "title": "Neon Mirror",
  "brief": "Use when the user wants to mirror an Android device, interact with an Android phone/tablet screen, view Android logcat, record touch macros, control display settings (DPI, resolution), or manage...",
  "version": "1.0.0",
  "tags": [],
  "license": "MIT",
  "source_path": "SKILL.md",
  "readme": "# NeonMirror — Android Device Mirroring for Gallia Viewer\n\nMirror a USB-connected Android device in Gallia Viewer with touch/keyboard interaction, logcat streaming, macro recording, and display settings control.\n\n## What the user asked\n\n$ARGUMENTS\n\n## Step 1: Display NeonMirror in Gallia Viewer\n\n```\nmcp__adom-viewer__gv_display({ url: 'https://<neon-mirror-url>.adom.cloud/', title: 'NeonMirror' })\n```\n\nReplace `<container-slug>` with the actual neon-mirror service container slug.\n\n## Step 2: Guide the User\n\n- **Start Mirror** — Click \"Start Mirror\" to begin screen mirroring\n- **Touch/Click** — Click on the mirrored screen to tap, drag to swipe\n- **Keyboard** — Focus the mirror canvas and type to send keystrokes\n- **Logcat** — Switch to the Logcat tab, enter a package name, and click Start\n- **Macros** — Switch to the Macros tab, name a macro, and click Record. Perform touch actions, then click Stop.\n- **Display Settings** — Change DPI, resolution, or toggle screen on/off from the Settings tab\n- **Console** — View raw adb/scrcpy output in the Console tab\n\n## Features\n\n- Real-time MJPEG screen mirroring via scrcpy\n- Touch and keyboard input forwarding\n- Auto-reconnect on device disconnect with retry loop\n- USB device detection (polls adb devices every 3 seconds)\n- Logcat viewer with package name and log level filtering\n- DPI and resolution override controls\n- Screen on/off and stay-awake-while-plugged toggle\n- Touch macro recording and replay\n- Raw console output from adb, scrcpy, and ffmpeg\n\n## Service Health Check\n\n```\nGET https://<neon-mirror-url>.adom.cloud/health\n```\n\nReturns: `{ ok, service, state, device, mirroring, uptime }`\n\n## WebSocket API\n\nConnect to `wss://<service-url>/ws` for real-time communication.\n\n### Commands (client to server)\n\n| Type | Fields | Description |\n|------|--------|-------------|\n| `start_mirror` | `maxFps?`, `bitRate?`, `maxSize?` | Start mirroring |\n| `stop_mirror` | — | Stop mirroring |\n| `touch` | `action`, `x`, `y`, `width`, `height` | Touch event |\n| `key` | `keyCode` | Android keyevent |\n| `text` | `text` | Type text |\n| `start_logcat` | `packageName?`, `level?` | Start logcat |\n| `stop_logcat` | — | Stop logcat |\n| `set_density` | `dpi` | Change DPI |\n| `set_size` | `width`, `height` | Change resolution |\n| `reset_display` | — | Reset display settings |\n| `screen_on` / `screen_off` | — | Wake/sleep screen |\n| `stay_awake` | `enabled` | Toggle stay on while plugged |\n| `macro_start` | `name` | Start recording macro |\n| `macro_stop` | — | Stop recording |\n| `macro_play` | `name` | Replay macro |\n| `macro_list` | — | List saved macros |\n| `macro_delete` | `name` | Delete macro |\n\n## Troubleshooting\n\n- **No device detected**: Ensure USB debugging is enabled on the Android device and the device is connected via USB to the service container\n- **Mirror won't start**: Check that adb, scrcpy, and ffmpeg are installed (`install-deps.sh`)\n- **Black screen**: The device may need to be unlocked first. Use \"Screen On\" in Settings\n- **High latency**: Reduce bitrate or max size in Settings tab",
  "author": {
    "id": "695820315b5f1e4db2fcf602",
    "name": "Kyle Bergstedt",
    "email": "[email protected]"
  },
  "visibility": {
    "public": true
  },
  "hero": null,
  "sample_prompts": [],
  "discovery_triggers": [],
  "discovery_pitch": null,
  "metadata": {},
  "created_at": "2026-05-28T05:29:51.292Z",
  "updated_at": "2026-05-28T05:29:51.292Z",
  "sub_skills": [],
  "parent_app": null
}