Communitygithub.com

mallardask-ops/evilvideogamenerd

Launches the evil-video-game-nerd subagent: an aggressive external reviewer who plays and stress-tests the Godot game as an outsider without access to the GDD, roadmap or project rules, hunts bugs, crashes, soft-locks, bad UI, bad controls and weak game decisions, keeps its own memory and a findings ledger across rounds, and rechecks earlier findings. Modes: player (black box, default), qa (also reads code and logs, runs the chaos runner), critic (compares the game with what the store text promi

What is evilvideogamenerd?

evilvideogamenerd is a Claude Code agent skill that launches the evil-video-game-nerd subagent: an aggressive external reviewer who plays and stress-tests the Godot game as an outsider without access to the GDD, roadmap or project rules, hunts bugs, crashes, soft-locks, bad UI, bad controls and weak game decisions, keeps its own memory and a findings ledger across rounds, and rechecks earlier findings. Modes: player (black box, default), qa (also reads code and logs, runs the chaos runner), critic (compares the game with what the store text promi.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mallardask-ops/ultimate-antislop-game/tree/HEAD/godot-skills/skills/evilvideogamenerd

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

EVILVIDEOGAMENERD — the outsider who breaks your game

Reviewer settings (live)

!node ${CLAUDE_SKILL_DIR}/../../scripts/gate.mjs evilvideogamenerd || echo GATE_UNAVAILABLE

  • NO_CONFIG → stop and run the devinit skill first.
  • CONFIG_ERROR → repair and validate the policy before continuing; do not substitute defaults.
  • Copy a template into the project with node ${CLAUDE_SKILL_DIR}/../../scripts/install-template.mjs <skill>/templates/<file> <destination> (it never overwrites). Templates with {{placeholders}} are read, filled and written instead.

Modes ($ARGUMENTS)

ArgumentWhat to do
player / qa / critic [focus]A review round (procedure below). Default mode: nerd.default_mode
recheckA round whose only job is to recheck ledger rows with status fix-submitted, still-open or regressed
statusSummarize qa/nerd/ledger.md by severity and status; do not launch the reviewer
setupSteps 1–2 only: the reviewer's folder and tooling

Your role (main agent)

You prepare, launch and triage. The reviewer works alone.

  • Never put design intent, GDD content, numbers, roadmap items or project rules into its prompt. Write the briefing as a player-facing note: how to launch, controls, what changed in patch-note style.
  • Never close its findings. You may set fix-submitted (with a commit or note). Only the reviewer on recheck, or a human, sets verified-fixed; only a human sets wontfix.
  • Disagreeing with a finding ("that is intended") is the user's call. Record it with the user's decision.

Round procedure

  1. Reviewer folder (paths.nerd, default qa/nerd/). Create it if missing:

    • ledger.md: install-template.mjs evilvideogamenerd/templates/ledger.md qa/nerd/ledger.md;
    • report-template.md: install-template.mjs evilvideogamenerd/templates/report.md qa/nerd/report-template.md;
    • reports/, screens/, logs/, scripts/ (created by the reviewer as needed).

    The reviewer cannot read the plugin folder, so its templates must live here.

  2. Tooling. Work out what the reviewer can actually use, and say it plainly:

    • MCP play: a Godot MCP with screenshot and input tools is available (GoPeak recommended; setup in the stopgen skill, setup-mcp). Needed for player and critic.
    • Chaos runner: <project_dir>/tools/qa/chaos_runner.gd exists. If it does not, offer to install it (user OK): install-template.mjs evilvideogamenerd/templates/chaos_runner.gd <project_dir>/tools/qa/chaos_runner.gd. It needs the Godot binary, not a display.
    • None: tell the user the round can only be partial (qa code review) and ask whether to continue.
  3. Session file. Write qa/nerd/.session.json: {"mode": "...", "round": N, "focus": "...", "capabilities": ["mcp-play", "chaos"], "version": "<process.current_version>", "started": "<ISO date>"}. The round number is the previous one plus one (see reports/). The isolation hook reads the mode from this file.

  4. Briefing from templates/briefing.md: player-facing information only.

  5. Launch the evil-video-game-nerd subagent (its listed type may carry a godot-gamedev: prefix). Pass the briefing, the report path to write, and "templates are in qa/nerd/". Up to nerd.max_rounds rounds per session.

  6. Triage the report with the user:

    • Blocker/Critical → roadmap Must items for the current version (antislop-game).
    • Others → roadmap or backlog by severity × frequency.
    • Rejected findings → ledger wontfix with the user's reason.
    • Suspected findings and hunches → nothing until reproduced.
  7. Fix, then recheck. After fixes, set fix-submitted in the ledger and run recheck. Repeat up to nerd.max_rounds.

  8. Delete qa/nerd/.session.json when the session ends.

What isolation means here (be honest about it)

  • The plugin's nerd-guard hook applies only to this subagent. It blocks reading the GDD, roadmap, decisions, playtests, AGENTS.md, CLAUDE.md and .gamedev/. In player/critic mode it allows only docs/player/, qa/nerd/ and its memory, and only playing tools. It allows writes only to qa/nerd/ and its memory, and never MCP tools that edit the game or call methods at runtime.
  • omitClaudeMd needs Claude Code 2.1.271 or newer. It skips the initial user/project/local instructions; managed policy still loads, and subdirectory instructions can load when files are accessed. This does not guarantee an instruction-free context. The reviewer keeps project memory in .claude/agent-memory/…evil-video-game-nerd…/, or qa/nerd/memory.md when agent memory is unavailable.
  • Bash filtering is best-effort, not a sandbox. Tell the user this if they need guaranteed isolation; the alternative is a separate checkout without docs/.
  • docs/player/ must stay free of design intent (gdddocs rule); otherwise the isolation leaks through the front door.

Gates

The release-candidate gate (antislop-game gate) fails while the ledger has Blocker or Critical rows that are not verified-fixed or wontfix.

Related Skills