Godot Gdscript Patterns
925236118/AlphaAgent
Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization.
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.
$ npx skills add jame581/GodotPrompter --skill ability-system -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jame581/GodotPrompter ability-system --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ability-system .claude/skills/ability-system && rm -rf skills-srcUse ~/.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/
Install the "ability-system" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/ability-system into .claude/skills/ability-system/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ability-system", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jame581/GodotPrompter/tree/master/skills/ability-systemType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jame581/GodotPrompter --skill ability-system -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jame581/GodotPrompter ability-system --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ability-system .agents/skills/ability-system && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ability-system" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/ability-system into .agents/skills/ability-system/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ability-system", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jame581/GodotPrompter --skill ability-system -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jame581/GodotPrompter ability-system --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ability-system .cursor/skills/ability-system && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ability-system" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/ability-system into .cursor/skills/ability-system/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ability-system", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jame581/GodotPrompter.git --path skills/ability-system--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jame581/GodotPrompter --skill ability-system -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jame581/GodotPrompter ability-system --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ability-system .gemini/skills/ability-system && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ability-system" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/ability-system into .gemini/skills/ability-system/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ability-system", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jame581/GodotPrompter ability-systemInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jame581/GodotPrompter --skill ability-system -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ability-system .github/skills/ability-system && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ability-system" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/ability-system into .github/skills/ability-system/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ability-system", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jame581/GodotPrompter --skill ability-system -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jame581/GodotPrompter ability-system --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ability-system .opencode/skills/ability-system && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ability-system" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/ability-system into .opencode/skills/ability-system/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ability-system", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ability-systemBuilds a data-driven ability system in Godot 4 from Resources and a component node, with cooldowns, buffs, stat modifiers, gameplay tags and HUD binding.
Abilities are Resource subclasses with exported fields such as name, cost, cooldown and cast time, plus can_activate and activate methods, so designers can balance them in the editor. An AbilityComponent node on any entity holds the granted set, enforces cost and cooldown, and runs activation, announcing results through four signals: activated, failed, cooldown started and cooldown finished. Abilities are granted at runtime and triggered by name.
Effects sit on top. A StatSet resource owns named StatModifier entries for temporary or permanent stat changes, and a GameplayTagContainer node can block activation, for example with a stunned tag. Reference files cover stat modifiers, tags and conditions, and binding cooldowns and resource bars to the HUD. No third-party addon is needed, and the skill points to sibling skills for resource patterns, components, event buses, state machines and HUDs.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1e7d79d. It shows what the files ask for, not the result of running them.
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.
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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Godot Ability System loads about 3k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 42 tokens; SKILL.md has 460 words of instructions outside code blocks.
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.
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.
The full file from jame581/GodotPrompter at commit 1e7d79d, republished under its MIT licence (© jame581). 460 words, ~3,035 tokens.
.claude/skills/ability-system/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Build a data-driven ability system from Godot-native parts: abilities are Resources, an AbilityComponent node owns and runs them, and effects/stats/tags compose on top. No third-party addon required.
Related skills: resource-pattern for the
Resourcedata containers, component-system for the component node pattern, event-bus for cross-system ability events, state-machine for caster states (e.g. casting/stunned), hud-system for cooldown UI.
An ability system in Godot 4.x is built from three collaborating layers:
Data layer — Ability (Resource): Each ability is a Resource subclass with exported fields (ability_name, cost, cooldown, cast_time) and two methods: can_activate(caster) -> bool to validate preconditions, and activate(caster) -> void to execute the effect. Storing abilities as Resources lets designers create and balance them in the Godot editor without touching code.
Behaviour layer — AbilityComponent (Node): A single node added to any entity that should use abilities. It holds the granted ability set, enforces cost/cooldown, and drives the Ability.activate() call. Four signals keep the rest of the game informed without coupling: ability_activated(ability), ability_failed(ability, reason), cooldown_started(ability, duration), and cooldown_finished(ability). Grant new abilities at runtime with grant(ability) and trigger them with try_activate(ability_name).
Effects layer — stat modifiers, buffs/debuffs, and gameplay tags: Abilities can read from and write to a caster's StatSet (a Resource that owns a dictionary of named StatModifier entries) to apply temporary or permanent stat changes. A GameplayTagContainer node (a child of the caster) gates activation — for example, a "stunned" tag can prevent any ability from firing. These three deep-dives are covered in the reference documents:
Core rule: Data in Resources, behavior in the component, communication via signals.
This separation means an Ability resource carries no Node references and can be safely duplicated, saved, and loaded as any other Godot Resource. The AbilityComponent owns runtime state (cooldown timers, active ability set), keeping Ability resources stateless and reusable across multiple casters simultaneously.
# ability.gd
class_name Ability
extends Resource
@export var ability_name: String
@export var cost: float = 0.0
@export var cooldown: float = 1.0
@export var cast_time: float = 0.0
# Override in subclasses or compose via exported effect resources.
func can_activate(caster: Node) -> bool:
return true
func activate(caster: Node) -> void:
pass# ability_component.gd
class_name AbilityComponent
extends Node
signal ability_activated(ability: Ability)
signal ability_failed(ability: Ability, reason: String)
signal cooldown_started(ability: Ability, duration: float)
signal cooldown_finished(ability: Ability)
@export var resource_pool: float = 100.0
var _granted: Dictionary = {} # ability_name -> Ability
var _cooldowns: Dictionary = {} # ability_name -> seconds remaining
func grant(ability: Ability) -> void:
_granted[ability.ability_name] = ability
func _process(delta: float) -> void:
for name in _cooldowns.keys():
_cooldowns[name] -= delta
if _cooldowns[name] <= 0.0:
_cooldowns.erase(name)
if _granted.has(name):
cooldown_finished.emit(_granted[name])
func try_activate(ability_name: String) -> bool:
var ability: Ability = _granted.get(ability_name)
if ability == null:
return false
if _cooldowns.has(ability_name):
ability_failed.emit(ability, "on_cooldown")
return false
if resource_pool < ability.cost:
ability_failed.emit(ability, "insufficient_resource")
return false
if not ability.can_activate(get_parent()):
ability_failed.emit(ability, "conditions_unmet")
return false
resource_pool -= ability.cost
ability.activate(get_parent())
_cooldowns[ability_name] = ability.cooldown
cooldown_started.emit(ability, ability.cooldown)
ability_activated.emit(ability)
return true// Ability.cs
using Godot;
[GlobalClass]
public partial class Ability : Resource
{
[Export] public string AbilityName { get; set; } = "";
[Export] public float Cost { get; set; } = 0.0f;
[Export] public float Cooldown { get; set; } = 1.0f;
[Export] public float CastTime { get; set; } = 0.0f;
public virtual bool CanActivate(Node caster) => true;
public virtual void Activate(Node caster) { }
}// AbilityComponent.cs
using Godot;
using System.Collections.Generic;
public partial class AbilityComponent : Node
{
[Signal] public delegate void AbilityActivatedEventHandler(Ability ability);
[Signal] public delegate void AbilityFailedEventHandler(Ability ability, string reason);
[Signal] public delegate void CooldownStartedEventHandler(Ability ability, float duration);
[Signal] public delegate void CooldownFinishedEventHandler(Ability ability);
[Export] public float ResourcePool { get; set; } = 100.0f;
private readonly Dictionary<string, Ability> _granted = new();
private readonly Dictionary<string, float> _cooldowns = new();
public void Grant(Ability ability) => _granted[ability.AbilityName] = ability;
public override void _Process(double delta)
{
foreach (var name in new List<string>(_cooldowns.Keys))
{
_cooldowns[name] -= (float)delta;
if (_cooldowns[name] <= 0.0f)
{
_cooldowns.Remove(name);
if (_granted.TryGetValue(name, out var finished))
EmitSignal(SignalName.CooldownFinished, finished);
}
}
}
public bool TryActivate(string abilityName)
{
if (!_granted.TryGetValue(abilityName, out var ability)) return false;
if (_cooldowns.ContainsKey(abilityName))
{
EmitSignal(SignalName.AbilityFailed, ability, "on_cooldown");
return false;
}
if (ResourcePool < ability.Cost)
{
EmitSignal(SignalName.AbilityFailed, ability, "insufficient_resource");
return false;
}
if (!ability.CanActivate(GetParent()))
{
EmitSignal(SignalName.AbilityFailed, ability, "conditions_unmet");
return false;
}
ResourcePool -= ability.Cost;
ability.Activate(GetParent());
_cooldowns[abilityName] = ability.Cooldown;
EmitSignal(SignalName.CooldownStarted, ability, ability.Cooldown);
EmitSignal(SignalName.AbilityActivated, ability);
return true;
}
}Effects are Resource subclasses — designers create them in the editor and abilities apply them. An EffectHolder node owns the runtime: it tracks elapsed time, calls periodic ticks, and removes effects when they expire.
# effect.gd
class_name Effect
extends Resource
@export var effect_name: String
@export var duration: float = 5.0 # seconds; <= 0 means instant
@export var tick_interval: float = 0.0 # 0 = no periodic tick
func on_apply(target: Node) -> void: pass
func on_tick(target: Node) -> void: pass
func on_expire(target: Node) -> void: pass# effect_holder.gd
class_name EffectHolder
extends Node
signal effect_applied(effect: Effect)
signal effect_expired(effect: Effect)
# effect -> [elapsed, tick_accum]
var _active: Dictionary = {}
func apply_effect(effect: Effect) -> void:
effect.on_apply(get_parent())
effect_applied.emit(effect)
if effect.duration <= 0.0:
effect.on_expire(get_parent())
effect_expired.emit(effect)
return
_active[effect] = [0.0, 0.0]
func _process(delta: float) -> void:
var to_remove: Array = []
for effect in _active:
_active[effect][0] += delta
if effect.tick_interval > 0.0:
_active[effect][1] += delta
if _active[effect][1] >= effect.tick_interval:
_active[effect][1] -= effect.tick_interval
effect.on_tick(get_parent())
if effect.duration > 0.0 and _active[effect][0] >= effect.duration:
to_remove.append(effect)
for effect in to_remove:
_active.erase(effect)
effect.on_expire(get_parent())
effect_expired.emit(effect)// Effect.cs
using Godot;
[GlobalClass]
public partial class Effect : Resource
{
[Export] public string EffectName { get; set; } = "";
[Export] public float Duration { get; set; } = 5.0f; // <= 0 = instant
[Export] public float TickInterval { get; set; } = 0.0f; // 0 = no tick
public virtual void OnApply(Node target) { }
public virtual void OnTick(Node target) { }
public virtual void OnExpire(Node target) { }
}// EffectHolder.cs
using Godot;
using System.Collections.Generic;
public partial class EffectHolder : Node
{
[Signal] public delegate void EffectAppliedEventHandler(Effect effect);
[Signal] public delegate void EffectExpiredEventHandler(Effect effect);
private readonly Dictionary<Effect, (float Elapsed, float TickAccum)> _active = new();
public void ApplyEffect(Effect effect)
{
effect.OnApply(GetParent());
EmitSignal(SignalName.EffectApplied, effect);
if (effect.Duration <= 0f)
{
effect.OnExpire(GetParent());
EmitSignal(SignalName.EffectExpired, effect);
return;
}
_active[effect] = (0f, 0f);
}
public override void _Process(double delta)
{
var toRemove = new List<Effect>();
foreach (var effect in new List<Effect>(_active.Keys))
{
var (elapsed, tickAccum) = _active[effect];
elapsed += (float)delta;
if (effect.TickInterval > 0f)
{
tickAccum += (float)delta;
if (tickAccum >= effect.TickInterval)
{
tickAccum -= effect.TickInterval;
effect.OnTick(GetParent());
}
}
if (effect.Duration > 0f && elapsed >= effect.Duration)
toRemove.Add(effect);
else
_active[effect] = (elapsed, tickAccum); // still active — write back updated elapsed and tick accumulator
}
foreach (var effect in toRemove)
{
_active.Remove(effect);
effect.OnExpire(GetParent());
EmitSignal(SignalName.EffectExpired, effect);
}
}
}Footgun: Never iterate
_activedirectly while removing entries. GDScript builds ato_removelist and erases after the loop; C# iteratesnew List<Effect>(_active.Keys)for the same reason.
Resources; behavior lives in AbilityComponent, not in the data.can_activate() before spending resources._process/_Process and emit start/finish 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
SKILL.md and 3 other files (references) in skills/ability-system of jame581/GodotPrompter.
Open the folder on GitHubat commit 1e7d79d
Godot Ability System 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Godot Ability System this skilljame581/GodotPrompter | 795 | — | ~3k | Automated safety check: Pass | MIT | |
| Godot Gdscript Patterns925236118/AlphaAgent | 103 | 10 repos | ~5k | Automated safety check: Pass | MIT | |
| Godot 3D World Buildingthedivergentai/GD-Agentic-Skills | 809 | — | ~3.3k | Automated safety check: Pass | LGPL-3.0 | |
| Godot Compositionthedivergentai/GD-Agentic-Skills | 809 | — | ~3.7k | Automated safety check: Pass | LGPL-3.0 | |
| Input MapperRandallLiuXin/GodotMaker | 549 | 1 repos | ~727 | Automated safety check: Pass | Custom licence | |
| Godot Game Loop Harvestthedivergentai/GD-Agentic-Skills | 809 | — | ~2.6k | Automated safety check: Pass | LGPL-3.0 |
925236118/AlphaAgent
Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization.
thedivergentai/GD-Agentic-Skills
Expert patterns for 3D level design using GridMap with MeshLibrary, CSG constructive solid geometry, occlusion, and runtime GridMap builders.
thedivergentai/GD-Agentic-Skills
Expert architectural standards for building scalable Godot GAMES (RPGs, Platformers, Shooters) using the Composition pattern (Entity-Component).
RandallLiuXin/GodotMaker
Manage Godot input action mappings in project.godot. An agent skill from RandallLiuXin/GodotMaker.
thedivergentai/GD-Agentic-Skills
Data-driven resource harvesting (mining, logging, foraging) for Godot 4: applyhit tool/tier validation via HarvestToolData enums, HarvestResourceData yields, harvestablenode shake/deplete…
thedivergentai/GD-Agentic-Skills
Expert blueprint for platformer games including precision movement (coyote time, jump buffering, variable jump height), game feel polish (squash/stretch, particle trails, camera shake), level design…
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.
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.
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#.
jame581/GodotPrompter
Covers pathfinding and enemy movement in Godot 4.3 and later: navigation regions, NavigationAgent nodes, steering, behavior trees and patrol routes.
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.
jame581/GodotPrompter
Explains how Godot 4.3 and later imports assets: image compression modes, 3D scenes, audio and resource formats, and import settings, with GDScript and C# examples.
Works with
Categories
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. Abilities are Resource subclasses with exported fields such as name, cost, cooldown and cast time, plus can_activate and activate methods, so designers can balance them in the editor. An AbilityComponent node on any entity holds the granted set, enforces cost and cooldown, and runs activation, announcing results through four signals: activated, failed, cooldown started and cooldown finished.
Godot Ability System fits situations like: building spells or skills with cost, cooldown and cast time in a Godot game; adding buffs, debuffs and stat modifiers to characters; gating abilities with gameplay tags such as stunned; showing ability cooldowns on the HUD.
Run `npx skills add jame581/GodotPrompter --skill ability-system -a claude-code`. Or copy the skill folder (skills/ability-system in jame581/GodotPrompter) into .claude/skills/ability-system in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jame581/GodotPrompter --skill ability-system -a codex`. Or copy the skill folder (skills/ability-system in jame581/GodotPrompter) into .agents/skills/ability-system in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jame581/GodotPrompter --skill ability-system -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ability-system, .gemini/skills/ability-system, .github/skills/ability-system and .opencode/skills/ability-system in your project.
SKILL.md names no scripts, command-line tools or credentials: Godot Ability System is instructions for the agent only. Our summary lists: A Godot 4.x project.
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.
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.
Godot Ability System is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
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 11k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Godot Ability System: Godot Gdscript Patterns (925236118/AlphaAgent, 103 stars), Godot 3D World Building (thedivergentai/GD-Agentic-Skills, 809 stars), Godot Composition (thedivergentai/GD-Agentic-Skills, 809 stars) and Input Mapper (RandallLiuXin/GodotMaker, 549 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.