Borrowing it
Nothing to install: this file belongs to jerseycheese/Narraitor. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/jerseycheese/Narraitor/main/.claude/skills/narraitor-playtest-loop/SKILL.mdgit clone --depth 1 https://github.com/jerseycheese/NarraitorWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jerseycheese/narraitor/narraitor-playtest-loop)<a href="https://agentmods.dev/skills/jerseycheese/narraitor/narraitor-playtest-loop"><img src="https://agentmods.dev/badge/skills/jerseycheese/narraitor/narraitor-playtest-loop.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00120 | $0.03231 |
| Opus 5 | $0.00060 | $0.01615 |
| Sonnet 5 | $0.00024 | $0.00646 |
| Haiku 4.5 | $0.00012 | $0.00323 |
Grade A, and why
narraitor-playtest-loop scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
not copy its curl-chaining workaround for live generation: browser automation reaches the How it starts
The opening of the file, as written. The whole thing — 231 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Playtest loop
1. Purpose
Every automated tier in this repo can be green while the game is boring. Unit tests prove functions return, visual specs prove pixels match, and neither reads a single sentence of prose. This skill closes that gap by playing the actual game through the actual UI against live Gemini, capturing the transcript, and handing it to a judge who has never seen the app.
It answers one question: does the story hold up over a real session, or does it fall apart somewhere around turn twenty.
2. When to reach for this instead of a sibling skill
narraitor-qa-walkthrough finds defects before a release. It walks every surface and asks
whether things work. Its Phases 4 through 6 delegate the live story loop to this skill. Do
not copy its curl-chaining workaround for live generation: browser automation reaches the
real path on its own, per section 3. That skill has not been corrected yet.
narraitor-ai-quality-discipline sets the evidence bar. It says one good generation is a
signal, not evidence, and it owns the eval matrix for prompt changes. This skill is one
concrete way to meet that bar for story quality specifically.
visual-crawl and design-loop cover pixels. Neither reads the story.
3. The harness
Real AI runs fine under browser automation. isPlaywrightEnv() in
src/lib/utils/isPlaywrightEnv.ts trips only when the user agent contains "Playwright" or
window.__PLAYWRIGHT__ is set, and the second only happens inside
tests/visual/utils/seedTestData.ts. A browser session that avoids both runs the real
generation path end to end. Do not call seedTestData and do not call mockApiEndpoints,
or the whole loop silently no-ops.
Setup, in order:
- Reset the worktree onto
refs/remotes/origin/developso the build under test is current - Copy
.env.localfrom the main checkout, which already carriesGEMINI_API_KEY. Never type a key into the BYOK wizard. - Set
.claude/launch.json's Next.js port to this worktree's port fromnode scripts/worktree-port.js, then start the server through the preview tooling - Confirm the startup log says
Environments: .env.local
What ships with it
3 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 231 lines · 120 tokens per session scan A b212fbd4d3dc
narraitor-playtest-loop is a skill published in the GitHub repository jerseycheese/Narraitor (30 stars, last pushed today), licensed MIT. It adds 120 tokens to every session and 3,231 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
develop-web-game
Use when Codex 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.
threejs-qa-release
Verify and release Three.js browser games: playtest QA, automated bot playtests, mobile and responsive checks, production builds, static-hosting base paths, debug gating, bundle review, screenshots, visual regression baselines, canvas-pixel inspection with measured metrics, and release risk reports.
test-playable-web-games
Test a playable browser game end to end with deterministic fixtures and real browser evidence. Use for gameplay QA, regression testing, controls, accessibility, responsive/mobile testing, save flows, console checks, performance smoke tests, and release verification.
pie-testing
Start, stop, and query Play-In-Editor (PIE) sessions for runtime testing of Blueprints, gameplay logic, widgets, AI, and any in-game behavior. Use when the user asks you to "play", "test", "run", "PIE", "start/stop the game", or otherwise needs a live game world to validate changes.
godot-e2e
Write and run E2E (end-to-end) game tests using the godot-e2e framework. Python controls a live Godot game over TCP — Locator-based semantic queries, expect() auto-retry assertions, and engine log capture make failures self-diagnosing. Use this skill whenever you need to: Test actual gameplay: player movement…
visual-qa
Inspect Godot screenshots or short frame sequences for acceptance issues. Use after capturing a scene, when checking camera framing, missing assets, UI overlap, collision visualization, animation, or a black/empty viewport.