Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/emiliougarte65-gui-control
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/gui-control
Tools it pre-approves 1
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash
What's inside
- Skill name
gui-control- Description
- Desktop automation via a computer-use vision loop. Takes screenshots, sends them to Claude with the --image flag, parses JSON actions from Claude's response, and dispatches them via pyautogui. Completed step sequences are saved to Engram as replayable macros (no re-running the vision loop). Triggers: gui run, gui control, interfaz grafica, computer use, click, screenshot, automatizar pantalla.
- License
- Apache-2.0
- Allowed tools
- Bash
- Metadata
- author: dexter · source: dexter · audited: true · version: 1.0
- Instructions
- 157 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Pre-approves any shell command
Files (3)
- SKILL.md
- gui.py · scripts/
- macro_store.py · scripts/
SKILL.md (first lines)
# GUI Control
Desktop automation skill. Uses a vision loop (screenshot → Claude --image → JSON action → execute)
to automate GUI tasks, and saves completed sequences as macros for instant replay.
## JSON Action Protocol
When you are operating as the GUI agent in the vision loop, you MUST respond with a **single JSON
object on stdout** — nothing else. The caller reads your full stdout and passes it to `json.loads()`.
### Supported actions
```json
{ "action": "click", "x": 960, "y": 540 }
{ "action": "right_click", "x": 960, "y": 540 }
{ "action": "double_click", "x": 960, "y": 540 }
{ "action": "type", "text": "hello world" }
{ "action": "key", "keys": "ctrl+c" }
{ "action": "scroll", "amount": 3 }
{ "action": "move", "x": 960, "y": 540 }
{ "action": "navigate", "url": "https://example.com" }
{ "action": "wait", "ms": 500 }
{ "action": "done" }
```
### Rules for the vision loop agent
1. Look at the screenshot carefully before deciding.
2. Emit **exactly one** JSON action per turn.
3. When the task is fully complete, emit `{"action": "done"}` — this saves the macro.
4. If the task is impossible or you are stuck after several attempts, emit `{"action": "done"}` with
a note in a `"note"` field (the macro will NOT be saved on error exit).
5. Never emit explanatory prose — only the JSON object. The caller cannot parse prose.
6. Include `"x"` and `"y"` for all pointer actions. Coordinates are absolute screen pixels.
7. For `"key"`, separate modifiers and keys with `+` (e.g. `"ctrl+shift+t"`, `"alt+F4"`).
### Example turn sequence
```
[system] Task: "Open a new terminal tab"
[step 1] Screenshot → Claude sees terminal window
→ { "action": "key", "keys": "ctrl+shift+t" }
[step 2] Screenshot → Claude sees new tab opened
→ { "action": "done" }
→ Macro saved as gui-macros/default/open-a-new-terminal-tab
```
## Computer-Use Loop
```
gui run "<task>"
│
├─ macro_store.find(task) → hit? → replay without screenshots (fast path)
│
└─ miss → vision loop:
for step in 1..max_steps:
screenshot → /tmp/dexter_gui_{ts}_{step}.png
claude -p "{system_prompt + task + history}"
--image /tmp/dexter_gui_{ts}_{step}.png
--dangerously-skip-permissions
parse JSON from stdout
if action == done → break → save macro
execute action via pyautogui
with 25% probability → spot-check screenshot:
claude asks "did that action succeed?"
if no → log warning, Claude adapts next step
if max_steps reached → print error, exit 1, do NOT save
```
## Macro Memory Layer
Completed task sequences are stored in Engram with topic key `gui-macros/default/{slug}`.
On subsequent runs of the same task, the vision loop is skipped entirely — steps replay directly.
- **Save**: automatic after `action: done`
- **List**: `gui macro list`
- **Replay**: `gui macro replay <slug>`
- **Delete**: `gui macro delete <slug>`
- **Fallback**: `~/.dexter/gui-macros.json` when Engram CLI is unavailable
## Setup Requirements
```bash
# Required: pyautogui for mouse/keyboard automation
pip install pyautogui
# Linux X11: scrot for screenshots (preferred)
sudo apt install scrot
# or: imagemagick for `import -window root` fallback
sudo apt install imagemagick
# Linux: xdotool (optional, for extra input capabilities)
sudo apt install xdotool
# macOS: screencapture is built-in (no install needed)
# Windows: PIL/Pillow for screenshots
pip install Pillow
```
## Verification
When the user says **"no se envió"**, **"no funcionó"**, **"qué pasó"**, **"verificá"**,
**"it didn't work"**, **"check the screen"** — run `gui verify` immediately:
```bash
python3 skills/gui-control/scripts/gui.py verify "did the email send?"
python3 skills/gui-control/scripts/gui.py verify "is the file saved?"
python3 skills/gui-control/scripts/gui.py verify # general OK check
```
Claude takes a screenshot and returns `{"ok": true/false, "note": "what it sees"}`.
No action is executed — this is read-only.
During a `gui run`, random spot-checks happen automatically (~25% of steps).
Disable with `--verify-rate 0`. Increase vigilance with `--verify-rate 1.0`.
## Usage Examples
```bashFrom EmilioUgarte65/Dexter, Apache-2.0.
More from EmilioUgarte65/Dexter
- 0.437score
philips-hue
dexter
Control Philips Hue lights via the local bridge REST API.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
whatsapp
dexter
Personal WhatsApp assistant powered by Baileys.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
home-assistant
dexter
Control and query Home Assistant via REST API.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
device-discovery
dexter
Discover IoT devices on the local network using nmap and arp-scan.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
sentry
dexter
Interact with Sentry error tracking via REST API.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
webhooks
dexter
Receive incoming HTTP webhooks and trigger actions.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
meeting-transcription
dexter
Transcribe audio files locally via Whisper CLI or OpenAI Whisper API fallback.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
personal-kb
dexter
Local markdown-based personal knowledge base.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
mqtt
dexter
Publish and subscribe to MQTT topics.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
signal
dexter
Send messages and media via Signal CLI.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
slack
dexter
Post messages and files to Slack via the Web API (chat.postMessage).
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
telegram
dexter
Send messages and files via Telegram Bot API.
SkillDFreshness: D★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Mar 28, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.0
- License
- Apache-2.0
- Repository
- github.com/EmilioUgarte65/Dexter
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from dexter
- 0.437score
home-assistant
dexter
Control and query Home Assistant via REST API.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
philips-hue
dexter
Control Philips Hue lights via the local bridge REST API.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
whatsapp
dexter
Personal WhatsApp assistant powered by Baileys.
SkillDFreshness: D★ 1Claude Code +9 - 0.437score
device-discovery
dexter
Discover IoT devices on the local network using nmap and arp-scan.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
webhooks
dexter
Receive incoming HTTP webhooks and trigger actions.
SkillDFreshness: D★ 1Claude Code +9 - 0.434score
outlook
dexter
Send and read Outlook email via Microsoft Graph API.
SkillDFreshness: D★ 1Claude Code +9
Cite this page
gui-control skill. Agent Mart. https://agentmart.dev/skills/emiliougarte65-gui-control (last updated 2026-10-24)