Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Automates desktop GUI workflows via computer use API with screenshot capture. Use when scripting GUI interactions or recording browser sessions for tutorials.
.claude/skills/athola-computer-control/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -13% | 0% |
Use Claude's Computer Use API to see and control desktop environments through screenshots and mouse/keyboard actions.
> Why this stays opt-in. Per > docs/inclusive-defaults.md]inc] (TRUE-exception > category 4), Computer Use takes screenshots and > synthesizes keyboard/mouse input: cross-process side > effects that must always be explicitly invoked, never > default-on.
inc]: ../../../../docs/inclusive-defaults.md
The computer use system has three layers:
phantom.display) - executes OS-levelactions via xdotool/scrot on the real or virtual display
phantom.loop) - manages the conversationcycle between Claude API and the display toolkit
phantom.cli) - command-line interface for runningtasks or checking environment readiness
User Task
|
v
Agent Loop <----> Claude API (beta)
| |
v v
Display Toolkit tool_use responses
| (click, type, screenshot)
v
OS Commands (xdotool, scrot)
|
v
Display (X11 / Xvfb / WSLg)bashcd plugins/phantom uv run python -m phantom.cli --check
bashexport ANTHROPIC_API_KEY="sk-ant-..." uv run python -m phantom.cli "Open Firefox and search for Claude AI"
pythonfrom phantom.display import DisplayConfig, DisplayToolkit from phantom.loop import LoopConfig, run_loop result = run_loop( task="Take a screenshot of the desktop", api_key="sk-ant-...", loop_config=LoopConfig( model="claude-sonnet-5", max_iterations=10, ), display_config=DisplayConfig(width=1920, height=1080), ) print(f"Done in {result.iterations} iterations") print(result.final_text)
| Model | Tool Version | Beta Flag | |-------|-------------|-----------| | Opus 4.6, Sonnet 4.6, Opus 4.5 | computer_20251124 | computer-use-2025-11-24 | | Sonnet 4.5, Haiku 4.5, older | computer_20250124 | computer-use-2025-01-24 |
The resolve_tool_version() function handles this mapping automatically based on the model name.
All versions:
screenshot - capture displayleft_click - click at [x, y]type - type text stringkey - press key combo (e.g., ctrl+s)mouse_move - move cursorEnhanced (20250124+):
scroll - scroll with direction and amountleft_click_drag - drag between coordinatesright_click, middle_click, double_click, triple_clickhold_key - hold key for durationwait - pause between actionsLatest (20251124):
zoom - inspect screen region at full resolutionComputer use carries risks. Follow these guidelines:
necessary, and never for banking or sensitive services
max_iterations toprevent runaway API costs
add confirmation callbacks via on_action
screenshots; close anything private before starting
Linux (native or WSL2 with WSLg):
bashsudo apt install xdotool scrot xclip
Headless (Docker/CI):
bash# Install Xvfb for virtual display sudo apt install xvfb xdotool scrot xclip Xvfb :1 -screen 0 1920x1080x24 & export DISPLAY=:1
catch mistakes early
uv run python -m phantom.cli --check exits 0 before anytask is launched; if it fails, required OS tools (xdotool, scrot, xclip) are installed or Xvfb is started before proceeding
max_iterations set on every run_loop() call; no tasklaunched without an explicit iteration cap to prevent runaway API costs
result.iterations count andresult.final_text confirming the task outcome; empty final_text treated as failure, not success
files) closed before task starts; task prompt does not contain raw credentials
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 12,626 | 6,535 | -48% | 1 | 1 | 0% | 2,264 | 2,622 | +16% | 0 | 0 | — |
case-01 | fail→pass | 19,678 | 7,946 | -60% | 1 | 1 | 0% | 3,123 | 2,909 | -7% | 0 | 0 | — |
case-02 | fail→pass | 13,797 | 6,896 | -50% | 1 | 1 | 0% | 2,462 | 2,672 | +9% | 0 | 0 | — |
case-04 | fail→pass | 10,162 | 3,325 | -67% | 1 | 1 | 0% | 1,736 | 1,940 | +12% | 0 | 0 | — |
case-05 | fail→pass | 9,699 | 2,037 | -79% | 1 | 1 | 0% | 2,008 | 1,756 | -13% | 0 | 0 | — |
case-06 | fail→pass | 11,704 | 2,860 | -76% | 1 | 1 | 0% | 1,776 | 1,793 | +1% | 0 | 0 | — |
case-07 | pass→pass | 5,542 | 2,660 | -52% | 1 | 1 | 0% | 866 | 1,748 | +102% | 0 | 0 | — |
case-08 | pass→pass | 7,833 | 4,364 | -44% | 1 | 1 | 0% | 1,429 | 2,060 | +44% | 0 | 0 | — |
case-09 | fail→pass | 15,093 | 5,269 | -65% | 1 | 1 | 0% | 2,694 | 2,331 | -13% | 0 | 0 | — |
case-10 | pass→pass | 14,889 | 3,892 | -74% | 1 | 1 | 0% | 2,170 | 1,886 | -13% | 0 | 0 | — |
case-11 | pass→pass | 9,026 | 2,681 | -70% | 1 | 1 | 0% | 1,464 | 1,825 | +25% | 0 | 0 | — |
case-12 | pass→pass | 11,252 | 1,895 | -83% | 1 | 1 | 0% | 1,658 | 1,591 | -4% | 0 | 0 | — |
case-18 | fail→pass | 19,051 | 10,092 | -47% | 1 | 1 | 0% | 1,969 | 2,344 | +19% | 0 | 0 | — |
case-13 | fail→pass | 20,564 | 1,928 | -91% | 1 | 1 | 0% | 2,237 | 1,568 | -30% | 0 | 0 | — |
case-14 | pass→pass | 7,198 | 3,270 | -55% | 1 | 1 | 0% | 1,083 | 1,673 | +54% | 0 | 0 | — |
case-15 | fail→pass | 12,855 | 2,290 | -82% | 1 | 1 | 0% | 2,028 | 1,609 | -21% | 0 | 0 | — |
case-16 | fail→pass | 11,797 | 2,876 | -76% | 1 | 1 | 0% | 1,969 | 1,889 | -4% | 0 | 0 | — |
case-17 | pass→pass | 8,478 | 1,565 | -82% | 1 | 1 | 0% | 1,636 | 1,583 | -3% | 0 | 0 | — |
case-19 | pass→pass | 20,429 | 4,943 | -76% | 1 | 1 | 0% | 1,991 | 2,130 | +7% | 0 | 0 | — |
case-20 | pass→pass | 6,276 | 4,852 | -23% | 1 | 1 | 0% | 1,022 | 2,161 | +111% | 0 | 0 | — |
case-21 | pass→pass | 15,013 | 10,362 | -31% | 1 | 1 | 0% | 2,258 | 2,985 | +32% | 0 | 0 | — |
case-22 | pass→pass | 8,436 | 6,364 | -25% | 1 | 1 | 0% | 1,459 | 2,390 | +64% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +50 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.