[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79NNZP36EXXMATATEB1D567":3,"skill-same:01M79NNZP36EXXMATATEB1D567":171},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":14,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M79NNZP36EXXMATATEB1D567","ebitengine-game",null,"Create, improve, debug and package playable 2D games in Go with Ebitengine (github.com\u002Fhajimehoshi\u002Febiten\u002Fv2). Use for Ebitengine game requests: game design translated into a complete loop, input, rendering, text, audio, scenes, gameplay tests and desktop, browser or mobile builds. Also use when fixing these systems in an existing Ebitengine game. Do not apply to unrelated Go software or engine-internal patches merely because they depend on Ebitengine.","JunMystery\u002FAgent-Guidance","JunMystery","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F161468934?v=4","01M79MTMV8F0BY8NK1A92RA8A0","Jun","01M79MTMWCFBKPHN5B25E6V20B",0,"MIT","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: ebitengine-game\ndescription: >\n  Create, improve, debug and package playable 2D games in Go with Ebitengine\n  (github.com\u002Fhajimehoshi\u002Febiten\u002Fv2). Use for Ebitengine game requests: game design\n  translated into a complete loop, input, rendering, text, audio, scenes, gameplay\n  tests and desktop, browser or mobile builds. Also use when fixing these systems\n  in an existing Ebitengine game. Do not apply to unrelated Go software or\n  engine-internal patches merely because they depend on Ebitengine.\n---\n\n# Ebitengine game\n\nDeliver a game that is understandable, responsive and complete at the requested\nscope. One request can include several internal build\u002Fplay\u002Frefine passes. A\nscaffold, successful build or attractive screenshot alone is not a finished game.\nFor a focused fix, preserve the project's design and limit the workflow to the\naffected behavior.\n\nThe bundled starter targets **Ebitengine v2.10.5 \u002F Go 1.25+**. This is a pinned\nbaseline, not a claim about the latest release. Keep an existing project's\nversions unless an upgrade is needed and authorized. Check the pinned version's\npublic API before using newer or experimental APIs. References contain patterns\nto adapt; only the bundled scripts and starter are executable deliverables.\nTheir checks do not validate every reference snippet.\n\n## Delivery workflow\n\n1. **Inspect and decide.** Read repository instructions, `go.mod`, the `RunGame`\n   entrypoint and existing tests\u002Fassets. For new games, read\n   [Design and quality](references\u002Fdesign-and-quality.md). Establish the player's\n   goal, repeated decision, consequence, end\u002Fretry path, intended look, platform\n   and supported input. Infer reasonable defaults; ask only for missing choices\n   that materially change the product. Record a short brief and observable\n   acceptance criteria in the project.\n2. **Build a representative playable slice.** Make the central interaction and\n   its feedback work with the intended controls and visual direction. Check the\n   feel before expanding content. Keep scope small enough to finish; choose\n   authored or procedural content based on the game, not the template. Calibrate\n   content against actual player capabilities before multiplying levels. For an\n   art set, establish shared perspective, scale, anchors and palette roles using\n   [Assets and animation](references\u002Fassets-and-animation.md).\n3. **Complete and refine.** Implement the promised start → play → outcome →\n   retry\u002Fcontinue loop (or the appropriate persistent\u002Fsandbox loop). Refine\n   hierarchy, animation, sound, difficulty and transitions in context. Read only\n   the technical references needed for the selected systems. Fix discovered\n   defects within this delivery rather than asking the user to iterate for you.\n4. **Verify the product.** Test rules and important transitions, exercise real\n   input, inspect representative rendered states, and build\u002Frun requested\n   targets. Include failure\u002Fretry and boundary cases. A scripted demo cannot\n   establish control feel; a silent audio sink cannot establish sound quality.\n   For automated multi-step interactions, pair observed images with actual state\n   at the same tick; see [Playtest diagnostics](references\u002Fplaytest-diagnostics.md).\n5. **Hand off.** Supply launch\u002Fbuild instructions, actual artifact paths and\n   asset licences. State what was run and observed, what remains unverified,\n   and any material limitations. Publishing, purchases and external uploads are\n   separate actions within the user's requested scope.\n\n## Starting a project\n\nResolve commands relative to this skill's directory, not the game's working\ndirectory. Set `skill_dir` to the actual installed location, then for example:\n\n```sh\npython3 \"$skill_dir\u002Fscripts\u002Fnew_game.py\" --out mygame \\\n  --module example.com\u002Fmygame --title \"My Game\"\ncd mygame\ngo mod tidy\ngo test .\u002Fworld\u002F...\n```\n\nThe starter demonstrates scenes, action input, text, sound, a camera, pause and\nscripted capture using a small **platformer**. It is an integration example,\nnot a genre or architecture requirement. Replace its rules, controls, level,\npresentation and scene flow to fit the brief; a puzzle or card game should not\ninherit gravity, jumping, camera scrolling or a platformer HUD. Existing projects\nrarely need a scaffold. `--ci` adds a workflow and tools; inspect its triggers,\ntargets and release behavior before enabling it.\n\n## Loop and resource contracts\n\n| Method | Responsibility | Important distinction |\n| --- | --- | --- |\n| `Update() error` | Sample actions, advance simulation, apply scene changes and trigger event audio | Default target is 60 fixed ticks\u002Fs. Catch-up updates, focus pauses and slow machines affect actual scheduling. |\n| `Draw(screen *ebiten.Image)` | Render the state produced by updates | Calls are not one-to-one with ticks. Do not advance gameplay, consume input edges or start sounds here. Renderer-owned caches are separate from simulation state. |\n| `Layout(outsideW, outsideH int) (int, int)` | Choose logical dimensions for rendering and input | Fixed and responsive designs are both valid. Account for small windows, aspect ratio and readability. |\n\n- Express simulation durations in ticks or use an explicit fixed `dt`. At 60\n  TPS, 30 ticks is 0.5 seconds of simulation time. `ActualTPS` is a diagnostic,\n  not a delta. `SetTPS` changes the whole update clock; it is not a universal\n  slow-motion control. Avoid `SyncWithFPS` for rules that require a fixed step.\n- Return `ebiten.Termination` from `Update` for a clean stop. Other errors return\n  from `RunGame`; propagate failures rather than hiding them.\n- Load\u002Fdecode images and font sources once; reuse offscreens and hot-path\n  slices. Profile before making pooling or zero-allocation rules universal.\n- Separate rules from device\u002FGPU code where that makes them testable. A small\n  game need not grow an ECS, scene stack or service layer without need.\n\n## Essential Ebitengine choices\n\n- **Input:** Map devices to actions in `Update`. Separate held\u002Fpressed\u002Freleased;\n  combine bindings before computing an action edge if that is the intended\n  behavior. Standard gamepad mappings need an availability check and stick dead\n  zones. Verify the advertised devices through menus and retry too.\n  [Input](references\u002Finput.md).\n- **Rendering:** `GeoM` operations apply in call order. Pixel art needs deliberate\n  sampling\u002Fscaling; smooth art needs suitable filtering and antialiased geometry.\n  Preserve layer order while batching; sharing a sheet does not guarantee one\n  command. Custom final-screen transforms need matching pointer conversion.\n  [Rendering](references\u002Frendering.md).\n- **Text\u002FUI:** Preserve suitable existing bitmap\u002Fatlas text rendering. For new\n  outline-font code, use `text\u002Fv2` and parse font sources once. Include fonts\n  covering the shipped scripts and their licences. Measure actual strings and\n  verify focus, long text and target-size readability. [Text\u002FUI](references\u002Ftext-and-ui.md).\n- **Audio:** One `audio.Context` per process. Match sample rate and PCM format:\n  `DecodeF32` does not resample; `DecodeWithSampleRate` returns 16-bit PCM.\n  Overlapping effects need independent players or a voice pool; bound concurrency\n  for dense events. Resume browser audio after a gesture. [Audio](references\u002Faudio.md).\n- **Systems:** Tweens, particles, shake, physics and map loaders are optional\n  tools supporting the central interaction. [Gameplay systems](references\u002Fgameplay-systems.md).\n- **State:** Queue external callbacks for `Update`, make reset\u002Fretry clear,\n  separate gameplay and cosmetic randomness, test saves if persistence is\n  promised. [Architecture\u002Ftesting](references\u002Farchitecture-and-testing.md).\n\n## Verification\n\nRun commands from the game directory; retain `go.mod` and `go.sum`. Use repository\nbuild flags; `-buildvcs=false` below avoids depending on surrounding Git metadata.\n\n```sh\ngo vet .\u002F...\ngo test .\u002Fworld\u002F...   # starter's GPU-independent rules\npython3 \"$skill_dir\u002Fscripts\u002Fcheck_ebitengine.py\" .\ngo build -buildvcs=false -o game .\n```\n\nRun the checker after changing loop\u002Finput\u002Faudio code or reviewing old APIs. It is\na read-only, text-based advisory scan: inspect warnings in context. `--json`\nreturns the shared checker schema; `--strict` fails on warnings and `--max-issues N`\nlimits the report without changing totals. Deprecated APIs are warnings, not\nproof of a broken build. A clean result proves neither API correctness nor\nquality. Run other relevant package tests too; on Linux, tests that initialize\ngraphics need `xvfb-run -a`.\n\nThe checker cannot infer Go receiver types. Ambiguous `.At()` calls in `Update`\u002F`Draw`\nare informational notes, not warnings: ordinary grid\u002Fmap lookups are fine; verify\nwhether the receiver is actually an `ebiten.Image` before treating it as a GPU\nreadback. `ReadPixels()` remains a warning. Notes never fail `--strict`; JSON adds\n`note_count` and `notes` to the shared schema. `--max-issues` caps warnings and notes\ntogether, showing warnings first while retaining both totals.\n\nFor the starter, capture with `-demo -shot frame.png -shot-tick 240`. On Linux,\nuse a virtual display and, if needed, null audio without changing HOME:\n\n```sh\naudio_config=$(mktemp)\nprintf 'pcm.!default { type null }\\n' > \"$audio_config\"\nALSA_CONFIG_PATH=\"$audio_config\" xvfb-run -a .\u002Fgame \\\n  -demo -shot frame.png -shot-tick 240\nrm \"$audio_config\"\n```\n\nOpen the PNG. Inspect more states as needed: first play, a busy\u002Fdifficult moment,\nfailure and outcome. Adapt scripted actions\u002Fcapture points after changing the\ngame; the template demo no longer proves anything about a different loop.\nFor deeper input\u002Freplay tests, v2.10's opt-in VM may help (see\n[Architecture\u002Ftesting](references\u002Farchitecture-and-testing.md)).\n\nBuild only promised targets, for example:\n\n```sh\nGOOS=windows GOARCH=amd64 go build -buildvcs=false -o game.exe .\nGOOS=js GOARCH=wasm go build -buildvcs=false -o game.wasm .\n```\n\nCross-compilation establishes buildability, not runtime support. Run browser\nbuilds over HTTP and inspect console\u002Finput\u002Faudio when they are a target. Native\nSDKs, store bindings and cgo dependencies can add requirements beyond\nEbitengine's pure-Go desktop backend.\n\n## Compose within this catalog\n\nThis skill owns Ebitengine\u002FGo APIs. For portable design concerns, pair it with\nthe relevant installed discipline (for example `game-ui-ux`, `game-feel`,\n`create-game-assets`, `input-systems`, `performance-optimization` or\n`save-systems`), genre or shipping workflow. Bind the\nengine slots to this skill's references, not another engine's example code.\nLoad only what the task needs; the complete folder also works on its own.\n\n## Read as needed\n\n- [Design and quality](references\u002Fdesign-and-quality.md): brief, genre choices,\n  complete loop, presentation and playtest acceptance; for new games\u002Fredesigns.\n- [Project and builds](references\u002Fproject-and-builds.md): desktop, WASM and mobile.\n- [Rendering](references\u002Frendering.md), [input](references\u002Finput.md),\n  [text\u002FUI](references\u002Ftext-and-ui.md), [audio](references\u002Faudio.md).\n- [Assets and animation](references\u002Fassets-and-animation.md): when making or\n  importing an art set; shared visual rules, scale, pivots and sprite-sheet QA.\n- [Playtest diagnostics](references\u002Fplaytest-diagnostics.md): when scripting\n  interactions or reproducing failures; controlled ticks, state\u002Fimage evidence.\n- [Architecture\u002Ftesting](references\u002Farchitecture-and-testing.md) and\n  [gameplay systems](references\u002Fgameplay-systems.md): state, saves, animation,\n  collision and optional rigid bodies. [Tiled maps](references\u002Ftilemaps.md) covers\n  a constrained loader only when the game uses Tiled.\n- [Networking](references\u002Fnetworking.md): only for requested online play.\n- [Publishing\u002Fplatforms](references\u002Fpublishing-and-platforms.md),\n  [monetization](references\u002Fmonetization.md), [CI\u002Frelease](references\u002Fci-and-release.md):\n  only for requested distribution\u002Fintegration work.\n\nIf available, Ebitengine's repository skills `writing-kage-shaders` and\n`run-ebitengine-app-headless` provide version-specific advanced workflows. Other\ngame-design\u002Fstore skills are optional supplements; this skill remains usable\nwithout an external skill catalog.\n","# Ebitengine game\n\nDeliver a game that is understandable, responsive and complete at the requested\nscope. One request can include several internal build\u002Fplay\u002Frefine passes. A\nscaffold, successful build or attractive screenshot alone is not a finished game.\nFor a focused fix, preserve the project's design and limit the workflow to the\naffected behavior.\n\nThe bundled starter targets **Ebitengine v2.10.5 \u002F Go 1.25+**. This is a pinned\nbaseline, not a claim about the latest release. Keep an existing project's\nversions unless an upgrade is needed and authorized. Check the pinned version's\npublic API before using newer or experimental APIs. References contain patterns\nto adapt; only the bundled scripts and starter are executable deliverables.\nTheir checks do not validate every reference snippet.\n\n## Delivery workflow\n\n1. **Inspect and decide.** Read repository instructions, `go.mod`, the `RunGame`\n   entrypoint and existing tests\u002Fassets. For new games, read\n   [Design and quality](references\u002Fdesign-and-quality.md). Establish the player's\n   goal, repeated decision, consequence, end\u002Fretry path, intended look, platform\n   and supported input. Infer reasonable defaults; ask only for missing choices\n   that materially change the product. Record a short brief and observable\n   acceptance criteria in the project.\n2. **Build a representative playable slice.** Make the central interaction and\n   its feedback work with the intended controls and visual direction. Check the\n   feel before expanding content. Keep scope small enough to finish; choose\n   authored or procedural content based on the game, not the template. Calibrate\n   content against actual player capabilities before multiplying levels. For an\n   art set, establish shared perspective, scale, anchors and palette roles using\n   [Assets and animation](references\u002Fassets-and-animation.md).\n3. **Complete and refine.** Implement the promised start → play → outcome →\n   retry\u002Fcontinue loop (or the appropriate persistent\u002Fsandbox loop). Refine\n   hierarchy, animation, sound, difficulty and transitions in context. Read only\n   the technical references needed for the selected systems. Fix discovered\n   defects within this delivery rather than asking the user to iterate for you.\n4. **Verify the product.** Test rules and important transitions, exercise real\n   input, inspect representative rendered states, and build\u002Frun requested\n   targets. Include failure\u002Fretry and boundary cases. A scripted demo cannot\n   establish control feel; a silent audio sink cannot establish sound quality.\n   For automated multi-step interactions, pair observed images with actual state\n   at the same tick; see [Playtest diagnostics](references\u002Fplaytest-diagnostics.md).\n5. **Hand off.** Supply launch\u002Fbuild instructions, actual artifact paths and\n   asset licences. State what was run and observed, what remains unverified,\n   and any material limitations. Publishing, purchases and external uploads are\n   separate actions within the user's requested scope.\n\n## Starting a project\n\nResolve commands relative to this skill's directory, not the game's working\ndirectory. Set `skill_dir` to the actual installed location, then for example:\n\n```sh\npython3 \"$skill_dir\u002Fscripts\u002Fnew_game.py\" --out mygame \\\n  --module example.com\u002Fmygame --title \"My Game\"\ncd mygame\ngo mod tidy\ngo test .\u002Fworld\u002F...\n```\n\nThe starter demonstrates scenes, action input, text, sound, a camera, pause and\nscripted capture using a small **platformer**. It is an integration example,\nnot a genre or architecture requirement. Replace its rules, controls, level,\npresentation and scene flow to fit the brief; a puzzle or card game should not\ninherit gravity, jumping, camera scrolling or a platformer HUD. Existing projects\nrarely need a scaffold. `--ci` adds a workflow and tools; inspect its triggers,\ntargets and release behavior before enabling it.\n\n## Loop and resource contracts\n\n| Method | Responsibility | Important distinction |\n| --- | --- | --- |\n| `Update() error` | Sample actions, advance simulation, apply scene changes and trigger event audio | Default target is 60 fixed ticks\u002Fs. Catch-up updates, focus pauses and slow machines affect actual scheduling. |\n| `Draw(screen *ebiten.Image)` | Render the state produced by updates | Calls are not one-to-one with ticks. Do not advance gameplay, consume input edges or start sounds here. Renderer-owned caches are separate from simulation state. |\n| `Layout(outsideW, outsideH int) (int, int)` | Choose logical dimensions for rendering and input | Fixed and responsive designs are both valid. Account for small windows, aspect ratio and readability. |\n\n- Express simulation durations in ticks or use an explicit fixed `dt`. At 60\n  TPS, 30 ticks is 0.5 seconds of simulation time. `ActualTPS` is a diagnostic,\n  not a delta. `SetTPS` changes the whole update clock; it is not a universal\n  slow-motion control. Avoid `SyncWithFPS` for rules that require a fixed step.\n- Return `ebiten.Termination` from `Update` for a clean stop. Other errors return\n  from `RunGame`; propagate failures rather than hiding them.\n- Load\u002Fdecode images and font sources once; reuse offscreens and hot-path\n  slices. Profile before making pooling or zero-allocation rules universal.\n- Separate rules from device\u002FGPU code where that makes them testable. A small\n  game need not grow an ECS, scene stack or service layer without need.\n\n## Essential Ebitengine choices\n\n- **Input:** Map devices to actions in `Update`. Separate held\u002Fpressed\u002Freleased;\n  combine bindings before computing an action edge if that is the intended\n  behavior. Standard gamepad mappings need an availability check and stick dead\n  zones. Verify the advertised devices through menus and retry too.\n  [Input](references\u002Finput.md).\n- **Rendering:** `GeoM` operations apply in call order. Pixel art needs deliberate\n  sampling\u002Fscaling; smooth art needs suitable filtering and antialiased geometry.\n  Preserve layer order while batching; sharing a sheet does not guarantee one\n  command. Custom final-screen transforms need matching pointer conversion.\n  [Rendering](references\u002Frendering.md).\n- **Text\u002FUI:** Preserve suitable existing bitmap\u002Fatlas text rendering. For new\n  outline-font code, use `text\u002Fv2` and parse font sources once. Include fonts\n  covering the shipped scripts and their licences. Measure actual strings and\n  verify focus, long text and target-size readability. [Text\u002FUI](references\u002Ftext-and-ui.md).\n- **Audio:** One `audio.Context` per process. Match sample rate and PCM format:\n  `DecodeF32` does not resample; `DecodeWithSampleRate` returns 16-bit PCM.\n  Overlapping effects need independent players or a voice pool; bound concurrency\n  for dense events. Resume browser audio after a gesture. [Audio](references\u002Faudio.md).\n- **Systems:** Tweens, particles, shake, physics and map loaders are optional\n  tools supporting the central interaction. [Gameplay systems](references\u002Fgameplay-systems.md).\n- **State:** Queue external callbacks for `Update`, make reset\u002Fretry clear,\n  separate gameplay and cosmetic randomness, test saves if persistence is\n  promised. [Architecture\u002Ftesting](references\u002Farchitecture-and-testing.md).\n\n## Verification\n\nRun commands from the game directory; retain `go.mod` and `go.sum`. Use repository\nbuild flags; `-buildvcs=false` below avoids depending on surrounding Git metadata.\n\n```sh\ngo vet .\u002F...\ngo test .\u002Fworld\u002F...   # starter's GPU-independent rules\npython3 \"$skill_dir\u002Fscripts\u002Fcheck_ebitengine.py\" .\ngo build -buildvcs=false -o game .\n```\n\nRun the checker after changing loop\u002Finput\u002Faudio code or reviewing old APIs. It is\na read-only, text-based advisory scan: inspect warnings in context. `--json`\nreturns the shared checker schema; `--strict` fails on warnings and `--max-issues N`\nlimits the report without changing totals. Deprecated APIs are warnings, not\nproof of a broken build. A clean result proves neither API correctness nor\nquality. Run other relevant package tests too; on Linux, tests that initialize\ngraphics need `xvfb-run -a`.\n\nThe checker cannot infer Go receiver types. Ambiguous `.At()` calls in `Update`\u002F`Draw`\nare informational notes, not warnings: ordinary grid\u002Fmap lookups are fine; verify\nwhether the receiver is actually an `ebiten.Image` before treating it as a GPU\nreadback. `ReadPixels()` remains a warning. Notes never fail `--strict`; JSON adds\n`note_count` and `notes` to the shared schema. `--max-issues` caps warnings and notes\ntogether, showing warnings first while retaining both totals.\n\nFor the starter, capture with `-demo -shot frame.png -shot-tick 240`. On Linux,\nuse a virtual display and, if needed, null audio without changing HOME:\n\n```sh\naudio_config=$(mktemp)\nprintf 'pcm.!default { type null }\\n' > \"$audio_config\"\nALSA_CONFIG_PATH=\"$audio_config\" xvfb-run -a .\u002Fgame \\\n  -demo -shot frame.png -shot-tick 240\nrm \"$audio_config\"\n```\n\nOpen the PNG. Inspect more states as needed: first play, a busy\u002Fdifficult moment,\nfailure and outcome. Adapt scripted actions\u002Fcapture points after changing the\ngame; the template demo no longer proves anything about a different loop.\nFor deeper input\u002Freplay tests, v2.10's opt-in VM may help (see\n[Architecture\u002Ftesting](references\u002Farchitecture-and-testing.md)).\n\nBuild only promised targets, for example:\n\n```sh\nGOOS=windows GOARCH=amd64 go build -buildvcs=false -o game.exe .\nGOOS=js GOARCH=wasm go build -buildvcs=false -o game.wasm .\n```\n\nCross-compilation establishes buildability, not runtime support. Run browser\nbuilds over HTTP and inspect console\u002Finput\u002Faudio when they are a target. Native\nSDKs, store bindings and cgo dependencies can add requirements beyond\nEbitengine's pure-Go desktop backend.\n\n## Compose within this catalog\n\nThis skill owns Ebitengine\u002FGo APIs. For portable design concerns, pair it with\nthe relevant installed discipline (for example `game-ui-ux`, `game-feel`,\n`create-game-assets`, `input-systems`, `performance-optimization` or\n`save-systems`), genre or shipping workflow. Bind the\nengine slots to this skill's references, not another engine's example code.\nLoad only what the task needs; the complete folder also works on its own.\n\n## Read as needed\n\n- [Design and quality](references\u002Fdesign-and-quality.md): brief, genre choices,\n  complete loop, presentation and playtest acceptance; for new games\u002Fredesigns.\n- [Project and builds](references\u002Fproject-and-builds.md): desktop, WASM and mobile.\n- [Rendering](references\u002Frendering.md), [input](references\u002Finput.md),\n  [text\u002FUI](references\u002Ftext-and-ui.md), [audio](references\u002Faudio.md).\n- [Assets and animation](references\u002Fassets-and-animation.md): when making or\n  importing an art set; shared visual rules, scale, pivots and sprite-sheet QA.\n- [Playtest diagnostics](references\u002Fplaytest-diagnostics.md): when scripting\n  interactions or reproducing failures; controlled ticks, state\u002Fimage evidence.\n- [Architecture\u002Ftesting](references\u002Farchitecture-and-testing.md) and\n  [gameplay systems](references\u002Fgameplay-systems.md): state, saves, animation,\n  collision and optional rigid bodies. [Tiled maps](references\u002Ftilemaps.md) covers\n  a constrained loader only when the game uses Tiled.\n- [Networking](references\u002Fnetworking.md): only for requested online play.\n- [Publishing\u002Fplatforms](references\u002Fpublishing-and-platforms.md),\n  [monetization](references\u002Fmonetization.md), [CI\u002Frelease](references\u002Fci-and-release.md):\n  only for requested distribution\u002Fintegration work.\n\nIf available, Ebitengine's repository skills `writing-kage-shaders` and\n`run-ebitengine-app-headless` provide version-specific advanced workflows. Other\ngame-design\u002Fstore skills are optional supplements; this skill remains usable\nwithout an external skill catalog.\n",{"name":5,"description":7},"main","5d0a87185c0e172c3901e2a6e5916b6d544b8b94","skills\u002Febitengine-game","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance","https:\u002F\u002Fgithub.com\u002FJunMystery","AI is the typist, I am the architect. Building efficient, secure, and user-centric products through disciplined AI prompt engineering.","2026-11-13 17:41:25",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add JunMystery\u002FAgent-Guidance --skill ebitengine-game",{"tool":37,"command":38},"bunx","bunx skills add JunMystery\u002FAgent-Guidance --skill ebitengine-game",{"tool":40,"command":41},"pnpm","pnpm dlx skills add JunMystery\u002FAgent-Guidance --skill ebitengine-game","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002FSKILL.md",true,[45,51,57,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"agents\u002Fopenai.yaml","REFERENCE","参考文档",207,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fagents\u002Fopenai.yaml",{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"assets\u002Fci\u002Fgithub-actions.yml","ASSET","资产文件",5196,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fci\u002Fgithub-actions.yml",{"path":58,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":61,"sourceHtmlUrl":62},"assets\u002Fstarter\u002Fassets.go","SCRIPT","脚本",1738,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fassets.go",{"path":64,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":65,"sourceHtmlUrl":66},"assets\u002Fstarter\u002Fgame.go",2513,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fgame.go",{"path":68,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":69,"sourceHtmlUrl":70},"assets\u002Fstarter\u002Finput.go",3205,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Finput.go",{"path":72,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":73,"sourceHtmlUrl":74},"assets\u002Fstarter\u002Flicenses\u002FGo-Fonts.txt",1913,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Flicenses\u002FGo-Fonts.txt",{"path":76,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":77,"sourceHtmlUrl":78},"assets\u002Fstarter\u002Fmain.go",1733,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fmain.go",{"path":80,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":81,"sourceHtmlUrl":82},"assets\u002Fstarter\u002Fscenes.go",5976,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fscenes.go",{"path":84,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":85,"sourceHtmlUrl":86},"assets\u002Fstarter\u002Fsound.go",1723,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fsound.go",{"path":88,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":89,"sourceHtmlUrl":90},"assets\u002Fstarter\u002Fweb\u002Findex.html",917,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fweb\u002Findex.html",{"path":92,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":93,"sourceHtmlUrl":94},"assets\u002Fstarter\u002Fworld\u002Fworld_test.go",3731,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fworld\u002Fworld_test.go",{"path":96,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":97,"sourceHtmlUrl":98},"assets\u002Fstarter\u002Fworld\u002Fworld.go",4714,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fassets\u002Fstarter\u002Fworld\u002Fworld.go",{"path":100,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Farchitecture-and-testing.md",11347,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Farchitecture-and-testing.md",{"path":104,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fassets-and-animation.md",4273,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fassets-and-animation.md",{"path":108,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Faudio.md",6955,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Faudio.md",{"path":112,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":113,"sourceHtmlUrl":114},"references\u002Fci-and-release.md",4204,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fci-and-release.md",{"path":116,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":117,"sourceHtmlUrl":118},"references\u002Fdesign-and-quality.md",8216,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fdesign-and-quality.md",{"path":120,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":121,"sourceHtmlUrl":122},"references\u002Fgameplay-systems.md",12311,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fgameplay-systems.md",{"path":124,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":125,"sourceHtmlUrl":126},"references\u002Finput.md",9196,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Finput.md",{"path":128,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":129,"sourceHtmlUrl":130},"references\u002Fmonetization.md",5512,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fmonetization.md",{"path":132,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":133,"sourceHtmlUrl":134},"references\u002Fnetworking.md",7448,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fnetworking.md",{"path":136,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":137,"sourceHtmlUrl":138},"references\u002Fplaytest-diagnostics.md",3850,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fplaytest-diagnostics.md",{"path":140,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":141,"sourceHtmlUrl":142},"references\u002Fproject-and-builds.md",7610,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fproject-and-builds.md",{"path":144,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":145,"sourceHtmlUrl":146},"references\u002Fpublishing-and-platforms.md",6719,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Fpublishing-and-platforms.md",{"path":148,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":149,"sourceHtmlUrl":150},"references\u002Frendering.md",10822,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Frendering.md",{"path":152,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":153,"sourceHtmlUrl":154},"references\u002Ftext-and-ui.md",14263,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Ftext-and-ui.md",{"path":156,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":157,"sourceHtmlUrl":158},"references\u002Ftilemaps.md",12400,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Freferences\u002Ftilemaps.md",{"path":160,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":161,"sourceHtmlUrl":162},"scripts\u002Fcheck_ebitengine.py",17667,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fscripts\u002Fcheck_ebitengine.py",{"path":164,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":165,"sourceHtmlUrl":166},"scripts\u002Fnew_game.py",6597,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fscripts\u002Fnew_game.py",{"path":168,"resourceType":59,"resourceTypeDesc":60,"sizeBytes":169,"sourceHtmlUrl":170},"scripts\u002Fpackage_macos_app.py",8869,"https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Febitengine-game\u002Fscripts\u002Fpackage_macos_app.py",[172,178,184,190,196,202],{"skillNo":173,"name":174,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":19},"01M79QR1E309VJ6CTQKB32AWWA","zero-trust-architecture-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fzero-trust-architecture-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":179,"name":180,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":183,"publishedAt":19},"01M79QQV7GHYR02DYGN41S23WN","xss-filter-evasion-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxss-filter-evasion-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":185,"name":186,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":19},"01M79QQNSN7YB8XB61FFSCS3WH","xs-leaks-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxs-leaks-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":191,"name":192,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":19},"01M79QQHZZJKFDY9132G5A65C2","xpath-injection-prevention-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxpath-injection-prevention-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":197,"name":198,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":19},"01M79QQB9ZSD3DJG8658EHQXR1","xml-security-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxml-security-cheat-sheet\u002FSKILL.md",[],[],{"skillNo":203,"name":204,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":207,"publishedAt":19},"01M79QQ60WKV7PFMXWT9CW8PM6","xml-external-entity-prevention-cheat-sheet","https:\u002F\u002Fgithub.com\u002FJunMystery\u002FAgent-Guidance\u002Fblob\u002Fmain\u002Fskills\u002Fxml-external-entity-prevention-cheat-sheet\u002FSKILL.md",[],[]]