EvilFreelancer

Screenshotting Gui — Development skill for Claude Code

Development community

Agent skill for Claude Code, Codex and Cursor: repeatable screenshots of GUI desktop apps on an isolated Xvfb display, driven via python-Xlib (XTEST) and annotated with ImageMagick.

How to install Screenshotting Gui

This entry records only its repository, not the path inside it, so there is no exact command to give. Open EvilFreelancer/screenshotting-gui and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Screenshotting Gui does

Agent skill for Claude Code, Codex and Cursor: repeatable screenshots of GUI desktop apps on an isolated Xvfb display, driven via python-Xlib (XTEST) and annotated with ImageMagick.

Alternatives in Development

  • Agentic Stack — One brain, many harnesses 2.2k ★
  • Claude Canvas — A TUI toolkit that gives Claude Code its own display 1.4k ★
  • OpenSail — OpenSail is the open-source alternative to Codex App, Claude Desktop, Cursor, and Cowork for agentic software 634 ★

README

screenshotting-gui

**`/screenshotting-gui`** — take clean, repeatable screenshots of a GUI desktop application (Cursor, an IDE, a native app, a browser window) for docs, a course, or a bug report. The app runs on an **isolated Xvfb display** so synthetic input and captures never touch the operator's real desktop; you drive it with **python-Xlib** (XTEST), capture with **ImageMagick**, and annotate with a rounded highlight box, crop, or arrow.

Why a skill and not just `import -window root`

A good documentation screenshot needs the app driven to an exact state (a menu open, a diff visible), captured without a mouse cursor artifact or the operator's private desktop behind it, and annotated consistently. Doing that by hand every time is slow and error-prone. This skill packages the safe, deterministic pipeline.

Files

File Purpose
SKILL.md Agent instructions (frontmatter name, version, description) + workflow and gotchas.
scripts/xctl.py Drive the app on an X display via XTEST: move click key type scroll drag place shot winlist. python-Xlib only.
scripts/xpaste.py Own the X CLIPBOARD to serve UTF-8 text, so ctrl+v pastes unicode / Russian. python-Xlib only.
scripts/annotate.py ImageMagick post-processing: box, crop, vstack, arrow.

Requirements

`Xvfb`, `python3` with `python-Xlib`, and ImageMagick (`import`, `convert`). Optional faster capture fallback: `Pillow`. No window manager needed. No root, no `xdotool`.

Usage

export XCTL_DISPLAY=:99
Xvfb :99 -screen 0 1920x1080x24 -ac & sleep 1

# launch the app ON :99 (export DISPLAY, not only XCTL_DISPLAY)
DISPLAY=:99  & sleep 3
python3 scripts/xctl.py winlist        # note the window geometry

# drive -> capture -> annotate
python3 scripts/xpaste.py "текст с @ и {скобками}" 15 & sleep 0.6
python3 scripts/xctl.py click 1580 200 && python3 scripts/xctl.py key ctrl+v
python3 scripts/xctl.py shot raw.png --crop X Y W H
pyt