godot

godot is a cursor rule for Cursor from AcKeskin/contexture. It costs 0 tokens per session (1,770 once invoked), scanned A, original, MIT.

A set of rules for writing C# code that works correctly with Godot, a game engine. It explains editor-visible fields, typed signals, calls between C# and the engine, and engine-owned object lifetimes.

In plain words
What is it for?
It helps expose editable game properties, declare and connect signals, manage Godot objects, and structure C# calls to the engine.
Why use it?
It prevents fields and events from being invisible to Godot, reduces costly repeated cross-language calls, and avoids using objects after the engine has freed them.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Good fit It helps expose editable game properties, declare and connect signals, manage Godot objects, and structure C# calls to the engine.

Compare 6 cursor rules from other repositories ↓
Install with agentmods
npx agentmods add rules/ackeskin/contexture/godot
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/AcKeskin/contexture

Made for: Cursor.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for godot

README.md
[![agentmods](https://agentmods.dev/badge/rules/ackeskin/contexture/godot/github.svg)](https://agentmods.dev/rules/ackeskin/contexture/godot)
Your own site
<a href="https://agentmods.dev/rules/ackeskin/contexture/godot"><img src="https://agentmods.dev/badge/rules/ackeskin/contexture/godot/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for godot

Your own site · 80×15
<a href="https://agentmods.dev/rules/ackeskin/contexture/godot"><img src="https://agentmods.dev/badge/rules/ackeskin/contexture/godot.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Nothing until a file matches its globs; then the whole rule loads.
When invoked 1,770 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.01770
Opus 5.5 $0.00000 $0.00708
Sonnet 5.5 $0.00000 $0.00354
Haiku 4.5 $0.00000 $0.00177

Measured today against content hash f72e7a0f2351, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

godot scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

cursor/rules/godot.mdc · 58 lines

How it starts

The opening of the file, as written. The whole thing — 58 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Generated from architectural-rules/godot/ — do not hand-edit.

C# in Godot

Expose inspector-editable fields with [Export] on a C# property/field, the binding equivalent of GDScript's @export. Plain C# fields are invisible to the editor. (Godot docs — C# basics) Declare signals as [Signal] public delegate void NameEventHandler(...). The generated event is the typed, editor-visible signal; ad-hoc C# events are not Godot signals. (Godot docs — C# basics) Every C#↔engine call crosses a marshalling boundary with real per-call cost. Do not make many small cross-language calls per frame — batch work and cache values on the C# side. (Godot docs — C# API differences) A GodotObject (Node, Resource) has engine-owned native lifetime that is independent of the C# GC. Free engine objects explicitly (QueueFree/Free); never assume the GC reclaims them, and never touch a C# wrapper after the native object is freed. (Godot docs — C# API differences) Connect signals in C# with a Callable (e.g. Connect(SignalName.X, Callable.From(handler))), not a raw string method name. Callable-based connection is type-checked and refactor-safe. (Godot docs — C# basics)

Cross-reference: the universal C# rules under csharp/ still apply — these add only the Godot-binding specifics on top of them.

Why: The C# binding sits over a native engine: the marshalling boundary and the GodotObject/GC lifetime split are the two seams where idiomatic C# assumptions break. Treating engine objects as GC-managed, or chattering across the boundary each frame, produces both correctness bugs (use-after-free) and frame-time regressions. Source: Godot docs — C# basics / C# API differences.

Editor plugins

A socket/server polled inside a Node's _process() runs on the editor MAIN thread (Thread.is_main_thread() is true). EditorInterface calls from there need NO call_deferred or cross-thread marshalling. Poll editor-facing work on _process to stay main-thread-safe by construction. Do NOT await RenderingServer.frame_post_draw to force a frame before capturing an EDITOR viewport — that signal does not fire predictably for the editor's own viewports and the coroutine hangs. Read viewport.get_texture().get_image() directly; editor viewports render continuously, so the latest frame is already available. Set WebSocketPeer.inbound_buffer_size and outbound_buffer_size large (e.g. 16 MB) BEFORE calling accept_stream(). The default (~64 KB) is too small for large payloads (e.g. base64 viewport PNGs); a big send fails with ERR_OUT_OF_MEMORY. Buffer sizing after accept_stream is too late. Validate editor-plugin tools that render or push large payloads in a WINDOWED editor, not --headless. Headless has no render surface (cannot verify viewport capture) and masks WebSocket buffer limits (there is no large payload to send). Headless is fine ONLY for parse-checks, registry writes, and socket round-trips. Keep any plugin backup/old copy OUTSIDE res://. An in-tree backup collides class_name with the live copy ("Class X hides a global script class") and breaks the entire plugin load; it also pollutes .godot/global_script_class_cache.cfg and uid_cache.bin, which survive restart. If already hit, move the backup out and clear those caches.

Read the full file on GitHub · 58 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today First seen · 58 lines · 1,770 tokens per session scan A f72e7a0f2351

Subscribe to this mod's changes

godot is a cursor rule published in the GitHub repository AcKeskin/contexture (2 stars, last pushed yesterday), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,770 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-27.