Project Pull Request
swimmwatch/cloakbrowser-mcp
Create, update, prepare, or review a cloakbrowser-mcp GitHub Pull Request only when the user explicitly requests PR work.
Drives a CLI through a TypeScript scenario and saves terminal screenshots at each step, so pull requests that change command output can be checked visually.
$ npx skills add QwenLM/qwen-code --skill terminal-capture -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install QwenLM/qwen-code terminal-capture --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.qwen/skills/terminal-capture .claude/skills/terminal-capture && rm -rf skills-srcUse ~/.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/
Install the "terminal-capture" agent skill from https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-capture into .claude/skills/terminal-capture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "terminal-capture", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-captureType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add QwenLM/qwen-code --skill terminal-capture -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install QwenLM/qwen-code terminal-capture --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.qwen/skills/terminal-capture .agents/skills/terminal-capture && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "terminal-capture" agent skill from https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-capture into .agents/skills/terminal-capture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "terminal-capture", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add QwenLM/qwen-code --skill terminal-capture -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install QwenLM/qwen-code terminal-capture --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.qwen/skills/terminal-capture .cursor/skills/terminal-capture && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "terminal-capture" agent skill from https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-capture into .cursor/skills/terminal-capture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "terminal-capture", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/QwenLM/qwen-code.git --path .qwen/skills/terminal-capture--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add QwenLM/qwen-code --skill terminal-capture -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install QwenLM/qwen-code terminal-capture --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.qwen/skills/terminal-capture .gemini/skills/terminal-capture && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "terminal-capture" agent skill from https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-capture into .gemini/skills/terminal-capture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "terminal-capture", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install QwenLM/qwen-code terminal-captureInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add QwenLM/qwen-code --skill terminal-capture -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/.qwen/skills/terminal-capture .github/skills/terminal-capture && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "terminal-capture" agent skill from https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-capture into .github/skills/terminal-capture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "terminal-capture", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add QwenLM/qwen-code --skill terminal-capture -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install QwenLM/qwen-code terminal-capture --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/QwenLM/qwen-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.qwen/skills/terminal-capture .opencode/skills/terminal-capture && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "terminal-capture" agent skill from https://github.com/QwenLM/qwen-code/tree/main/.qwen/skills/terminal-capture into .opencode/skills/terminal-capture/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "terminal-capture", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
terminal-captureDrives a CLI through a TypeScript scenario and saves terminal screenshots at each step, so pull requests that change command output can be checked visually.
Scenarios are TypeScript files placed under `integration-tests/terminal-capture/scenarios/`. Under the hood the CLI runs in a pseudo-terminal through node-pty, its ANSI output is rendered by xterm.js inside headless Playwright, and screenshots are taken from that page. The core files are `terminal-capture.ts` for the low-level engine, `scenario-runner.ts` for executing a scenario and `run.ts`, the entry point launched with `npx tsx`.
Each flow step can type text, which captures the input state, presses Enter, waits for the output to settle and captures the result. Images land in a per-scenario `screenshots` folder as numbered files such as `01-01.png` and `01-02.png`, plus a `full-flow.png` of the final state. Setup needs `npm install` and `npx playwright install chromium`; when `QWEN_VERIFY_CHROMIUM=1` is set in CI the browser is already present and the install is skipped.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit d9c6f8c. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npxnpmbrewplaywrightFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Terminal Screenshot Capture loads about 2k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 470 words of instructions outside code blocks.
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.
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); files beside SKILL.md are not scanned.
The full file from QwenLM/qwen-code at commit d9c6f8c, republished under its Apache-2.0 licence (© QwenLM). 470 words, ~2,019 tokens.
.claude/skills/terminal-capture/SKILL.md (or your agent's skills folder).Drive terminal interactions and screenshots via TypeScript configuration, used for visual verification during PR reviews.
Ensure the following dependencies are installed before running:
npm install # Install project dependencies.
npx playwright install chromium # Install Playwright browser (skip in CI: see note below)CI / verify context: when
QWEN_VERIFY_CHROMIUM=1is set, the browser is already installed andPLAYWRIGHT_BROWSERS_PATHpoints at it. Do not runplaywright install— it downloads ~170 MB and fails on system deps the agent user cannot install.
node-pty (pseudo-terminal)
→ ANSI byte stream
→ xterm.js (Playwright headless)
→ ScreenshotCore files:
integration-tests/terminal-capture/terminal-capture.ts
Low-level PTY, xterm.js, and Playwright engine.integration-tests/terminal-capture/scenario-runner.ts
Scenario executor for config, interactions, and screenshots.integration-tests/terminal-capture/run.ts
CLI entry point for batch scenario runs.integration-tests/terminal-capture/scenarios/*.ts
Scenario configuration files.Create a .ts file under integration-tests/terminal-capture/scenarios/:
import type { ScenarioConfig } from '../scenario-runner.js';
export default {
name: '/about',
spawn: ['node', 'dist/cli.js', '--yolo'],
// cwd is relative to this config file's location.
terminal: { title: 'qwen-code', cwd: '../../..' },
flow: [
{ type: 'Hi, can you help me understand this codebase?' },
{ type: '/about' },
],
} satisfies ScenarioConfig;# Single scenario
npx tsx integration-tests/terminal-capture/run.ts \
integration-tests/terminal-capture/scenarios/about.ts
# Batch (entire directory)
npx tsx integration-tests/terminal-capture/run.ts \
integration-tests/terminal-capture/scenarios/Screenshots are saved to
integration-tests/terminal-capture/scenarios/screenshots/{name}/:
| File | Description |
|---|---|
01-01.png | Step 1 input state |
01-02.png | Step 1 execution result |
02-01.png | Step 2 input state |
02-02.png | Step 2 execution result |
full-flow.png | Final state full-length screenshot |
Each flow step can contain the following fields:
type: string — Input TextAutomatic behavior: Input text → Screenshot (01) → Enter → stable output → Screenshot (02).
{
type: 'Hello';
} // Plain text
{
type: '/about';
} // Slash command (auto-completion handled automatically)Special rule: If the next step is key, do not auto-press Enter (hand over
control to the key sequence).
key: string | string[] — Send Key PressUsed for menu selection, Tab completion, and other interactions. Does not auto-press Enter or auto-screenshot.
Supported key names: ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Enter,
Tab, Escape, Backspace, Space, Home, End, PageUp, PageDown,
Delete
{
key: 'ArrowDown';
} // Single key
{
key: ['ArrowDown', 'ArrowDown', 'Enter'];
} // Multiple keysAuto-screenshot is triggered after the key sequence ends (when the next step is
not a key).
streaming — Capture During ExecutionCapture multiple screenshots at intervals during long-running output (e.g., progress bars). Optionally generates an animated GIF.
{
type: 'Run this command: bash progress.sh',
streaming: {
delayMs: 7000, // Wait before first capture (skip initial waiting phase)
intervalMs: 500, // Interval between captures
count: 20, // Maximum number of captures
gif: true, // Generate animated GIF (default: true, requires ffmpeg)
},
}delayMs (optional): Milliseconds to wait after pressing Enter before
starting captures. Useful for skipping model thinking/approval time.GIF prerequisite: If the scenario uses streaming with GIF enabled
(default), check if ffmpeg is installed before running. If not, ask the user
whether they'd like to install it:
# Check
which ffmpeg
# Install (macOS)
brew install ffmpegIf the user declines, the scenario still runs. GIF generation is skipped with a warning.
capture / captureFull — Explicit ScreenshotUse as a standalone step, or override automatic naming:
{
capture: 'initial.png';
} // Screenshot current viewport only
{
captureFull: 'all-output.png';
} // Screenshot full scrollback bufferflow: [{ type: 'explain this project' }, { type: '/about' }];flow: [
{ type: '/auth' },
{ key: 'ArrowDown' }, // Select API Key option
{ key: 'Enter' }, // Confirm
{ type: 'sk-xxx' }, // Input API key
];flow: [
{ type: 'Tell me about yourself' },
{ type: '/export' }, // No auto-Enter (next step is key)
{ key: 'Tab' }, // Pop format selection
{ key: 'ArrowDown' }, // Select format
{ key: 'Enter' }, // Confirm → auto-screenshot
];export default [
{ name: '/about', spawn: [...], flow: [...] },
{ name: '/context', spawn: [...], flow: [...] },
] satisfies ScenarioConfig[];This tool is commonly used for visual verification during PR reviews.
browser not found
Cause: browser not installed.
Solution: npx playwright install chromium (local dev only — in CI verify
runs, this means the pre-install step failed; report it, do not install).npm rebuild node-pty.interface FlowStep {
type?: string; // Input text
key?: string | string[]; // Key press(es)
capture?: string; // Viewport screenshot filename
captureFull?: string; // Full scrollback screenshot filename
streaming?: {
delayMs?: number; // Delay before first capture (default: 0)
intervalMs: number; // Interval between captures in ms
count: number; // Maximum number of captures
gif?: boolean; // Generate animated GIF (default: true)
};
}
interface ScenarioConfig {
name: string; // Scenario name (also used as screenshot subdirectory name)
spawn: string[]; // Launch command ["node", "dist/cli.js", "--yolo"]
flow: FlowStep[]; // Interaction steps
terminal?: {
cols?: number; // Number of columns, default 100
rows?: number; // Number of rows, default 28
theme?: string; // Theme: dracula|one-dark|github-dark|monokai|night-owl
chrome?: boolean; // macOS window decorations, default true
title?: string; // Window title, default "Terminal"
fontSize?: number; // Font size
cwd?: string; // Working directory (relative to config file)
};
outputDir?: string; // Screenshot output directory (relative to config file)
}© QwenLM, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .qwen/skills/terminal-capture of QwenLM/qwen-code.
Open the folder on GitHubat commit d9c6f8c
Terminal Screenshot Capture 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Terminal Screenshot Capture this skillQwenLM/qwen-code | 28k | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Project Pull Requestswimmwatch/cloakbrowser-mcp | 164 | — | ~1k | Automated safety check: Pass | MIT | |
| UI Visual DebuggingNangoHQ/nango | 13k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Pre Commitwellwelwel/poku | 1.2k | — | ~728 | Automated safety check: Pass | MIT | |
| Trust Remote BuilderjohannesPettersson80/trust-platform | 222 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Write SpecLiberatedPixelCup/Universal-LPC-Spritesheet-Character-Generator | 1.8k | — | ~719 | Automated safety check: Pass | GPL-3.0 |
swimmwatch/cloakbrowser-mcp
Create, update, prepare, or review a cloakbrowser-mcp GitHub Pull Request only when the user explicitly requests PR work.
NangoHQ/nango
A skill your agent uses when modifying or visually debugging Nango frontend UI, including packages/webapp, packages/connect-ui, browser interactions, screenshots, and visual regressions.
wellwelwel/poku
Run the mandatory pre-commit checks for the poku repository before staging a commit.
johannesPettersson80/trust-platform
Runs truST builds and tests on the shared trust-builder machine.
LiberatedPixelCup/Universal-LPC-Spritesheet-Character-Generator
Write a browser Mocha, Node, or Playwright visual spec for this repo.
handsontable/handsontable
Guide to Playwright visual regression tests in Handsontable: when a screenshot is justified, the tablePage fixture, naming, reg-suit comparison and demo routes.
QwenLM/qwen-code
Reproduces a feature from Codex or Claude Code in Qwen Code by running the reference agent under capture, reading the traces, then implementing matching behavior.
QwenLM/qwen-code
Guides end-to-end testing of the Qwen Code CLI in headless mode with real model calls, MCP test servers and inspection of raw API traffic.
QwenLM/qwen-code
Scheduled CI skill that scans a repository for small, certain docs, test and code hygiene issues and fixes them on one branch with a commit per finding.
QwenLM/qwen-code
Builds a rebranded Qwen Code desktop package from the Tauri shell using only a brand id and a logo, with sensible derived defaults.
QwenLM/qwen-code
Walks through capturing and comparing V8 heap snapshots to find memory leaks in the Qwen Code Node.js CLI, using tmux and the chrome-devtools CLI.
QwenLM/qwen-code
Drives Qwen Code in a real tmux session the way a user would and saves a readable step-by-step transcript of each screen for maintainers to review.
Works with
Categories
Drives a CLI through a TypeScript scenario and saves terminal screenshots at each step, so pull requests that change command output can be checked visually. Scenarios are TypeScript files placed under `integration-tests/terminal-capture/scenarios/`.js inside headless Playwright, and screenshots are taken from that page.
Terminal Screenshot Capture fits situations like: checking a pull request that changes CLI output or slash command rendering; capturing screenshots of commands such as /about or /context for documentation; adding a visual check for a multi-step terminal UI flow.
Run `npx skills add QwenLM/qwen-code --skill terminal-capture -a claude-code`. Or copy the skill folder (.qwen/skills/terminal-capture in QwenLM/qwen-code) into .claude/skills/terminal-capture in your project. Claude Code loads it when a task matches its description.
Run `npx skills add QwenLM/qwen-code --skill terminal-capture -a codex`. Or copy the skill folder (.qwen/skills/terminal-capture in QwenLM/qwen-code) into .agents/skills/terminal-capture in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add QwenLM/qwen-code --skill terminal-capture -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/terminal-capture, .gemini/skills/terminal-capture, .github/skills/terminal-capture and .opencode/skills/terminal-capture in your project.
Going by SKILL.md and its folder, Terminal Screenshot Capture needs the command-line tools its instructions call (npx, npm, brew and playwright). Our summary lists: Project dependencies installed with `npm install`; Playwright Chromium from `npx playwright install chromium`.
SKILL.md contains no URLs. Its commands use npx and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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. Review the folder before installing.
Terminal Screenshot Capture is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
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.
Skills that share tags, products or a category with Terminal Screenshot Capture: Project Pull Request (swimmwatch/cloakbrowser-mcp, 164 stars), UI Visual Debugging (NangoHQ/nango, 13k stars), Pre Commit (wellwelwel/poku, 1.2k stars) and Trust Remote Builder (johannesPettersson80/trust-platform, 222 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
QwenLM (a GitHub organization) maintains it in QwenLM/qwen-code, which has 28,410 GitHub stars. The repository holds 41 skills in this directory. The repository was last updated on October 11, 2026.
Source: QwenLM/qwen-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.