claudeers.

🔓 unclaimed — this page was auto-generated from GitHub. Are you the creator?

Claim this page →
// Claude Plugins

HandsOn

Give Claude eyes and hands — screen capture and desktop automation plugin for Claude Code

// Claude Plugins[ cli ][ api ][ desktop ][ web ][ claude ]#claude#accessibility#ai-agent#anthropic#claude-code#claude-plugin#desktop-automation#macos#pluginsMIT$open-sourceupdated 15 days ago
Slowing down
75/100
last commit 4 months ago
last release 4 months ago
releases 4
open issues 0
// install
git clone https://github.com/3spky5u-oss/HandsOn

HandsOn

Give Claude eyes and hands. A Claude Code plugin that lets Claude see your screen and interact with any application on your desktop.

Alpha software. HandsOn works and is genuinely useful, but Claude will sometimes stumble through tasks — misclicking sidebar links, scrolling the wrong container, needing multiple attempts to find the right element. Complex multi-step workflows (like filling out a Reddit post) may take several retries to get right. It's getting better with each release, but set your expectations accordingly.

What's New in v0.3.0

  • Window-cropped visual detection — When a target window is set, visual analysis is cropped to that window's bounds, eliminating noise from the terminal and other background apps
  • 30-50% token reduction — Compact output across all tools: shorter class names, removed redundant formatting, tighter coordinate notation
  • Unnamed element filteringlist_elements now skips unnamed Pane/Group/Custom elements that add noise without value (common in Steam, Electron apps, etc.)
  • Process-tree terminal refocusset_target_window("") walks the process tree to find and refocus the host terminal instead of guessing by title
  • Immediate window focusset_target_window() now focuses the target window immediately on set, not just before the next input action
  • Visual detect module — New CV-based UI region detection for apps with limited accessibility support
  • Self-correcting clickclick_text automatically retries at offset positions when the initial center click produces no visual change

Why HandsOn?

Claude Code is powerful, but it's blind — it can't see your screen or interact with anything outside the terminal. HandsOn changes that. It gives Claude eyes to see what's on your desktop and hands to interact with it, turning it into a general-purpose desktop assistant.

The core idea: Claude can now do anything you can do at a keyboard and mouse — navigate apps, fill out forms, click through wizards, manage windows, launch programs, and verify its own work visually.

What this enables:

  • Desktop automation — Automate any application on your computer, even legacy apps with no API
  • Visual verification — Claude can see the result of its own work, catch visual bugs, and fix them without you describing what's wrong
  • App interaction — Navigate settings, install software, fill out forms, click through dialogs — anything you'd normally alt-tab to do yourself
  • Accessibility-first targeting — Uses the platform accessibility tree — Windows UI Automation (UIA) or macOS AXUIElement — not just pixel coordinates, so element targeting is DPI-aware and resolution-independent
  • Automatic fallbacks — When accessibility doesn't work (custom widgets, canvas apps, games), it falls back to OCR, then to visual analysis. smart_find picks the right approach automatically.
  • Framework-aware — Detects Qt, WPF, Electron, WinForms, etc., and tells Claude exactly what will and won't work

Quick Start

Install

# From GitHub (recommended)
claude plugin marketplace add 3spky5u-oss/HandsOn
claude plugin install handson

# From GitLab
claude plugin marketplace add [email protected]:3spky5u/HandsOn.git
claude plugin install handson

# From Codeberg
claude plugin marketplace add [email protected]:3spky5u/HandsOn.git
claude plugin install handson

Restart Claude Code after installing. Python dependencies are installed automatically on first run.

To update:

claude plugin marketplace update handson
claude plugin update handson

Requirements: Python 3.10+, Windows 10/11 or macOS 12+ (Monterey or later).

Optional (Playwright bridge for browser tasks): If you also have the Playwright MCP plugin installed, HandsOn automatically defers to Playwright for in-browser interactions (DOM access, form filling, page navigation) and reserves itself for desktop apps, native dialogs, and visual verification. For the best experience, connect Playwright to your existing browser using the --extension flag or --cdp-endpoint — this lets Playwright work on the same browser you see, with HandsOn verifying the result on your actual screen. See the skill guide for setup details.

Optional (faster OCR):

pip install rapidocr-onnxruntime

When installed, OCR uses RapidOCR (fast, pure-Python) instead of Windows.Media.Ocr. Without it, the built-in Windows OCR engine works with zero extra dependencies.

On macOS, HandsOn uses the built-in Vision framework for OCR (no extra install needed). RapidOCR still works as a cross-platform alternative if preferred.

Try It

Tell Claude to do something on your desktop:

"Open the Settings app and check what display resolution I'm running"
"Launch my app, fill out the form with test data, submit it, and verify the result"
"Open localhost:3000, screenshot it, and fix anything that looks off"
"Click through every tab in my app and tell me if anything looks broken"
"Install this .exe — click through the wizard and accept the defaults"

Use /handson to start a guided automation session with permission prompts.

Tools

HandsOn provides 34 tools across 12 categories:

CategoryToolsWhat They Do
Visionscreenshot, wait_for_change, get_screen_sizeCapture the screen, detect when something changes, get monitor dimensions
Visual Diffscreenshot_baseline, screenshot_diffBefore/after screenshot comparison — highlights changed pixels in red with bounding box
Inputclick, type_text, send_keys, scroll, drag, hover, get_mouse_positionFull mouse and keyboard control — click anywhere, type text, send hotkeys, scroll, drag
Accessibilityfind_element, click_element, list_elements, get_focused_element, smart_findFind and interact with UI elements via the Windows accessibility tree (UIA). smart_find auto-falls back to OCR
OCRfind_text, click_textFind and click text on screen when the accessibility tree can't see it (games, custom widgets, canvas apps)
Frameworkdetect_frameworkIdentify the app's UI toolkit and get actionable automation hints
Windowslist_windows, focus_window, launch_app, set_target_window, get_target_windowList open windows, focus/minimize/maximize, launch apps. Target window auto-focuses before every input action
Monitoringstart_watcher, stop_watcher, get_notificationsBackground thread watches for new windows/dialogs/toasts and captures snippets
Automationbatch_actionsChain multiple actions (click, type, keypress, scroll, wait) in a single call — reduces round trips
Desktopvirtual_desktopCreate an isolated virtual desktop so Claude can work without disturbing your windows
Utilityclipboard, manage_screenshotsRead/write the clipboard, manage screenshot storage
Systemconfigure_uacSuppress UAC prompts for unattended automation workflows

How It Works

HandsOn uses a layered targeting strategy — it tries the most reliable method first and automatically falls back:

smart_find("Submit")
    |
    v
1. Accessibility tree (UIA)     -- fast, precise, DPI-aware
    |  not found?
    v
2. OCR text recognition         -- finds any visible text
    |  not found?
    v
3. Framework detection          -- tells you WHY it failed and what to try

Layer 1: Accessibility (UIA / AXUIElement)find_element, click_element, list_elements query the accessibility tree (Windows UIA or macOS AXUIElement). This is the gold standard: elements have names, roles, bounding boxes, and it works regardless of DPI or window position.

Layer 2: OCRfind_text, click_text capture a screenshot and run OCR to find text. Handles dark backgrounds (automatic image inversion retry), high-res displays (automatic downscaling for >4096px), and multi-word phrases. Uses RapidOCR when installed, otherwise Windows.Media.Ocr.

Layer 3: Framework detectiondetect_framework identifies the app's toolkit by inspecting window class names, process names, and loaded DLLs. Returns the UIA support level and 3 actionable hints (e.g., "Electron app detected. If elements aren't found, the app may need --force-renderer-accessibility flag").

Layer 4: Visionscreenshot feeds the screen directly to Claude's visual understanding for everything else (custom-painted controls, canvas content, image-based UIs, games).

Framework Support

HandsOn auto-detects and adapts to 10 UI frameworks:

FrameworkUIA SupportNotes
WPFFullBest UIA support. Use AutomationId for reliable targeting.
UWP/WinUIFullXAML controls fully accessible. Flyouts may be separate windows.
JavaFXFullNative UIA support for standard controls.
Qt5/Qt6PartialStandard widgets work. Custom QWidgets without QAccessibleInterface need OCR.
WinFormsPartialStandard controls work. Owner-drawn and custom UserControls need OCR.
Win32/MFCPartialCommon Controls work. Owner-drawn buttons need OCR.
ElectronConditionalNeeds --force-renderer-accessibility flag. Canvas content needs OCR.
Chromium browsersConditionalAuto-distinguished from Electron apps. Standard page elements work.
Java SwingNone (UIA)UIA doesn't work — needs Java Access Bridge (jabswitch -enable) or OCR.
GTKNoneNo UIA support on Windows. OCR and coordinate-based automation only.

See Framework Support Reference for per-framework troubleshooting.

macOS Framework Support

FrameworkAccessibilityNotes
Cocoa (native)FullNative AXUIElement support. All Apple apps.
ElectronConditionalAccessibility may need to be enabled. Canvas content needs OCR.
Chromium browsersConditionalStandard page elements work via accessibility.
QtPartialStandard widgets accessible. Custom widgets need OCR.
Java (JetBrains, etc.)PartialDepends on Java Accessibility Bridge.
Terminal appsFullInput goes through pyautogui passthrough.

Example Workflows

General desktop automation:

"Open the Settings app, navigate to Display, and tell me what resolution I'm running at"

Claude launches Settings, uses UIA to navigate menus, reads the display resolution.

App interaction:

"Open my app, click through each tab, fill out the contact form with test data, submit it, and tell me if anything looks broken"

Claude launches the app, detects its framework, navigates via accessibility tree, fills out forms, clicks submit, and reports any visual or functional issues.

Visual QA — Claude sees its own work:

"Build me a settings page with a dark theme toggle, then open it in the browser, screenshot it, and fix anything that doesn't look right"

Claude writes the code, launches the dev server, opens the browser, takes a screenshot, spots that the toggle is misaligned, and fixes the CSS — all without you saying a word.

Legacy apps with no accessibility:

"This old Java app has no accessibility. Find the 'Run Analysis' button and click it"

Claude detects Java Swing, knows UIA won't work, uses OCR to find the button text, and clicks it.

Known Limitations

  • Windows and macOS only. Linux is not currently supported. On macOS, ensure Accessibility permissions are granted to your terminal (System Settings > Privacy & Security > Accessibility).
  • Python 3.10+ required. The MCP server uses modern type syntax.
  • Electron apps need a flag. Most Electron apps disable accessibility by default. Relaunch with --force-renderer-accessibility.
  • Java Swing needs JAB. UIA doesn't work with Swing. Enable Java Access Bridge (jabswitch -enable) or use OCR as the primary approach.
  • OCR sees everything on screen. If your terminal and target app are both visible, OCR may find text in both. Use region screenshots to isolate the target window.

Documentation

  • Agent Guide — Quick reference for Claude/agents using HandsOn tools
  • Framework Support — Per-framework compatibility and troubleshooting

Acknowledgments

HandsOn was inspired by:

  • Empirica by Nubaeon (David S. L. Van Assche) — for pioneering the SVG badge approach in Claude Code plugins, and for ideas around session-aware tooling
  • mcp-pyautogui by hathibelagal-dev — for demonstrating that PyAutoGUI + MCP is a viable approach to desktop automation
  • MCPControl by claude-did-this — for showing how to give AI agents full Windows desktop control

HandsOn is an independent implementation with no shared code, built from the ground up with accessibility-first targeting, OCR fallback, framework detection, and native Claude Code plugin integration.

License

MIT

// compatibility

Platformscli, api, desktop, web
Operating systems
AI compatibilityclaude
LicenseMIT
Pricingopen-source
LanguagePython

// faq

What is HandsOn?

Give Claude eyes and hands — screen capture and desktop automation plugin for Claude Code. It is open-source on GitHub.

Is HandsOn free to use?

HandsOn is open-source under the MIT license, so it is free to use.

What category does HandsOn belong to?

HandsOn is listed under plugins in the Claudeers registry of Claude-compatible tools.

2 views
30 stars
unclaimed
updated 15 days ago

// embed badge

HandsOn on Claudeers
[![Claudeers](https://claudeers.com/api/badge/handson.svg)](https://claudeers.com/handson)

// retro hit counter

HandsOn hit counter
[![Hits](https://claudeers.com/api/counter/handson.svg)](https://claudeers.com/handson)

// reviews

// guestbook

0/500

// related in Claude Plugins

🔓

A single CLAUDE.md file to improve Claude Code behavior, derived from Andrej Karpathy's observations on LLM coding pitfalls.

// pluginsmultica-ai/187,223[ claude ]
🔓

Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explainin…

// pluginsanthropics/Python135,848[ claude ]
🔓

"CLI-Anything: Making ALL Software Agent-Native" -- CLI-Hub: https://clianything.cc/

// pluginsHKUDS/Python44,672Apache-2.0[ claude ]
🔓

A Claude Code plugin that shows what's happening - context usage, active tools, running agents, and todo progress

// pluginsjarrodwatts/JavaScript26,116MIT[ claude ]
Ecosystem hubone of the most connected projects in the claude ecosystem · 30 connections
→ see how HandsOn connects across the ecosystem