RStudio Selenium to Playwright Migration
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
Drives and tests terminal apps, especially the Cline CLI TUI, through named background PTY sessions that an agent can read, wait on, snapshot and type into.
$ npx skills add cline/cline --skill tuistory -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cline/cline tuistory --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/cline/cline.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cline/skills/tuistory .claude/skills/tuistory && 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 "tuistory" agent skill from https://github.com/cline/cline/tree/main/.cline/skills/tuistory into .claude/skills/tuistory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuistory", 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/cline/cline/tree/main/.cline/skills/tuistoryType 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 cline/cline --skill tuistory -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cline/cline tuistory --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cline/cline.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.cline/skills/tuistory .agents/skills/tuistory && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tuistory" agent skill from https://github.com/cline/cline/tree/main/.cline/skills/tuistory into .agents/skills/tuistory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuistory", 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 cline/cline --skill tuistory -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cline/cline tuistory --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cline/cline.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.cline/skills/tuistory .cursor/skills/tuistory && 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 "tuistory" agent skill from https://github.com/cline/cline/tree/main/.cline/skills/tuistory into .cursor/skills/tuistory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuistory", 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/cline/cline.git --path .cline/skills/tuistory--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 cline/cline --skill tuistory -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cline/cline tuistory --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cline/cline.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.cline/skills/tuistory .gemini/skills/tuistory && 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 "tuistory" agent skill from https://github.com/cline/cline/tree/main/.cline/skills/tuistory into .gemini/skills/tuistory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuistory", 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 cline/cline tuistoryInstalls 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 cline/cline --skill tuistory -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cline/cline.git skills-src && mkdir -p .github/skills && cp -r skills-src/.cline/skills/tuistory .github/skills/tuistory && 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 "tuistory" agent skill from https://github.com/cline/cline/tree/main/.cline/skills/tuistory into .github/skills/tuistory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuistory", 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 cline/cline --skill tuistory -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cline/cline tuistory --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cline/cline.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.cline/skills/tuistory .opencode/skills/tuistory && 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 "tuistory" agent skill from https://github.com/cline/cline/tree/main/.cline/skills/tuistory into .opencode/skills/tuistory/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tuistory", 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.
tuistoryDrives and tests terminal apps, especially the Cline CLI TUI, through named background PTY sessions that an agent can read, wait on, snapshot and type into.
tuistory wraps a terminal command in a named background PTY session backed by a terminal emulator, so an agent's calls return instantly while a person can attach to the same session to watch or intervene, all without a real display. For the Cline CLI, the skill launches the TUI in an isolated temp home and data directory so it never touches real user config, using a dummy key to render the full chat UI or recorded cassettes to replay model turns, with a real provider credential needed only for live turns.
The core loop is observe, act, observe: wait reactively for expected text or a pattern instead of sleeping, then act, then take a fresh snapshot, since a dialog or error can render over the view an agent expects and a snapshot reflects what is actually visible rather than raw stream text. The same tool runs any long-lived background process, such as a dev server, with read returning new output since the last check. Command syntax puts options before the first separator and the child command after it, and every wait call needs an explicit timeout.
Read from SKILL.md and the folder at commit fa840c7. 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:
bunxcurlbunFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
raw.githubusercontent.comAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
ANTHROPIC_API_KEYCLINE_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tuistory Terminal Driver loads about 1.4k tokens when it runs. Until then it costs about 177 tokens; SKILL.md has 371 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 cline/cline at commit fa840c7, republished under its Apache-2.0 licence (© cline). 371 words, ~1,409 tokens.
.claude/skills/tuistory/SKILL.md (or your agent's skills folder).tuistory wraps any terminal command in a named background PTY session backed by a Ghostty terminal emulator. Agents interact with the session via short CLI calls that return instantly; humans can tuistory attach to the same session to watch or intervene. No real terminal or display (DISPLAY) is needed — it works fully headless, which makes it the preferred way for cloud agents to exercise the Cline TUI.
It is installed as a devDependency of @cline/cli, so the pinned binary resolves when you run from apps/cli:
cd apps/cli
bunx tuistory --help # source of truth for commands, options, and syntaxFor full upstream docs: curl -s https://raw.githubusercontent.com/remorses/tuistory/refs/heads/main/README.md
Launch the TUI in an isolated environment so you don't touch real user config (~/.cline):
cd apps/cli
DATA_DIR=$(mktemp -d) && HOME_DIR=$(mktemp -d)
bunx tuistory -s cline --cols 120 --rows 36 \
--env HOME=$HOME_DIR --env CLINE_DATA_DIR=$DATA_DIR \
--env CLINE_DISABLE_CLINE_PASS_NOTICE=1 --env CLINE_TELEMETRY_DISABLED=1 \
-- bun src/index.ts --provider anthropic -m claude-sonnet-4-6 -k test-keyThe dummy -k test-key renders the full chat UI; only an actual agent turn would fail. For recorded LLM turns, use the VCR cassettes described in apps/cli/src/tests/helpers/env.ts (CLINE_VCR=playback + CLINE_VCR_CASSETTE). Real turns need a provider credential (e.g. ANTHROPIC_API_KEY, CLINE_API_KEY).
Then use an observe → act → observe loop:
# Wait reactively for the chat view — never use sleep
bunx tuistory -s cline wait "What can I do for you?" --timeout 30000
# Act, then always observe the resulting screen state
bunx tuistory -s cline type "/settings"
bunx tuistory -s cline snapshot --trim
bunx tuistory -s cline press enter
bunx tuistory -s cline snapshot --trim
# Styled PNG of the current screen (prints the file path) — good for artifacts
bunx tuistory -s cline screenshot
# Full raw output stream (snapshot shows only the visible screen)
bunx tuistory read -s cline --all
# Tear down a session YOU started (double Ctrl+C exits the TUI cleanly)
bunx tuistory -s cline press ctrl c
bunx tuistory -s cline press ctrl c
bunx tuistory -s cline closebunx tuistory -s my-server -- bun run dev:sidecar # returns immediately
bunx tuistory -s my-server wait "/listening|ready/i" --timeout 30000
bunx tuistory read -s my-server # new output since last read
bunx tuistory -s my-server restart # after code changes--, command after. Everything after the first -- is passed verbatim to the child: tuistory -s name --cols 150 -- bun src/index.ts is correct.snapshot reflects what the user actually sees (occluded text does not count), unlike grepping the raw stream.wait "text" / wait "/regex/i" (case-sensitive by default) reacts as fast as the terminal updates; wait-idle when you don't know what to expect. Always pass --timeout.tuistory attach -s name) and other agents. Default to leaving sessions running; use read/wait/snapshot to inspect without disrupting.--cols/--rows affect TUI layout (assertions are width-sensitive); --pixel-ratio 2 gives sharper screenshots.apps/cli/src/cli.tuistory.e2e.test.ts (run: bun run test:e2e:tuistory) is the reference. The programmatic API runs in-process — no daemon:
import { launchTerminal } from "tuistory";
const session = await launchTerminal({
command: "bun",
args: ["src/index.ts", "--provider", "anthropic", "-k", "test-key"],
cwd: cliRoot,
env: isolatedEnv, // see createCliEnv() in the reference test
cols: 120,
rows: 36,
waitForDataTimeout: 30_000, // CLI cold start compiles a large TS graph
});
await session.waitForText("What can I do for you?", { timeout: 30_000 });
const screen = await session.text({ trimEnd: true }); // emulated screen state
await session.type("/settings");
await session.press("enter");
session.close(); // always close in test teardownScreen-state assertions can check that stale UI is gone (expect(screen).not.toContain(...)), which stream-grepping harnesses cannot. session.text({ only: { bold: true } }) filters by style; session.read() returns the raw stream since the last read.
© cline, 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 .cline/skills/tuistory of cline/cline.
Open the folder on GitHubat commit fa840c7
Tuistory Terminal Driver 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 |
|---|---|---|---|---|---|---|
| Tuistory Terminal Driver this skillcline/cline | 70k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| RStudio Selenium to Playwright Migrationrstudio/rstudio | 5.1k | — | ~3.6k | Automated safety check: Pass | Custom licence | |
| Verifymorapelker/hive | 470 | — | ~709 | Automated safety check: Pass | MIT | |
| E2E Tests Studiomastra-ai/mastra | 29k | — | ~4.3k | Automated safety check: Pass | Custom licence | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| Write and Verify Playwright Testsappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 |
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
morapelker/hive
Build, launch, and drive this worktree's Hive app over CDP to verify a change end-to-end with playwright-cli
mastra-ai/mastra
REQUIRED when modifying any file in packages/playground-ui or packages/playground.
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
appsmithorg/appsmith
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
cline/cline
Reference for building AI agents with the Cline SDK: the Agent runtime, ClineCore sessions, custom tools, plugins, events, providers, scheduling and multi-agent teams.
cline/cline
Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.
cline/cline
Helps build terminal user interfaces with OpenTUI using its core imperative API or its React and Solid reconcilers, with references for layout, keyboard, animation and testing.
cline/cline
Guides publishing a one-time What's new dialog in the Cline desktop app: deciding if one is due, picking highlights from the changelog and editing one content file.
cline/cline
Covers preparing, tagging and publishing a Cline desktop app release on the stable, beta or nightly channel through the desktop-publish GitHub workflow.
cline/cline
Validates and publishes the standalone @cline/ui npm package through its own release workflow, separate from the Cline SDK runtime packages.
Categories
Drives and tests terminal apps, especially the Cline CLI TUI, through named background PTY sessions that an agent can read, wait on, snapshot and type into. tuistory wraps a terminal command in a named background PTY session backed by a terminal emulator, so an agent's calls return instantly while a person can attach to the same session to watch or intervene, all without a real display. For the Cline CLI, the skill launches the TUI in an isolated temp home and data directory so it never touches real user config, using a dummy key to render the full chat UI or recorded cassettes to replay model turns, with a real provider credential needed only for live turns.
Tuistory Terminal Driver fits situations like: reproducing a bug in the interactive Cline TUI from a headless environment; running a long-lived dev server in the background without blocking a tool call; writing or extending end-to-end tests for the TUI.
Run `npx skills add cline/cline --skill tuistory -a claude-code`. Or copy the skill folder (.cline/skills/tuistory in cline/cline) into .claude/skills/tuistory in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cline/cline --skill tuistory -a codex`. Or copy the skill folder (.cline/skills/tuistory in cline/cline) into .agents/skills/tuistory 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 cline/cline --skill tuistory -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tuistory, .gemini/skills/tuistory, .github/skills/tuistory and .opencode/skills/tuistory in your project.
Going by SKILL.md and its folder, Tuistory Terminal Driver needs the command-line tools its instructions call (bunx, curl and bun) and credentials named ANTHROPIC_API_KEY and CLINE_API_KEY. Our summary lists: bun; tuistory as a devDependency of the CLI package.
SKILL.md names 2 domains. In commands or code: raw.githubusercontent.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. 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.
Tuistory Terminal Driver 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 1.4k tokens (SKILL.md is roughly 5.6k 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 Tuistory Terminal Driver: RStudio Selenium to Playwright Migration (rstudio/rstudio, 5.1k stars), Verify (morapelker/hive, 470 stars), E2E Tests Studio (mastra-ai/mastra, 29k stars) and Web Application Testing (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cline (a GitHub organization) maintains it in cline/cline, which has 70,041 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.
Source: cline/cline on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.