OpenWork Electron Browser Automation
different-ai/openwork
Attaches OpenCode browser tools to the OpenWork Electron dev app through CDP to explore its UI, send a composer task and debug, not to give test verdicts.
Run repeatable integration and smoke testing against the real Poracode Electron app through Chrome DevTools Protocol.
$ npx skills add Porabuild/Poracode --skill interactive-testing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Porabuild/Poracode interactive-testing --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/Porabuild/Poracode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/interactive-testing .claude/skills/interactive-testing && 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 "interactive-testing" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/interactive-testing into .claude/skills/interactive-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "interactive-testing", 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/Porabuild/Poracode/tree/master/.agents/skills/interactive-testingType 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 Porabuild/Poracode --skill interactive-testing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Porabuild/Poracode interactive-testing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/interactive-testing .agents/skills/interactive-testing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "interactive-testing" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/interactive-testing into .agents/skills/interactive-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "interactive-testing", 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 Porabuild/Poracode --skill interactive-testing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Porabuild/Poracode interactive-testing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/interactive-testing .cursor/skills/interactive-testing && 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 "interactive-testing" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/interactive-testing into .cursor/skills/interactive-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "interactive-testing", 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/Porabuild/Poracode.git --path .agents/skills/interactive-testing--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 Porabuild/Poracode --skill interactive-testing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Porabuild/Poracode interactive-testing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/interactive-testing .gemini/skills/interactive-testing && 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 "interactive-testing" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/interactive-testing into .gemini/skills/interactive-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "interactive-testing", 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 Porabuild/Poracode interactive-testingInstalls 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 Porabuild/Poracode --skill interactive-testing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/interactive-testing .github/skills/interactive-testing && 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 "interactive-testing" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/interactive-testing into .github/skills/interactive-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "interactive-testing", 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 Porabuild/Poracode --skill interactive-testing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Porabuild/Poracode interactive-testing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Porabuild/Poracode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/interactive-testing .opencode/skills/interactive-testing && 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 "interactive-testing" agent skill from https://github.com/Porabuild/Poracode/tree/master/.agents/skills/interactive-testing into .opencode/skills/interactive-testing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "interactive-testing", 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.
interactive-testingRun repeatable integration and smoke testing against the real Poracode Electron app through Chrome DevTools Protocol.
Interactive Testing is an agent skill from Porabuild/Poracode. Run repeatable integration and smoke testing against the real Poracode Electron app through Chrome DevTools Protocol. Use when asked to smoke test, integration test, interactively test, verify a refactor in the UI, reproduce a renderer crash, click through the app, or check that changes did not regress functionality. Build a diff-derived coverage plan, run the scripted baseline and targeted scenarios, complete every required manual gate, capture screenshots and runtime errors, and report explicit per-surface…
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 14 other files, including scripts (for example `agents/openai.yaml`).
It sits in Testing & QA, covering Integration testing, Browser testing and QA and bug reports. It works with Chrome DevTools and Electron. The repository describes itself as: One window for all your AI coding agents. Run Claude, Codex, OpenCode, Gemini, Antigravity, Cursor, and Copilot side-by-side. Terminal and chat, any layout. The licence is Apache-2.0.
8 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit bffd89d. 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.
Ships 11 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodepnpmgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and git, 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.
Interactive Testing loads about 4.5k tokens when it runs. Until then it costs about 136 tokens; SKILL.md has 1,959 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 noted patterns worth knowing about, such as sudo or a known installer.
nvrc`, `asdf` local, `mise`, a per-repo `.env`) is invisible to the detector even though it works inside the project — dAutomated 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.
The full file from Porabuild/Poracode at commit bffd89d, republished under its Apache-2.0 licence (© Porabuild). 1,959 words, ~4,539 tokens.
.claude/skills/interactive-testing/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Test the real Electron renderer, preload bridge, main process, and supervisor integration. Treat unit tests as complementary; do not substitute them for this workflow when the skill triggers.
Inspect git status --short and the relevant diff.
Choose the validation shape below before launching anything.
For an ordinary quick or full smoke, run its one-command runner directly; it creates the isolated fixture, boots the app, derives the scope plan, runs the checks, and tears the app down.
For a manual live check, generate the plan, then start or reuse one managed debug session:
node .agents/skills/interactive-testing/scripts/poracode-integration-smoke.mjs plan --scope changed
node .agents/skills/interactive-testing/scripts/run-poracode-smoke.mjs --launch-only --mode mockAudit the functional inventory only when changing scripts/smoke-scenarios.mjs, adding a production surface, or investigating coverage selection:
node .agents/skills/interactive-testing/scripts/poracode-integration-smoke.mjs auditUse fixture projects, deterministic store state, and mocked provider/auth/runtime data for local regression coverage. The runner executes these gates automatically and reports them as mocked.
Use --mode real only when real credentials, devices, or external services are intentionally available; complete and acknowledge those gates with --ack-manual.
Reset driven state, stop only the process launched for this run, inspect unexpected git changes, and report evidence.
Never claim “all functionality passed.” Report automated, manual, skipped, and not-applicable coverage separately.
Use the smallest path that proves the requested behavior. Do not run more than one app-launch command for a single validation run.
| Need | Run | What it proves |
|---|---|---|
| Quick regression smoke after a focused change | Run the smoke runner below with --scope changed --mode mock. | Isolated app boots, changed-surface checks and relevant mock gates pass, and no renderer/runtime errors occur. This is the default. |
| Broad regression or release confidence | Run the smoke runner below with --scope full --mode mock. | Full functional inventory, including app-shell and cross-provider surfaces. |
| One real provider / credential / device workflow | Run the managed launcher below with --mode real, drive the real controls, then run the acknowledgement command. | The external integration actually completes end to end. |
| Continue an already-running managed session | Run node <CDP helper> info; it resolves the one active session and does not launch anything. | The requested next interaction in that exact app. |
Use the quick smoke by itself when the user asks to “smoke test,” “check the app,” or “make sure this did not regress.” Use the real workflow when the user asks whether a provider, ACP/tool call, login, device, PTY, or other external integration works live. Run the full smoke only for release-scale, broad cross-cutting, IPC/app-shell, or cross-provider changes.
Choose exactly one launch path per test run. Never use raw pnpm run dev or
pnpm run dev:test for CDP work: those commands do not allocate a managed
session and make wrong ports, shared state, and duplicate launches possible.
The smoke runner owns and tears down its app. The managed launcher keeps one app
alive for repeated manual actions, and its owner process performs every stop.
The one-command runner below allocates its own free ports, so each invocation spawns a fully isolated dev app. Runs from multiple worktrees can execute side by side without colliding on the Vite or CDP port.
node .agents/skills/interactive-testing/scripts/run-poracode-smoke.mjs --scope changed --mode mockFor slow cold starts, pass --startupTimeoutSeconds 450 to the runner. This
overrides the default 180-second app-readiness deadline; scenario timeouts stay
unchanged.
This allocates distinct free dev-server and CDP ports (override with
--vitePort/--port; explicit values are verified free), creates and commits a
disposable fixture project, seeds an isolated database, starts Electron with an
isolated profile and compiled runtime, dismisses and verifies the first-launch
welcome screen, runs the integration suite, writes screenshots/report artifacts
under ~/.poracode-smoke, and tears down the process automatically. Managed
launches never reclaim an occupied port or rebuild another session's runtime.
No provider credentials, PTY input, git mutations, MCP server, mobile device, or
native update flow is required for the default mock run.
HOME and provider detection — no drift between test and app. Poracode's own state is always isolated via PORACODE_BASE_DIR, independent of HOME. Provider detection, however, resolves each CLI through the login-shell command -v (e.g. kimi → ~/.kimi-code/bin/kimi) and reads credentials under the home dir — so it only matches the real app when HOME is the real home. Therefore:
HOME/APPDATA and uses a mock keychain (deterministic isolation; providers are mocked). Real providers legitimately show "Not found" here — that is expected, not a bug, and mock gates never depend on real credentials.--mode real) keeps the real HOME, so authenticated providers (Kimi, Qwen, …) can detect as in the shipped app. Always verify a provider-dependent surface in real mode; never diagnose a real detection issue from a mock-mode "Not found".Real HOME is necessary but not always sufficient: detection probes command -v <binary> in a login+interactive shell with cwd: homedir(), so a CLI whose bin dir is on PATH only via a project-scoped mechanism (direnv .envrc, asdf local, mise, a per-repo .env) is invisible to the detector even though it works inside the project — direnv unloads at the home cwd. Symptom: the app log prints direnv: unloading and the provider shows "Not found". Fix in the environment, not the app: put the binary on a globally-resolvable PATH (e.g. symlink into ~/.local/bin, as qwen/grok are). This is why ~/.kimi-code/bin/kimi (direnv-only) can miss while ~/.local/bin-installed providers detect fine.
For a persistent interactive app, use the managed launcher:
node .agents/skills/interactive-testing/scripts/run-poracode-smoke.mjs --launch-only --mode mock
# Use the real HOME and provider credentials only when the task needs them:
node .agents/skills/interactive-testing/scripts/run-poracode-smoke.mjs --launch-only --mode realWhen an agent must launch an intentionally independent session and then keep
working in the same turn, use the detached CDP launch command instead of
inventing a Start-Process, shell-redirection, or helper-script wrapper:
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs launch --new --mode mock --root "$HOME/.poracode-smoke/<unique-agent-root>"It returns only after READY and prints the exact sessionFile, ports, URL,
owner PIDs, and launch time. --new plus a fresh unique root is mandatory so
parallel agents cannot reuse or stop each other's apps. Its default 180-second
deadline accommodates several concurrent cold Vite transforms; once READY,
individual CDP actions should still finish in milliseconds, not inherit that
cold-start budget.
The command allocates ports, creates the fixture, isolates the compiled Electron
bundle and runtime resources, skips the welcome gate, and waits until the main
renderer has a mounted root plus preload and DEV bridges. It prints READY only
after those checks pass. Keep that exact terminal alive. When testing is
complete, request verified teardown from any shell with:
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs stopThe stop command returns success only after the owner has closed both ports,
removed its isolated build, and marked session.json stopped. Ctrl-C in the
owning terminal is a fallback and uses the same teardown path, but some Windows
PTY hosts report the outer shell interruption as exit 1 even after clean
teardown. A cold renderer transform can take about a minute on
a busy Windows checkout; state: "starting" still owns the launch, so wait for
READY or a concrete failure instead of starting another app.
The launcher reuses an existing healthy debug session for this checkout instead
of launching a duplicate. Only use --new when concurrent same-checkout apps
are the behavior under test. If more than one session exists, every helper
refuses to guess; pass the exact session printed by its launcher:
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs info --session "<session.json path printed by launcher>"The authoritative <run-id>/session.json records the unique token, lifecycle,
repo/worktree, app URL, distinct ports, base directory, isolated build, and
owner PIDs. ports.json remains report metadata, not an attachment instruction.
Never invent a port or copy one from another run. The helpers accept a complete
explicit port + URL pair only for deliberate unmanaged-app diagnosis; they
reject either value alone and have no 9222/3100 fallback.
Changed-surface run against the one active managed debug session (or pass
--session <session.json> when concurrent sessions intentionally exist):
node .agents/skills/interactive-testing/scripts/poracode-integration-smoke.mjs run --scope changed --mode mock --outDir "<outDir from session.json>"Full functional inventory run:
node .agents/skills/interactive-testing/scripts/poracode-integration-smoke.mjs run --scope full --mode mock --outDir "<outDir from session.json>"Exit meanings:
0: automated scenarios and deterministic mock gates passed.1: an automated scenario or coverage audit failed.2: --mode real was selected and real manual gates remain.The runner first dismisses the welcome screen through its real primary action and verifies the overlay stays absent. It then checks boot/render health, the preload and dev bridges, crash-screen markers, runtime exceptions, unhandled rejections, console errors, and screenshots. Depending on the plan it also walks every Settings section, opens thread search, runs the dedicated Browser harness, and executes mock IPC/project/provider/auth/terminal/runtime checks against the isolated fixture.
Do not acknowledge a real gate before exercising it. After completing real gates through real controls, record them:
node .agents/skills/interactive-testing/scripts/poracode-integration-smoke.mjs run --scope changed --mode real --outDir "<outDir from session.json>" --ack-manual provider-live,runtime-requestsReplace the acknowledgement list with every real gate actually exercised. For
example, an ACP AskUserQuestion run that visibly opened the form, submitted an
answer, and received the provider reply acknowledges
changed-surface,ipc-roundtrip,provider-live,runtime-requests.
Use the managed CDP helper for state, evaluation, screenshots, clicks, and typing:
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs info
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs eval 'location.href'
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs nav about
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs click '[data-testid="settings-save"]'
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs type 'input[name="query"]' 'test'
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs shot - "<outDir from session.json>/manual-about.png"
node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs resetIn PowerShell, invoke action commands directly with the call operator; use
variables or quoted positional values so selectors containing spaces remain one
argument. Never use Start-Process for CDP actions:
$cdp = ".agents/skills/interactive-testing/scripts/poracode-cdp.mjs"
$session = "C:\Users\me\.poracode-smoke\my-run\session.json"
$selector = '[data-composer-input-anchor] [contenteditable="true"]'
& node $cdp type $selector "latency probe" --session $session --commandTimeoutMs 2000
& node $cdp eval 'document.body.innerText.includes("latency probe")' --session $session --commandTimeoutMs 2000
@'
(() => ({ title: document.title, windowKind: document.documentElement.dataset.windowKind }))()
'@ | & node $cdp eval - --session $session --commandTimeoutMs 2000Use eval - for multi-line or quote-heavy JavaScript so PowerShell passes it on
stdin without rewriting it. Do not create a temporary wrapper script for an
action sequence.
The helper binds every action to the session token and main window by default.
Pass --windowKind quickComposer or --windowKind browserExtract only when
that surface is the one under test. It rejects missing, hidden, disabled,
read-only, off-screen, and ambiguous targets instead of clicking by stale
coordinates. Re-query selectors after navigation, portal opening, or hot reload;
HeroUI menus and dialogs render in portals. A successful click/type confirms
safe input dispatch, not application behavior; immediately evaluate or
screenshot the expected state change before marking the gate passed.
For a changed provider, start a fresh thread in the isolated project, observe the user row and first provider output, then stop it. For a permission flow, request a harmless read-only command and choose Deny unless the user authorized execution. For terminal changes, verify a real PTY launch, input, resize, interrupt, and stop. For git/file changes, mutate only the fixture repository.
The integration runner invokes this automatically when Browser-related paths changed. It can also be run directly:
node .agents/skills/interactive-testing/scripts/poracode-browser-smoke.mjs --outDir "<outDir from session.json>/browser"It verifies embedded page creation, DOM access, navigation history, toolbar state, Browser settings, screenshots, and zero renderer console errors.
scripts/smoke-scenarios.mjs is the functional source of truth. It maps production paths to automated scenarios and manual gates. Update it in the same change whenever adding a new production surface or subsystem.
Run audit after modifying the inventory. The audit must fail if any tracked production file is unmapped. Broad catch-all areas prevent accidental omission, while the printed plan exposes which detailed and manual gates apply.
If a changed behavior cannot be automated against a safe fixture, add a deterministic mock gate with a concrete assertion. Keep a corresponding real gate only when an external system is genuinely required. Do not silently omit it or weaken an assertion to make the run green.
PORACODE_BASE_DIR under $HOME/.poracode-smoke; never mutate real threads or settings.session.json as the only managed attachment authority; never infer ports from window titles, old logs, or nearby listeners.electron.exe. Stop only the background process/session launched for this run.node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs reset and close transient panels before teardown.node .agents/skills/interactive-testing/scripts/poracode-cdp.mjs stop; do not infer failure from an outer PTY's Ctrl-C exit code.Give one verdict per functional area. Include:
smoke-report.json paths;Do not call a --mode real run successful while the script exits 2 or any required real gate is unresolved. A mock-mode PASS means deterministic local integration passed; it does not claim that external provider credentials or devices were tested.
© Porabuild, 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
SKILL.md and 12 other files (scripts) in .agents/skills/interactive-testing of Porabuild/Poracode.
Open the folder on GitHubat commit bffd89d
Interactive Testing 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 |
|---|---|---|---|---|---|---|
| Interactive Testing this skillPorabuild/Poracode | 114 | — | ~4.5k | Automated safety check: Notes | Apache-2.0 | |
| OpenWork Electron Browser Automationdifferent-ai/openwork | 24k | — | ~780 | Automated safety check: Pass | Custom licence | |
| Diff-Driven Smoke TestsSkyvern-AI/skyvern | 23k | — | ~5.2k | Automated safety check: Pass | AGPL-3.0 | |
| Tracecat QATracecatHQ/tracecat | 3.8k | — | ~1.1k | Automated safety check: Warn | AGPL-3.0 | |
| Team Frontend Debugcatlog22/Claude-Code-Workflow | 2.1k | — | ~2.8k | Automated safety check: Notes | MIT | |
| Testing QAaiskillstore/marketplace | 430 | 3 repos | ~1.2k | Automated safety check: Pass | None |
different-ai/openwork
Attaches OpenCode browser tools to the OpenWork Electron dev app through CDP to explore its UI, send a composer task and debug, not to give test verdicts.
Skyvern-AI/skyvern
Reads your git diff, writes a handful of happy-path browser smoke tests, runs them with Skyvern or Chrome DevTools MCP and posts screenshot evidence to the PR.
TracecatHQ/tracecat
QA Tracecat product features in a real local cluster. An agent skill from TracecatHQ/tracecat.
catlog22/Claude-Code-Workflow
Frontend debugging team using Chrome DevTools MCP. An agent skill from catlog22/Claude-Code-Workflow.
aiskillstore/marketplace
Comprehensive testing and QA workflow covering unit testing, integration testing, E2E testing, browser automation, and quality assurance.
bluzir/claude-code-design
First-run setup + health check. An agent skill from bluzir/claude-code-design.
Porabuild/Poracode
Write consistent, hand-written-looking changelog entries for a Poracode release.
Porabuild/Poracode
Create a new reusable agent skill managed by Poracode. An agent skill from Porabuild/Poracode.
Porabuild/Poracode
Inspect and drive Poracode itself — the Terminal panel, other threads, projects, workspaces, git, pull requests, and schedules — through the poracode MCP.
Porabuild/Poracode
Use the user's real Chrome tabs and signed-in sessions for visible browser workflows.
Porabuild/Poracode
Inspect and operate native Windows, macOS, or Linux applications through Poracode's desktop-control tools.
Porabuild/Poracode
Smoke test real Poracode provider chat threads and ACP sessions end to end.
Works with
Categories
Run repeatable integration and smoke testing against the real Poracode Electron app through Chrome DevTools Protocol. Interactive Testing is an agent skill from Porabuild/Poracode. Run repeatable integration and smoke testing against the real Poracode Electron app through Chrome DevTools Protocol.
Interactive Testing fits situations like: asked to smoke test; integration test; interactively test; verify a refactor in the UI.
Run `npx skills add Porabuild/Poracode --skill interactive-testing -a claude-code`. Or copy the skill folder (.agents/skills/interactive-testing in Porabuild/Poracode) into .claude/skills/interactive-testing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Porabuild/Poracode --skill interactive-testing -a codex`. Or copy the skill folder (.agents/skills/interactive-testing in Porabuild/Poracode) into .agents/skills/interactive-testing 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 Porabuild/Poracode --skill interactive-testing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/interactive-testing, .gemini/skills/interactive-testing, .github/skills/interactive-testing and .opencode/skills/interactive-testing in your project.
Going by SKILL.md and its folder, Interactive Testing needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node, pnpm and git). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use git, 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 notes only (mentions a .env file), nothing it rates as a warning. 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.
Interactive Testing 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 4.5k tokens (SKILL.md is roughly 18k 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 Interactive Testing: OpenWork Electron Browser Automation (different-ai/openwork, 24k stars), Diff-Driven Smoke Tests (Skyvern-AI/skyvern, 23k stars), Tracecat QA (TracecatHQ/tracecat, 3.8k stars) and Team Frontend Debug (catlog22/Claude-Code-Workflow, 2.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Porabuild (a GitHub organization) maintains it in Porabuild/Poracode, which has 114 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 7, 2026.
Source: Porabuild/Poracode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.