agentleFS
npownpow/claude-skills/develop-board-game/SKILL.md

develop-board-game

Skill4 starsChanged 6 months agoApache-2.0View on GitHub

Creates a complete, faithful digital version of a board game as a single-file HTML/JS/CSS application. Use when the user asks to build, implement, or digitize a board game, card game, or tabletop game. Handles rules implementation, turn management, multiplayer (local hot-seat, split-tab, online P2P), UI layout, and automated testing via Playwright.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    After each major milestone, verify ALL of these.

    line 46
  2. Very specific:

    Validate at boundaries: Every move entering the system — from UI clicks, performMove(), or network messages — passes through getValidMoves …

    line 63
  3. Distinctive:

    One change, one test: Never accumulate untested changes.

    line 65
  4. Distinctive:

    Diagnose, don't retry: When a test fails, do not blindly change code and re-run.

    line 66
  5. Very specific:

    Error messages are remediation instructions: Every validation rejection must say what was wrong AND what was expected: "Invalid move: {row: …

    line 71

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Develop Board Game

Build a faithful digital board game as a single HTML file. Accurate rules, multiplayer support, polished visuals.

Workflow

  1. Research rules — understand EVERY rule before coding. List them in a comment block at the top of the HTML file. Do not start coding until you can explain every rule. See step details in WORKFLOW.md.
  2. Choose multiplayer modes — use the decision tree in MULTIPLAYER.md. Every game gets a lobby screen.
  3. Define game state — single JSON-serializable source of truth. See state model in ARCHITECTURE.md.
  4. Implement rules engine — pure functions: getValidMoves, applyMove, checkWinCondition, getNextPlayer, getPlayerView. See patterns in ARCHITECTURE.md.
  5. Build lobby UI — mode selection, player config, online room code flow. See WORKFLOW.md.
  6. Build game UI — board, player panel, game log, status bar, controls. Follow the visual standards in VISUAL.md. Do not use vague aesthetics — follow the concrete CSS system.
  7. Implement turn management — mode-specific behavior (hot-seat transitions, host-authoritative networking, AI delay). See MULTIPLAYER.md.
  8. Wire test APIs — window.render_game_to_text(), window.performMove(move), window.startGame(config). See signatures in WORKFLOW.md.
  9. Test — run Playwright after EVERY meaningful change. See TESTING.md.
  10. Self-review loop — after tests pass, review your own work against the checklist below. Fix issues. Re-test. Repeat until all checks pass. Do not skip this step.
  11. Track progress — maintain progress.md with quality grades. See template in WORKFLOW.md.

Self-review checklist

After each major milestone, verify ALL of these. If any fail, fix before proceeding:

  • Every rule from step 1 is implemented (cross-check the comment block)
  • Invalid moves are rejected with clear error messages (test at least 3 illegal moves)
  • Win/loss/draw conditions trigger correctly (play to completion at least once)
  • render_game_to_text() returns enough info to verify any rule without inspecting DOM
  • No console errors during a full game playthrough
  • Board looks intentional, not default/generic (check against VISUAL.md)
  • Each multiplayer mode works independently
  • Hidden info is never leaked (check getPlayerView output for opponent data)

Golden rules

Hard mechanical rules. Never violate these.

  1. State is the only truth. UI reads from state, never the reverse. render(state) is a pure function of state. No game logic reads from the DOM.
  2. Rules engine is pure. applyMove(state, move) takes state + move, returns new state. No side effects. No randomness except where the game demands it (dice), and even then, the result is stored in state.
  3. Validate at boundaries. Every move entering the system — from UI clicks, performMove(), or network messages — passes through getValidMoves before applyMove. No shortcuts. No "trust the caller."
  4. Never expose hidden info. getPlayerView(state, playerId) is the ONLY way to derive what a player sees. The host never sends raw state to guests. render_game_to_text() returns the local player's view, not the full state.
  5. One change, one test. Never accumulate untested changes. After every meaningful edit: save → test → verify. If tests fail, fix before writing more code.
  6. Diagnose, don't retry. When a test fails, do not blindly change code and re-run. Read the error. Identify the root cause. Determine if the issue is in the rule logic, the UI wiring, or the test itself. Fix the specific problem.
  7. No magic numbers in game logic. Board dimensions, scoring values, player limits, and turn counts must come from named constants or config, never inline literals scattered through code.
  8. CSS variables for all visual theming. Colors, sizes, and spacing are defined as CSS custom properties on :root. Components reference variables, never hardcoded hex values. This is how you maintain visual consistency.
  9. Boring technology only. Vanilla JS, HTML, CSS. No frameworks, no build steps, no exotic dependencies. The one exception is PeerJS from CDN for online multiplayer. If you need functionality from a library, reimplement the needed subset directly.
  10. Centralize invariants. Extract shared logic into named functions. If the same validation or computation appears in two places, it must be one function called from both. Duplicated logic drifts.
  11. Error messages are remediation instructions. Every validation rejection must say what was wrong AND what was expected: "Invalid move: {row: 9, col: 0} — row must be 0-7" not "Invalid move". The agent (and the test runner) uses these messages to self-correct.

Reference files

FileContents
WORKFLOW.mdDetailed step-by-step for each workflow phase, test API signatures, progress.md template
ARCHITECTURE.mdState model, board patterns (grid/hex/card/path/territory), game mechanics, AI
MULTIPLAYER.mdHost-authoritative model, hidden info, BroadcastChannel, PeerJS, message protocol, reconnection, turn timer, simultaneous actions, mode decision tree
VISUAL.mdCSS variable system, typography, color palettes, animation standards, responsive design, data attributes
TESTING.mdPlaywright test patterns for all modes, negative tests, visual verification checklist
scripts/test_game.jsPlaywright test template

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.