Skip to content
Game dev

Godot 4 game jam

GDScript conventions, jam-scope discipline and a ship-to-itch.io skill so your agent helps you finish a Godot 4 game in 48 hours.

Verified install Not agent-tested v1.0.0 MIT updated godotgdscript
Equips
  • 2 2 Rules
  • 1 1 Skills
  • – 0 MCP

Game jams are lost to scope creep and a broken web build at hour 47. This loadout teaches your agent typed GDScript and Godot 4 scene conventions, makes it protect the core loop before adding features, and gives it a step-by-step skill for exporting a web build and pushing it to itch.io with butler.

What's in it

  • Typed GDScript 4 conventions, signals over hard references, scenes as the unit of reuse
  • Jam rules: playable loop first, feature freeze, a cut list instead of crunch
  • Ship skill covering headless web export, the single-threaded vs threaded trap, and butler pushes
  • Cursor rule scoped to .gd files

You'll need

  • Tools: godot-4, butler
  • Environment variables: BUTLER_API_KEY
Level 1 · automated

Verification

Verified install

Checked at commit ad36e85 · 9 passed, 0 failed, 1 not applicable

CheckResultWhat we found
Listinglisting.yaml matches the schema and declares every file in the folder. Pass
Schema valid; 5 files declared, none missing or extra
  • tested.status: untested (agent tests are separate from Level 1)
Files parseJSON parses; SKILL.md and .mdc front matter is valid YAML with the fields each agent needs; code fences are closed. Pass All 5 files parse; front matter valid
AdaptersCLAUDE.md imports @AGENTS.md, GEMINI.md imports @./AGENTS.md, and both match the generator. Pass
CLAUDE.md and GEMINI.md import AGENTS.md and are up to date
  • CLAUDE.md: matches the generator
  • GEMINI.md: matches the generator
Install pathsEvery file lands where each agent documents it, with no collisions, and the laid-out project is re-discovered correctly. Pass
Correct paths for all 5 agents; layouts re-discovered
  • Claude Code: 3 files, 1 skill in .claude/skills/
  • Codex CLI: 2 files, 1 skill in .agents/skills/
  • Cursor: 3 files, 1 skill in .agents/skills/, 1 rule
  • Gemini CLI: 3 files, 1 skill in .agents/skills/
  • GitHub Copilot: 2 files, 1 skill in .agents/skills/
MCP configmcp.json is structurally valid, converts to each agent's format, declares no literal secrets, and referenced packages exist on npm/PyPI. Not applicable No MCP servers in this loadout
Safety scanThe intake scanner finds no credentials, risky shell, hidden Unicode or prompt-injection wording, and the listing's network flag is honest. Pass
Clean: no credentials, risky shell or hidden text
  • Scanner intake-precheck/1: verdict clean; network no (listing says yes)
ReferencesLinks and file paths between the loadout's files resolve, including for each agent's installed layout. Pass No cross-file references to check
Size limitsFile count and sizes are within the submission limits; SKILL.md bodies stay under 500 lines. Pass
5 files, 7.1 KB total; largest AGENTS.md 2.9 KB
  • Limits: 30 files, 32 KB per file, 128 KB total, 500 lines per skill or rule
LicenceA recognised SPDX licence, with the licence text available. Pass MIT, by Agent Loadout; text in the repository LICENSE
Starter buildA minimal fixture project with the loadout applied installs and builds or type-checks, and the loadout's own code examples compile. Pass
Godot 4 project in the loadout's layout imports and runs headless with no script errors, using the loadout's own check command
  • Applied 6 loadout files at every agent's paths
  • godot 4.7.2-stable
  • ✓ import project (headless): ${GODOT_BIN} --headless --import --path .
  • ✓ run headless (godot --headless --quit): ${GODOT_BIN} --headless --path . --quit-after 600
  • Covers: scenes/<thing>/ with .tscn next to .gd, a small autoload, Input Map actions in project.godot (AGENTS.md)
  • Covers: Godot 4 GDScript from the Cursor rule: static types, @export/@export_range, @onready, signal.emit()/connect(callable), CharacterBody2D + move_and_slide(), Input.get_vector, groups, await timers, tweens
  • Covers: The loadout's "run headless to catch script errors" step works in CI
  • Covers: Not covered: web export and itch.io upload (export templates are ~1 GB; uploads need a butler key)

What this means: a script checked the files themselves: they parse, they install where each agent looks, any MCP config is sound, the safety scan is clean, references between files resolve, and, where a free and repeatable fixture exists, a small starter project builds with the loadout applied. No AI agent was run. Per-agent results ("tested with agent") are separate and stay untested until an agent actually runs.

Install

Choose your agent. Run the commands from your project root, or download a zip already laid out in the right folders.

Claude Code reads CLAUDE.md (imports AGENTS.md with @AGENTS.md) and skills from .claude/skills/.

Download zip
curl -fsSL --create-dirs -o AGENTS.md https://loadout.jnw-it.com/raw/godot-4-game-jam/1.0.0/AGENTS.md
curl -fsSL --create-dirs -o CLAUDE.md https://loadout.jnw-it.com/raw/godot-4-game-jam/1.0.0/CLAUDE.md
curl -fsSL --create-dirs -o .claude/skills/godot-jam-ship/SKILL.md https://loadout.jnw-it.com/raw/godot-4-game-jam/1.0.0/skills/godot-jam-ship/SKILL.md
FileGoes to
AGENTS.mdAGENTS.md
CLAUDE.mdCLAUDE.md
skills/godot-jam-ship/SKILL.md.claude/skills/godot-jam-ship/SKILL.md

Already have an AGENTS.md or CLAUDE.md? The commands above overwrite it — download the file instead and merge the sections you want.

Files

Rules AGENTS.md Godot 4 project and game jam rules. 45 lines
Download Raw
# AGENTS.md: Godot 4 game jam

This is a Godot 4 project made for a game jam. Finishing beats polish. Polish beats features.

## Jam rules (follow these over any instinct to add things)
1. **Core loop first.** Until the game can be started, played, won or lost, and restarted, only work on that.
2. **Keep a cut list.** When the human asks for something big, offer the smallest version that sells the idea,
   and add the rest to `CUTLIST.md` instead of building it.
3. **Feature freeze** when the human says so (default: 75% of the way through the jam). After that: bugs,
   juice (screen shake, sound, particles), menus, and the build. Nothing new.
4. **Ship a build early.** Get a web export on itch.io (draft page) on day one so the final upload is boring.
5. Never refactor working code in the last few hours unless it fixes a crash.

## Project layout
```
scenes/       one folder per thing: player/, enemies/, ui/, levels/ (each .tscn next to its .gd)
autoload/     global singletons (GameState, Audio) — keep these few and small
assets/       art/, audio/, fonts/ — imported files, never edited by code
```
- Commit `.tscn`, `.tres`, `.gd`, `project.godot`, `export_presets.cfg` and the `*.uid` / `*.import` files.
  Ignore `.godot/` and build output.

## GDScript conventions (Godot 4)
- Static typing everywhere: `var speed: float = 200.0`, `func take_damage(amount: int) -> void:`.
  Use `:=` when the type is obvious.
- `snake_case` for files, functions and variables; `PascalCase` for `class_name` and nodes; `UPPER_SNAKE` for constants.
- Use `@export` for tunable values so the human can tweak them in the inspector instead of asking you.
- Use `@onready var sprite: Sprite2D = $Sprite2D` for child references. No `get_node()` with long paths across the tree.
- Signals for "something happened" (`signal died`, `health_changed.emit(hp)`), direct calls for "do this".
  Children signal up; parents call down.
- Connect signals in code with callables: `button.pressed.connect(_on_start_pressed)`.
- Physics and movement in `_physics_process(delta)`; visuals and input polling in `_process(delta)` or `_unhandled_input`.
- Use groups (`add_to_group("enemies")`) instead of searching the tree.
- Use `await get_tree().create_timer(0.5).timeout` for simple delays; `Tween` (`create_tween()`) for movement and juice.
- Godot 3 syntax is wrong here: no `onready`, `export`, `yield`, `KinematicBody2D`, or `connect("signal", self, "method")`.

## Editing scenes
- Prefer creating nodes in the editor (tell the human what to add) or in code. If you must edit a `.tscn` by hand,
  keep `ext_resource` ids consistent and do not reorder sections.
- Input actions belong in Project Settings → Input Map (`project.godot`), never hard-coded key codes.

## Before you say "done"
- Run the project headless to catch script errors: `godot --headless --quit` (or ask the human to press F5).
- Say what the human should test by hand, in one or two lines.
Adapter CLAUDE.md Imports AGENTS.md for Claude Code. 10 lines
Download Raw
# CLAUDE.md

@AGENTS.md

## Claude Code notes
- Skills from this loadout live in `.claude/skills/`: `godot-jam-ship`. Use them when their description matches the task.
- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.

<!-- From the Agent Loadout "Godot 4 game jam" v1.0.0 — https://loadout.jnw-it.com/loadouts/godot-4-game-jam/ -->
Adapter GEMINI.md Imports AGENTS.md for Gemini CLI. 10 lines
Download Raw
# GEMINI.md

@./AGENTS.md

## Gemini CLI notes
- Skills from this loadout live in `.agents/skills/`: `godot-jam-ship`. Use them when their description matches the task.
- Follow AGENTS.md above; where this file and AGENTS.md disagree, AGENTS.md wins.

<!-- From the Agent Loadout "Godot 4 game jam" v1.0.0 — https://loadout.jnw-it.com/loadouts/godot-4-game-jam/ -->
Cursor rule .cursor/rules/gdscript.mdc GDScript style rule, applied to .gd files. 15 lines
Download Raw
---
description: Godot 4 GDScript style and API rules
globs: "**/*.gd"
alwaysApply: false
---

- Godot 4 syntax only: `@export`, `@onready`, `await`, `signal.emit()`, `signal.connect(callable)`, `CharacterBody2D`/`3D`.
- Type every variable, parameter and return value. `-> void` on functions that return nothing.
- `CharacterBody2D`: set `velocity`, then call `move_and_slide()` with no arguments.
- Use `Input.get_vector("move_left", "move_right", "move_up", "move_down")` for movement; action names come from the Input Map.
- Expose tuning values with `@export` (and `@export_range` where sensible) instead of magic numbers.
- Prefer signals and groups to absolute node paths. Avoid `get_parent().get_parent()`.
- Free nodes with `queue_free()`, never `free()`, during gameplay.
- Keep scripts under ~200 lines; split behaviour into child nodes/components when they grow.
Skill skills/godot-jam-ship/SKILL.md Exports a web build and publishes it to itch.io. 51 lines
Download Raw
---
name: godot-jam-ship
description: Export a Godot 4 project to the web and publish it to itch.io. Use when the user wants to build, export, upload, publish or submit their game jam entry.
---

# Ship a Godot 4 jam build to itch.io

## 0. Preconditions (check, then tell the human what is missing)
- Godot 4 is on the PATH (`godot --version`) and the **export templates for that exact version** are installed
  (Editor → Manage Export Templates). Headless export fails without them.
- `export_presets.cfg` contains a preset named `Web`. If not, ask the human to add one in Project → Export
  (Add… → Web) and save; do not invent the file from scratch.
- `butler` is installed and logged in (`butler login`, or `BUTLER_API_KEY` set) if publishing.
- The itch.io project page exists (it can be a draft). You need `user/game-slug`.

## 1. Pick threading
- **Thread Support off** (default for Godot 4.3+ Web preset): works anywhere, including itch.io, with no special headers. Use this unless the human needs threads.
- **Thread Support on**: needs cross-origin isolation (SharedArrayBuffer). On itch.io tick
  "SharedArrayBuffer support" in the embed options, or the game shows a blank screen.

## 2. Export
```sh
mkdir -p build/web
godot --headless --export-release "Web" build/web/index.html
```
- The entry file must be `index.html` for itch.io.
- Check `build/web` contains `index.html`, `.js`, `.wasm` and `.pck` files. If the `.pck` is huge, look for
  uncompressed audio or unused assets and mention it.

## 3. Smoke test locally
```sh
npx serve build/web   # or: python3 -m http.server -d build/web 8000
```
Ask the human to open it and play for 30 seconds. Web builds can behave differently from the editor
(audio needs a click to start; mouse capture needs a user gesture).

## 4. Publish
```sh
butler push build/web user/game-slug:html5 --userversion "jam-$(date +%Y%m%d-%H%M)"
butler status user/game-slug:html5
```
- First push only: the human must set "Kind of project" to HTML on the itch page and tick
  "This file will be played in the browser" for the html5 upload, and set the viewport size to the project's window size.

## 5. Optional desktop builds
If presets exist: `godot --headless --export-release "Windows Desktop" build/win/game.exe` then
`butler push build/win user/game-slug:windows`. Same for `Linux` and `macOS` (macOS builds are unsigned — tell the human players will need to right-click → Open).

## 6. Report
Tell the human: the itch.io URL, the channel(s) pushed, the build version string, and anything that still needs a click on the itch dashboard. Do not submit to the jam itself — that is the human's button.

All files: source zip · Licence MIT · By Agent Loadout · First listed

Installing and testing

How do I install Godot 4 game jam in Claude Code?

From your project root, put AGENTS.md, CLAUDE.md, skills/godot-jam-ship/SKILL.md at .claude/skills/godot-jam-ship/SKILL.md. The "Claude Code" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/godot-4-game-jam/claude-code.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.

How do I install Godot 4 game jam in Codex CLI?

From your project root, put AGENTS.md, skills/godot-jam-ship/SKILL.md at .agents/skills/godot-jam-ship/SKILL.md. The "Codex CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/godot-4-game-jam/codex.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.

How do I install Godot 4 game jam in Cursor?

From your project root, put AGENTS.md, .cursor/rules/gdscript.mdc, skills/godot-jam-ship/SKILL.md at .agents/skills/godot-jam-ship/SKILL.md. The "Cursor" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/godot-4-game-jam/cursor.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.

How do I install Godot 4 game jam in Gemini CLI?

From your project root, put AGENTS.md, GEMINI.md, skills/godot-jam-ship/SKILL.md at .agents/skills/godot-jam-ship/SKILL.md. The "Gemini CLI" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/godot-4-game-jam/gemini-cli.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.

How do I install Godot 4 game jam in GitHub Copilot?

From your project root, put AGENTS.md, skills/godot-jam-ship/SKILL.md at .agents/skills/godot-jam-ship/SKILL.md. The "GitHub Copilot" tab on this page has the curl commands, or download https://loadout.jnw-it.com/download/godot-4-game-jam/copilot.zip, which is already laid out. Do not overwrite an existing AGENTS.md or CLAUDE.md; merge it.

Has Godot 4 game jam been tested?

It passed the Level 1 automated install checks on 2026-10-16: the files parse, install to each agent's documented paths, and pass the safety scan. No AI agent has run it yet, so no agent pass or fail is claimed.

More for Claude Code, Codex, Cursor, Gemini CLI and GitHub Copilot.