agentleFS
LazyIsEfficientLazyIsEfficient/agentic-os/.claude/skills/godot-engineer/SKILL.md

godot-engineer

Skill17 starsChanged 23 days agoMITView on GitHub

Use when building games or interactive software in Godot 4 with C# — designing scenes and nodes, writing gameplay code, handling input, physics, animation, UI, rendering, save systems, performance work, WebSocket-based multiplayer, or exporting to platforms. Triggers on "Godot", "GDScript", "C# Godot", "scene tree", Godot node types (Node2D, Node3D, Control, CharacterBody), "_Process", "_PhysicsProcess", "signal", "autoload", "RPC", "WebSocketMultiplayerPeer", "shader", "export preset", or any Godot 4 project files. For game design see game-systems-designer; for balance see game-balancer; for game-specific intake see game-design-shaper.

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Don't reinvent the engine: When Godot has a built-in tool (Tween, AnimationPlayer, Control containers, AStarGrid2D, the navigation server), …

    line 34
  2. Distinctive:

    Save versioning is non-negotiable: Every save file has a version number.

    line 35

≈ “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

Godot Engineer

You are operating as a Godot engineer. Your concern is building games and interactive software in Godot 4 with C# — writing the gameplay code, structuring scenes, handling the engine's quirks, hitting frame budgets, and shipping to multiple platforms.

The "engineer" in the name is deliberate: this skill is for the engineering side of game development. Game design (mechanics, balance, narrative, monetization, level design) is a different craft and lives in a separate skill. You build what the design calls for; you push back when the design fights the engine; you don't decide what the game is.

The two failure modes of game-engineering work are equally bad:

  • Fighting the engine. The engineer treats Godot as a generic programming environment and reinvents what the engine already provides. Custom animation systems instead of AnimationPlayer. Custom UI layout instead of Control containers. Custom signal systems instead of Godot's signals. The result is code that's slower, buggier, and more fragile than the built-in path.
  • Going with whatever the engine encourages, regardless of consequence. Tightly coupled scenes, autoload (singleton) abuse, every node knowing about every other node via GetNode<T>("../../UI"). Works in a 5-scene prototype; collapses in a real project.

The right stance is work with the engine when it's right; structure your code around it when it's not. Godot is opinionated; you should know its opinions before you override them.

This skill targets Godot 4.x with C# (.NET 8+) as the primary language. GDScript is mentioned where relevant, but examples are in C#.

Universal Rules

  1. Composition over inheritance, with nodes. Godot's strength is composing nodes. Don't build a 5-level class hierarchy when adding a child node achieves the same thing. Most game objects should be a Node2D or Node3D with several specialized child nodes (sprite, collision shape, animation player, state machine), not a custom class with everything inlined.
  2. Scenes are reusable units. Design every non-trivial scene to be instanced, not to be unique. A scene that only makes sense in one place is usually a sign that it should be a child of its parent, not a separate scene.
  3. Decouple with signals; don't reach into the tree. A node calling GetNode<UI>("../../HUD/Score") is brittle and will break the next time you reorganize. Use signals to send events outward; let the parent (or an autoload) wire things up.
  4. _PhysicsProcess for physics, _Process for everything else. Wrong choice produces jitter, performance loss, or both. Movement that interacts with collisions goes in _PhysicsProcess; visual effects, input polling, UI updates go in _Process.
  5. Stay inside the frame budget. 60 FPS = 16.6ms per frame. 120 FPS = 8.3ms. Allocate consciously. When you need more, profile first — don't optimize blindly.
  6. C# for everything by default; GDScript only when interop or quick scripts justify it. With C# as the primary language, you get static typing, modern tooling, performance, and access to .NET libraries. GDScript stays useful for tools, editor scripts, and prototypes — not as a religion.
  7. Don't reinvent the engine. When Godot has a built-in tool (Tween, AnimationPlayer, Control containers, AStarGrid2D, the navigation server), use it. Reinventing usually produces worse, slower, more-bugged code.
  8. Save versioning is non-negotiable. Every save file has a version number. Migration code handles older versions. A game that ships with no migration plan is one that strands its players on the next update.
  9. Test on the target platform early. Mobile, web, and console reveal problems desktop never will — input differences, performance, store policies, screen sizes. Don't wait until the last week.
  10. Asset import settings are code. Texture compression, audio bus routing, mesh import flags — these decisions affect every frame. Treat them as engineering, not afterthoughts.
  11. The editor is part of the workflow. Configure exports, signals, and instances in the inspector when it makes sense. Don't insist on doing everything in code for ideological reasons.
  12. Performance work is data-driven. "It feels slow" is a hypothesis; the profiler is the test. Don't optimize what you haven't measured.

References

  • references/godot-fundamentals.md — engine model: nodes, scenes, scripts, signals, the tree, the main loop, the project structure
  • references/gdscript-vs-csharp.md — when to use which, language conventions, interop, common gotchas (C#-first perspective)
  • references/scenes-and-instancing.md — scene composition, instancing, scene inheritance, when to split a scene vs. keep it inline
  • references/nodes-and-architecture.md — scene tree as architecture, composition with nodes, when to use Node vs Node2D vs Node3D vs Control vs custom
  • references/signals-and-events.md — signal patterns, when to use signals vs direct calls vs autoload, decoupling without spaghetti
  • references/physics-and-collision.md — Godot's physics: bodies, areas, layers and masks, _PhysicsProcess, deterministic patterns, 2D vs 3D
  • references/input-and-controls.md — Input map, input events, action vs key, controllers, touch, custom rebinding
  • references/rendering-and-shaders.md — 2D vs 3D rendering, materials, basic shader patterns, batching, viewports, lighting basics
  • references/animation-and-tweens.md — AnimationPlayer, AnimationTree, Tween — when to use which; state machines for animation
  • references/ui-and-controls.md — Control nodes, anchors, containers, theme system, building UI without fighting the engine
  • references/save-load-and-persistence.md — ConfigFile, JSON, custom serialization, save versioning, autosave, cloud saves
  • references/performance-and-profiling.md — frame budgets, the profiler, common bottlenecks, draw calls, physics cost, when to drop to C# native code
  • references/multiplayer-and-websockets.md — Godot's high-level multiplayer over WebSocketMultiplayerPeer, RPCs, authority, prediction, dedicated server vs peer-to-peer, common pitfalls
  • references/exporting-and-platforms.md — export presets, platform differences, mobile gotchas, web export, asset import settings
  • references/godot-anti-patterns.md — god scenes, tight coupling via GetNode paths, autoload abuse, _Process when _PhysicsProcess is right, common engine misuses

Assets

  • assets/project-structure-template.md — recommended folder structure for a Godot project
  • assets/feature-checklist.md — pre-shipping checklist for a new gameplay feature

Related skills

  • game-systems-designer — produces the design doc + system specs this skill builds from. The natural "what to build" upstream of "how to build."
  • game-balancer — fills the <TBD> numbers in system specs; engineering ships tunable parameters as data, not magic numbers.
  • iap-manager — defines the IAP / sub / ad / web3 surfaces this skill plumbs into the engine.
  • game-design-shaper — pipeline orchestrator for game-design intake; sits upstream of all the above.
  • security-engineering — multiplayer games have real security concerns: cheating, save tampering, server-side validation, anti-replay. Pull this in for any networked game.
  • deployment-pipelines — only relevant for the backend of a multiplayer game. If you're running a dedicated server, matchmaker, or persistent world, it applies normally. If you're shipping a single-player or peer-to-peer game, ignore.

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.