Agent skill

Godot Optimization

by jame581 in jame581/GodotPrompter

A skill your agent uses when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks

MITAuto-check passedGame Development

Install Godot Optimization

skills CLI
$ npx skills add jame581/GodotPrompter --skill godot-optimization -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jame581/GodotPrompter godot-optimization --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/godot-optimization .claude/skills/godot-optimization && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
godot-optimization
GitHub stars
795
Token cost
~3k tokens
SKILL.md length
1,247 words
Files
5 (incl. references)
Skills in repo
58
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks

  • Works in 8 steps: Using the Profiler → Draw Call Optimization → Physics Optimization → …
  • Optimizing Godot games — profiler
  • SKILL.md covers 1. Using the Profiler, 2. Draw Call Optimization, 3. Physics Optimization and 4. GDScript Performance, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Godot Optimization is an agent skill from jame581/GodotPrompter. Use when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/cpu-bottlenecks.md`, `references/draw-calls.md` and `references/memory-management.md`).

It sits in Game Development, covering Game development and Performance optimization. It works with Godot. The repository describes itself as: Agentic skills framework for Godot 4.x. Domain-specific skills for AI coding agents (Claude Code, Copilot, Antigravity, Cursor). The licence is MIT.

When your agent uses it

  • Optimizing Godot games — profiler
  • Memory management
  • Common bottlenecks

Example prompts

  • “/godot-optimization”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Using the Profiler
  2. Draw Call Optimization
  3. Physics Optimization
  4. GDScript Performance
  5. Memory Management
  6. Common Bottlenecks
  7. Top Anti-Patterns
  8. Checklist

What it can do on your machine

Read from SKILL.md and the folder at commit 1e7d79d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are gdscript and csharp).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Godot Optimization loads about 3k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 33 tokens; SKILL.md has 1,247 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~33
When it runs · the whole SKILL.md, loaded when a task matches
~3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~11k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jame581/GodotPrompter at commit 1e7d79d, republished under its MIT licence (© jame581). 1,247 words, ~2,955 tokens.

Download SKILL.mdSave it as .claude/skills/godot-optimization/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
godot-optimization
description
Use when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks

Godot Optimization

This skill covers performance optimization for Godot 4.3+ projects in both GDScript and C#. It covers the built-in profiler, draw call reduction, physics tuning, GDScript performance patterns, memory management, object pooling, and a reference table of common bottlenecks.

Related skills: godot-debugging for systematic debugging and profiling, godot-code-review for performance review checklist, export-pipeline for release build optimization, physics-system for collision shapes, layers, and physics body types, 2d-essentials for 2D mesh optimization, particle performance, and draw order tuning, multithreading for moving work off the main thread, mobile-development for mobile performance budgets.


1. Using the Profiler

Frame Time Budget

At 60 fps, the entire frame (update, physics, rendering) must complete in 16.6 ms. At 30 fps the budget is 33.3 ms. Any single system that consumes the majority of that budget is a bottleneck.

Target FPSFrame budget
1208.3 ms
6016.6 ms
3033.3 ms
Reading Profiler Output

Open Debugger > Profiler, click Start, play through the scenario you want to measure, then click Stop.

  • Frame Time — total wall-clock time for that frame in milliseconds.
  • Self — time spent inside that function excluding callees. This is the primary hotspot indicator. A function with a high Self time is doing expensive work directly.
  • Total — time including all callees. Useful for identifying expensive subtrees.
  • Calls — call count per frame. A function called thousands of times per frame (even if each call is cheap) can dominate the frame.
  • Click any function name to jump to its source in the script editor.
gdscript
# Manual micro-benchmark for a specific block
var start := Time.get_ticks_usec()
_run_expensive_operation()
var elapsed := Time.get_ticks_usec() - start
print("_run_expensive_operation: %d µs" % elapsed)

C#:

csharp
// Manual micro-benchmark using Stopwatch (high-resolution timer)
using System.Diagnostics;

var sw = Stopwatch.StartNew();
RunExpensiveOperation();
sw.Stop();
GD.Print($"RunExpensiveOperation: {sw.Elapsed.TotalMilliseconds:F3} ms");

// Alternative using Godot's built-in timer (microsecond precision)
long start = (long)Time.GetTicksUsec();
RunExpensiveOperation();
long elapsed = (long)Time.GetTicksUsec() - start;
GD.Print($"RunExpensiveOperation: {elapsed} µs");
Monitors Tab

Debugger > Monitors shows real-time engine metrics while the game is running. Click a monitor name to open a live graph. Key monitors to watch:

MonitorWhat to watch for
Time > FPSBelow target — frame budget overrun
Time > ProcessHigh — _process() callbacks are expensive
Time > Physics ProcessHigh — _physics_process() or physics sim is expensive
Render > Total Draw CallsAbove ~500 (mobile) or ~2 000 (desktop) — needs batching
Render > Video RAMSteadily growing — unfreed textures or meshes (memory leak)
Object > Object CountGrowing across scene reloads — nodes are not being freed
Physics 3D > Active BodiesLarge count in simple scenes — bodies not sleeping
gdscript
# Query any monitor at runtime from code
var fps := Performance.get_monitor(Performance.TIME_FPS)
var draw_calls := Performance.get_monitor(Performance.RENDER_TOTAL_DRAW_CALLS_IN_FRAME)
var video_ram := Performance.get_monitor(Performance.RENDER_VIDEO_MEM_USED)
print("FPS: %d | Draw calls: %d | VRAM: %.1f MB" % [fps, draw_calls, video_ram / 1_048_576.0])

C#:

csharp
// Query any monitor at runtime from code
double fps = Performance.GetMonitor(Performance.Monitor.TimeFps);
double drawCalls = Performance.GetMonitor(Performance.Monitor.RenderTotalDrawCallsInFrame);
double videoRam = Performance.GetMonitor(Performance.Monitor.RenderVideoMemUsed);
GD.Print($"FPS: {fps:F0} | Draw calls: {drawCalls:F0} | VRAM: {videoRam / 1_048_576.0:F1} MB");

2. Draw Call Optimization

Every distinct mesh, sprite, or canvas item that cannot be batched with its neighbours costs one draw call. Reducing draw calls is one of the highest-leverage optimisations, especially on mobile — wrap 2D groups sharing a texture in CanvasGroup, keep unique-material count low, atlas sprites, and cull off-screen work.

See references/draw-calls.md for the full recipes (CanvasGroup batching constraints, shared shader-parameter materials, texture atlases, VisibleOnScreenNotifier2D/3D culling, and 3D LOD swapping).


3. Physics Optimization

Physics tuning hinges on minimising broadphase work and avoiding mesh colliders on moving bodies. Trim collision masks to only the layers each body actually needs, replace ConcavePolygonShape3D with primitives on anything that moves, and prefer Area2D/3D over per-frame raycasts for overlap detection.

See references/physics-tuning.md for the full recipes (layer/mask bit examples, collision-shape cost table, Engine.physics_ticks_per_second tuning, Area-vs-raycast patterns).


4. GDScript Performance

Hot-path GDScript wins come from eliminating per-frame allocations, comparing StringName instead of String, using typed arrays / PackedArrays, and preload-ing resources at class scope. The same allocation discipline applies to C# (with List<T> in place of typed Array[T] and static readonly StringName fields).

See references/cpu-bottlenecks.md for the full recipes (cached group queries, reused vector locals, &"..." literals, PackedVector2Array, static typing, preload vs load, plus C# parity blocks).


5. Memory Management

Watch Performance.MEMORY_STATIC and OBJECT_COUNT across scene reloads — steady growth means leaked references. Resources loaded by path are cached and shared; call .duplicate() when you need per-instance mutation. Always prefer queue_free() for nodes; free() inside a self-emitted signal will crash.

See references/memory-management.md for the full recipes (Performance singleton queries, ResourceLoader cache semantics, queue_free vs free table, plus the full GDScript and C# object pool implementations for bullets/effects/particles).


Show full SKILL.md (625 more words)Show less

6. Common Bottlenecks

ProblemDiagnosis toolFix
Too many draw callsDebugger > Monitors Render > Total Draw Calls; Viewport > Debug > Draw Calls overlayUse CanvasGroup for 2D batching; merge meshes for 3D; use texture atlases; reduce unique materials
Heavy GDScript in _processProfiler > Self column shows script functions at topMove logic to _physics_process (runs less often), cache queries, avoid per-frame allocations, consider C# for tight loops
Excessive signal connectionsProfiler shows signal dispatch overhead; manually audit get_signal_connection_list()Remove redundant connections; prefer polling over per-frame signals for high-frequency data; use CONNECT_ONE_SHOT for fire-and-forget
Unoptimised TileMapProfiler shows TileMap._process or high draw call countSplit into fewer layers; use a single atlas texture per layer; disable use_parent_material if not needed; use TileMapLayer (Godot 4.3+) instead of legacy TileMap
Large uncompressed texturesMonitors Render > Video RAM is high; check Import dock for texture settingsEnable texture compression (VRAM Compressed) in the Import dock; use mipmaps; halve resolution of assets not viewed up-close
Too many active physics bodiesMonitors Physics 3D > Active Bodies is high; slow _physics_process in ProfilerEnable sleeping on RigidBody3D (can_sleep = true); lower physics tick rate; replace distant bodies with fake animations; use layers/masks to narrow collision checks
String operations in hot pathsProfiler shows String allocation functions; high GC pressureReplace String comparisons with StringName (&"..."); avoid String formatting in _process; build strings once and cache
instantiate() in hot pathsProfiler shows PackedScene.instantiate with high Self timeImplement object pooling (see references/memory-management.md); preload scenes at startup; spawn during loading screens rather than during gameplay

7. Top Anti-Patterns

  • Allocating in _process — new Arrays, Dictionaries, Strings, or Vector constructors per frame. Cache the container, mutate fields in place. See references/cpu-bottlenecks.md.
  • Mesh colliders on moving bodies — ConcavePolygonShape3D on a CharacterBody3D or RigidBody3D. Use a capsule, box, or convex hull instead. See references/physics-tuning.md.
  • Unique materials per instance — material_override = SomeMaterial.new() in _ready() breaks batching. Share one material; vary via shader parameters. See references/draw-calls.md.
  • load() in hot paths — calling load("res://...") from _process or _physics_process. Use const X := preload(...) at class scope. See references/cpu-bottlenecks.md.
  • instantiate() + queue_free() for short-lived objects — bullets, hit effects, particles. Pool them. See references/memory-management.md.

8. Checklist

Work through this list before shipping or when investigating a performance complaint.

Profiler

  • Run the Profiler during the most demanding gameplay scenario.
  • Confirm no single function's Self time exceeds 30% of the frame budget.
  • Confirm total frame time stays under budget (16.6 ms at 60 fps).

Draw Calls

  • Draw call count is within target (≤500 mobile, ≤2 000 desktop).
  • 2D sprite groups that share a texture are wrapped in CanvasGroup.
  • Textures are atlas-packed where possible; duplicate materials are eliminated.
  • Off-screen nodes use VisibleOnScreenNotifier2D/3D to pause processing.
  • 3D meshes have LOD enabled via import settings or manual swap logic.

Physics

  • Collision layers and masks are minimal — no body checks layers it never needs.
  • No moving body uses ConcavePolygonShape — replaced with capsule, box, or convex.
  • Physics tick rate is appropriate for the game type (30 Hz may be fine for turn-based or top-down).
  • Area2D/3D is used for overlap detection instead of per-frame raycasts.
  • RigidBody3D nodes have can_sleep = true where applicable.

GDScript

  • No Array, Dictionary, or String is allocated inside _process or _physics_process.
  • All hot-path string comparisons use StringName (&"...").
  • All arrays in hot paths are typed (Array[T] or PackedArray).
  • All function parameters and return types in hot paths are statically typed.
  • All scene and resource references use preload at class scope, not load per frame.

Memory

  • Performance.get_monitor(Performance.MEMORY_STATIC) is stable between scene reloads.
  • Resources that require per-instance mutation are .duplicate()d.
  • All node removals use queue_free() unless synchronous teardown is explicitly required.

Object Pooling

  • Bullets, hit effects, particles, and other frequently spawned objects use a pool.
  • Pool initial size is large enough to avoid runtime growth during normal gameplay.
  • Pooled objects reset all state on reactivation (position, velocity, signals).

© jame581, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (references) in skills/godot-optimization of jame581/GodotPrompter.

  • SKILL.md
  • references/cpu-bottlenecks.md
  • references/draw-calls.md
  • references/memory-management.md
  • references/physics-tuning.md

Open the folder on GitHubat commit 1e7d79d

Compare with similar skills

Godot Optimization next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Godot Optimization compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Godot Optimization this skilljame581/GodotPrompter795—~3kAutomated safety check: PassMIT
Godot Adapt 3D To 2Dthedivergentai/GD-Agentic-Skills809—~4.5kAutomated safety check: PassLGPL-3.0
Godot Adapt Desktop To Mobilethedivergentai/GD-Agentic-Skills809—~3.1kAutomated safety check: PassLGPL-3.0
Godot Genre Battle Royalethedivergentai/GD-Agentic-Skills809—~3.9kAutomated safety check: PassLGPL-3.0
Godot Performance Optimizationthedivergentai/GD-Agentic-Skills809—~3kAutomated safety check: PassLGPL-3.0
Godot Debugging Profilingthedivergentai/GD-Agentic-Skills809—~3.3kAutomated safety check: PassLGPL-3.0

Similar skills

  • Godot Adapt 3D To 2D

    thedivergentai/GD-Agentic-Skills

    Expert patterns for simplifying 3D games to 2D including dimension reduction strategies, 2.5D fake-depth, isometric ports, camera flattening, physics conversion, 3D-to-sprite art pipeline, and…

    809 GitHub stars~4.5k tokensUpdated 29 days ago
    Game DevelopmentAuto-check passed
  • Godot Adapt Desktop To Mobile

    thedivergentai/GD-Agentic-Skills

    Expert patterns for porting desktop games to mobile including touch control schemes (virtual joystick, gesture detection), UI scaling for small screens, performance optimization for mobile GPUs…

    809 GitHub stars~3.1k tokensUpdated 29 days ago
    Game DevelopmentAuto-check passed
  • Godot Genre Battle Royale

    thedivergentai/GD-Agentic-Skills

    Expert blueprint for Battle Royale games including shrinking zone/storm mechanics (phase-based, damage scaling), large-scale networking (relevancy, tick rate optimization), deployment systems…

    809 GitHub stars~3.9k tokensUpdated 29 days ago
    Game DevelopmentAuto-check passed
  • Godot Performance Optimization

    thedivergentai/GD-Agentic-Skills

    Expert blueprint for performance profiling and optimization (frame drops, memory leaks, draw calls) using Godot Profiler, object pooling, visibility culling, and bottleneck identification.

    809 GitHub stars~3k tokensUpdated 29 days ago
    Game DevelopmentAuto-check passed
  • Godot Debugging Profiling

    thedivergentai/GD-Agentic-Skills

    Expert debugging and profiling for leaks, GPU/Visual Profiler, headless CI QA, orphan nodes, thread-safe logs, and custom Debugger monitors — not print/breakpoint tutorials.

    809 GitHub stars~3.3k tokensUpdated 29 days ago
    DevelopmentAuto-check passed
  • Godot Testing Patterns

    thedivergentai/GD-Agentic-Skills

    Expert testing decision trees for GdUnit4: unit vs scene vs CI gates, headless runners, snapshots, and mock networks.

    809 GitHub stars~2.9k tokensUpdated 29 days ago
    Testing & QAAuto-check passed

More from jame581/GodotPrompter

All 58 skills in this repo
  • Godot 2D Essentials

    jame581/GodotPrompter

    Covers Godot 4.3+ 2D systems with GDScript and C# examples: canvas layers, draw order, TileMaps, parallax, lights and shadows, particles and custom drawing.

    795 GitHub stars~2.3k tokensUpdated 2 days ago
    Auto-check passed
  • Godot 3D Essentials

    jame581/GodotPrompter

    Covers Godot 4.3+ 3D systems such as materials, lighting, shadows, environment, global illumination, fog, LOD, occlusion culling and decals, with GDScript first and C# second.

    795 GitHub stars~3.7k tokensUpdated 2 days ago
    Auto-check passed
  • Godot Ability System

    jame581/GodotPrompter

    Builds a data-driven ability system in Godot 4 from Resources and a component node, with cooldowns, buffs, stat modifiers, gameplay tags and HUD binding.

    795 GitHub stars~3k tokensUpdated 2 days ago
    Auto-check passed
  • Godot Addon Development

    jame581/GodotPrompter

    Covers Godot 4.3+ editor plugins: plugin folders, @tool scripts, the EditorPlugin lifecycle, custom inspectors, dock panels and gizmos, in GDScript and C#.

    795 GitHub stars~3.3k tokensUpdated 2 days ago
    Auto-check passed
  • Godot AI Navigation

    jame581/GodotPrompter

    Covers pathfinding and enemy movement in Godot 4.3 and later: navigation regions, NavigationAgent nodes, steering, behavior trees and patrol routes.

    795 GitHub stars~3.5k tokensUpdated 2 days ago
    Auto-check passed
  • Godot Animation System

    jame581/GodotPrompter

    Covers animation in Godot 4.3 and later: AnimationPlayer basics, AnimationTree blend trees and state machines, sprite animation, skeleton IK and code-driven motion.

    795 GitHub stars~3.8k tokensUpdated 2 days ago
    Auto-check passed

Works with

Questions about Godot Optimization

What does Godot Optimization do?

A skill your agent uses when optimizing Godot games — profiler, draw calls, physics tuning, memory management, and common bottlenecks. Godot Optimization is an agent skill from jame581/GodotPrompter.

When should I use Godot Optimization?

Godot Optimization fits situations like: optimizing Godot games — profiler; memory management; common bottlenecks.

How do I install Godot Optimization in Claude Code?

Run `npx skills add jame581/GodotPrompter --skill godot-optimization -a claude-code`. Or copy the skill folder (skills/godot-optimization in jame581/GodotPrompter) into .claude/skills/godot-optimization in your project. Claude Code loads it when a task matches its description.

How do I install Godot Optimization in Codex?

Run `npx skills add jame581/GodotPrompter --skill godot-optimization -a codex`. Or copy the skill folder (skills/godot-optimization in jame581/GodotPrompter) into .agents/skills/godot-optimization in your project. Codex loads it when a task matches its description.

Can I use Godot Optimization in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jame581/GodotPrompter --skill godot-optimization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/godot-optimization, .gemini/skills/godot-optimization, .github/skills/godot-optimization and .opencode/skills/godot-optimization in your project.

What does Godot Optimization need to run?

SKILL.md names no scripts, command-line tools or credentials: Godot Optimization is instructions for the agent only.

Does Godot Optimization access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Godot Optimization safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Godot Optimization use?

Godot Optimization is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Godot Optimization use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.9k tokens, read only when the agent opens those files.

What are the alternatives to Godot Optimization?

Skills that share tags, products or a category with Godot Optimization: Godot Adapt 3D To 2D (thedivergentai/GD-Agentic-Skills, 809 stars), Godot Adapt Desktop To Mobile (thedivergentai/GD-Agentic-Skills, 809 stars), Godot Genre Battle Royale (thedivergentai/GD-Agentic-Skills, 809 stars) and Godot Performance Optimization (thedivergentai/GD-Agentic-Skills, 809 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Godot Optimization?

jame581 (a GitHub user) maintains it in jame581/GodotPrompter, which has 795 GitHub stars. The repository holds 58 skills in this directory. The repository was last updated on October 6, 2026.

Source: jame581/GodotPrompter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.