E2E Testing
OpenHands/OpenHands
This skill should be used when the user asks to "add an E2E test", "run live E2E", "run mock-LLM tests", "debug Playwright CI", "test the Docker image", or changes tests/e2e, Playwright configs, E2E…
A skill your agent uses when the agent is building or iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes, run a Playwright-based test script…
$ npx skills add trailofbits/skills-curated --skill openai-develop-web-game -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install trailofbits/skills-curated openai-develop-web-game --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/trailofbits/skills-curated.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/openai-develop-web-game/skills/openai-develop-web-game .claude/skills/openai-develop-web-game && 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 "openai-develop-web-game" agent skill from https://github.com/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-game into .claude/skills/openai-develop-web-game/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openai-develop-web-game", 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/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-gameType 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 trailofbits/skills-curated --skill openai-develop-web-game -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install trailofbits/skills-curated openai-develop-web-game --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills-curated.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/openai-develop-web-game/skills/openai-develop-web-game .agents/skills/openai-develop-web-game && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "openai-develop-web-game" agent skill from https://github.com/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-game into .agents/skills/openai-develop-web-game/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openai-develop-web-game", 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 trailofbits/skills-curated --skill openai-develop-web-game -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install trailofbits/skills-curated openai-develop-web-game --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills-curated.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/openai-develop-web-game/skills/openai-develop-web-game .cursor/skills/openai-develop-web-game && 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 "openai-develop-web-game" agent skill from https://github.com/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-game into .cursor/skills/openai-develop-web-game/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openai-develop-web-game", 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/trailofbits/skills-curated.git --path plugins/openai-develop-web-game/skills/openai-develop-web-game--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 trailofbits/skills-curated --skill openai-develop-web-game -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install trailofbits/skills-curated openai-develop-web-game --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills-curated.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/openai-develop-web-game/skills/openai-develop-web-game .gemini/skills/openai-develop-web-game && 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 "openai-develop-web-game" agent skill from https://github.com/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-game into .gemini/skills/openai-develop-web-game/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openai-develop-web-game", 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 trailofbits/skills-curated openai-develop-web-gameInstalls 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 trailofbits/skills-curated --skill openai-develop-web-game -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/trailofbits/skills-curated.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/openai-develop-web-game/skills/openai-develop-web-game .github/skills/openai-develop-web-game && 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 "openai-develop-web-game" agent skill from https://github.com/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-game into .github/skills/openai-develop-web-game/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openai-develop-web-game", 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 trailofbits/skills-curated --skill openai-develop-web-game -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install trailofbits/skills-curated openai-develop-web-game --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trailofbits/skills-curated.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/openai-develop-web-game/skills/openai-develop-web-game .opencode/skills/openai-develop-web-game && 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 "openai-develop-web-game" agent skill from https://github.com/trailofbits/skills-curated/tree/main/plugins/openai-develop-web-game/skills/openai-develop-web-game into .opencode/skills/openai-develop-web-game/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "openai-develop-web-game", 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.
openai-develop-web-gameA skill your agent uses when the agent is building or iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes, run a Playwright-based test script…
Openai Develop Web Game is an agent skill from trailofbits/skills-curated, published by the product's own GitHub organization. Use when the agent is building or iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes, run a Playwright-based test script with short input bursts and intentional pauses, inspect screenshots/text, and review console errors with rendergametotext. Originally from OpenAI's curated skills catalog.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts and reference files (for example `references/action_payloads.json` and `scripts/web_game_playwright_client.js`).
It sits in Testing & QA, covering Browser testing. It works with OpenAI and Playwright. The repository describes itself as: Curated, community-vetted Claude Code plugin marketplace. The licence is CC-BY-SA-4.0.
12 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6d05be4. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadGrepGlobWriteEditFrom allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
nodenpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use 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.
Openai Develop Web Game loads about 2.3k tokens when it runs, and up to ~2.3k if it reads all its reference files. Until then it costs about 94 tokens; SKILL.md has 1,055 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.
allowed-tools: Bash, Read, Grep, Glob, Write, EditAutomated 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 trailofbits/skills-curated at commit 6d05be4, republished under its CC-BY-SA-4.0 licence (© trailofbits). 1,055 words, ~2,264 tokens.
.claude/skills/openai-develop-web-game/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Build games in small steps and validate every change. Treat each iteration as: implement → act → pause → observe → adjust.
Scripts and references are located under {baseDir}/.
window.render_game_to_text so the test loop can read state.window.advanceTime(ms). Strongly prefer a deterministic step hook so the Playwright script can advance frames reliably; without it, automated tests can be flaky.progress.md exists, read it first and confirm the original user prompt is recorded at the top (prefix with Original prompt:). Also note any TODOs and suggestions left by the previous agent. If missing, create it and write Original prompt: <prompt> at the top before appending updates.playwright is available (local dependency or global install). If unsure, check npx first.$WEB_GAME_CLIENT after each meaningful change; do not invent a new client unless required.$WEB_GAME_ACTIONS to avoid guessing keys.render_game_to_text reflects the same state shown on screen. If anything is off, fix and rerun.
Examples of important interactions: move, jump, shoot/attack, interact/use, select/confirm/cancel in menus, pause/resume, restart, and any special abilities or puzzle actions defined by the request. Multi-step examples: shooting an enemy should reduce its health; when health reaches 0 it should disappear and update the score; collecting a key should unlock a door and allow level progression.Example command (actions required):
node "$WEB_GAME_CLIENT" --url http://localhost:5173 --actions-file "$WEB_GAME_ACTIONS" --click-selector "#start-btn" --iterations 3 --pause-ms 250Example actions (inline JSON):
{
"steps": [
{ "buttons": ["left_mouse_button"], "frames": 2, "mouse_x": 120, "mouse_y": 80 },
{ "buttons": [], "frames": 6 },
{ "buttons": ["right"], "frames": 8 },
{ "buttons": ["space"], "frames": 4 }
]
}Test any new features added for the request and any areas your logic changes could affect. Identify issues, fix them, and re-run the tests to confirm they’re resolved.
Examples of things to test:
render_game_to_text JSON output.Expose a window.render_game_to_text function that returns a concise JSON string representing the current game state. The text should include enough information to play the game without visuals.
Minimal pattern:
function renderGameToText() {
const payload = {
mode: state.mode,
player: { x: state.player.x, y: state.player.y, r: state.player.r },
entities: state.entities.map((e) => ({ x: e.x, y: e.y, r: e.r })),
score: state.score,
};
return JSON.stringify(payload);
}
window.render_game_to_text = renderGameToText;Keep the payload succinct and biased toward on-screen/interactive elements. Prefer current, visible entities over full history. Include a clear coordinate system note (origin and axis directions), and encode all player-relevant state: player position/velocity, active obstacles/enemies, collectibles, timers/cooldowns, score, and any mode/state flags needed to make correct decisions. Avoid large histories; only include what's currently relevant and visible.
Provide a deterministic time-stepping hook so the Playwright client can advance the game in controlled increments. Expose window.advanceTime(ms) (or a thin wrapper that forwards to your game update loop) and have the game loop use it when present.
The Playwright test script uses this hook to step frames deterministically during automated testing.
Minimal pattern:
window.advanceTime = (ms) => {
const steps = Math.max(1, Math.round(ms / (1000 / 60)));
for (let i = 0; i < steps; i++) update(1 / 60);
render();
};f) to toggle fullscreen on/off.Esc to exit fullscreen.Create a progress.md file if it doesn't exist, and append TODOs, notes, gotchas, and loose ends as you go so another agent can pick up seamlessly.
If a progress.md file already exists, read it first, including the original user prompt at the top (you may be continuing another agent's work). Do not overwrite the original prompt; preserve it.
Update progress.md after each meaningful chunk of work (feature added, bug found, test run, or decision made).
At the end of your work, leave TODOs and suggestions for the next agent in progress.md.
playwright dependency if the project already has it.npx:command -v npx >/dev/null 2>&1npx is missing, install Node/npm and then install Playwright globally:npm install -g @playwright/mcp@latest@playwright/test unless explicitly asked; stick to the client script.$WEB_GAME_CLIENT (installed default: {baseDir}/scripts/web_game_playwright_client.js) — Playwright-based action loop with virtual-time stepping, screenshot capture, and console error buffering. You must pass an action burst via --actions-file, --actions-json, or --click.$WEB_GAME_ACTIONS (installed default: {baseDir}/references/action_payloads.json) — example action payloads (keyboard + mouse, per-frame capture). Use these to build your burst.<!-- TODO: review -->
<!-- TODO: review -->
© trailofbits, CC-BY-SA-4.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 2 other files (scripts, references) in plugins/openai-develop-web-game/skills/openai-develop-web-game of trailofbits/skills-curated.
Open the folder on GitHubat commit 6d05be4
Openai Develop Web Game 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 |
|---|---|---|---|---|---|---|
| Openai Develop Web Game this skilltrailofbits/skills-curated | 512 | — | ~2.3k | Automated safety check: Notes | CC-BY-SA-4.0 | |
| E2E TestingOpenHands/OpenHands | 90k | — | ~308 | Automated safety check: Pass | MIT | |
| PlaywrightKiln-AI/Kiln | 5.2k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Create Chatgpt Video Adcriptogus/agent-evolve-network | 288 | — | ~5k | Automated safety check: Pass | Custom licence | |
| Dev Auth BypassFranciscoMoretti/chat-js | 1.2k | — | ~141 | Automated safety check: Pass | Apache-2.0 | |
| Render Chatgpt Chatgooseworks-ai/goose-skills | 1.2k | — | ~2.2k | Automated safety check: Pass | MIT |
OpenHands/OpenHands
This skill should be used when the user asks to "add an E2E test", "run live E2E", "run mock-LLM tests", "debug Playwright CI", "test the Docker image", or changes tests/e2e, Playwright configs, E2E…
Kiln-AI/Kiln
Look at Kiln's UI in a real browser, and run its end-to-end tests.
criptogus/agent-evolve-network
Produce a 9:16 social-native ad that recreates a ChatGPT mobile chat — user types in the composer with the iOS keyboard visible, taps send, keyboard slides down, header right-cluster swaps…
FranciscoMoretti/chat-js
Authenticate a browser against a local ChatJS app without OAuth.
gooseworks-ai/goose-skills
Assemble a ChatGPT chat-reveal video ad from a thread + timeline JSON — one continuous Playwright recording of a ChatGPT mobile chat (user types with the iOS keyboard up → taps send → keyboard…
gooseworks-ai/goose-skills
Assemble an Apple Notes list video ad from a note + end-card JSON — a frame-accurate fake iPhone screen recording of a short list being typed into Apple Notes (character by character, key pops…
trailofbits/skills-curated
Analyze git repositories to build a security ownership topology (people-to-file), compute bus factor and sensitive-code ownership, and export CSV/JSON for graph databases and visualization.
trailofbits/skills-curated
A skill your agent uses when the task involves reading, creating, or editing .docx documents, especially when formatting or layout fidelity matters; prefer python-docx plus the bundled…
trailofbits/skills-curated
A skill your agent uses when the user asks to create, scaffold, or edit Jupyter notebooks (.ipynb) for experiments, explorations, or tutorials; prefer the bundled templates and run the helper script…
trailofbits/skills-curated
A skill your agent uses when the task requires automating a real browser from the terminal (navigation, form filling, snapshots, screenshots, data extraction, UI-flow debugging) via playwright-cli…
trailofbits/skills-curated
Searches X/Twitter for real-time perspectives, dev discussions, product feedback, breaking news, and expert opinions using the X API v2.
trailofbits/skills-curated
Teaches the user a new skill or concept over multiple sessions, using the current directory as a stateful teaching workspace with lessons, learning records, and reference materials.
Works with
Categories
A skill your agent uses when the agent is building or iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes, run a Playwright-based test script…. Openai Develop Web Game is an agent skill from trailofbits/skills-curated, published by the product's own GitHub organization. Use when the agent is building or iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes, run a Playwright-based test script with short input bursts and intentional pauses, inspect screenshots/text, and review console errors with rendergametotext.
Openai Develop Web Game fits situations like: the agent is building; iterating on a web game (HTML/JS) and needs a reliable development + testing loop: implement small changes; run a Playwright-based test script with short input bursts and intentional pauses; inspect screenshots/text.
Run `npx skills add trailofbits/skills-curated --skill openai-develop-web-game -a claude-code`. Or copy the skill folder (plugins/openai-develop-web-game/skills/openai-develop-web-game in trailofbits/skills-curated) into .claude/skills/openai-develop-web-game in your project. Claude Code loads it when a task matches its description.
Run `npx skills add trailofbits/skills-curated --skill openai-develop-web-game -a codex`. Or copy the skill folder (plugins/openai-develop-web-game/skills/openai-develop-web-game in trailofbits/skills-curated) into .agents/skills/openai-develop-web-game 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 trailofbits/skills-curated --skill openai-develop-web-game -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/openai-develop-web-game, .gemini/skills/openai-develop-web-game, .github/skills/openai-develop-web-game and .opencode/skills/openai-develop-web-game in your project.
Going by SKILL.md and its folder, Openai Develop Web Game needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node and npm). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Write, Edit.
SKILL.md contains no URLs. Its commands use 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 notes only (pre-approves every shell command (allowed-tools: bash)), 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.
Openai Develop Web Game is published under the CC-BY-SA-4.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 36 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Openai Develop Web Game: E2E Testing (OpenHands/OpenHands, 90k stars), Playwright (Kiln-AI/Kiln, 5.2k stars), Create Chatgpt Video Ad (criptogus/agent-evolve-network, 288 stars) and Dev Auth Bypass (FranciscoMoretti/chat-js, 1.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
trailofbits (a GitHub organization, an official publisher) maintains it in trailofbits/skills-curated, which has 512 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on July 14, 2026.
Source: trailofbits/skills-curated on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.