Agent skill

Verify Reel

by rselbach in rselbach/reel

Verify Reel, the macOS menu-bar screen recorder, by launching a disposable app bundle and driving its real UI with Computer Use.

UnlicenseAuto-check passedProductivity & Automation

Install Verify Reel

skills CLI
$ npx skills add rselbach/reel --skill verify-reel -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install rselbach/reel verify-reel --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/rselbach/reel.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/verify-reel .claude/skills/verify-reel && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
verify-reel
GitHub stars
118
Token cost
~2k tokens
SKILL.md length
825 words
Files
8 (incl. scripts)
Skills in repo
1
Repo updated
First seen
Licence
Unlicense

At a glance

Verify Reel, the macOS menu-bar screen recorder, by launching a disposable app bundle and driving its real UI with Computer Use.

  • Tasks that involve Desktop control
  • SKILL.md covers Launch, Permission relaunch, Doctor and Drive, plus 3 more sections
  • Calls just

What it does

Verify Reel is an agent skill from rselbach/reel. Verify Reel, the macOS menu-bar screen recorder, by launching a disposable app bundle and driving its real UI with Computer Use. Use after changes to first-run, recording, settings, or preview behavior.

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts (for example `features/README.md`, `features/choose-recording-target.md` and `features/first-launch.md`).

It sits in Productivity & Automation, covering Desktop control. It works with macOS. The licence is Unlicense.

When your agent uses it

  • Tasks that involve Desktop control

Example prompts

  • “/verify-reel”

What it can do on your machine

Read from SKILL.md and the folder at commit b24b76a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/, which the agent can run.

    Shell commands in SKILL.md call:

    • just

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Verify Reel loads about 2k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 825 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~54
When it runs · the whole SKILL.md, loaded when a task matches
~2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from rselbach/reel at commit b24b76a, republished under its Unlicense licence (© rselbach). 825 words, ~2,032 tokens.

Download SKILL.mdSave it as .claude/skills/verify-reel/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
verify-reel
description
Verify Reel, the macOS menu-bar screen recorder, by launching a disposable app bundle and driving its real UI with Computer Use. Use after changes to first-run, recording, settings, or preview behavior.

Verify Reel

Drive the packaged Reel app as a user would. Read features/README.md first, then read the file for the feature under test.

Reel is a menu-bar macOS app. It has no CLI or HTTP interface. Use the computer-use:computer-use skill and its node_repl workflow for every UI action. Shell commands may build, launch, inspect, and stop the disposable instance.

Launch

Start from the repository root. The helper refuses to launch if any Reel process is already running because Reel registers machine-wide hotkeys and uses machine-wide screen, microphone, and camera permissions.

bash
run_id="$(date -u +%Y%m%dT%H%M%SZ)-$$"
.agents/skills/verify-reel/scripts/verify-reel launch "${run_id}"

To re-sign the disposable copy after its bundle metadata changes, pass a Developer ID Application identity:

bash
SIGNING_IDENTITY="<Developer ID Application identity>" \
  .agents/skills/verify-reel/scripts/verify-reel launch "${run_id}"

launch runs just build-app, copies the result to .build/verify-reel/Reel Verification.app, changes only the copied bundle's identifier and display name, and starts its executable. It sets CFFIXED_USER_HOME to the run directory, so preferences and the default Movies folder do not touch Reel's normal data.

When SIGNING_IDENTITY is set, launch signs Sparkle.framework, the Reel executable with Reel.entitlements, and the copied bundle in that order. The helper verifies the copied bundle's signature before launch. It does not change .build/Reel.app.

The app is ready when launch reports ready, doctor passes, and Computer Use can read either the Welcome to Reel window or Reel's menu-bar item. The first launch does not request screen-recording permission until the user chooses Grant Screen Recording Access.

Do not start a second run. If launch reports another Reel process, leave that process alone and ask the user to quit it.

Permission relaunch

macOS applies a new screen-recording grant only after the requesting app quits. Keep the current run and its signed bundle. After granting access, relaunch it without rebuilding or signing again:

bash
.agents/skills/verify-reel/scripts/verify-reel relaunch "${run_id}"

relaunch stops the recorded process if it is still alive, then opens the same bundle with the same isolated home. If Reel already relaunched itself, the helper adopts the replacement process instead. It updates the recorded PID and runs doctor before returning. Do not run cleanup between the permission grant and this relaunch.

Doctor

Run this read-only check before driving the app and whenever the UI looks stale:

bash
.agents/skills/verify-reel/scripts/verify-reel doctor "${run_id}"

Doctor requires the recorded PID to be alive, its command to match the copied executable, the copied bundle ID to be com.rselbach.reel.verification, and the embedded commit to match HEAD. It prints the app path, PID, bundle ID, evidence directory, and current network-connection count. A failed doctor means the instance is not safe to drive. Clean it up, then launch a new run.

Drive

Load the computer-use:computer-use skill. Initialize its bundled package once in a fresh node_repl session:

js
globalThis.sky = (await import("@oai/sky")).sky;
globalThis.reelFs = await import("node:fs/promises");
globalThis.reelFileURLToPath = (await import("node:url")).fileURLToPath;
globalThis.reelRepo = nodeRepl.cwd;
globalThis.reelRunId = (
  await reelFs.readFile(
    `${reelRepo}/.build/verify-reel/current-run`,
    "utf8"
  )
).trim();
globalThis.reelRunDir =
  `${reelRepo}/.build/verify-reel/runs/${reelRunId}`;
globalThis.reelAppPath = (
  await reelFs.readFile(`${reelRunDir}/app-path`, "utf8")
).trim();
globalThis.reelEvidenceDir = (
  await reelFs.readFile(`${reelRunDir}/evidence-dir`, "utf8")
).trim();
globalThis.captureReel = async (name) => {
  const state = await sky.get_app_state({
    app: reelAppPath,
    disableDiff: true,
  });
  await reelFs.mkdir(reelEvidenceDir, { recursive: true });
  await reelFs.writeFile(
    `${reelEvidenceDir}/${name}.ax.txt`,
    `${state.text}\n`
  );
  if (!state.screenshot) {
    throw new Error(`Reel returned no screenshot for ${name}`);
  }
  await reelFs.copyFile(
    reelFileURLToPath(state.screenshot.url),
    `${reelEvidenceDir}/${name}.png`
  );
  return state;
};
globalThis.reelState = await captureReel("initial");
nodeRepl.write(reelState.text);

Use the full app path from the run metadata. Do not target Reel by display name because a normal installation may exist on the same Mac.

Derive every element_index from the latest accessibility tree. After each click, key press, drag, or value change, call get_app_state again before choosing the next index. Stable handles in this app include:

  • window names Welcome to Reel, New Recording, Reel Settings, Recording Preview, and About Reel
  • buttons and menu items such as Get Started, Start Recording..., Settings..., Stop Recording, Record Again, and Done
  • tabs General, Recording, and Shortcuts
  • the menu-bar item whose accessibility description is Reel

Use coordinates only when the accessibility tree omits a visual control, such as a trim handle or a recording-region corner. Capture a fresh screenshot before choosing coordinates and another one after the action.

Show full SKILL.md (268 more words)Show less

Evidence

Proof belongs in .build/verification-evidence/reel/<run-id>/. The capture helper writes matching .ax.txt and .png files there. Name captures after the feature and state, for example settings-before and settings-after.

A valid proof must:

  • follow a user entry point from the matching feature file
  • capture the action state and the resulting state, not only the last window
  • use the packaged app and normal UI rather than internal setters or test-only code
  • confirm file or preference changes through a second read-only view
  • keep production boundaries intact; use mocks only where Reel already has one
  • report every mapped entry point that was skipped or blocked

For a preference side effect, capture the helper's read-only result:

bash
.agents/skills/verify-reel/scripts/verify-reel preference \
  "${run_id}" hasShownWelcome \
  > ".build/verification-evidence/reel/${run_id}/hasShownWelcome.txt"

For a recording, capture the picker, the recording state, and the preview. Also record stat and mdls output for the MP4 under the run's isolated Movies directory. Confirm that dry-run or safe-mode claims match observed files, network connections, and UI behavior. Do not infer safety from a label.

Cleanup

Stop only the recorded PID, then remove the copied app and per-run state:

bash
.agents/skills/verify-reel/scripts/verify-reel cleanup "${run_id}"

Cleanup verifies that the PID still belongs to the exact executable before it sends a signal. It never kills by process name. It removes .build/verify-reel/Reel Verification.app and that run's scratch directory. It does not remove .build/verification-evidence/reel/<run-id>/.

After cleanup, prove that the evidence survived:

bash
test -d ".build/verification-evidence/reel/${run_id}"
find ".build/verification-evidence/reel/${run_id}" -type f -maxdepth 1 -print

If a drive fails, run cleanup before retrying. If cleanup refuses because the PID now names another executable, do not signal it. Report the mismatch.

Helpers

The executable helper is .agents/skills/verify-reel/scripts/verify-reel.

text
verify-reel launch <run-id>
verify-reel relaunch <run-id>
verify-reel doctor <run-id>
verify-reel describe <run-id>
verify-reel preference <run-id> <key>
verify-reel cleanup <run-id>

describe prints the recorded paths and identity. preference reads one key from the run's isolated defaults domain. Neither command changes app state.

© rselbach, Unlicense. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (scripts) in .agents/skills/verify-reel of rselbach/reel.

  • SKILL.md
  • features/README.md
  • features/choose-recording-target.md
  • features/first-launch.md
  • features/post-recording-preview.md
  • features/recording-lifecycle.md
  • features/settings.md
  • scripts/verify-reel

Open the folder on GitHubat commit b24b76a

Compare with similar skills

Verify Reel next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Verify Reel compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Verify Reel this skillrselbach/reel118—~2kAutomated safety check: PassUnlicense
Mac Computer UseTo3akaRin/mac-computer-use1.1k—~495Automated safety check: PassMIT
Steerdisler/mac-mini-agent272—~2.1kAutomated safety check: PassNone
Computer Usekunpengtalk/PeakCode166—~2.5kAutomated safety check: PassMIT
Openbridge DebugAFK-surf/OpenBridge430—~2.2kAutomated safety check: PassMIT
Computer Useclacky-ai/openclacky1.2k—~1.7kAutomated safety check: PassMIT

Similar skills

  • Mac Computer Use

    To3akaRin/mac-computer-use

    操作 macOS 桌面应用,探测窗口和自动化接口、截图、读取或修改辅助功能元素、执行鼠标键盘动作,以及通过 CDP 操作内嵌 Chromium 页面。适用于桌面应用自动化与界面验收;普通网页任务优先使用已有浏览器工具。

    1.1k GitHub stars~495 tokensUpdated 16 days ago
    Productivity & AutomationAuto-check passed
  • Steer

    disler/mac-mini-agent

    macOS GUI automation CLI. An agent skill from disler/mac-mini-agent.

    272 GitHub stars~2.1k tokensUpdated 7 mo ago
    Productivity & AutomationAuto-check passed
  • Computer Use

    kunpengtalk/PeakCode

    Drive a macOS app through the computer tool — read its accessibility tree, act on elements, and use real input only when the tree cannot reach the target.

    166 GitHub stars~2.5k tokensUpdated 17 days ago
    Productivity & AutomationAuto-check passed
  • Openbridge Debug

    AFK-surf/OpenBridge

    Debug and validate OpenBridge on a real macOS desktop through mini-machine plus full VNC computer-use.

    430 GitHub stars~2.2k tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check passed
  • Computer Use

    clacky-ai/openclacky

    Drive the desktop — macOS, or the Windows desktop through WSL — when a task needs a native app, dialog, menu bar, file picker or anything the terminal and browser tools cannot reach.

    1.2k GitHub stars~1.7k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • macOS Automation

    vellum-ai/vellum-assistant

    Automate native macOS apps and system interactions via osascript (AppleScript)

    1.4k GitHub stars~778 tokensUpdated today
    Productivity & AutomationAuto-check passed

Works with

Questions about Verify Reel

What does Verify Reel do?

Verify Reel, the macOS menu-bar screen recorder, by launching a disposable app bundle and driving its real UI with Computer Use. Verify Reel is an agent skill from rselbach/reel. Verify Reel, the macOS menu-bar screen recorder, by launching a disposable app bundle and driving its real UI with Computer Use.

When should I use Verify Reel?

Verify Reel fits situations like: tasks that involve Desktop control.

How do I install Verify Reel in Claude Code?

Run `npx skills add rselbach/reel --skill verify-reel -a claude-code`. Or copy the skill folder (.agents/skills/verify-reel in rselbach/reel) into .claude/skills/verify-reel in your project. Claude Code loads it when a task matches its description.

How do I install Verify Reel in Codex?

Run `npx skills add rselbach/reel --skill verify-reel -a codex`. Or copy the skill folder (.agents/skills/verify-reel in rselbach/reel) into .agents/skills/verify-reel in your project. Codex loads it when a task matches its description.

Can I use Verify Reel in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add rselbach/reel --skill verify-reel -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/verify-reel, .gemini/skills/verify-reel, .github/skills/verify-reel and .opencode/skills/verify-reel in your project.

What does Verify Reel need to run?

Going by SKILL.md and its folder, Verify Reel needs the command-line tools its instructions call (just).

Does Verify Reel access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Verify Reel safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Verify Reel use?

Verify Reel is published under the Unlicense licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Verify Reel use?

About 2k tokens (SKILL.md is roughly 8.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Verify Reel?

Skills that share tags, products or a category with Verify Reel: Mac Computer Use (To3akaRin/mac-computer-use, 1.1k stars), Steer (disler/mac-mini-agent, 272 stars), Computer Use (kunpengtalk/PeakCode, 166 stars) and Openbridge Debug (AFK-surf/OpenBridge, 430 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Verify Reel?

rselbach (a GitHub user) maintains it in rselbach/reel, which has 118 GitHub stars. The repository was last updated on September 3, 2026.

Source: rselbach/reel on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.