ai-behavior-trees-util…
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators)…
Publish and update a game on itch.io: create the project page and upload builds with the butler CLI (butler push) to named channels. Use for itch.io publishing, butler push, channel naming for Windows/macOS/Linux/HTML5, versioning uploads, or shipping a jam or release build to
Claude Code
$ npx -y skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish --agent claude-code
Codex
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish -a codex -y
Cursor
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish -a cursor -y
Gemini CLI
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish -a gemini-cli -y
GitHub Copilot
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish -a github-copilot -y
OpenCode
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish -a opencode -y
Windsurf
$ npx skills add gamedev-skills/awesome-gamedev-agent-skills --skill itch-publish -a windsurf -y
name: itch-publish description: > Publishes and updates games on itch.io with the butler CLI: butler push to user/game:channel, channel platform tags, HTML5 builds, --userversion and CI uploads. Use for "upload to itch", an HTML5 game that downloads instead of playing, a blank or 403 web build, or "invalid target". Not for Steam (`steam-publish`) or jam scope (`game-jam`).
Get a build onto an itch.io page and keep it updated. The page is created in the browser by the user; every upload goes through **butler**, itch.io's CLI, with one command: `butler push`. butler diffs against the channel's previous build and uploads only what changed. CI and the full flag list live in `references/butler-ci.md`; limits and dated rules are in Version notes.
choosing channel names, versioning uploads, shipping a jam, demo or release build.
**Not for:** Steam (use `steam-publish`); jam scope and schedule (use `game-jam`; this skill is only the upload); building or exporting the game (engine skills).
1. **The page must exist first.** butler pushes only to an existing page. Ask the user to create it at `itch.io/game/new` and report the page URL. Settings to ask for: *Kind of project* stays **Downloadable** for native builds or becomes **HTML** for a browser game; visibility stays **Draft** (or Restricted, with a password, for testers) until the page is finished, because the first public publish puts it on Most Recent once and never again. 2. **Work out the target.** `<user>/<game>` is the lowercase page address: `finji.itch.io/overland` is `finji/overland`. Pick channel names now (Pattern 2) and reuse them forever. 3. **Install butler.** Locally from `itchio.itch.io/butler` or the itch app; in CI use the pinned, checksum-verified install in the reference. Check with `butler version`. 4. **Prepare a portable build folder:** exactly the files a player runs. Push a folder (or one `.zip` of that folder), never an installer or a pre-compressed pack (Gotchas). 5. **Dry-run the push** and read the file list (Verify, step 1). This needs no login. 6. **Log in.** `butler login` opens a browser, so ask the user to run it and approve. In CI, set `BUTLER_API_KEY` from a secret instead. 7. **Push:** `butler push <dir> <user>/<game>:<channel> --userversion <version>`. The first push uploads everything; later pushes to the same channel upload the diff. 8. **Finish the page.** Ask the user, on *Edit game*, to fix platform tags (tick only platforms the build was run on), tick *This file will be played in the browser* for an HTML channel, answer the **AI generation disclosure**, set adult content under *Metadata → Classification*, and Save. 9. **Update later** by pushing to the same channel. `butler push-preview` shows what will change first.
# butler push <directory-or-zip> <user>/<game>:<channel> butler push ./build/windows leafy/my-game:windows --userversion 1.2.0 butler push ./build/mac leafy/my-game:osx --userversion 1.2.0 butler push ./build/linux leafy/my-game:linux --userversion 1.2.0 butler push ./web leafy/my-game:html --userversion 1.2.0 # page Kind = HTML
`--userversion-file build.txt` reads the version from a file instead. Without either flag, itch numbers builds with an auto-incrementing integer, and the update API (reference) has no version to report.
Substring in channel name -> tag: win / windows -> Windows mac / osx -> macOS
linux -> Linux android -> Android
Several platforms in one channel: butler push ./jar leafy/my-game:win-linux-mac
Convention: lowercase, dash-separated (windows-beta, osx-demo, soundtrack).
No CPU-architecture tag: name the channel (windows-arm64) if you ship several.
Tags are only the first guess; fix them on Edit game.butler push ./build leafy/my-game:windows --ignore '*.pdb' --ignore '*.dSYM' # repeatable butler push ./build leafy/my-game:windows-beta --hidden # only when CREATING a channel butler push ./build leafy/my-game:windows --if-changed # skip an empty patch (CI reruns) butler status leafy/my-game # channels, builds, versions
Run these yourself and report the result:
1. `butler push <dir> <user>/<game>:<channel> --dry-run` (plus the same `--ignore` flags) lists every file and ends with `Would push <size> (<n> files, ...)`. It needs no credentials. Check that the executable (or `index.html` at the root for HTML) is there and that symbols, editor files and installers are not. For HTML, also check the file count and sizes against the limits in Version notes. 2. `butler validate <dir>` (offline) exits 0. Without a `.itch.toml` it lists the file the itch app would launch; with one, it fails on a parse error or an action whose path is missing. 3. After a real push, `butler status <user>/<game>` shows the channel with the new build and user-version. Processing finishes in the background; the build is already downloadable. 4. Ask the user to open the page logged out (or in a private window), download or play the build, and report that it starts.
patching and the itch app's auto-update, and may need admin rights players lack.
huge because a tiny change rewrites the whole blob. Push plain files; butler compresses.
<img src="docs/assets/awesome-gamedev-agent-skills-banner.png" width="820" alt="awesome-gamedev-agent-skills — game-dev skills for AI coding agents.
Build a production behavior-tree runtime (Blackboard, action/condition leaves, sequence/selector/parallel composites, decorators)…
Implement game audio practice — bus/mixer architecture and gain in decibels, ducking (sidechain), adaptive/dynamic music via…
Build game cameras that feel good — 2D follow with a deadzone, look-ahead, smoothing, and level-bounds clamping; 3D third-person…
Plan, generate, source, normalize, and validate cohesive visual game assets. Use for art direction, style bibles, sprites,…
Build branching dialogue and narrative — a node/choice graph with conditions, variables, and localization hooks — and choose…
Design NPC and enemy decision-making with finite state machines, behavior trees, steering behaviors, and A* pathfinding —…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.