Agent skill

Gdscript Advanced

by jame581 in jame581/GodotPrompter

A skill your agent uses when writing production-grade GDScript — performance idioms, metaprogramming, @tool lifecycle, async pitfalls, signal/Callable trade-offs, profiler-driven idioms, and common…

MITAuto-check passedGame Development

Install Gdscript Advanced

skills CLI
$ npx skills add jame581/GodotPrompter --skill gdscript-advanced -a claude-code

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

GitHub CLI
$ gh skill install jame581/GodotPrompter gdscript-advanced --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/gdscript-advanced .claude/skills/gdscript-advanced && 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
gdscript-advanced
GitHub stars
792
Token cost
~3.4k tokens
SKILL.md length
1,309 words
Files
4 (incl. references)
Skills in repo
58
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when writing production-grade GDScript — performance idioms, metaprogramming, @tool lifecycle, async pitfalls, signal/Callable trade-offs, profiler-driven idioms, and common…

  • Works in 8 steps: When to reach for advanced GDScript → Performance idioms → Metaprogramming → …
  • Writing production-grade GDScript — performance idioms
  • SKILL.md covers 1. When to reach for advanced…, 2. Performance idioms, 3. Metaprogramming and 4. @tool lifecycle, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Gdscript Advanced is an agent skill from jame581/GodotPrompter. Use when writing production-grade GDScript — performance idioms, metaprogramming, @tool lifecycle, async pitfalls, signal/Callable trade-offs, profiler-driven idioms, and common pitfalls

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/metaprogramming-recipes.md`, `references/profiler-recipes.md` and `references/tool-script-recipes.md`).

It sits in Game Development, covering Performance optimization and Game development. It works with Godot and C#. 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

  • Writing production-grade GDScript — performance idioms
  • Metaprogramming
  • @tool lifecycle
  • Signal/Callable trade-offs

Example prompts

  • “/gdscript-advanced”

Workflow steps

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

  1. When to reach for advanced GDScript
  2. Performance idioms
  3. Metaprogramming
  4. @tool lifecycle
  5. Async pitfalls
  6. Signal vs Callable design choices
  7. Profiler-driven idioms
  8. Common pitfalls

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).

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

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.godotengine.org

    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

Gdscript Advanced loads about 3.4k tokens when it runs, and up to ~5.1k if it reads all its reference files. Until then it costs about 51 tokens; SKILL.md has 1,309 words of instructions outside code blocks.

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

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,309 words, ~3,408 tokens.

Download SKILL.mdSave it as .claude/skills/gdscript-advanced/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
gdscript-advanced
description
Use when writing production-grade GDScript — performance idioms, metaprogramming, @tool lifecycle, async pitfalls, signal/Callable trade-offs, profiler-driven idioms, and common pitfalls

GDScript Advanced

Production-grade GDScript depth — for shipping games, not for learning the language. Pair with gdscript-patterns for fundamentals.

Related skills: gdscript-patterns for language fundamentals, godot-optimization for engine-side perf work, godot-debugging for runtime diagnosis, csharp-godot for the C# alternative.

Intent: This skill is GDScript-only by design (allowlisted). C# users should read csharp-godot. Adding C# parity here would undermine the audience split.

1. When to reach for advanced GDScript

You're past gdscript-patterns when:

  • You're hitting a profiler bottleneck and need to know which idioms are fast
  • You're writing editor tools and need @tool lifecycle correctness
  • You're seeing coroutines that never resume or Callable lifetime bugs
  • You need metaprogramming (calling functions by name, dynamic dispatch) without footguns
  • You're shipping a real game and want to avoid the patterns that look fine but break under load

This skill assumes you already know typed parameters, @onready, await, match, and lambdas (covered in gdscript-patterns).

2. Performance idioms

Static vars and methods (Godot 4.4+) avoid per-instance overhead:

gdscript
class_name Tally extends Node

static var _global_score: int = 0

static func add_score(amount: int) -> void:
    _global_score += amount

static func get_score() -> int:
    return _global_score

Avoid singletons-as-autoloads when a static method on a class would do.

Vector2i vs Vector2 / Vector3i vs Vector3 — integer vectors are 30-40% faster on hot paths (tile coords, grid math). Convert to float only at the rendering boundary:

gdscript
var grid_pos: Vector2i = Vector2i(8, 12)              # cheap
var world_pos: Vector2 = Vector2(grid_pos) * TILE_SIZE  # convert at boundary

PackedArray* over generic Array — PackedInt32Array, PackedFloat32Array, PackedVector2Array, etc. allocate contiguous memory and skip Variant boxing. Use them for buffers, vertex arrays, hot-loop accumulators.

gdscript
var positions: PackedVector3Array = PackedVector3Array()
positions.resize(1000)  # one allocation
for i in 1000:
    positions[i] = Vector3(i, 0, 0)

Typed Dictionary access — typed dicts (Godot 4.4+) skip the Variant unbox per read:

gdscript
var stats: Dictionary[String, int] = {}
stats["hp"] = 100  # no boxing

is_instance_valid vs null check — is_instance_valid() does an engine-side lookup; != null is a pointer compare. Prefer != null after @onready assignment; reserve is_instance_valid() for nodes that may be queue_free'd while a reference is held.

Common pitfall: _process doing if is_instance_valid(target) once per frame burns ~1µs per call — tiny per-call but multiplies fast.

3. Metaprogramming

Callable.bind, Callable.call, Callable.call_deferred give you dynamic dispatch without Object.call(name) security risks.

Binding arguments:

gdscript
var greeter: Callable = print_named.bind("Player")
greeter.call()                    # prints "Hello, Player"

func print_named(name: String) -> void:
    print("Hello, %s" % name)

Deferred calls — run on the next frame's idle phase, useful for cross-thread or signal-storm safety:

gdscript
heavy_recompute.call_deferred()

Object.set / Object.get / Object.has_method — for truly dynamic code (script reloading, modding):

gdscript
if obj.has_method("on_damaged"):
    obj.call("on_damaged", 25)

Security gotcha: Never pass obj.call(user_string, ...) where user_string comes from save files, network, or mod content without an allowlist. call("queue_free") is a free crash. Match against a known set:

gdscript
const ALLOWED_RPCS: PackedStringArray = ["take_damage", "apply_buff", "set_position"]
if user_method in ALLOWED_RPCS and obj.has_method(user_method):
    obj.call(user_method, args)

See references/metaprogramming-recipes.md for full Callable patterns and the modding security model.

4. @tool lifecycle

@tool scripts run in the editor as well as in-game. Two failure modes dominate:

  1. Editor-only logic accidentally runs at play time
  2. In-game logic accidentally runs in the editor and crashes the editor

The guard:

gdscript
@tool
extends Node

func _ready() -> void:
    if Engine.is_editor_hint():
        _setup_editor_preview()
    else:
        _setup_game_runtime()

Editor notifications — use _notification for editor lifecycle events (NOTIFICATION_EDITOR_PRE_SAVE, NOTIFICATION_EDITOR_POST_SAVE, NOTIFICATION_PARENTED):

gdscript
func _notification(what: int) -> void:
    if what == NOTIFICATION_EDITOR_PRE_SAVE:
        _bake_preview()

Common pitfall: a @tool script that calls get_tree().create_timer() at editor time. Editor has no main loop in some contexts — guard with is_editor_hint().

See references/tool-script-recipes.md for full @tool patterns including editor preview, baking, and procedural mesh generation.

5. Async pitfalls

await suspends the function and hands control back to its caller until the signal fires. It has three trap shapes:

Trap 1 — await in _ready returns early, so the node reports ready before it is initialized:

gdscript
# BAD: the first await returns control, so `ready` is emitted and the parent's
# _ready() runs while `inventory` is still empty
func _ready() -> void:
    await get_tree().create_timer(1.0).timeout
    inventory = load_inventory()

Fix: finish everything other nodes read at ready time before the first await. If part of setup genuinely has to wait, set an is_initialized flag and emit an initialized signal when it completes. Dependents check the flag before awaiting, because awaiting a signal that already fired never resumes (Trap 2).

Trap 2 — Awaiting a signal that never fires suspends the coroutine forever:

gdscript
# BAD if `health_changed` never fires (e.g., entity already at full HP)
await health.health_changed

Fix: check the precondition before awaiting. When you do need to wait, race the signal against a timeout. Released Godot has no Signal.any() and no other built-in way to await several signals at once (godot-proposals#13597 proposes global any()/all()), so funnel both signals into one you own:

gdscript
signal _health_wait_finished(changed: bool)

func wait_for_health_change(timeout_sec: float) -> bool:
    var timer := get_tree().create_timer(timeout_sec)
    var on_changed := func(_hp: int) -> void: _health_wait_finished.emit(true)
    var on_timeout := func() -> void: _health_wait_finished.emit(false)
    health.health_changed.connect(on_changed)
    timer.timeout.connect(on_timeout)
    var changed: bool = await _health_wait_finished
    if is_instance_valid(health):  # freed while we waited (see Trap 3)
        health.health_changed.disconnect(on_changed)
    timer.timeout.disconnect(on_timeout)  # or a stale timer ends the next wait early
    return changed

The lambdas emit a signal rather than set a local flag: GDScript lambdas capture locals by value, so changed = true inside one never reaches the outer variable. Every awaiter of _health_wait_finished resumes on the first emit, so run one wait at a time per node.

Trap 3 — Objects freed during the wait. If the node running the coroutine is freed, the coroutine is dropped silently — no error, and nothing after the await (cleanup, a finished emit) ever runs. If the node survives but something it references is freed, touching that reference after resuming errors with "previously freed". Re-validate after every await:

gdscript
func flash(target: Node2D) -> void:
    target.modulate = Color.RED
    await get_tree().create_timer(0.2).timeout
    if not is_instance_valid(target):  # freed while we waited
        return
    target.modulate = Color.WHITE

6. Signal vs Callable design choices

Signal — many-to-many, decoupled, edge-triggered. Slight per-emit overhead from the connection list lookup.

Callable — one-to-one, explicit, level-triggered. Cheaper per call but tighter coupling.

Use signals for:

  • Cross-system events (player_died, item_collected, level_complete)
  • UI updates from gameplay
  • Anything where 0 to N listeners is normal

Use callables for:

  • Strategy injection (sort comparators, predicate functions)
  • Deferred work scheduling (call_deferred)
  • Tween methods (tween_method takes a Callable)

Common pitfall: connecting a lambda to a signal stores the lambda's captured environment forever. If the captured object is freed, you get warnings. Disconnect explicitly in _exit_tree or use bound methods instead.

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

7. Profiler-driven idioms

Open the Debugger → Profiler panel. The patterns that show up most often:

Profiler hot spotLikely causeFix
String allocation in _processprint() / "%s" % var per framePre-format outside the loop, or batch logs with a circular buffer
Object.get_node showing high self-timeRepeated $Path/Sub/Node per frameCache in @onready var
Signal.emit showing high call countPer-frame signal storms (e.g., position update)Throttle to 10 Hz, or use a polling pattern
CharacterBody.move_and_slide self-timeMany character bodies on one frameScale by distance from camera; use Area for cheap detection
GDScript GC spikesAllocator churn from temp Arrays/StringsPool the arrays; pre-allocate at startup

See references/profiler-recipes.md for before/after annotated examples for each row.

8. Common pitfalls

Lambdas capture locals by value — once, when the lambda is created. Loop lambdas therefore each keep their own i, and no bind is needed. The trap runs the other way: assigning a captured local changes only the lambda's copy, which starts from the captured value again on the next call:

gdscript
var count := 0
var bump := func() -> int:
    count += 1  # CONFUSABLE_CAPTURE_REASSIGNMENT warning
    return count
bump.call()  # 1
bump.call()  # 1 again, and `count` out here is still 0

Fix: keep shared state in a member variable or a reference type — an Array, Dictionary or object is captured as the same instance:

gdscript
var state := {"count": 0}
var bump := func() -> int:
    state.count += 1
    return state.count  # 1, then 2

@onready ordering — @onready vars are set after _init but before _ready. Children's _ready runs before parent's _ready. So:

  • Don't reference parent state in a child's _ready unless you're sure the parent is initialized
  • For cross-node setup, prefer the parent calling child.setup_with(self) from its own _ready

Static var lifecycle across scene reload — static vars on a class persist for the lifetime of the engine, not the scene. Reloading a scene does NOT reset them. If you need a per-scene singleton, use an autoload, not a static var.

Resource sharing surprises — @export var item: ItemData with the same Resource asset in two scenes shares state by reference. Mutating one mutates the other. Use item.duplicate() when each instance needs its own state.

Packed-array property setters skip element writes

⚠️ Changed in Godot 4.7: Setting an element of a packed-array property (e.g. obj.packed_prop[i] = x) no longer calls the setter for the entire packed array property. Code that relied on the setter firing for per-element writes silently breaks — reassign the whole array to trigger the setter. See the 4.7 migration guide.

gdscript
var points: PackedVector2Array:
    set(value):
        points = value
        _rebuild_mesh()

func move_point() -> void:
    points[0] = Vector2.ONE    # 4.6: setter (and _rebuild_mesh) ran; 4.7+: it does NOT
    var updated := points      # fix: modify a copy...
    updated[0] = Vector2.ONE
    points = updated           # ...then reassign — the setter fires

Godot 4.7+: the new CONFUSABLE_TEMPORARY_MODIFICATION warning flags modifying a temporary (discarded) value — e.g. a built-in Packed*Array property changed through a complex assignment chain or a non-const method call, where only a temporary copy changes and the property keeps its old value. Controlled by debug/gdscript/warnings/confusable_temporary_modification (default 1, warn).

Implementation Checklist

  • Identify which performance idiom applies (typed vectors, PackedArray, static methods)
  • If using metaprogramming, allowlist all dynamic method names
  • If @tool, guard editor vs runtime branches with Engine.is_editor_hint()
  • Audit await calls for signals that may never fire, _ready returning before setup finishes, and references freed during the wait
  • Pick signal vs Callable per the trade-off table; disconnect lambdas in _exit_tree
  • Profile before optimizing; match the hot-spot to the table in section 7
  • Audit lambdas that assign captured locals (the change never escapes the lambda), @onready ordering, static var lifecycle, Resource sharing, and packed-array property setters (Godot 4.7) for the listed pitfalls

© 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 3 other files (references) in skills/gdscript-advanced of jame581/GodotPrompter.

  • SKILL.md
  • references/metaprogramming-recipes.md
  • references/profiler-recipes.md
  • references/tool-script-recipes.md

Open the folder on GitHubat commit 1e7d79d

Compare with similar skills

Gdscript Advanced 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.

Gdscript Advanced compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Gdscript Advanced this skilljame581/GodotPrompter792—~3.4kAutomated safety check: PassMIT
Godot Performance Optimizationthedivergentai/GD-Agentic-Skills803—~3kAutomated safety check: PassLGPL-3.0
Release Managerpoingstudios/godot-admob-plugin631—~357Automated safety check: PassMIT
Godot Admob App Openpoingstudios/godot-admob-plugin631—~1kAutomated safety check: PassMIT
Godot Admob Bannerpoingstudios/godot-admob-plugin631—~718Automated safety check: PassMIT
Godot Admob Get Startedpoingstudios/godot-admob-plugin631—~1kAutomated safety check: PassMIT

Similar skills

  • 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.

    803 GitHub stars~3k tokensUpdated 28 days ago
    Game DevelopmentAuto-check passed
  • Release Manager

    poingstudios/godot-admob-plugin

    Manage and execute AdMob plugin releases. An agent skill from poingstudios/godot-admob-plugin.

    631 GitHub stars~357 tokensUpdated 6 days ago
    Game DevelopmentAuto-check passed
  • Godot Admob App Open

    poingstudios/godot-admob-plugin

    Provides instructions to implement, load, show, and destroy App Open ads (shown on application startup or app resume) in GDScript and C.

    631 GitHub stars~1k tokensUpdated 6 days ago
    Game DevelopmentAuto-check passed
  • Godot Admob Banner

    poingstudios/godot-admob-plugin

    Provides instructions to implement, load, and destroy banner ads (AdView) using custom or adaptive sizes in GDScript and C.

    631 GitHub stars~718 tokensUpdated 6 days ago
    Game DevelopmentAuto-check passed
  • Godot Admob Get Started

    poingstudios/godot-admob-plugin

    Provides instructions to initialize the Godot AdMob SDK and configure user consent (UMP Flow) in GDScript and C.

    631 GitHub stars~1k tokensUpdated 6 days ago
    Game DevelopmentAuto-check passed
  • 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…

    803 GitHub stars~4.5k tokensUpdated 28 days ago
    Game DevelopmentAuto-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.

    792 GitHub stars~2.3k tokensUpdated yesterday
    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.

    792 GitHub stars~3.7k tokensUpdated yesterday
    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.

    792 GitHub stars~3k tokensUpdated yesterday
    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#.

    792 GitHub stars~3.3k tokensUpdated yesterday
    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.

    792 GitHub stars~3.5k tokensUpdated yesterday
    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.

    792 GitHub stars~3.8k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Gdscript Advanced

What does Gdscript Advanced do?

A skill your agent uses when writing production-grade GDScript — performance idioms, metaprogramming, @tool lifecycle, async pitfalls, signal/Callable trade-offs, profiler-driven idioms, and common…. Gdscript Advanced is an agent skill from jame581/GodotPrompter.

When should I use Gdscript Advanced?

Gdscript Advanced fits situations like: writing production-grade GDScript — performance idioms; metaprogramming; @tool lifecycle; signal/Callable trade-offs.

How do I install Gdscript Advanced in Claude Code?

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

How do I install Gdscript Advanced in Codex?

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

Can I use Gdscript Advanced 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 gdscript-advanced -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gdscript-advanced, .gemini/skills/gdscript-advanced, .github/skills/gdscript-advanced and .opencode/skills/gdscript-advanced in your project.

What does Gdscript Advanced need to run?

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

Does Gdscript Advanced access the network?

SKILL.md names 1 domain. As links in the text: docs.godotengine.org. This is read from the text; nothing was executed.

Is Gdscript Advanced 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 Gdscript Advanced use?

Gdscript Advanced 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 Gdscript Advanced use?

About 3.4k tokens (SKILL.md is roughly 14k 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 1.7k tokens, read only when the agent opens those files.

What are the alternatives to Gdscript Advanced?

Skills that share tags, products or a category with Gdscript Advanced: Godot Performance Optimization (thedivergentai/GD-Agentic-Skills, 803 stars), Release Manager (poingstudios/godot-admob-plugin, 631 stars), Godot Admob App Open (poingstudios/godot-admob-plugin, 631 stars) and Godot Admob Banner (poingstudios/godot-admob-plugin, 631 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Gdscript Advanced?

jame581 (a GitHub user) maintains it in jame581/GodotPrompter, which has 792 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.