Skip to content
cccskills
FreePublished on GitHubEnglish overview

gpui-screenshots

Inspect the GPUI client by scripting clicks, keystrokes, and screenshots in a hidden window with separate temporary app data. Use it to check interface changes, reproduce UI bugs, or capture how a change appears without opening the app on the user's screen.

OriginalShow the original description

Use whenever you need to see, click through or screenshot the GPUI client (crates/but-gpui), to check a UI change works, reproduce a UI bug, or show what a change looks like. Drives the app from a script in a window that never shows on the user's screen, against throwaway app data. Never start the app with `cargo run` or the plain binary to look at it.

gitbutlerapp/gitbutler21,887 stars(GitHub 21,887 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Check whether a GPUI interface change works
  • Reproduce a UI bug with scripted steps
  • Capture screenshots of the client
  • Explore the interface without showing its window

Overview

What it does

This skill launches the GPUI client from a script in a window that stays hidden from the user. It can click, type keys, wait, and take screenshots while reporting the app’s prompts, warnings, and errors. Use it to check interface changes, reproduce bugs, or record screens. The run uses separate temporary app data, leaving the user’s projects and settings untouched. It also supports taking a close-up of part of the screen and exploring one step at a time.

When it helps

Use it to check whether a UI change behaves as intended or to reproduce an interface problem with a repeatable sequence of actions. It is also useful for saving screen images to compare before and after a change. You can add a disposable Git repository to the app to prepare a particular state.

Example requests

  • “Drive this screen change with a script and capture the result.”
  • “Reproduce this UI bug with these steps and inspect the screen afterward.”
  • “Capture the screen with a repository added.”

Notes

cargo must be on PATH; otherwise, run from the repository’s development shell. Use an APFS clone when trying a real repository. Focus and blur behavior, copying to the clipboard, and AI features in Settings need separate care.

This overview was written by AI (OpenAI Codex) from the public SKILL.md. Check the original below for the exact behavior.

Document check

AI checked the SKILL.md for operations that need care and for setup requirements. The score comes only from actually running the skill (hands-on test).

SafetyAre sending data, deleting files, and running commands disclosed?
BPartly lackingIt uses temporary data and a disposable repository, while flagging real repositories and clipboard effects.
Easy setupDoes it need few tools or API keys, and are they documented?
BPartly lackingIt requires `cargo` and describes the development shell and APFS clone option.

Not counted in the score. Rated by AI (OpenAI Codex) as of Oct 29, 2026. Treat it as a guide and read the original before installing.

Disagree? Request a re-evaluation

Tell us which point is wrong and why. No login needed. We will check it against the SKILL.md, redo the evaluation, and show the result here.

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

Files included (1)

  • SKILL.md4.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

crates/but-gpui/scripts/drive.sh builds the client with --features dev-script and runs it from a script. The window never shows, the app stays out of the Dock and never takes the user's keys, and it runs against app data of its own, so none of the user's projects or settings are touched. Starting the app any other way opens a window on the user's screen.

A repository to show

The app writes to what it opens: GitButler's workspace, refs, the oplog. Never add the checkout you're working in, or any repository of the user's. Make a throwaway one:

repo=$(mktemp -d)/repo
git init -q -b main "$repo"
git -C "$repo" -c user.name=Tester -c user.email=t@example.com commit -q --allow-empty -m "Initial commit"
echo hello > "$repo/notes.txt"

Build whatever state the change needs (branches, commits, uncommitted edits) with git here, or later with sh steps, which run while the app watches. To try a real repository, use an APFS clone as crates/but-gpui/AGENTS.md (Sandboxes and fixtures) says.

One run

Write a script, one command per line (src/dev.rs lists them all), and run it:

add /path/to/repo        # the folder Add a repository would be given
wait 1000                # let the first loads land
shot /tmp/before.png
click 400 184            # window coordinates, see below
key cmd-k
type history
shot /tmp/after.png
crates/but-gpui/scripts/drive.sh run script.txt

It prints what the app reported (failed steps as script line N: …, prompts as PROMPT …, warnings and errors) and where the app data and logs went. The run quits when the script ends and is killed after --timeout seconds (300). Read the shots to check them.

A step at a time

To explore, or to find where to click from what's on screen:

crates/but-gpui/scripts/drive.sh start
crates/but-gpui/scripts/drive.sh step "add /path/to/repo" "wait 1000"
crates/but-gpui/scripts/drive.sh step "click 400 184" "key down"
crates/but-gpui/scripts/drive.sh stop

Each step runs its arguments as script lines, saves a shot, and prints its path (under target/gpui-drive/shots) after anything the app reported and a KEYS line. A session quits on its own after --timeout seconds (1800); always stop it when done. One session per checkout.

Where the keys go

KEYS Workspace > Navigator > TextInput says what typing reaches: here a text field in the navigator. Check it before type or a single-letter key. In a list or the diff, letters run shortcuts, so a query typed there makes branches (b), pushes (⇧P), opens menus (m), or opens the user's editor on their screen (e) instead. After add the navigator has the keys, so click the field you mean first. In a run script, a keys line prints the same.

Coordinates

The window is 1360×860 in logical pixels, which is what click, move, drag and scroll take, and a shot is saved at that size: where something shows in it is where to click it. shot path x y w h saves just that region, given in the same coordinates, at the display's full resolution (2× on a Retina Mac) for a closer look, so a point read off it is the region's origin plus half its pixel offset. size W H resizes the window.

Notes

  • cargo must be on the PATH. If it isn't, run inside the repository's dev shell: nix develop --command crates/but-gpui/scripts/drive.sh … (needed for run and start; step and stop don't build).
  • GITBUTLER_GPUI_APPEARANCE=dark (or light) before the command picks the theme.
  • run --release builds with optimizations, for perf and hold timings; see Measuring performance in crates/but-gpui/AGENTS.md.
  • The window is never key, so on_focus and on_blur listeners never fire and carets don't blink. Check those by hand.
  • Copy writes the real clipboard, and Settings › AI reads the keychain. Add projects with add: Add project's folder picker would open on the user's screen.
  • Scripted runs in crates/but-gpui/AGENTS.md has the rest: hover needs a second small move, links in text need press then release, prompts need their buttons clicked, and drags have their own commands.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

but

FreeSummary

Manage version control through GitButler’s but CLI. Select files or hunks, meaning sections of a diff, for commits; organize dependent branches, split or combine history, resolve conflicts, and create pull requests using task-specific command workflows.

  • Commit selected files or sections of a diff
  • Split, combine, or reorder commits
  • Arrange branches by dependency
gitbutlerapp/gitbutler21.9KUpdated Oct 30, 2026

but-agentlog

FreeSummary

Review captured agent sessions related to a GitButler branch, pull request, or change. Start with a chronological overview of previous discussions and actions, then inspect specific turns when the rationale or supporting evidence needs clarification.

  • Catch up on previous work on the current branch
  • Review discussions related to a pull request
  • Understand the reasons behind earlier changes
gitbutlerapp/gitbutler21.9KUpdated Oct 30, 2026

Create, update, run, and debug shell-based performance scenarios for the but CLI. It separates repository setup from the operation being measured, uses Hyperfine for timing, and guides focused validation and inspection of test output.

  • Add a performance scenario for a but CLI operation
  • Update repository fixtures for an existing benchmark
  • Run a short benchmark for one scenario
gitbutlerapp/gitbutler21.9KUpdated Oct 30, 2026

cli-commands

FreeSummary

Implement or modify GitButler’s but commands using its established structure. It covers typed arguments, input validation, execution, and human-readable, shell, or JSON output, while keeping operations usable from the terminal interface.

  • Add a new but command
  • Define arguments for branches and commits
  • Separate input validation from execution
gitbutlerapp/gitbutler21.9KUpdated Oct 30, 2026

gitbutler-ui

FreeSummary

Update visible interfaces in Lite and but.dev using @gitbutler/ui-react. It guides component reuse, relevant design references, concise screen text, and visual checks in light and dark themes for forms, dialogs, notifications, and other surfaces.

  • Add forms or confirmation dialogs
  • Improve empty states and notifications
  • Rewrite labels and hints
gitbutlerapp/gitbutler21.9KUpdated Oct 30, 2026

tui-tests

FreeSummary

Add or update tests for GitButler’s Ratatui terminal interfaces. It guides simulated key input, selection checks, SVG snapshots that record expected screen output, and commands for running tests or updating snapshots.

  • Test cursor movement and selection
  • Check screen output after key input
  • Update expected SVG snapshots
gitbutlerapp/gitbutler21.9KUpdated Oct 30, 2026

See all skills by gitbutlerapp

Report a problem with this skill