Headless Build
RandallLiuXin/GodotMaker
Compile-check a Godot project using headless mode. An agent skill from RandallLiuXin/GodotMaker.
A skill your agent uses when using the Beehave addon — pure-GDScript behavior trees with composites, decorators, leaves, a blackboard, and a visual runtime debugger
$ npx skills add jame581/GodotPrompter --skill beehave -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jame581/GodotPrompter beehave --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/beehave .claude/skills/beehave && 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 "beehave" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/beehave into .claude/skills/beehave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beehave", 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/beehaveType 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 beehave -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jame581/GodotPrompter beehave --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/beehave .agents/skills/beehave && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "beehave" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/beehave into .agents/skills/beehave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beehave", 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 beehave -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jame581/GodotPrompter beehave --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/beehave .cursor/skills/beehave && 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 "beehave" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/beehave into .cursor/skills/beehave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beehave", 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/beehave--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 beehave -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jame581/GodotPrompter beehave --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/beehave .gemini/skills/beehave && 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 "beehave" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/beehave into .gemini/skills/beehave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beehave", 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 beehaveInstalls 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 beehave -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/beehave .github/skills/beehave && 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 "beehave" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/beehave into .github/skills/beehave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beehave", 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 beehave -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 beehave --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/beehave .opencode/skills/beehave && 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 "beehave" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/beehave into .opencode/skills/beehave/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "beehave", 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.
beehaveA skill your agent uses when using the Beehave addon — pure-GDScript behavior trees with composites, decorators, leaves, a blackboard, and a visual runtime debugger
Beehave is an agent skill from jame581/GodotPrompter. Use when using the Beehave addon — pure-GDScript behavior trees with composites, decorators, leaves, a blackboard, and a visual runtime debugger
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/custom-nodes.md`).
It sits in Game Development, covering Game development. It works with Godot, C# 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.
6 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).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comFrom 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.
Beehave loads about 2.8k tokens when it runs, and up to ~4.2k if it reads all its reference files. Until then it costs about 38 tokens; SKILL.md has 929 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). 929 words, ~2,767 tokens.
.claude/skills/beehave/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Related skills: ai-navigation for the movement leaves drive, state-machine for core-engine FSM, limboai for a heavier C++ BT+HSM alternative, godot-brainstorming for choosing an AI approach.
Addon: Beehave · version
v2.9.2· Godot 4.1+ · MIT · source: https://github.com/bitbrain/beehave · written in GDScript (no official C# API — this skill is GDScript-only by design).
| Approach | Best for |
|---|---|
Core-engine FSM (state-machine skill) | Simple agents, < 5 states, no addon |
| Beehave (GDScript addon) | Lightweight BT, GDScript-only projects, fast iteration |
| LimboAI | BT and HSM together, visual editor, C++ performance, C# support (module build) |
Choose Beehave when your project is GDScript-only, you want a behavior tree without a custom engine build, and you value a simple node-in-scene-tree authoring workflow. Beehave trees live entirely in the scene tree — every composite, decorator, and leaf is a regular Node child. For a heavier C++/C# solution with HSM integration, use the limboai skill instead. For plain state machines without a BT, use the built-in state-machine skill.
C# note: Beehave has no official C# API (zero .cs files in addons/beehave/). From C# you can call the GDScript API via Godot cross-language interop (GetNode<Node>(...).Call("tick", actor, blackboard)), but Beehave provides no typed C# classes.
addons/beehave/ folder from the GitHub release into res://addons/beehave/.BeehaveGlobalMetrics and BeehaveGlobalDebugger.script_templates/ from the addon into the project root for leaf scaffolding templates.A Beehave tree is built from three kinds of nodes, all placed as regular scene-tree children:
| Role | Node | Behavior |
|---|---|---|
| Tree root | BeehaveTree | Ticks the child every frame (or physics/manual); extends Node (not BeehaveNode) |
| Composites | SequenceComposite, SelectorComposite, SimpleParallelComposite, … | Flow control — AND / OR / parallel logic |
| Decorators | InverterDecorator, CooldownDecorator, RepeaterDecorator, … | Wrap one child to modify its result |
| Leaves | ActionLeaf, ConditionLeaf subclasses | Your custom game logic |
| Class | Logic |
|---|---|
SequenceComposite | AND — all children must succeed; fails on first failure |
SequenceReactiveComposite | AND — re-evaluates from first child every tick while running |
SelectorComposite | OR — succeeds on first success; fails if all fail |
SelectorReactiveComposite | OR — re-evaluates from first child every tick while running |
SimpleParallelComposite | Runs two children simultaneously; result follows primary (child 0) |
SequenceRandomComposite | Shuffled AND — executes children in random order |
SelectorRandomComposite | Shuffled OR — tries children in random order |
| Class | Effect |
|---|---|
InverterDecorator | Flips SUCCESS ↔ FAILURE; passes RUNNING through |
AlwaysSucceedDecorator | Forces SUCCESS; passes RUNNING through |
AlwaysFailDecorator | Forces FAILURE; passes RUNNING through |
RepeaterDecorator | Re-runs child until it succeeds repetitions times |
LimiterDecorator | Caps child to max_count running ticks, then FAILURE |
CooldownDecorator | Blocks re-execution for wait_time seconds after child finishes |
TimeLimiterDecorator | Gives child wait_time seconds; interrupts if still running |
DelayDecorator | Waits wait_time seconds before first executing child |
UntilFailDecorator | Loops child until it returns FAILURE, then returns SUCCESS |
# Scene tree:
# Enemy (CharacterBody2D)
# BeehaveTree ← tick_rate = 1, process_thread = PHYSICS
# SelectorComposite
# SequenceComposite ← "attack if in range"
# IsInRangeCondition
# AttackAction
# PatrolAction ← fallback
# BeehaveTree exports:
# @export var enabled: bool = true
# @export var tick_rate: int = 1 (1 = every frame; 3 = every 3 frames)
# @export var process_thread: ProcessThread = PHYSICS
# @export var blackboard: Blackboard (auto-created if not set)
# @export_node_path var actor_node_path (defaults to parent node)
# Access the tree from code if you need manual control:
@onready var bt: BeehaveTree = $BeehaveTree
func _ready() -> void:
# Reduce tick cost: evaluate AI every 3 physics frames
bt.tick_rate = 3
# Default process_thread is PHYSICS — switch to IDLE if actor uses _process
bt.process_thread = BeehaveTree.ProcessThread.IDLEtick_rate note:
tick_rate = 1evaluates every frame;tick_rate = 3every 3 frames. Increase for distant/background NPCs to save CPU. Default process thread isPHYSICS— if the actor script uses_processinstead of_physics_process, setprocess_thread = IDLEto keep them in sync.
Leaves hold your game logic. Subclass ActionLeaf for multi-tick work or ConditionLeaf for single-frame checks, then override tick(actor, blackboard).
# IsInRangeCondition.gd
class_name IsInRangeCondition
extends ConditionLeaf
@export var detection_range: float = 150.0
func tick(actor: Node, blackboard: Blackboard) -> int:
# Beehave types `actor` as Node; cast to your concrete type for 2D members.
var body := actor as Node2D
var target: Node2D = blackboard.get_value("target")
if body == null or not is_instance_valid(target):
return FAILURE
var in_range := body.global_position.distance_to(target.global_position) <= detection_range
return SUCCESS if in_range else FAILURE# AttackAction.gd
class_name AttackAction
extends ActionLeaf
@export var attack_duration: float = 0.5
func tick(actor: Node, blackboard: Blackboard) -> int:
var elapsed: float = blackboard.get_value("attack_elapsed", 0.0)
elapsed += get_physics_process_delta_time()
if elapsed >= attack_duration:
blackboard.erase_value("attack_elapsed")
# `actor` is typed Node; guard game-specific methods (or cast to your actor type).
if actor.has_method("play_attack_animation"):
actor.call("play_attack_animation")
return SUCCESS
blackboard.set_value("attack_elapsed", elapsed)
return RUNNING
func after_run(actor: Node, blackboard: Blackboard) -> void:
# Clean up any per-run state when the tree interrupts this action
blackboard.erase_value("attack_elapsed")Return codes (defined on BeehaveNode):
SUCCESS — action complete / condition met.FAILURE — action failed / condition not met; parent composite decides what to do next.RUNNING — action needs more frames; tree will call tick() again next frame (ActionLeaf only — ConditionLeaf should never return RUNNING).Optional overrides:
before_run(actor, blackboard) — called once before the first tick of a run.after_run(actor, blackboard) — called when the child finishes (SUCCESS/FAILURE) or is interrupted.interrupt(actor, blackboard) — called when the tree interrupts a running node.The Blackboard node is a shared key/value store passed to every tick() call. BeehaveTree auto-creates an internal one if you don't assign an external Blackboard node.
# Share one Blackboard across multiple BeehaveTrees on the same actor.
# Assign the same exported Blackboard node to each tree in the Inspector.
# Read / write from any leaf's tick():
func tick(actor: Node, blackboard: Blackboard) -> int:
# Write
blackboard.set_value("target", actor.get_nearest_enemy())
# Read with default
var speed: float = blackboard.get_value("move_speed", 200.0)
# Conditional check
if blackboard.has_value("stunned"):
return FAILURE
# Erase (sets key to null; has_value returns false after erase)
blackboard.erase_value("temp_flag")
return SUCCESSNamed namespaces: every method accepts an optional
blackboard_name: Stringparameter (default"default"). Use this to keep separate namespaces on oneBlackboardnode without name collisions (e.g., per-enemy state vs. shared world state).
Built-in expression leaves:
BlackboardSetAction,BlackboardEraseAction,BlackboardHasCondition, andBlackboardCompareConditionlet you manipulate the Blackboard entirely via Inspector exports (no GDScript required). Expressions run via Godot'sExpression.execute([], blackboard)— so you can callget_value("key")directly in the expression string.
Beehave ships an EditorDebuggerPlugin that adds a 🐝 Beehave tab to the bottom editor panel while your game is running:
To track per-tree CPU cost in the Performance panel, set custom_monitor = true on the BeehaveTree node. This registers beehave [microseconds]/process_time_<actor_name>-<id> as a Performance monitor.
For a walkthrough of writing custom decorators and conditions, see references/custom-nodes.md.
addons/beehave/ copied into project; plugin enabled in Project Settings → PluginsBeehaveTree added as a child of the actor; actor_node_path set (or left blank to default to parent)process_thread matches actor's loop: PHYSICS for _physics_process, IDLE for _processtick_rate tuned — increase for background NPCs (e.g., 3) to reduce per-frame costtick() override returns SUCCESS, FAILURE, or RUNNING — never void/nullConditionLeaf subclasses never return RUNNINGBlackboard, not stored on the leaf node itself (leaf nodes are shared)after_run or interrupt cleans up any Blackboard keys the action wroteBlackboard node exported and shared when multiple BeehaveTree nodes need the same data© 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 1 other file (references) in skills/beehave of jame581/GodotPrompter.
Open the folder on GitHubat commit 1e7d79d
Beehave 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 |
|---|---|---|---|---|---|---|
| Beehave this skilljame581/GodotPrompter | 799 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Headless BuildRandallLiuXin/GodotMaker | 550 | 1 repos | ~454 | Automated safety check: Pass | Custom licence | |
| Godotericrisco/rsc-harness | 174 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Unityericrisco/rsc-harness | 174 | — | ~4k | Automated safety check: Pass | MIT | |
| Setup Enginepixel-cellar/Claude-Code-Game-Studios | 346 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Validate GsdkPlayFab/gsdk | 170 | — | ~645 | Automated safety check: Pass | Apache-2.0 |
RandallLiuXin/GodotMaker
Compile-check a Godot project using headless mode. An agent skill from RandallLiuXin/GodotMaker.
ericrisco/rsc-harness
A skill your agent uses when writing, reviewing, or debugging Godot 4.x games in GDScript or C — scenes, nodes, custom Resources, autoload/EventBus signals, typed GDScript, CharacterBody2D/3D…
ericrisco/rsc-harness
A skill your agent uses when writing, reviewing or structuring Unity game code in C for Unity 6 LTS — GameObjects and the Transform hierarchy, the MonoBehaviour lifecycle, prefabs and variants…
pixel-cellar/Claude-Code-Game-Studios
配置项目的游戏引擎和版本。将引擎锁定到 CLAUDE.md 中,检测知识缺口,当版本超出 LLM 训练数据时通过 WebSearch 填充引擎参考文档。
PlayFab/gsdk
Validates PlayFab Game Server SDK (GSDK) integrations in game server projects.
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.
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
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.
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.
Categories
A skill your agent uses when using the Beehave addon — pure-GDScript behavior trees with composites, decorators, leaves, a blackboard, and a visual runtime debugger. Beehave is an agent skill from jame581/GodotPrompter.
Beehave fits situations like: using the Beehave addon — pure-GDScript behavior trees with composites; A visual runtime debugger.
Run `npx skills add jame581/GodotPrompter --skill beehave -a claude-code`. Or copy the skill folder (skills/beehave in jame581/GodotPrompter) into .claude/skills/beehave in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jame581/GodotPrompter --skill beehave -a codex`. Or copy the skill folder (skills/beehave in jame581/GodotPrompter) into .agents/skills/beehave 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 beehave -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/beehave, .gemini/skills/beehave, .github/skills/beehave and .opencode/skills/beehave in your project.
SKILL.md names no scripts, command-line tools or credentials: Beehave is instructions for the agent only.
SKILL.md names 1 domain. As links in the text: github.com. 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.
Beehave is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k 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.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Beehave: Headless Build (RandallLiuXin/GodotMaker, 550 stars), Godot (ericrisco/rsc-harness, 174 stars), Unity (ericrisco/rsc-harness, 174 stars) and Setup Engine (pixel-cellar/Claude-Code-Game-Studios, 346 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 799 GitHub stars. The repository holds 58 skills in this directory. The repository was last updated on October 8, 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.