thedivergentai/godot-builder
Expert-level toolkit for modular Godot 4.7+ CLI automation and headless build orchestration. Use when you need to: (1) Build complex scene trees or UI layouts programmatically, (2) Automate expert 3D asset pipelines (glTF -> Collision), (3) Optimize procedural geometry headlessly (CSG -> Static Mesh), or (4) Engineer production-grade CI/CD pipelines. Set GODOT_PATH env var for custom engine location. Keywords: Godot CLI, headless, CI, export, builder, 4.7.
npx skills add https://github.com/thedivergentai/GD-Agentic-Skills --skill godot-builder
The godot-builder skill provides an expert-grade foundation for programmatic game development and headless automation using the Godot 4.7-stable CLI. Override paths via GODOT_PATH and GODOT_CONSOLE_PATH environment variables.
XDG_DATA_HOME and XDG_CONFIG_HOME to prevent cache corruption between instances..godot/imported/ directory to force the engine to re-evaluate modified global import settings.owner property set to the scene root, or they will be discarded during serialization.ResourceSaver.save() does NOT serialize UIDs in headless mode. Invoke godot -e --headless --import as a post-process.Resource.duplicate(true) in Godot 4.4+; use duplicate_deep(Resource.DEEP_DUPLICATE_ALL) to prevent procedural state-bleed..tscn or .tres extensions; always load via uid:// or without extensions to avoid failures in exported binary builds.RenderingServer.call_on_render_thread().ResourceUID.set_id() without calling has_id() first; it causes a fatal CLI crash.RenderingServer.canvas_item_reset_physics_interpolation() when programmatically moving low-level CanvasItems on their first frame; failure causes visual desync between rendering and physics systems.> Do NOT Load the full script catalog for a single task. Load only the MANDATORY scripts named in the active workflow. Thin process wrappers (launch_editor.py, run_project.py, stop_project.py, get_*, list_projects.py) live in the appendix — do not preload them unless that exact CLI action is required.
Purpose: Automates the ingestion of raw 3D assets into production-ready scenes with accurate physics collisions.
godot -e --headless --import (or import_automator.py) — do not invent alternate flag orders.gltf_processor.py -> collision_generator.py -> save_scene.py -> headless --import.owner for every node. Forces a final headless import to fix the missing UID serialization.ResourceSaver does not serialize UIDs headless. Fallback: re-run --import; if UIDs still missing, run update_project_uids.py after import completes.quit() or editor import is waiting on GPU. Fallback: ensure the post-process script calls get_tree().quit(); kill the PID via stop_project.py and retry with XDG_* isolation.Purpose: Generates optimized procedural level chunks without shared resource state corruption between instances.
duplicate_deep(Resource.DEEP_DUPLICATE_ALL) between bake steps — do not use duplicate(true).csg_optimizer.py -> duplicate_deep(ALL) -> navmesh_baker.py.duplicate_deep to isolate materials/resources. Bakes CSG to static geometry before triggering NavMesh pathfinding.DEEP_DUPLICATE_ALL per instance.quit() after bake. Fallback: add explicit quit; isolate via XDG_DATA_HOME / XDG_CONFIG_HOME.Purpose: Validates cross-platform builds and ensures global project settings (VRAM compression) are strictly applied.
rm -rf .godot/imported -> test_runner.py -> profile_generator.py -> ci_exporter.py.export_presets.cfg not mutated for the target. Fallback: run ci_export_prepper.gd headlessly before --export-release; verify preset name matches CI matrix.quit(). Fallback: always end -s scripts with quit(); treat non-zero hang as kill + retry with XDG isolation.--import, then update_project_uids.py; do not export until import finishes cleanly.Professional Godot building requires a "Zero-Touch" philosophy for assets and binary exports.
ConfigFile to mutate .import files and EditorFileSystem.reimport_files() to trigger a batch update on the main thread safely.res:// is clean. Over time, deleted scenes leave behind orphaned textures and sounds that bloat the final build.ResourceLoader.get_dependencies() to recursively trace exactly which assets are linked to your "Main Scene" and flag anything else as slop.--headless --script for versioning tasks (mutating export_presets.cfg) before running the final --export-release.quit() at the end of a headless script, or your CI runner will hang indefinitely.Primary automation scripts — open only when the matching workflow requires them.
.glb/.gltf assets into Godot Scenes.ConcavePolygonShape3D physics from mesh data.owner first)..meshlib resources for GridMaps.export_presets.cfg..cfg config files.Convenience CLI only — not expert pipeline prose. Load when you need that exact process action.
> Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
--headless, --path, -s/--script, --import, and --export-* flags that every builder wrapper invokes.export_presets.cfg before --export-release.OS.has_feature..import + .godot/imported lifecycle; why deleting imported cache forces project-wide revalidation.GLTFDocument/ResourceSaver automation.has_id/set_id/uid:// sync after headless saves (UIDs are not serialized by ResourceSaver headless)..tscn writes; ownership must be set before PackedScene.pack.reimport_files() for batch import enforcement from @tool EditorScripts.project.godot metadata, and VCS ignores must exist before CLI launch/import/export automation.SceneTree workers, typed Resources, and quit() lifecycle patterns used by every -s script.PackedScene, UID paths, and deep-duplicate rules that prevent procedural state-bleed across builder runs.ci_exporter.py orchestration.navmesh_baker.py.tilemap_generator.py.ui_assembler.py should emit instead of absolute Control positions.collision_generator.py.test_runner.py in CI after import/export steps.test_runner calibration loops for balance sims after builder CI smoke passes.get_debug_output.py logs when headless imports/exports fail without a GUI.Take thedivergentai/godot-builder from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.