{"owner":"sipeed","repo":"NanoKVM","hasSkills":true,"totalSkillsCount":2,"totalTokensCount":1801,"categories":["anthropic-skill","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["kvmapp/picoclaw/skills/kvm-control/SKILL.md","tools/logo_generator/readme.md"],"skills":{"kvmapp/picoclaw/skills/kvm-control/SKILL.md":"---\nname: kvm-control\ndescription: Control the downstream remote host connected to NanoKVM through the NanoKVM Bridge API when a PicoClaw session needs screenshots, mouse actions, keyboard input, hotkeys, scrolling, or drag operations. Invoke only ./scripts/nanokvm-bridge.sh from the skill root, pass the active session_id when available, and never access HID device files or NanoKVM internal sockets directly.\n---\n\n# NanoKVM Bridge\n\nUse this skill when you need to inspect or operate the downstream remote host desktop that NanoKVM exposes over HDMI and USB HID. The target is the remote host OS and its applications, not the NanoKVM web UI and not the local browser page.\n\n> **Fallback skill.** Prefer the `kvm_screenshot` and `kvm_actions` MCP tools for remote GUI work. Use this shell-based skill only when MCP tools are unavailable.\n\n## Rules\n\n1. Only use `./scripts/nanokvm-bridge.sh`. Prefer `./scripts/nanokvm-bridge.sh ...` over `scripts/...`, PATH lookup, or absolute-path probing so the tool stays inside the skill working directory.\n2. Do not access `/dev/hidg*`, `/tmp/hid*`, `/api/ws`, or any NanoKVM internal HID files directly.\n3. Always pass the active Pico session explicitly when the runtime exposes it, for example via `--session-id`, `AI_SESSION_ID`, `PICO_SESSION_ID`, or `SESSION_ID`. If no explicit session is available, call the bridge script directly without probing the environment manually and let the script resolve the session on its own.\n4. Assume the skill working directory is the `kvm-control` skill root. Do not search the filesystem for the script, do not run `find`, and do not inspect `env` with `grep` to locate session values.\n5. Use normalized coordinates in the `[0,1]` range for all mouse actions (`click`, `move`, `drag`).\n6. A successful bridge command only means the HID event was sent. It does not prove that the remote UI changed. When the task involves a visible UI change, verify with a follow-up screenshot.\n\n## Common Patterns\n\nUse these templates for common sequences. Choose mouse or keyboard based on what is visible and simplest.\n\n### Click a visible UI element (button, icon, menu item, link)\n\n```sh\n./scripts/nanokvm-bridge.sh click --x <X> --y <Y> --button left\n```\n\n### Double-click to open a file, folder, or desktop icon\n\n```sh\n./scripts/nanokvm-bridge.sh double-click --x <X> --y <Y>\n```\n\n### Open a URL (when browser is already focused and address bar shortcut is confirmed)\n\n```sh\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n```\n\n### Launch an application (when the launcher shortcut is confirmed for the current OS)\n\n```sh\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n```\n\n### Type text and press Enter (for search boxes, dialogs, prompts)\n\n```sh\n./scripts/nanokvm-bridge.sh type-enter --text \"<TEXT>\"\n```\n\n> Replace `<X>` and `<Y>` with normalized `[0,1]` coordinates from the screenshot. Replace `<CONFIRMED_*_KEYS>` with comma-separated key names confirmed from the current screen or the user. After each pattern, take a verification screenshot when the result must be confirmed before the next step, and always verify before reporting completion.\n\n## Commands\n\n```sh\n./scripts/nanokvm-bridge.sh screenshot --format base64\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 480 --quality 40\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 640 --quality 50\n./scripts/nanokvm-bridge.sh click --x 0.42 --y 0.31 --button left\n./scripts/nanokvm-bridge.sh double-click --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh move --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh type --text \"hello world\"\n./scripts/nanokvm-bridge.sh type-enter --text \"hello world\"\n./scripts/nanokvm-bridge.sh hotkey --keys <KEY1>,<KEY2>\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n./scripts/nanokvm-bridge.sh scroll --direction down --amount 3\n./scripts/nanokvm-bridge.sh drag --from-x 0.20 --from-y 0.40 --to-x 0.80 --to-y 0.40\n./scripts/nanokvm-bridge.sh wait --duration-ms 800\n./scripts/nanokvm-bridge.sh actions-json '{\"actions\":[{\"action\":\"move\",\"x\":0.42,\"y\":0.31},{\"action\":\"click\",\"x\":0.42,\"y\":0.31,\"button\":\"left\"}]}'\n```\n\n## Output Handling\n\n- `screenshot --format base64` returns the raw NanoKVM JSON response.\n- Action commands return the raw NanoKVM JSON response.\n- On failure, the script writes a structured JSON error to stderr and exits non-zero.\n\n## Notes\n\n- `screenshot` captures the HDMI frame seen by NanoKVM, which should correspond to the downstream remote host.\n- For quick verification screenshots, use `--width 480 --quality 40`. Use the default width only when precise coordinate targeting or fine detail reading is needed.\n- `type` is the safest way to enter normal text.\n- `hotkey --keys` expects a comma-separated list. Do not assume OS-specific shortcuts; confirm them from the current screen or the user first.\n- Prefer the built-in macro commands for common deterministic flows:\n  - `double-click` for opening obvious targets\n  - `type-enter` for search boxes, dialogs, and prompts\n  - `launch-app` only after the launcher shortcut is confirmed from the current screen or the user\n  - `open-url` only when a browser is already focused and the address bar shortcut is confirmed from the current screen or the user\n- `actions-json` accepts a full NanoKVM request body. Use it for deterministic multi-step sequences to minimize round-trips.\n","tools/logo_generator/readme.md":"# NanoKVM Logo Generator\n\n**Compatible Hardware:** NanoKVM-Cube, NanoKVM-PCIe\n\n🛠️ **Tool Description:**\nThis is a logo generator for the NanoKVM OLED display and Web. You can use it to create a `logo.bin` and `logo.ico` file and place them in the `/boot` directory of your NanoKVM system.\n\n📋 **Instructions:**\n\n1.  **Install required libraries:**\n    ```bash\n    pip install Pillow numpy textual\n    ```\n\n2.  **Prepare your logo image:**\n    Make sure it's as square as possible for best results 🖼️\n\n3.  **Run the script:**\n    ```bash\n    python logo_generator.py path/to/your_logo.png\n    ```\n\n4.  **Choose your language:**\n    Select either English or Chinese\n\n5.  **Adjust the contrast:**\n    Fine-tune the contrast based on the preview below until you're happy with how it looks ✨\n\n6.  **Fine-tune pixel by pixel:**\n    Click on individual pixels to adjust details. If you prefer an inverted display, just click the invert button 🔄\n\n7.  **Export and deploy:**\n    Export the `logo.bin` & `logo.ico`, then copy it to the `/boot` directory of your NanoKVM system. You can do this by:\n    *   Enabling SSH and using SCP to copy the file 💻\n    *   Or directly placing it in the boot partition of your TF card 💾\n\n8.  **Reboot and enjoy:**\n    Make sure your NanoKVM application version is greater than 2.3.6 ✅\n    Reboot your NanoKVM, and you should see your custom logo on the OLED display! 🎉"},"files":{"kvmapp/picoclaw/skills/kvm-control/SKILL.md":"---\nname: kvm-control\ndescription: Control the downstream remote host connected to NanoKVM through the NanoKVM Bridge API when a PicoClaw session needs screenshots, mouse actions, keyboard input, hotkeys, scrolling, or drag operations. Invoke only ./scripts/nanokvm-bridge.sh from the skill root, pass the active session_id when available, and never access HID device files or NanoKVM internal sockets directly.\n---\n\n# NanoKVM Bridge\n\nUse this skill when you need to inspect or operate the downstream remote host desktop that NanoKVM exposes over HDMI and USB HID. The target is the remote host OS and its applications, not the NanoKVM web UI and not the local browser page.\n\n> **Fallback skill.** Prefer the `kvm_screenshot` and `kvm_actions` MCP tools for remote GUI work. Use this shell-based skill only when MCP tools are unavailable.\n\n## Rules\n\n1. Only use `./scripts/nanokvm-bridge.sh`. Prefer `./scripts/nanokvm-bridge.sh ...` over `scripts/...`, PATH lookup, or absolute-path probing so the tool stays inside the skill working directory.\n2. Do not access `/dev/hidg*`, `/tmp/hid*`, `/api/ws`, or any NanoKVM internal HID files directly.\n3. Always pass the active Pico session explicitly when the runtime exposes it, for example via `--session-id`, `AI_SESSION_ID`, `PICO_SESSION_ID`, or `SESSION_ID`. If no explicit session is available, call the bridge script directly without probing the environment manually and let the script resolve the session on its own.\n4. Assume the skill working directory is the `kvm-control` skill root. Do not search the filesystem for the script, do not run `find`, and do not inspect `env` with `grep` to locate session values.\n5. Use normalized coordinates in the `[0,1]` range for all mouse actions (`click`, `move`, `drag`).\n6. A successful bridge command only means the HID event was sent. It does not prove that the remote UI changed. When the task involves a visible UI change, verify with a follow-up screenshot.\n\n## Common Patterns\n\nUse these templates for common sequences. Choose mouse or keyboard based on what is visible and simplest.\n\n### Click a visible UI element (button, icon, menu item, link)\n\n```sh\n./scripts/nanokvm-bridge.sh click --x <X> --y <Y> --button left\n```\n\n### Double-click to open a file, folder, or desktop icon\n\n```sh\n./scripts/nanokvm-bridge.sh double-click --x <X> --y <Y>\n```\n\n### Open a URL (when browser is already focused and address bar shortcut is confirmed)\n\n```sh\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n```\n\n### Launch an application (when the launcher shortcut is confirmed for the current OS)\n\n```sh\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n```\n\n### Type text and press Enter (for search boxes, dialogs, prompts)\n\n```sh\n./scripts/nanokvm-bridge.sh type-enter --text \"<TEXT>\"\n```\n\n> Replace `<X>` and `<Y>` with normalized `[0,1]` coordinates from the screenshot. Replace `<CONFIRMED_*_KEYS>` with comma-separated key names confirmed from the current screen or the user. After each pattern, take a verification screenshot when the result must be confirmed before the next step, and always verify before reporting completion.\n\n## Commands\n\n```sh\n./scripts/nanokvm-bridge.sh screenshot --format base64\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 480 --quality 40\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 640 --quality 50\n./scripts/nanokvm-bridge.sh click --x 0.42 --y 0.31 --button left\n./scripts/nanokvm-bridge.sh double-click --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh move --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh type --text \"hello world\"\n./scripts/nanokvm-bridge.sh type-enter --text \"hello world\"\n./scripts/nanokvm-bridge.sh hotkey --keys <KEY1>,<KEY2>\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n./scripts/nanokvm-bridge.sh scroll --direction down --amount 3\n./scripts/nanokvm-bridge.sh drag --from-x 0.20 --from-y 0.40 --to-x 0.80 --to-y 0.40\n./scripts/nanokvm-bridge.sh wait --duration-ms 800\n./scripts/nanokvm-bridge.sh actions-json '{\"actions\":[{\"action\":\"move\",\"x\":0.42,\"y\":0.31},{\"action\":\"click\",\"x\":0.42,\"y\":0.31,\"button\":\"left\"}]}'\n```\n\n## Output Handling\n\n- `screenshot --format base64` returns the raw NanoKVM JSON response.\n- Action commands return the raw NanoKVM JSON response.\n- On failure, the script writes a structured JSON error to stderr and exits non-zero.\n\n## Notes\n\n- `screenshot` captures the HDMI frame seen by NanoKVM, which should correspond to the downstream remote host.\n- For quick verification screenshots, use `--width 480 --quality 40`. Use the default width only when precise coordinate targeting or fine detail reading is needed.\n- `type` is the safest way to enter normal text.\n- `hotkey --keys` expects a comma-separated list. Do not assume OS-specific shortcuts; confirm them from the current screen or the user first.\n- Prefer the built-in macro commands for common deterministic flows:\n  - `double-click` for opening obvious targets\n  - `type-enter` for search boxes, dialogs, and prompts\n  - `launch-app` only after the launcher shortcut is confirmed from the current screen or the user\n  - `open-url` only when a browser is already focused and the address bar shortcut is confirmed from the current screen or the user\n- `actions-json` accepts a full NanoKVM request body. Use it for deterministic multi-step sequences to minimize round-trips.\n","tools/logo_generator/readme.md":"# NanoKVM Logo Generator\n\n**Compatible Hardware:** NanoKVM-Cube, NanoKVM-PCIe\n\n🛠️ **Tool Description:**\nThis is a logo generator for the NanoKVM OLED display and Web. You can use it to create a `logo.bin` and `logo.ico` file and place them in the `/boot` directory of your NanoKVM system.\n\n📋 **Instructions:**\n\n1.  **Install required libraries:**\n    ```bash\n    pip install Pillow numpy textual\n    ```\n\n2.  **Prepare your logo image:**\n    Make sure it's as square as possible for best results 🖼️\n\n3.  **Run the script:**\n    ```bash\n    python logo_generator.py path/to/your_logo.png\n    ```\n\n4.  **Choose your language:**\n    Select either English or Chinese\n\n5.  **Adjust the contrast:**\n    Fine-tune the contrast based on the preview below until you're happy with how it looks ✨\n\n6.  **Fine-tune pixel by pixel:**\n    Click on individual pixels to adjust details. If you prefer an inverted display, just click the invert button 🔄\n\n7.  **Export and deploy:**\n    Export the `logo.bin` & `logo.ico`, then copy it to the `/boot` directory of your NanoKVM system. You can do this by:\n    *   Enabling SSH and using SCP to copy the file 💻\n    *   Or directly placing it in the boot partition of your TF card 💾\n\n8.  **Reboot and enjoy:**\n    Make sure your NanoKVM application version is greater than 2.3.6 ✅\n    Reboot your NanoKVM, and you should see your custom logo on the OLED display! 🎉"},"items":[{"name":"SKILL.md","path":"kvmapp/picoclaw/skills/kvm-control/SKILL.md","rawUrl":"https://raw.githubusercontent.com/sipeed/NanoKVM/HEAD/kvmapp/picoclaw/skills/kvm-control/SKILL.md","title":"kvm-control","category":"anthropic-skill","format":"markdown","content":"---\nname: kvm-control\ndescription: Control the downstream remote host connected to NanoKVM through the NanoKVM Bridge API when a PicoClaw session needs screenshots, mouse actions, keyboard input, hotkeys, scrolling, or drag operations. Invoke only ./scripts/nanokvm-bridge.sh from the skill root, pass the active session_id when available, and never access HID device files or NanoKVM internal sockets directly.\n---\n\n# NanoKVM Bridge\n\nUse this skill when you need to inspect or operate the downstream remote host desktop that NanoKVM exposes over HDMI and USB HID. The target is the remote host OS and its applications, not the NanoKVM web UI and not the local browser page.\n\n> **Fallback skill.** Prefer the `kvm_screenshot` and `kvm_actions` MCP tools for remote GUI work. Use this shell-based skill only when MCP tools are unavailable.\n\n## Rules\n\n1. Only use `./scripts/nanokvm-bridge.sh`. Prefer `./scripts/nanokvm-bridge.sh ...` over `scripts/...`, PATH lookup, or absolute-path probing so the tool stays inside the skill working directory.\n2. Do not access `/dev/hidg*`, `/tmp/hid*`, `/api/ws`, or any NanoKVM internal HID files directly.\n3. Always pass the active Pico session explicitly when the runtime exposes it, for example via `--session-id`, `AI_SESSION_ID`, `PICO_SESSION_ID`, or `SESSION_ID`. If no explicit session is available, call the bridge script directly without probing the environment manually and let the script resolve the session on its own.\n4. Assume the skill working directory is the `kvm-control` skill root. Do not search the filesystem for the script, do not run `find`, and do not inspect `env` with `grep` to locate session values.\n5. Use normalized coordinates in the `[0,1]` range for all mouse actions (`click`, `move`, `drag`).\n6. A successful bridge command only means the HID event was sent. It does not prove that the remote UI changed. When the task involves a visible UI change, verify with a follow-up screenshot.\n\n## Common Patterns\n\nUse these templates for common sequences. Choose mouse or keyboard based on what is visible and simplest.\n\n### Click a visible UI element (button, icon, menu item, link)\n\n```sh\n./scripts/nanokvm-bridge.sh click --x <X> --y <Y> --button left\n```\n\n### Double-click to open a file, folder, or desktop icon\n\n```sh\n./scripts/nanokvm-bridge.sh double-click --x <X> --y <Y>\n```\n\n### Open a URL (when browser is already focused and address bar shortcut is confirmed)\n\n```sh\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n```\n\n### Launch an application (when the launcher shortcut is confirmed for the current OS)\n\n```sh\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n```\n\n### Type text and press Enter (for search boxes, dialogs, prompts)\n\n```sh\n./scripts/nanokvm-bridge.sh type-enter --text \"<TEXT>\"\n```\n\n> Replace `<X>` and `<Y>` with normalized `[0,1]` coordinates from the screenshot. Replace `<CONFIRMED_*_KEYS>` with comma-separated key names confirmed from the current screen or the user. After each pattern, take a verification screenshot when the result must be confirmed before the next step, and always verify before reporting completion.\n\n## Commands\n\n```sh\n./scripts/nanokvm-bridge.sh screenshot --format base64\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 480 --quality 40\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 640 --quality 50\n./scripts/nanokvm-bridge.sh click --x 0.42 --y 0.31 --button left\n./scripts/nanokvm-bridge.sh double-click --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh move --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh type --text \"hello world\"\n./scripts/nanokvm-bridge.sh type-enter --text \"hello world\"\n./scripts/nanokvm-bridge.sh hotkey --keys <KEY1>,<KEY2>\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n./scripts/nanokvm-bridge.sh scroll --direction down --amount 3\n./scripts/nanokvm-bridge.sh drag --from-x 0.20 --from-y 0.40 --to-x 0.80 --to-y 0.40\n./scripts/nanokvm-bridge.sh wait --duration-ms 800\n./scripts/nanokvm-bridge.sh actions-json '{\"actions\":[{\"action\":\"move\",\"x\":0.42,\"y\":0.31},{\"action\":\"click\",\"x\":0.42,\"y\":0.31,\"button\":\"left\"}]}'\n```\n\n## Output Handling\n\n- `screenshot --format base64` returns the raw NanoKVM JSON response.\n- Action commands return the raw NanoKVM JSON response.\n- On failure, the script writes a structured JSON error to stderr and exits non-zero.\n\n## Notes\n\n- `screenshot` captures the HDMI frame seen by NanoKVM, which should correspond to the downstream remote host.\n- For quick verification screenshots, use `--width 480 --quality 40`. Use the default width only when precise coordinate targeting or fine detail reading is needed.\n- `type` is the safest way to enter normal text.\n- `hotkey --keys` expects a comma-separated list. Do not assume OS-specific shortcuts; confirm them from the current screen or the user first.\n- Prefer the built-in macro commands for common deterministic flows:\n  - `double-click` for opening obvious targets\n  - `type-enter` for search boxes, dialogs, and prompts\n  - `launch-app` only after the launcher shortcut is confirmed from the current screen or the user\n  - `open-url` only when a browser is already focused and the address bar shortcut is confirmed from the current screen or the user\n- `actions-json` accepts a full NanoKVM request body. Use it for deterministic multi-step sequences to minimize round-trips.\n","frontmatter":{"name":"kvm-control","description":"Control the downstream remote host connected to NanoKVM through the NanoKVM Bridge API when a PicoClaw session needs screenshots, mouse actions, keyboard input, hotkeys, scrolling, or drag operations. Invoke only ./scripts/nanokvm-bridge.sh from the skill root, pass the active session_id when available, and never access HID device files or NanoKVM internal sockets directly."},"isInternal":false,"tokens":1421,"sizeBytes":5603},{"name":"readme.md","path":"tools/logo_generator/readme.md","rawUrl":"https://raw.githubusercontent.com/sipeed/NanoKVM/HEAD/tools/logo_generator/readme.md","title":"logo_generator Documentation","category":"plugin-manifest","format":"markdown","content":"# NanoKVM Logo Generator\n\n**Compatible Hardware:** NanoKVM-Cube, NanoKVM-PCIe\n\n🛠️ **Tool Description:**\nThis is a logo generator for the NanoKVM OLED display and Web. You can use it to create a `logo.bin` and `logo.ico` file and place them in the `/boot` directory of your NanoKVM system.\n\n📋 **Instructions:**\n\n1.  **Install required libraries:**\n    ```bash\n    pip install Pillow numpy textual\n    ```\n\n2.  **Prepare your logo image:**\n    Make sure it's as square as possible for best results 🖼️\n\n3.  **Run the script:**\n    ```bash\n    python logo_generator.py path/to/your_logo.png\n    ```\n\n4.  **Choose your language:**\n    Select either English or Chinese\n\n5.  **Adjust the contrast:**\n    Fine-tune the contrast based on the preview below until you're happy with how it looks ✨\n\n6.  **Fine-tune pixel by pixel:**\n    Click on individual pixels to adjust details. If you prefer an inverted display, just click the invert button 🔄\n\n7.  **Export and deploy:**\n    Export the `logo.bin` & `logo.ico`, then copy it to the `/boot` directory of your NanoKVM system. You can do this by:\n    *   Enabling SSH and using SCP to copy the file 💻\n    *   Or directly placing it in the boot partition of your TF card 💾\n\n8.  **Reboot and enjoy:**\n    Make sure your NanoKVM application version is greater than 2.3.6 ✅\n    Reboot your NanoKVM, and you should see your custom logo on the OLED display! 🎉","isInternal":false,"tokens":380,"sizeBytes":1422}],"systemPromptSnippet":"<yakaai_skills repo=\"sipeed/NanoKVM\">\n<!-- File: kvmapp/picoclaw/skills/kvm-control/SKILL.md (Tokens: ~1421 | Category: anthropic-skill) -->\n---\nname: kvm-control\ndescription: Control the downstream remote host connected to NanoKVM through the NanoKVM Bridge API when a PicoClaw session needs screenshots, mouse actions, keyboard input, hotkeys, scrolling, or drag operations. Invoke only ./scripts/nanokvm-bridge.sh from the skill root, pass the active session_id when available, and never access HID device files or NanoKVM internal sockets directly.\n---\n\n# NanoKVM Bridge\n\nUse this skill when you need to inspect or operate the downstream remote host desktop that NanoKVM exposes over HDMI and USB HID. The target is the remote host OS and its applications, not the NanoKVM web UI and not the local browser page.\n\n> **Fallback skill.** Prefer the `kvm_screenshot` and `kvm_actions` MCP tools for remote GUI work. Use this shell-based skill only when MCP tools are unavailable.\n\n## Rules\n\n1. Only use `./scripts/nanokvm-bridge.sh`. Prefer `./scripts/nanokvm-bridge.sh ...` over `scripts/...`, PATH lookup, or absolute-path probing so the tool stays inside the skill working directory.\n2. Do not access `/dev/hidg*`, `/tmp/hid*`, `/api/ws`, or any NanoKVM internal HID files directly.\n3. Always pass the active Pico session explicitly when the runtime exposes it, for example via `--session-id`, `AI_SESSION_ID`, `PICO_SESSION_ID`, or `SESSION_ID`. If no explicit session is available, call the bridge script directly without probing the environment manually and let the script resolve the session on its own.\n4. Assume the skill working directory is the `kvm-control` skill root. Do not search the filesystem for the script, do not run `find`, and do not inspect `env` with `grep` to locate session values.\n5. Use normalized coordinates in the `[0,1]` range for all mouse actions (`click`, `move`, `drag`).\n6. A successful bridge command only means the HID event was sent. It does not prove that the remote UI changed. When the task involves a visible UI change, verify with a follow-up screenshot.\n\n## Common Patterns\n\nUse these templates for common sequences. Choose mouse or keyboard based on what is visible and simplest.\n\n### Click a visible UI element (button, icon, menu item, link)\n\n```sh\n./scripts/nanokvm-bridge.sh click --x <X> --y <Y> --button left\n```\n\n### Double-click to open a file, folder, or desktop icon\n\n```sh\n./scripts/nanokvm-bridge.sh double-click --x <X> --y <Y>\n```\n\n### Open a URL (when browser is already focused and address bar shortcut is confirmed)\n\n```sh\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n```\n\n### Launch an application (when the launcher shortcut is confirmed for the current OS)\n\n```sh\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n```\n\n### Type text and press Enter (for search boxes, dialogs, prompts)\n\n```sh\n./scripts/nanokvm-bridge.sh type-enter --text \"<TEXT>\"\n```\n\n> Replace `<X>` and `<Y>` with normalized `[0,1]` coordinates from the screenshot. Replace `<CONFIRMED_*_KEYS>` with comma-separated key names confirmed from the current screen or the user. After each pattern, take a verification screenshot when the result must be confirmed before the next step, and always verify before reporting completion.\n\n## Commands\n\n```sh\n./scripts/nanokvm-bridge.sh screenshot --format base64\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 480 --quality 40\n./scripts/nanokvm-bridge.sh screenshot --format base64 --width 640 --quality 50\n./scripts/nanokvm-bridge.sh click --x 0.42 --y 0.31 --button left\n./scripts/nanokvm-bridge.sh double-click --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh move --x 0.42 --y 0.31\n./scripts/nanokvm-bridge.sh type --text \"hello world\"\n./scripts/nanokvm-bridge.sh type-enter --text \"hello world\"\n./scripts/nanokvm-bridge.sh hotkey --keys <KEY1>,<KEY2>\n./scripts/nanokvm-bridge.sh launch-app --text \"<APP_NAME>\" --launcher-shortcut <CONFIRMED_LAUNCHER_KEYS>\n./scripts/nanokvm-bridge.sh open-url --url \"<URL>\" --focus-shortcut <CONFIRMED_ADDRESS_BAR_KEYS>\n./scripts/nanokvm-bridge.sh scroll --direction down --amount 3\n./scripts/nanokvm-bridge.sh drag --from-x 0.20 --from-y 0.40 --to-x 0.80 --to-y 0.40\n./scripts/nanokvm-bridge.sh wait --duration-ms 800\n./scripts/nanokvm-bridge.sh actions-json '{\"actions\":[{\"action\":\"move\",\"x\":0.42,\"y\":0.31},{\"action\":\"click\",\"x\":0.42,\"y\":0.31,\"button\":\"left\"}]}'\n```\n\n## Output Handling\n\n- `screenshot --format base64` returns the raw NanoKVM JSON response.\n- Action commands return the raw NanoKVM JSON response.\n- On failure, the script writes a structured JSON error to stderr and exits non-zero.\n\n## Notes\n\n- `screenshot` captures the HDMI frame seen by NanoKVM, which should correspond to the downstream remote host.\n- For quick verification screenshots, use `--width 480 --quality 40`. Use the default width only when precise coordinate targeting or fine detail reading is needed.\n- `type` is the safest way to enter normal text.\n- `hotkey --keys` expects a comma-separated list. Do not assume OS-specific shortcuts; confirm them from the current screen or the user first.\n- Prefer the built-in macro commands for common deterministic flows:\n  - `double-click` for opening obvious targets\n  - `type-enter` for search boxes, dialogs, and prompts\n  - `launch-app` only after the launcher shortcut is confirmed from the current screen or the user\n  - `open-url` only when a browser is already focused and the address bar shortcut is confirmed from the current screen or the user\n- `actions-json` accepts a full NanoKVM request body. Use it for deterministic multi-step sequences to minimize round-trips.\n\n<!-- File: tools/logo_generator/readme.md (Tokens: ~380 | Category: plugin-manifest) -->\n# NanoKVM Logo Generator\n\n**Compatible Hardware:** NanoKVM-Cube, NanoKVM-PCIe\n\n🛠️ **Tool Description:**\nThis is a logo generator for the NanoKVM OLED display and Web. You can use it to create a `logo.bin` and `logo.ico` file and place them in the `/boot` directory of your NanoKVM system.\n\n📋 **Instructions:**\n\n1.  **Install required libraries:**\n    ```bash\n    pip install Pillow numpy textual\n    ```\n\n2.  **Prepare your logo image:**\n    Make sure it's as square as possible for best results 🖼️\n\n3.  **Run the script:**\n    ```bash\n    python logo_generator.py path/to/your_logo.png\n    ```\n\n4.  **Choose your language:**\n    Select either English or Chinese\n\n5.  **Adjust the contrast:**\n    Fine-tune the contrast based on the preview below until you're happy with how it looks ✨\n\n6.  **Fine-tune pixel by pixel:**\n    Click on individual pixels to adjust details. If you prefer an inverted display, just click the invert button 🔄\n\n7.  **Export and deploy:**\n    Export the `logo.bin` & `logo.ico`, then copy it to the `/boot` directory of your NanoKVM system. You can do this by:\n    *   Enabling SSH and using SCP to copy the file 💻\n    *   Or directly placing it in the boot partition of your TF card 💾\n\n8.  **Reboot and enjoy:**\n    Make sure your NanoKVM application version is greater than 2.3.6 ✅\n    Reboot your NanoKVM, and you should see your custom logo on the OLED display! 🎉\n</yakaai_skills>"}