{"id":"1ecbaa35-dffe-42d0-8405-355b127021e7","shortId":"pxZSFL","kind":"skill","title":"agent-computer-use","tagline":"REQUIRED for any task that involves operating a desktop application — opening apps, clicking buttons, typing into fields, pressing keys, scrolling, dragging, reading what's on screen, moving or resizing windows, or verifying state after an action. Always use the `agent-cu` CLI co","description":"# agent-computer-use — Computer use Skill\n\nYou have access to `agent-cu`, a CLI tool that controls desktop applications. You can click buttons, type text, read screens, scroll, drag files, move windows — all from the terminal.\n\n## First-run setup (user action)\n\nThe first time you run an `agent-cu` command, Claude Code prompts the user to approve it. The user has three options, in order of preference:\n\n1. **Easiest** — run `agent-cu setup` in a terminal. Interactive wizard that writes `Bash(agent-cu *)` to the right settings file. One-time. If the user seems frustrated by repeated approval prompts, suggest this.\n\n   If you (the agent) are running it yourself and can't answer prompts, use the non-interactive flags:\n   - `agent-cu setup --yes` → unsupervised + global (recommended default)\n   - `agent-cu setup --mode <unsupervised|supervised> --scope <global|project>` for specific combos\n\n2. **Quickest** — pick _\"Yes, and don't ask again for: `agent-cu *`\"_ in the approval prompt. Covers only that specific subcommand pattern; you'll get prompted again for other subcommands.\n3. **Manual** — add `\"Bash(agent-cu *)\"` to `~/.claude/settings.json` under `permissions.allow`.\n\nDo not attempt to modify the user's settings file yourself — direct them to `agent-cu setup` instead.\n\n## How to think\n\n**Think like a human sitting at the computer.** Before you act, ask yourself: what would I see on screen? What would I click? What would I type?\n\nA human:\n\n1. Looks at the screen (snapshot)\n2. Finds what they need (identify refs)\n3. Does one action (click, type, key)\n4. Checks what changed (re-snapshot)\n\nYou must do the same. Never skip steps. Never assume the UI didn't change after an action.\n\n## Core loop\n\n```\nsnapshot → identify → act → verify\n```\n\n```bash\nagent-cu snapshot -a Music -i -c          # what's on screen?\n# read the output, find the right @ref\nagent-cu click @e5                         # do one thing\nagent-cu snapshot -a Music -i -c          # what changed?\n```\n\n**Every action changes the UI.** Your previous refs are now stale. Always re-snapshot.\n\n## Opening apps\n\nAlways wait for the app to be ready before doing anything:\n\n```bash\nagent-cu open Safari --wait\nagent-cu snapshot -a Safari -i -c\n```\n\nNever interact with an app you haven't opened and snapshotted first.\n\n## Finding elements\n\n**Step 1**: Snapshot with `-i -c` (interactive + compact):\n\n```bash\nagent-cu snapshot -a Calculator -i -c\n```\n\nThis shows only clickable/typeable elements with refs like `@e1`, `@e5`, `@e12`.\n\n**Step 2**: Read the output. Find the element you need by its name, role, or id.\n\n**Step 3**: Use the ref. Refs are the fastest and most reliable way to target elements.\n\nIf elements are missing, increase depth:\n\n```bash\nagent-cu snapshot -a Safari -i -c -d 8\n```\n\n## Clicking\n\nFor buttons, links, menu items — use `click`:\n\n```bash\nagent-cu click @e5                         # single click (AXPress, headless)\nagent-cu click @e5 --count 2               # double-click (opens files, plays songs)\n```\n\n`click` tries AXPress first (background, no focus steal). Only falls back to mouse simulation for double-click or right-click.\n\nFor elements with stable IDs (won't change between snapshots):\n\n```bash\nagent-cu click 'id=\"play\"' -a Music\nagent-cu click 'id~=\"track-123\"' -a Music  # partial id match\n```\n\n## Typing\n\n**With a target element** (preferred — uses AXSetValue, headless):\n\n```bash\nagent-cu type \"hello world\" -s @e3\n```\n\n**Into the focused field** (keyboard simulation, needs app focus):\n\n```bash\nagent-cu type \"hello world\" -a Safari\n```\n\nAlways prefer `-s @ref` when you have a ref. It's more reliable.\n\n## Key presses\n\n```bash\nagent-cu key Return -a Calculator\nagent-cu key cmd+k -a Slack\nagent-cu key cmd+a -a TextEdit\nagent-cu key Escape -a Safari\n```\n\n## Scrolling\n\n```bash\nagent-cu scroll down -a Music              # scroll main content area\nagent-cu scroll down --amount 10 -a Music  # scroll more\nagent-cu scroll-to @e42                    # scroll element into view (headless)\n```\n\nScroll needs the app to be focused. Use `scroll-to` for headless.\n\n## Reading content\n\n```bash\nagent-cu text -a Calculator                # all visible text\nagent-cu get-value @e5                     # one element's value/state\nagent-cu get-value 'id=\"title\"' -a Music   # by selector\n```\n\nUse `get-value` on specific elements instead of `text` on large apps.\n\n## Window management\n\n```bash\nagent-cu move-window -a Notes --x 100 --y 100\nagent-cu resize-window -a Notes --width 800 --height 600\nagent-cu windows -a Finder                 # get window positions and sizes\n```\n\nThese are instant and headless — use AXSetPosition/AXSetSize.\n\n## Drag and drop\n\nDrag needs the app to be focused and two visible, non-overlapping areas.\n\n**Think like a human**: you need to see both the source and destination.\n\n```bash\n# Step 1: Set up windows side by side\nagent-cu move-window -a Finder --x 0 --y 25\nagent-cu resize-window -a Finder --width 720 --height 475\n# (open a second Finder window for destination)\n\n# Step 2: Snapshot to find the file\nagent-cu snapshot -a Finder -i -c -d 8\n\n# Step 3: Get the file's position\nagent-cu get-value @e32                    # check position\n\n# Step 4: Drag to destination\nagent-cu drag @e32 @e50 -a Finder         # drag by refs\n# or by coordinates:\nagent-cu drag --from-x 300 --from-y 55 --to-x 1000 --to-y 200 -a Finder\n```\n\n## Selector syntax\n\n### Refs (always prefer these)\n\n```bash\n@e1, @e2, @e3                         # from most recent snapshot\n```\n\n### DSL\n\n```bash\n'role=button name=\"Submit\"'            # role + exact name\n'name=\"Login\"'                         # exact name\n'id=\"AllClear\"'                        # exact id (most stable)\n'id~=\"track-123\"'                      # id contains (case-insensitive)\n'name~=\"Clear\"'                        # name contains (case-insensitive)\n'button \"Submit\"'                      # shorthand: role name\n'\"Login\"'                              # shorthand: just name\n'role=button index=2'                  # 3rd match (0-based)\n'css=\".my-button\"'                     # CSS selector (Electron apps only)\n```\n\n### Chains\n\n```bash\n'id=sidebar >> role=button index=0'    # first button inside sidebar\n'name=\"Form\" >> button \"Submit\"'       # submit button inside form\n```\n\n## Electron apps (CDP)\n\nElectron apps (Slack, Cursor, VS Code, Postman, Discord) are automatically detected. agent-cu relaunches them with CDP support on first use.\n\nEverything works headless — no window activation, no mouse, no focus steal:\n\n```bash\nagent-cu snapshot -a Slack -i -c           # full DOM tree via CDP\nagent-cu click @e5                         # JS element.click()\nagent-cu key cmd+k -a Slack                # CDP key dispatch\nagent-cu type \"hello\" -a Slack             # CDP insertText\nagent-cu scroll down -a Slack              # JS scrollBy()\nagent-cu text -a Slack                     # document.body.innerText\n```\n\n**Typing in Electron apps**: `insertText` goes to the focused element. If you need to type into a specific input:\n\n```bash\nagent-cu snapshot -a Slack -i -c           # find the input ref\nagent-cu click @e18                        # click to focus it\nagent-cu key cmd+a -a Slack                # select all\nagent-cu key backspace -a Slack            # clear\nagent-cu type \"your text\" -a Slack         # now type\n```\n\n## Verification\n\nNever assume an action worked. Verify by checking a **state-bearing attribute**, not just by looking at the tree again.\n\n### The `id` vs `name` distinction (critical)\n\nMany apps give a button a **fixed `id`** (the slot) and a **changing `name`** (the current label).\n\nMusic's transport button is the canonical example:\n\n- `id` is always `\"play\"` — it identifies the button as \"the transport button\", even when currently playing.\n- `name` flips between `\"play\"` and `\"pause\"` depending on playback state.\n\n**To detect state, read `name`, not `id`:**\n\n```bash\n# check if music is playing\nagent-cu find 'id=\"play\"' -a Music --compact\n# → [{\"name\":\"pause\", ...}]   ← means: playback is ON\n# → [{\"name\":\"play\", ...}]    ← means: playback is OFF\n```\n\nThe same pattern appears in many apps: bookmark/unbookmark, mute/unmute, expand/collapse, follow/unfollow. When you want to confirm a toggle worked, always read the element's **current `name`** after the action.\n\n### Inline verification with `--expect`\n\n```bash\nagent-cu click @e5 --expect 'name=\"Dashboard\"'\n# clicks, then polls for an element with name=\"Dashboard\". Fails if it never appears.\n```\n\n### Reading values\n\n```bash\nagent-cu get-value @e3                     # one element's value + role + position\nagent-cu find 'id=\"play\"' -a Music --compact   # most stable if id is known\nagent-cu snapshot -a Safari -i -c          # broad check\n```\n\n### Idempotent typing\n\n```bash\nagent-cu ensure-text @e3 \"hello\"           # only types if value differs\n```\n\n### Reading dynamic computed values (e.g., Calculator result)\n\nSome apps don't surface the result as a normal `value` on a labeled element — it's hidden in a `staticText` node. Use `tree` and walk for any node with a `value`:\n\n```bash\nagent-cu tree -a Calculator -d 8 --compact | python3 -c \"\nimport json, sys\nd = json.load(sys.stdin)\ndef walk(n):\n    if n.get('value'): print(n.get('role'), '=', repr(n['value']))\n    for c in n.get('children', []): walk(c)\nwalk(d)\n\"\n# → staticText = '1,234×7'\n# → staticText = '8,638'\n```\n\n**Locale gotcha:** numbers are locale-formatted. Indian locale shows `7^8 = 57,64,801`, international shows `5,764,801`. They're the same value. Before comparing, strip commas and spaces.\n\n## Waiting\n\nWhen UI takes time to load:\n\n```bash\nagent-cu wait-for 'name=\"Dashboard\"'       # poll until element appears\nagent-cu wait-for 'role=button' --timeout 15\nsleep 2                                # simple delay after navigation\n```\n\n## Batch operations\n\nChain multiple commands to avoid per-command startup:\n\n```bash\necho '[[\"click\",\"@e5\"],[\"key\",\"Return\",\"-a\",\"Music\"]]' | agent-cu batch --bail\n```\n\n## Real-world patterns\n\n### Search and play a song in Music (verified flow)\n\n```bash\n# 1. Open and snapshot\nagent-cu open Music --wait\nagent-cu snapshot -a Music -i -c\n# → @e1 is the Search sidebar item\n\n# 2. Click Search\nagent-cu click @e1 -a Music\n\n# 3. Type into the search field — use role=textField, not a ref (the ref\n#    for the search field changes as the view switches)\nagent-cu type \"Espresso Sabrina Carpenter\" -s 'role=textField' -a Music --submit\nsleep 2  # let search results populate\n\n# 4. Pick a result. Grep the snapshot for items matching the track name —\n#    the `id` embeds a stable catalog id, so grab that.\nagent-cu snapshot -a Music -c | grep -i \"espresso\" | head -5\n# → [@e53] other(\"axcell\") \"Espresso\" id=Music.shelfItem.TopSearchLockup[id=top-search-section-top-1744253558,...]\n\n# 5. Open the album (double-click). Use the full id string, not the ref —\n#    refs can drift between snapshots during long flows.\nagent-cu click 'id=\"Music.shelfItem.TopSearchLockup[id=top-search-section-top-1744253558,parentId=top-search-section-top]\"' -a Music --count 2\nsleep 2\n\n# 6. Find the track row and play. The track has a stable id pattern.\nagent-cu snapshot -a Music -c | grep \"track-lockup\" | head -3\n# → [@e52] group \"Espresso\" id=Music.shelfItem.AlbumTrackLockup[...]\n\n# 7. Select, then try Return to play. If that fails, fall back to the\n#    transport play button directly.\nagent-cu click @e52 -a Music\nagent-cu key Return -a Music\nsleep 1\n\n# 8. Verify via the transport button's `name` — \"pause\" means playing.\nagent-cu find 'id=\"play\"' -a Music --compact\n# if name=\"play\", playback didn't start. Fallback:\nagent-cu click 'id=\"play\"' -a Music\n```\n\n**Key lessons from this flow:**\n\n- Refs (`@e53`) can go stale between snapshots separated by major UI changes. Prefer full `id=\"...\"` for cross-snapshot targeting.\n- `type -s 'role=textField' --submit` combines typing, clearing, and pressing Return reliably.\n- Double-click on a search result often _opens_ the item, not _plays_ it. Drill into the detail view, then trigger playback.\n- Always verify playback via the `name` of the transport button (`id=\"play\"` is the slot; `name` holds state).\n- If `Return` doesn't trigger playback, click the transport play button as a fallback. Have a plan B.\n\n### Compute a multi-step calculation in Calculator (verified flow)\n\n```bash\n# 1. Open and snapshot — Calculator buttons have stable ids (Seven, Multiply, Equals, etc.)\nagent-cu open Calculator --wait\nagent-cu snapshot -a Calculator -i -c\n\n# 2. Use batch for the whole keystroke sequence. Avoids 17 per-process starts.\n#    Example: 7^8 = 7×7×7×7×7×7×7×7 = 5,764,801\necho '[\n  [\"click\",\"id=\\\"AllClear\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Multiply\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Seven\\\"\",\"-a\",\"Calculator\"],\n  [\"click\",\"id=\\\"Equals\\\"\",\"-a\",\"Calculator\"]\n]' | agent-cu batch\n\n# 3. Read the result — walk the tree for any staticText with a value.\nagent-cu tree -a Calculator -d 8 --compact | python3 -c \"\nimport json, sys\nd = json.load(sys.stdin)\nfor n in [d]:\n    def walk(n):\n        if n.get('value'): print(n.get('role'), '=', repr(n['value']))\n        for c in n.get('children', []): walk(c)\n    walk(n)\n\"\n# → staticText = '7×7×7×7×7×7×7×7'     ← expression\n# → staticText = '57,64,801'             ← result (Indian locale; strip commas → 5764801)\n```\n\n**Key lessons:**\n\n- When an app exposes stable `id=` on every interactive element (Calculator does), skip snapshotting between clicks — just batch them.\n- The result isn't on a labeled element; walk the tree for nodes with a `value`.\n- Numbers come locale-formatted. Strip commas/spaces before parsing.\n\n### Open a DM in Slack and send a message\n\n```bash\nagent-cu key cmd+k -a Slack\nsleep 1\nagent-cu snapshot -a Slack -i -c\n# find and click the search input\nagent-cu click @e18\nagent-cu key cmd+a -a Slack\nagent-cu key backspace -a Slack\nagent-cu type \"Vukasin\" -a Slack\nsleep 1\nagent-cu key Return -a Slack\nsleep 2\nagent-cu type \"hey, check this out\" -a Slack\nagent-cu key Return -a Slack\n```\n\n### Check calendar events\n\n```bash\nagent-cu open Calendar --wait\nagent-cu snapshot -a Calendar -i -c -d 6\n# read the visible dates\nagent-cu text -a Calendar\n# navigate to next month\nagent-cu click @e3                         # next month button\nsleep 1\nagent-cu text -a Calendar\n```\n\n### Fill a web form\n\n```bash\nagent-cu open Safari --wait\nagent-cu snapshot -a Safari -i -c\nagent-cu type \"https://example.com/form\" -s @e34\nagent-cu key Return -a Safari\nsleep 3\nagent-cu snapshot -a Safari -i -c -d 8\nagent-cu type \"John Doe\" -s @e5\nagent-cu type \"john@example.com\" -s @e6\nagent-cu type \"Hello world\" -s @e7\nagent-cu click @e8                         # submit button\nagent-cu snapshot -a Safari -i -c          # verify submission\n```\n\n### Drag a file between Finder windows\n\n```bash\n# set up side-by-side windows\nagent-cu move-window -a Finder --x 0 --y 25\n# (ensure two windows open, Downloads left, Desktop right)\nagent-cu snapshot -a Finder -i -c -d 8\n# find the file (look for textfield with val=\"filename\")\nagent-cu click @e32                        # select the file\nagent-cu drag --from-x 300 --from-y 55 --to-x 1000 --to-y 200 -a Finder\n```\n\n### Browse App Store\n\n```bash\nagent-cu open \"App Store\" --wait\nagent-cu snapshot -a \"App Store\" -i -c -d 10\nagent-cu click 'id=\"AppStore.tabBar.discover\"' -a \"App Store\"\nsleep 2\nagent-cu scroll down --amount 5 -a \"App Store\"\nagent-cu snapshot -a \"App Store\" -i -c -d 10\nagent-cu text -a \"App Store\"\n```\n\n## Rules\n\n1. **Always snapshot before acting.** You cannot interact with what you cannot see.\n2. **Always re-snapshot after acting.** The UI changed. Your refs are stale.\n3. **Refs for the next step, IDs for the long haul.** Refs (`@e5`) are fastest for the immediate next action after a snapshot. Full `id=\"...\"` selectors survive across snapshots and are the right choice for anything you'll return to after other UI changes.\n4. **Use `-i -c` on snapshots.** Interactive + compact reduces noise by 10x.\n5. **Prefer `id=` over `name=` when the app provides stable ids.** IDs don't change with state; names often do.\n6. **For state detection, read the `name` attribute — not `id`.** Many apps keep `id` as a fixed slot and flip `name` to reflect current state (play/pause, mute/unmute, bookmark/unbookmark).\n7. **Wait after navigation.** `wait-for` a known landmark first; fall back to `sleep 2-3` if there's none.\n8. **One action, then verify.** Don't chain multiple mutations without checking state between them.\n9. **Use `type -s @ref`** over `type -a App`. The selector path uses AXSetValue (reliable). The app path uses keyboard simulation (fragile, needs focus).\n10. **Use `scroll-to @ref`** when you know the element. It's headless. `scroll down` needs focus.\n11. **Never hardcode app-specific logic.** Don't write a helper like `play_song_in_music()`. Use the same primitives (`snapshot`, `click`, `type`, `key`, `find`) for every app. The scene tree tells you what to do — read it, act on it, verify.\n12. **Have a fallback for every action.** If a `click` doesn't produce the expected state change, escalate: double-click → scroll-to + click → keyboard shortcut → direct action button (e.g., transport `id=\"play\"` instead of track-row Return). See the Recovery playbook.\n13. **Batch when ids are stable and numerous.** Calculator, forms, keypad flows benefit from piping a JSON array into `agent-cu batch` — one process start instead of N.\n\n## Recovery playbook\n\nWhen something doesn't work, the principle is: **diagnose the exact failure mode, then apply the matching fallback**. Never retry the same command blindly.\n\n### Element not found (stale ref)\n\nSymptom: `error: element not found matching SelectorChain { ... }` on a `@ref` that came from an earlier snapshot.\n\nCause: refs resolve to a specific tree path; major UI changes (navigation, scroll, modal open) invalidate them.\n\nFix: re-snapshot and use the new ref, or switch to a stable `id=`:\n\n```bash\nagent-cu snapshot -a Safari -i -c\n# …find it again, or use the full id you saw earlier:\nagent-cu click 'id=\"the-stable-id\"' -a Safari\n```\n\nPrefer `id=\"...\"` for any target you'll act on across multiple snapshots. Refs are for single-step actions only.\n\n### Ambiguous selector\n\nSymptom: `error: ambiguous selector: found N elements matching`.\n\nFix: add `index=` or narrow by role/name:\n\n```bash\nagent-cu click 'role=button index=0' -a Music\nagent-cu click 'role=button name=\"Save\"' -a TextEdit\n```\n\n### Click succeeded but nothing happened\n\nSymptom: `{\"success\": true, \"message\": \"clicked at (X,Y)\"}` but the expected state change (new page, playback, menu) did not occur.\n\nDiagnose in order:\n\n1. **Was AXPress used or did it fall back to coordinates?**\n   - `pressed \"Name\" at (X,Y)` = AXPress succeeded (best).\n   - `clicked at (X,Y)` = coordinate click; the element might have moved or be obscured.\n2. **Is the element's state actually what you think?** Read the `name` attribute of the state-bearing element (e.g., Music's transport button), not just the tree.\n3. **Does the action require focus?** Some apps (especially web UI) need the app to be frontmost. `agent-cu open App --wait` activates it.\n\nFallback ladder:\n\n```bash\n# Ladder 1: AXPress failed — try double-click\nagent-cu click @e5 --count 2\n\n# Ladder 2: Element offscreen — bring it in, then click\nagent-cu scroll-to @e5\nagent-cu click @e5\n\n# Ladder 3: The clicked element isn't the one that triggers the action —\n#   drill into the container and find the explicit action button\nagent-cu snapshot -a Music -c | grep -E \"play|pause|Next\"\nagent-cu click 'id=\"play\"' -a Music\n\n# Ladder 4: Keyboard shortcut fallback\nagent-cu key Return -a Music          # activate selected item\nagent-cu key space -a Music           # play/pause\n```\n\n### Type didn't land\n\nSymptom: text didn't appear in the field.\n\nCauses + fixes:\n\n```bash\n# Cause: no ref — fell back to keyboard sim which needs app focus\nagent-cu type \"hello\" -a Safari\n# Fix: use selector path (AXSetValue, reliable)\nagent-cu type \"hello\" -s @e3\n\n# Cause: field wasn't focused when keyboard sim fired\nagent-cu click @e3              # focus it first\nagent-cu type \"hello\" -s @e3    # then type\n\n# Cause: existing value not cleared\nagent-cu type \"new\" -s @e3 --append   # wrong: keeps old text\nagent-cu type \"new\" -s @e3            # right: clears first\n```\n\n### Search submitted but results aren't in the tree yet\n\nSymptom: `snapshot` right after `--submit` shows the old page.\n\nFix: wait, then re-snapshot. Prefer polling over `sleep`:\n\n```bash\nagent-cu type \"query\" -s 'role=textField' -a Music --submit\nagent-cu wait-for 'name~=\"Top Results\"' --timeout 5\nagent-cu snapshot -a Music -i -c\n```\n\nIf `wait-for` doesn't know a stable landmark, fall back to `sleep 2`.\n\n### Snapshot is too shallow — can't find the element\n\nBump depth:\n\n```bash\nagent-cu snapshot -a Safari -i -c -d 8\nagent-cu snapshot -a Safari -i -c -d 12   # for deeply nested apps\n```\n\n### Ref points to the wrong thing\n\nSymptom: `@e5` clicks something but it's not what you expected.\n\nCause: the snapshot re-ran silently (you took two) and refs got renumbered.\n\nFix: always inspect the ref's resolved element before acting on anything important:\n\n```bash\nagent-cu get-value @e5 -a Safari\n# confirm role, name, id are what you expect, THEN click\n```\n\n### Electron app not using CDP\n\nagent-cu auto-detects Electron apps. If CDP isn't working:\n\n```bash\nagent-cu snapshot -a Slack -i -c -v        # verbose shows CDP status\n```\n\nFirst run takes ~5s as the app relaunches with `--remote-debugging-port`. Every subsequent run uses a cached connection (~15ms).\n\n### DSL selector parse error\n\nSymptom: `unknown filter key: 'id_contains'`.\n\nFix: the syntax is `id~=` (tilde-equals) for partial match, not `id_contains=`:\n\n```bash\nagent-cu click 'id~=\"track-\"' -a Music\nagent-cu click 'name~=\"Submit\"' -a Safari\n```\n\n## Output format\n\nAll output is JSON:\n\n```json\n{\"success\": true, \"message\": \"pressed \\\"7\\\" at (453, 354)\"}\n{\"error\": true, \"type\": \"element_not_found\", \"message\": \"...\"}\n{\"role\": \"button\", \"name\": \"Submit\", \"value\": null, \"position\": {\"x\": 450, \"y\": 320}}\n```","tags":["agent","computer","use","kortix-ai","agent-skills","agentic-ai","ai-agents","anthropic","claude-code","cli","computer-use","desktop-automation"],"capabilities":["skill","source-kortix-ai","skill-agent-computer-use","topic-agent-skills","topic-agentic-ai","topic-ai-agents","topic-anthropic","topic-claude-code","topic-cli","topic-computer","topic-computer-use","topic-desktop-automation","topic-linux","topic-macos","topic-opencode"],"categories":["agent-computer-use"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/kortix-ai/agent-computer-use/agent-computer-use","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add kortix-ai/agent-computer-use","source_repo":"https://github.com/kortix-ai/agent-computer-use","install_from":"skills.sh"}},"qualityScore":"0.455","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 10 github stars · SKILL.md body (22,689 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T07:03:27.675Z","embedding":null,"createdAt":"2026-04-23T13:04:10.232Z","updatedAt":"2026-04-24T07:03:27.675Z","lastSeenAt":"2026-04-24T07:03:27.675Z","tsv":"'-123':593,1002 '-3':1837,2803 '-5':1749 '/.claude/settings.json':237 '/form':2449 '0':871,1030,1048,2534,3136 '1':120,291,438,855,1528,1639,1876,2019,2304,2347,2417,2656,3177,3268 '10':700,2615,2647,2847 '100':790,792 '1000':960,2587 '10x':2738 '11':2865 '12':2908,3575 '13':2952 '15':1594 '15ms':3696 '17':2055 '1744253558':1762,1798 '2':198,297,466,538,894,1027,1596,1663,1710,1808,1810,2046,2356,2626,2669,2802,3210,3281,3283,3543 '200':964,2591 '234':1529 '25':873,2536 '3':229,304,482,911,1673,2164,2460,2683,3239,3304 '300':952,2579 '320':3770 '354':3752 '3rd':1028 '4':311,927,1715,2727,3347 '450':3768 '453':3751 '475':885 '5':1551,1763,2071,2633,2739,3520 '55':956,2583 '57':1546,2230 '5764801':2238 '5s':3679 '6':1811,2393,2759 '600':804 '638':1533 '64':1547,2231 '7':1530,1544,1843,2061,2063,2064,2065,2066,2067,2068,2069,2070,2220,2221,2222,2223,2224,2225,2226,2227,2787,3749 '720':883 '764':1552,2072 '8':513,909,1496,1532,1545,1877,2062,2184,2470,2554,2808,3565 '800':802 '801':1548,1553,2073,2232 '9':2823 'access':58 'across':2710,3100 'act':272,340,2660,2675,2904,3098,3620 'action':40,92,307,335,381,1227,1364,2702,2810,2914,2936,3109,3242,3315,3324 'activ':1091,3262,3358 'actual':3216 'add':231,3122 'agent':2,45,50,61,100,124,136,160,177,186,209,234,255,344,363,371,410,416,447,505,524,533,580,588,610,628,652,659,667,675,684,695,706,734,743,754,782,794,806,863,875,901,918,932,946,1076,1099,1112,1119,1130,1139,1148,1175,1187,1196,1206,1214,1316,1371,1396,1409,1424,1437,1490,1574,1586,1621,1644,1650,1667,1697,1739,1787,1826,1862,1869,1889,1906,2033,2039,2161,2178,2296,2306,2320,2325,2333,2340,2349,2358,2368,2379,2385,2399,2409,2419,2430,2436,2444,2453,2462,2472,2480,2487,2495,2502,2526,2546,2565,2573,2599,2606,2617,2628,2638,2649,2972,3062,3081,3130,3140,3257,3276,3292,3299,3327,3339,3352,3362,3397,3410,3426,3434,3448,3460,3500,3511,3522,3557,3567,3626,3650,3664,3723,3731 'agent-computer-us':1,49 'agent-cu':44,60,99,123,135,176,185,208,233,254,343,362,370,409,415,446,504,523,532,579,587,609,627,651,658,666,674,683,694,705,733,742,753,781,793,805,862,874,900,917,931,945,1075,1098,1111,1118,1129,1138,1147,1174,1186,1195,1205,1213,1315,1370,1395,1408,1423,1436,1489,1573,1585,1620,1643,1649,1666,1696,1738,1786,1825,1861,1868,1888,1905,2032,2038,2160,2177,2295,2305,2319,2324,2332,2339,2348,2357,2367,2378,2384,2398,2408,2418,2429,2435,2443,2452,2461,2471,2479,2486,2494,2501,2525,2545,2564,2572,2598,2605,2616,2627,2637,2648,2971,3061,3080,3129,3139,3256,3275,3291,3298,3326,3338,3351,3361,3396,3409,3425,3433,3447,3459,3499,3510,3521,3556,3566,3625,3649,3663,3722,3730 'album':1766 'allclear':995,2077 'alway':41,391,397,635,970,1278,1355,1972,2657,2670,3612 'ambigu':3111,3115 'amount':699,2632 'answer':168 'anyth':407,2718,3622 'app':16,396,401,427,624,720,777,829,1039,1062,1065,1157,1252,1342,1457,2243,2595,2602,2610,2623,2635,2642,2653,2746,2770,2831,2839,2869,2893,3246,3252,3260,3394,3579,3645,3656,3682 'app-specif':2868 'appear':1339,1391,1584,3377 'append':3454 'appli':2997 'applic':14,69 'approv':109,153,213 'appstore.tabbar.discover':2621 'area':693,839 'aren':3473 'array':2969 'ask':205,273 'assum':327,1225 'attempt':242 'attribut':1236,2766,3223 'auto':3653 'auto-detect':3652 'automat':1073 'avoid':1607,2054 'axcel':1752 'axpress':530,548,3179,3193,3269 'axsetposition/axsetsize':822 'axsetvalu':606,2836,3407 'b':2007 'back':556,1854,2799,3185,3388,3540 'background':550 'backspac':1209,2336 'bail':1624 'base':1031 'bash':134,232,342,408,445,503,522,578,608,626,650,682,732,780,853,973,982,1042,1097,1173,1309,1369,1394,1435,1488,1572,1612,1638,2018,2294,2377,2428,2517,2597,3060,3128,3266,3383,3498,3555,3624,3662,3721 'batch':1601,1623,2048,2163,2258,2953,2974 'bear':1235,3228 'benefit':2964 'best':3195 'blind':3006 'bookmark/unbookmark':1343,2786 'bring':3286 'broad':1431 'brows':2594 'bump':3553 'button':18,73,516,984,1015,1025,1035,1046,1050,1055,1058,1255,1271,1283,1287,1592,1859,1882,1981,2000,2024,2415,2500,2937,3134,3144,3234,3325,3761 'c':350,377,422,442,453,511,907,1105,1181,1430,1499,1519,1524,1656,1744,1831,2045,2187,2211,2216,2312,2391,2442,2468,2508,2552,2613,2645,2730,3068,3332,3528,3563,3573,3670 'cach':3694 'calcul':451,657,738,1454,1494,2013,2015,2023,2036,2043,2079,2084,2089,2094,2099,2104,2109,2114,2119,2124,2129,2134,2139,2144,2149,2154,2159,2182,2251,2960 'calendar':2375,2382,2389,2403,2423 'came':3023 'cannot':2662,2667 'canon':1274 'carpent':1702 'case':1006,1013 'case-insensit':1005,1012 'catalog':1733 'caus':3028,3381,3384,3416,3442,3597 'cdp':1063,1081,1110,1126,1136,3648,3658,3674 'chain':1041,1603,2815 'chang':314,332,379,382,575,1263,1691,1929,2678,2726,2753,2924,3038,3166 'check':312,924,1231,1310,1432,2362,2374,2819 'children':1522,2214 'choic':2716 'claud':103 'clear':1009,1212,1945,3446,3467 'cli':47,64 'click':17,72,284,308,365,514,521,526,529,535,541,546,563,567,582,590,1114,1189,1191,1373,1378,1614,1664,1669,1769,1789,1864,1908,1952,1996,2075,2080,2085,2090,2095,2100,2105,2110,2115,2120,2125,2130,2135,2140,2145,2150,2155,2256,2315,2322,2411,2497,2567,2619,2887,2917,2928,2932,3083,3132,3142,3149,3158,3196,3201,3274,3278,3290,3301,3306,3341,3428,3588,3643,3725,3733 'clickable/typeable':457 'cmd':662,670,1122,1199,2299,2328 'co':48 'code':104,1069 'combin':1943 'combo':197 'come':2277 'comma':1562,2237 'command':102,1605,1610,3005 'commas/spaces':2282 'compact':444,1323,1416,1497,1896,2185,2734 'compar':1560 'comput':3,51,53,269,1451,2008 'confirm':1351,3634 'connect':3695 'contain':1004,1011,3319,3706,3720 'content':692,731 'control':67 'coordin':944,3187,3200 'core':336 'count':537,1807,3280 'cover':215 'critic':1250 'cross':1935 'cross-snapshot':1934 'css':1032,1036 'cu':46,62,101,125,137,178,187,210,235,256,345,364,372,411,417,448,506,525,534,581,589,611,629,653,660,668,676,685,696,707,735,744,755,783,795,807,864,876,902,919,933,947,1077,1100,1113,1120,1131,1140,1149,1176,1188,1197,1207,1215,1317,1372,1397,1410,1425,1438,1491,1575,1587,1622,1645,1651,1668,1698,1740,1788,1827,1863,1870,1890,1907,2034,2040,2162,2179,2297,2307,2321,2326,2334,2341,2350,2359,2369,2380,2386,2400,2410,2420,2431,2437,2445,2454,2463,2473,2481,2488,2496,2503,2527,2547,2566,2574,2600,2607,2618,2629,2639,2650,2973,3063,3082,3131,3141,3258,3277,3293,3300,3328,3340,3353,3363,3398,3411,3427,3435,3449,3461,3501,3512,3523,3558,3568,3627,3651,3665,3724,3732 'current':1266,1290,1360,2782 'cursor':1067 'd':512,908,1495,1503,1526,2183,2191,2197,2392,2469,2553,2614,2646,3564,3574 'dashboard':1377,1386,1580 'date':2397 'debug':3687 'deepli':3577 'def':1506,2198 'default':184 'delay':1598 'depend':1298 'depth':502,3554 'desktop':13,68,2543 'destin':852,892,930 'detail':1967 'detect':1074,1303,2762,3654 'diagnos':2991,3174 'didn':330,1901,3370,3375 'differ':1448 'direct':251,1860,2935 'discord':1071 'dispatch':1128 'distinct':1249 'dm':2287 'document.body.innertext':1153 'doe':2476 'doesn':1992,2918,2985,3533 'dom':1107 'doubl':540,562,1768,1951,2927,3273 'double-click':539,561,1767,1950,2926,3272 'download':2541 'drag':25,79,823,826,928,934,939,948,2511,2575 'drift':1780 'drill':1964,3316 'drop':825 'dsl':981,3697 'dynam':1450 'e':3334 'e.g':1453,2938,3230 'e1':462,974,1657,1670 'e12':464 'e18':1190,2323 'e2':975 'e3':616,976,1401,1442,2412,3415,3429,3439,3453,3465 'e32':923,935,2568 'e34':2451 'e42':711 'e5':366,463,527,536,748,1115,1374,1615,2478,2695,3279,3297,3302,3587,3631 'e50':936 'e52':1838,1865 'e53':1750,1919 'e6':2485 'e7':2493 'e8':2498 'earlier':3026,3079 'easiest':121 'echo':1613,2074 'electron':1038,1061,1064,1156,3644,3655 'element':436,458,472,496,498,569,603,713,750,771,1163,1358,1383,1403,1470,1583,2250,2267,2857,3007,3014,3119,3203,3213,3229,3284,3307,3552,3618,3756 'element.click':1117 'emb':1730 'ensur':1440,2537 'ensure-text':1439 'equal':2030,2157,3714 'error':3013,3114,3700,3753 'escal':2925 'escap':678 'especi':3247 'espresso':1700,1747,1753,1840 'etc':2031 'even':1288 'event':2376 'everi':380,2248,2892,2913,3689 'everyth':1086 'exact':988,992,996,2993 'exampl':1275,2060 'example.com':2448 'example.com/form':2447 'exist':3443 'expand/collapse':1345 'expect':1368,1375,2922,3164,3596,3641 'explicit':3323 'expos':2244 'express':2228 'fail':1387,1852,3270 'failur':2994 'fall':555,1853,2798,3184,3539 'fallback':1904,2003,2911,3000,3264,3350 'fastest':489,2697 'fell':3387 'field':21,620,1678,1690,3380,3417 'file':80,142,249,543,899,914,2513,2557,2571 'filenam':2563 'fill':2424 'filter':3703 'find':298,358,435,470,897,1182,1318,1411,1812,1891,2313,2555,2890,3069,3321,3550 'finder':810,869,881,889,905,938,966,2515,2532,2550,2593 'fire':3424 'first':88,94,434,549,1049,1084,2797,3432,3468,3676 'first-run':87 'fix':1257,2775,3045,3121,3382,3403,3488,3611,3707 'flag':175 'flip':1293,2778 'flow':1637,1785,1917,2017,2963 'focus':552,619,625,723,832,1095,1162,1193,2846,2864,3244,3395,3420,3430 'follow/unfollow':1346 'form':1054,1060,2427,2961 'format':1540,2280,3739 'found':3009,3016,3117,3758 'fragil':2844 'from-i':953,2580 'from-x':949,2576 'frontmost':3255 'frustrat':150 'full':1106,1772,1931,2706,3075 'get':223,746,757,767,811,912,921,1399,3629 'get-valu':745,756,766,920,1398,3628 'give':1253 'global':182,193 'go':1921 'goe':1159 'got':3609 'gotcha':1535 'grab':1736 'grep':1719,1745,1832,3333 'group':1839 'happen':3153 'hardcod':2867 'haul':2693 'haven':429 'head':1748,1836 'headless':531,607,716,729,820,1088,2860 'height':803,884 'hello':613,631,1133,1443,2490,3400,3413,3437 'helper':2876 'hey':2361 'hidden':1473 'hold':1988 'human':265,290,843 'id':480,572,583,591,597,759,994,997,1000,1003,1043,1246,1258,1276,1308,1319,1412,1420,1729,1734,1754,1756,1773,1790,1792,1823,1841,1892,1909,1932,1982,2027,2076,2081,2086,2091,2096,2101,2106,2111,2116,2121,2126,2131,2136,2141,2146,2151,2156,2246,2620,2689,2707,2741,2749,2750,2768,2772,2940,2955,3059,3076,3084,3088,3092,3342,3637,3705,3711,3719,3726 'idempot':1433 'identifi':302,339,1281 'immedi':2700 'import':1500,2188,3623 'increas':501 'index':1026,1047,3123,3135 'indian':1541,2234 'inlin':1365 'input':1172,1184,2318 'insensit':1007,1014 'inserttext':1137,1158 'insid':1051,1059 'inspect':3613 'instant':818 'instead':258,772,2942,2978 'interact':130,174,424,443,2249,2663,2733 'intern':1549 'invalid':3043 'involv':10 'isn':2262,3308,3659 'item':519,1662,1723,1960,3360 'john':2475 'john@example.com':2483 'js':1116,1145 'json':1501,2189,2968,3743,3744 'json.load':1504,2192 'k':663,1123,2300 'keep':2771,3456 'key':23,310,648,654,661,669,677,1121,1127,1198,1208,1616,1871,1913,2239,2298,2327,2335,2351,2370,2455,2889,3354,3364,3704 'keyboard':621,2842,2933,3348,3390,3422 'keypad':2962 'keystrok':2052 'know':2855,3535 'known':1422,2795 'label':1267,1469,2266 'ladder':3265,3267,3282,3303,3346 'land':3372 'landmark':2796,3538 'larg':776 'left':2542 'lesson':1914,2240 'let':1711 'like':263,461,841,2877 'link':517 'll':222,2720,3097 'load':1571 'local':1534,1539,1542,2235,2279 'locale-format':1538,2278 'lockup':1835 'logic':2871 'login':991,1020 'long':1784,2692 'look':292,1240,2558 'loop':337 'main':691 'major':1927,3036 'manag':779 'mani':1251,1341,2769 'manual':230 'match':598,1029,1724,2999,3017,3120,3717 'mean':1326,1332,1886 'menu':518,3170 'messag':2293,3157,3747,3759 'might':3204 'miss':500 'modal':3041 'mode':189,2995 'modifi':244 'month':2407,2414 'mous':558,1093 'move':31,81,785,866,2529,3206 'move-window':784,865,2528 'multi':2011 'multi-step':2010 'multipl':1604,2816,3101 'multipli':2029,2087,2097,2107,2117,2127,2137,2147 'music':348,375,586,595,689,702,762,1268,1312,1322,1415,1619,1635,1647,1654,1672,1707,1743,1806,1830,1867,1874,1895,1912,2881,3138,3231,3331,3345,3357,3367,3508,3526,3729 'music.shelfitem.albumtracklockup':1842 'music.shelfitem.topsearchlockup':1755,1791 'must':319 'mutat':2817 'mute/unmute':1344,2785 'my-button':1033 'n':1508,1516,2195,2200,2208,2218,2980,3118 'n.get':1510,1513,1521,2202,2205,2213 'name':477,985,989,990,993,1008,1010,1019,1023,1053,1248,1264,1292,1306,1324,1330,1361,1376,1385,1579,1727,1884,1898,1977,1987,2743,2756,2765,2779,3145,3189,3222,3516,3636,3734,3762 'narrow':3125 'navig':1600,2404,2790,3039 'need':301,474,623,718,827,845,1166,2845,2863,3250,3393 'nest':3578 'never':323,326,423,1224,1390,2866,3001 'new':3052,3167,3451,3463 'next':2406,2413,2687,2701,3337 'node':1477,1484,2272 'nois':2736 'non':173,837 'non-interact':172 'non-overlap':836 'none':2807 'normal':1465 'note':788,800 'noth':3152 'null':3765 'number':1536,2276 'numer':2959 'obscur':3209 'occur':3173 'offscreen':3285 'often':1957,2757 'old':3457,3486 'one':144,306,368,749,1402,2809,2975,3311 'one-tim':143 'open':15,395,412,431,542,886,1640,1646,1764,1958,2020,2035,2285,2381,2432,2540,2601,3042,3259 'oper':11,1602 'option':115 'order':117,3176 'output':357,469,3738,3741 'overlap':838 'page':3168,3487 'parentid':1799 'pars':2284,3699 'partial':596,3716 'path':2834,2840,3035,3406 'pattern':220,1338,1628,1824 'paus':1297,1325,1885,3336 'per':1609,2057 'per-command':1608 'per-process':2056 'permissions.allow':239 'pick':200,1716 'pipe':2966 'plan':2006 'play':544,584,1279,1291,1295,1314,1320,1331,1413,1631,1817,1849,1858,1887,1893,1899,1910,1962,1983,1999,2878,2941,3335,3343 'play/pause':2784,3368 'playback':1300,1327,1333,1900,1971,1974,1995,3169 'playbook':2951,2982 'point':3581 'poll':1380,1581,3495 'popul':1714 'port':3688 'posit':813,916,925,1407,3766 'postman':1070 'prefer':119,604,636,971,1930,2740,3091,3494 'press':22,649,1947,3188,3748 'previous':386 'primit':2885 'principl':2989 'print':1512,2204 'process':2058,2976 'produc':2920 'project':194 'prompt':105,154,169,214,224 'provid':2747 'python3':1498,2186 'queri':3503 'quickest':199 'ran':3602 're':316,393,1555,2672,3047,3492,3601 're-ran':3600 're-snapshot':315,392,2671,3046,3491 'read':26,76,355,467,730,1305,1356,1392,1449,2165,2394,2763,2902,3220 'readi':404 'real':1626 'real-world':1625 'recent':979 'recommend':183 'recoveri':2950,2981 'reduc':2735 'ref':303,361,387,460,485,486,638,643,941,969,1185,1684,1686,1777,1778,1918,2680,2684,2694,2827,2852,3011,3021,3029,3053,3103,3386,3580,3608,3615 'reflect':2781 'relaunch':1078,3683 'reliabl':492,647,1949,2837,3408 'remot':3686 'remote-debugging-port':3685 'renumb':3610 'repeat':152 'repr':1515,2207 'requir':5,3243 'resiz':33,797,878 'resize-window':796,877 'resolv':3030,3617 'result':1455,1462,1713,1718,1956,2167,2233,2261,3472,3518 'retri':3002 'return':655,1617,1847,1872,1948,1991,2352,2371,2456,2721,2947,3355 'right':140,360,566,2544,2715,3466,3481 'right-click':565 'role':478,983,987,1018,1024,1045,1406,1514,1591,1680,1704,1940,2206,3133,3143,3505,3635,3760 'role/name':3127 'row':1815,2946 'rule':2655 'run':89,97,122,162,3677,3691 'sabrina':1701 'safari':413,420,509,634,680,1428,2433,2440,2458,2466,2506,3066,3090,3402,3561,3571,3633,3737 'save':3146 'saw':3078 'scene':2895 'scope':192 'screen':30,77,280,295,354 'scroll':24,78,681,686,690,697,703,709,712,717,726,1141,2630,2850,2861,2930,3040,3295 'scroll-to':708,725,2849,2929,3294 'scrollbi':1146 'search':1629,1660,1665,1677,1689,1712,1759,1795,1802,1955,2317,3469 'second':888 'section':1760,1796,1803 'see':278,847,2668,2948 'seem':149 'select':1203,1844,2569,3359 'selector':764,967,1037,2708,2833,3112,3116,3405,3698 'selectorchain':3018 'send':2291 'separ':1925 'sequenc':2053 'set':141,248,856,2518 'setup':90,126,179,188,257 'seven':2028,2082,2092,2102,2112,2122,2132,2142,2152 'shallow':3547 'shortcut':2934,3349 'shorthand':1017,1021 'show':455,1543,1550,3484,3673 'side':859,861,2521,2523 'side-by-sid':2520 'sidebar':1044,1052,1661 'silent':3603 'sim':3391,3423 'simpl':1597 'simul':559,622,2843 'singl':528,3107 'single-step':3106 'sit':266 'size':815 'skill':55 'skill-agent-computer-use' 'skip':324,2253 'slack':665,1066,1103,1125,1135,1144,1152,1179,1202,1211,1220,2289,2302,2310,2331,2338,2345,2354,2366,2373,3668 'sleep':1595,1709,1809,1875,2303,2346,2355,2416,2459,2625,2801,3497,3542 'slot':1260,1986,2776 'snapshot':296,317,338,346,373,394,418,433,439,449,507,577,895,903,980,1101,1177,1426,1642,1652,1721,1741,1782,1828,1924,1936,2022,2041,2254,2308,2387,2438,2464,2504,2548,2608,2640,2658,2673,2705,2711,2732,2886,3027,3048,3064,3102,3329,3480,3493,3524,3544,3559,3569,3599,3666 'someth':2984,3589 'song':545,1633,2879 'sourc':850 'source-kortix-ai' 'space':1564,3365 'specif':196,218,770,1171,2870,3033 'stabl':571,999,1418,1732,1822,2026,2245,2748,2957,3058,3087,3537 'stale':390,1922,2682,3010 'start':1903,2059,2977 'startup':1611 'state':37,1234,1301,1304,1989,2755,2761,2783,2820,2923,3165,3215,3227 'state-bear':1233,3226 'statictext':1476,1527,1531,2173,2219,2229 'status':3675 'steal':553,1096 'step':325,437,465,481,854,893,910,926,2012,2688,3108 'store':2596,2603,2611,2624,2636,2643,2654 'string':1774 'strip':1561,2236,2281 'subcommand':219,228 'submiss':2510 'submit':986,1016,1056,1057,1708,1942,2499,3470,3483,3509,3735,3763 'subsequ':3690 'succeed':3150,3194 'success':3155,3745 'suggest':155 'supervis':191 'support':1082 'surfac':1460 'surviv':2709 'switch':1695,3055 'symptom':3012,3113,3154,3373,3479,3586,3701 'syntax':968,3709 'sys':1502,2190 'sys.stdin':1505,2193 'take':1568,3678 'target':495,602,1937,3095 'task':8 'tell':2897 'termin':86,129 'text':75,736,741,774,1150,1218,1441,2401,2421,2651,3374,3458 'textedit':673,3148 'textfield':1681,1705,1941,2560,3506 'the-stable-id':3085 'thing':369,3585 'think':261,262,840,3219 'three':114 'tild':3713 'tilde-equ':3712 'time':95,145,1569 'timeout':1593,3519 'titl':760 'to-i':961,2588 'to-x':957,2584 'toggl':1353 'took':3605 'tool':65 'top':1758,1761,1794,1797,1801,1804,3517 'top-search-section-top':1757,1793,1800 'topic-agent-skills' 'topic-agentic-ai' 'topic-ai-agents' 'topic-anthropic' 'topic-claude-code' 'topic-cli' 'topic-computer' 'topic-computer-use' 'topic-desktop-automation' 'topic-linux' 'topic-macos' 'topic-opencode' 'track':592,1001,1726,1814,1819,1834,2945,3727 'track-lockup':1833 'track-row':2944 'transport':1270,1286,1857,1881,1980,1998,2939,3233 'tree':1108,1243,1479,1492,2170,2180,2270,2896,3034,3238,3477 'tri':547,1846,3271 'trigger':1970,1994,3313 'true':3156,3746,3754 'two':834,2538,3606 'type':19,74,288,309,599,612,630,1132,1154,1168,1216,1222,1434,1445,1674,1699,1938,1944,2342,2360,2446,2474,2482,2489,2825,2829,2888,3369,3399,3412,3436,3441,3450,3462,3502,3755 'ui':329,384,1567,1928,2677,2725,3037,3249 'unknown':3702 'unsupervis':181,190 'use':4,42,52,54,170,483,520,605,724,765,821,1085,1478,1679,1770,2047,2728,2824,2835,2841,2848,2882,3050,3073,3180,3404,3647,3692 'user':91,107,112,148,246 'v':3671 'val':2562 'valu':747,758,768,922,1393,1400,1405,1447,1452,1466,1487,1511,1517,1558,2176,2203,2209,2275,3444,3630,3764 'value/state':752 'verbos':3672 'verif':1223,1366 'verifi':36,341,1229,1636,1878,1973,2016,2509,2812,2907 'via':1109,1879,1975 'view':715,1694,1968 'visibl':740,835,2396 'vs':1068,1247 'vukasin':2343 'wait':398,414,1565,1577,1589,1648,2037,2383,2434,2604,2788,2792,3261,3489,3514,3531 'wait-for':1576,1588,2791,3513,3530 'walk':1481,1507,1523,1525,2168,2199,2215,2217,2268 'want':1349 'wasn':3418 'way':493 'web':2426,3248 'whole':2051 'width':801,882 'window':34,82,778,786,798,808,812,858,867,879,890,1090,2516,2524,2530,2539 'without':2818 'wizard':131 'won':573 'work':1087,1228,1354,2987,3661 'world':614,632,1627,2491 'would':276,282,286 'write':133,2874 'wrong':3455,3584 'x':789,870,951,959,2533,2578,2586,3160,3191,3198,3767 'y':791,872,955,963,2535,2582,2590,3161,3192,3199,3769 'yes':180,201 'yet':3478","prices":[{"id":"298addae-8072-4915-9f46-d5038820f2eb","listingId":"1ecbaa35-dffe-42d0-8405-355b127021e7","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"kortix-ai","category":"agent-computer-use","install_from":"skills.sh"},"createdAt":"2026-04-23T13:04:10.232Z"}],"sources":[{"listingId":"1ecbaa35-dffe-42d0-8405-355b127021e7","source":"github","sourceId":"kortix-ai/agent-computer-use/agent-computer-use","sourceUrl":"https://github.com/kortix-ai/agent-computer-use/tree/main/skills/agent-computer-use","isPrimary":false,"firstSeenAt":"2026-04-23T13:04:10.232Z","lastSeenAt":"2026-04-24T07:03:27.675Z"}],"details":{"listingId":"1ecbaa35-dffe-42d0-8405-355b127021e7","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kortix-ai","slug":"agent-computer-use","github":{"repo":"kortix-ai/agent-computer-use","stars":10,"topics":["agent-skills","agentic-ai","ai-agents","anthropic","claude-code","cli","computer","computer-use","desktop-automation","linux","macos","opencode","rust","windows"],"license":"mit","html_url":"https://github.com/kortix-ai/agent-computer-use","pushed_at":"2026-04-16T18:36:25Z","description":"Computer use CLI for AI agents","skill_md_sha":"e8bd570d1cae9bff46a39f2eaca4706ee9fe5f18","skill_md_path":"skills/agent-computer-use/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/kortix-ai/agent-computer-use/tree/main/skills/agent-computer-use"},"layout":"multi","source":"github","category":"agent-computer-use","frontmatter":{"name":"agent-computer-use","license":"MIT","description":"REQUIRED for any task that involves operating a desktop application — opening apps, clicking buttons, typing into fields, pressing keys, scrolling, dragging, reading what's on screen, moving or resizing windows, or verifying state after an action. Always use the `agent-cu` CLI commands (open, snapshot, click, type, key, find, scroll, drag, batch, wait-for) instead of falling back to `open -a`, AppleScript, `osascript`, `xdotool`, `System Events`, or any other shell workaround — those can't read state back, don't verify, and are fragile across app updates. agent-cu is the canonical computer-use tool for controlling any macOS / Linux / Windows / Electron app via accessibility APIs. Trigger on prompts like \"open Music and play X\", \"search for Y in Maps\", \"fill out this form\", \"compute in Calculator\", \"send a Slack message\", \"drag this file\", \"read what's in the current window\", or anything where a human would click/type/look at a desktop app."},"skills_sh_url":"https://skills.sh/kortix-ai/agent-computer-use/agent-computer-use"},"updatedAt":"2026-04-24T07:03:27.675Z"}}