Best for
- Use when structuring a new Godot project, separating reusable systems from authored content, reviewing architectural coupling, deciding where scenes, scripts, and resources belong, planning an incremental modularization…
aigengame/godot-agent/.agents/skills/design-godot-modular-architecture/SKILL.md
Design and review modular Godot project architectures around Add-ons, Systems, Content, and UI, with acyclic downward dependencies and indirect upward communication. Use when structuring a new Godot project, separating reusable systems from authored content, reviewing architectural coupling, deciding where scenes, scripts, and resources belong, planning an incremental modularization, or isolating experiments without weakening production boundaries.
Decision brief
Design and review modular Godot project architectures around Add-ons, Systems, Content, and UI, with acyclic downward dependencies and indirect upward communication.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/aigengame/godot-agent --skill ".agents/skills/design-godot-modular-architecture"Inspect the Agent Skill "design-godot-modular-architecture" from https://github.com/aigengame/godot-agent/blob/40de7e52ce32bf205511ca23d7607ba9fb72ca3e/.agents/skills/design-godot-modular-architecture/SKILL.md at commit 40de7e52ce32bf205511ca23d7607ba9fb72ca3e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Mark unsupported expectations as assumptions. Do not expand the design to satisfy them.
Design the smallest architecture that gives the current project clear ownership, useful reuse boundaries, and one-way dependencies.
Order the layers from lowest to highest:
Create each root when its responsibility exists. For a small project, an absent root is fine as long as existing responsibilities are not mixed. Treat the child modules and file names below as placement guidance, not as a required directory template.
Use Add-on in the broad sense of a reusable library module. It is not limited to a Godot plugin with plugin.cfg or an EditorPlugin implementation, though those plugins are one kind of Add-on.
Permission review
The documentation asks the agent to create, modify, or delete local files.
| Save data | File access and serialization | Saveable game state | Save/load flow and save-game assembly | Save slots, load menu, and result feedback |Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 85/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 28 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Design the smallest architecture that gives the current project clear ownership, useful reuse boundaries, and one-way dependencies.
Default to four project roots:
addons/: reusable technical libraries.systems/: reusable game rules and domain state.content/: application flow and project-specific content.ui/: presentation and interaction.Use domain-driven design as a broad guide: keep related language, rules, and state together; give each rule and state one owner; and separate reusable game rules and state from application-specific coordination. Do not require formal DDD patterns or vocabulary unless they solve a demonstrated problem.
Order the layers from lowest to highest:
Allow code to depend on its own layer or a lower layer:
Keep same-layer dependencies explicit and acyclic. Do not let lower-layer code reference a higher-layer script, type, scene, resource, or path.
Follow Godot's "call down, signal up" rule: use direct calls for downward requests and signals for upward notifications. Use callbacks, observers, or publish/subscribe only when they fit the relationship better.
Keep project.godot limited to project settings, main-scene selection, and Autoload registration. Use the main scene or a small startup script as a thin project bootstrap that creates and connects modules, injects resources or callbacks, and hands off to application flow. Keep rules and application flow out of the bootstrap itself.
Treat scene instantiation as a dependency. Compose Content and UI in the bootstrap or in a UI-owned composition scene that may depend downward on Content. Do not embed UI scenes in Content scenes; inject references and connect signals at the composition point.
Treat Autoload as a registration and lifetime choice, not as a layer. Keep each Autoload script under its owning root and apply the same dependency rules. Use an Autoload only when global lifetime or a unique instance is justified; prefer bootstrap-created and injected instances otherwise. Do not use Autoload to bypass boundaries or as a default service locator or event bus. If an event channel is an Autoload, place its contract in the lowest layer that defines the messages and keep it unaware of subscribers.
Create each root when its responsibility exists. For a small project, an absent root is fine as long as existing responsibilities are not mixed. Treat the child modules and file names below as placement guidance, not as a required directory template.
Use Add-on in the broad sense of a reusable library module. It is not limited to a Godot plugin with plugin.cfg or an EditorPlugin implementation, though those plugins are one kind of Add-on.
This is a local architectural convention, not a claim that every reusable library is a Godot plugin. Separate first-party libraries from third-party plugins by ownership, using subdirectories or naming when the distinction would otherwise be unclear.
Use addons/ for reusable technical capabilities that do not encode project-specific rules or concepts.
Typical contents include:
Keep an add-on independent when practical. First-party Add-ons should declare their dependencies on other Add-ons. Keep those dependencies visible and acyclic, and treat the connected set as one reuse unit.
Treat third-party plugins as external packages: record their version and dependency set, and do not assume control over their internal architecture.
Separate editor-only plugin code from runtime code when an Add-on contains both. Do not make a runtime build depend on editor-only APIs.
Move project-specific rules out of Add-ons.
Use systems/ for stable game rules and domain state that can support different Content.
Typical systems include:
A System may contain GDScript classes, Resources, reusable scenes or nodes, state queries, public operations, and signals that report state changes.
Name and group Systems using the project's own language. Do not create a fixed internal structure simply to match an architectural pattern.
Let Systems use Add-ons and collaborate through small, clear APIs. Keep their dependency graph acyclic.
Keep these out of Systems:
Do not let a System load Content or UI paths. When it needs a higher-level scene, resource, factory, or response, inject it from Content or the project bootstrap.
Use content/ for the application layer and authored project content. Let it choose, configure, and coordinate Systems into concrete behavior.
Typical contents include:
Organize Content by feature, level, region, chapter, or asset category as the project requires.
Application flow and authored assets share Content because both are project-specific and fall outside the reuse boundary of Systems and Add-ons. Within Content, separate them by owner and reason to change.
Let Content call public System operations, configure System instances, connect Systems, and inject concrete resources. Keep reusable rules in Systems rather than repeating them in Content.
Expose the application operations, state, and notifications needed by UI.
Use ui/ for presentation and interaction. Let UI turn Content or System state into visual, textual, and interactive feedback, and turn user actions into application actions.
Typical contents include:
Let UI read public state and subscribe to Content or System signals. Send application-changing actions through Content's application entry points. Allow direct UI-to-System commands only when the design intentionally has no Content coordinator for that action. Keep only presentation state in UI, such as focus, expansion, and local transition progress.
Do not place game rules or application flow in UI. Do not let UI mutate System internals or own state that belongs to Content or Systems.
Do not place every artifact for one topic in the same area. Place each part according to its responsibility.
| Topic | Add-ons | Systems | Content | UI |
|---|---|---|---|---|
| AI | Generic behavior runner | Perception and decision rules | Concrete behavior setup and tuning data | Debug or status display |
| Combat | Timers, pools, collision helpers | Hit, damage, and effect rules | Concrete actors, abilities, effects, and encounter setup | Status bars, cooldowns, and action cues |
| Stats | Generic containers or serialization | Stat state and modifier rules | Initial values and concrete configuration | Character stats panel and formatting |
| Dialogue | Data loading and localization helpers | Dialogue state and branch conditions | Text, choices, voice, and authored flow | Dialogue panel, choice list, and text animation |
| Animation | Generic playback or tween helpers | Game state that drives animation choice | Clips, AnimationTrees, and scene configuration | Control transitions and UI animation |
| Audio | Generic players and bus controls | Rules that produce meaningful sound events | Music, ambience, effects, and voice assets | Volume settings, subtitles, and playback feedback |
| Input | Device and action-map helpers | Game actions independent of devices | Bindings for the current application flow | Controls, menus, and input hints |
| Save data | File access and serialization | Saveable game state | Save/load flow and save-game assembly | Save slots, load menu, and result feedback |
Use this split to keep one owner for each rule and state, avoid hard-coded assets in Systems, and avoid project language in Add-ons.
When production boundaries make early exploration unnecessarily slow, use an optional development-only sandbox. Name and organize it according to project convention, such as by experiment or contributor. Do not treat it as a fifth production layer or a required project root.
Allow sandbox code to depend on any production area. Do not let production code, scenes, Resources, Autoload registrations, or project settings reference sandbox artifacts.
Exclude the sandbox from every release export and verify the exclusion in the build process; automate the check when CI produces releases. Do not assume that a directory name has special export behavior.
Relax internal implementation standards when speed matters, but keep the isolation boundary strict. Commit shared experiments when team testing or feedback is useful; keep throwaway work local when sharing has no value.
Do not promote sandbox code merely by moving files. Once an experiment is accepted, classify each responsibility under Add-ons, Systems, Content, or UI; refactor or reimplement it to production standards; verify the resulting behavior; and remove the sandbox version. Temporary duplication inside the sandbox is acceptable while the design is uncertain.
Establish:
Mark unsupported expectations as assumptions. Do not expand the design to satisfy them.
Read the project's architecture docs, ADRs, and project conventions when they exist. Inspect only the evidence needed for the current decision:
extends, class_name, preload(), load(), and resource paths.get_node(), $, and % node paths.@tool scripts and other editor-only code.Do not infer architecture from directory names alone.
Classify each relevant responsibility:
Classify by reason to change and reuse boundary, not merely by file type. When a responsibility appears to fit two areas, identify which area owns the underlying rule or state and let the other consume it.
Draw the source dependencies required by the current behavior. Check for:
Do not create an interface for every call. Add indirection only when it protects a real boundary, supports a needed substitution, or enables upward communication.
Apply "call down, signal up" with the simplest mechanism that preserves the dependency direction:
Define a message or callback in the lowest layer that can describe it without knowing its consumers. Do not use events to hide unclear ownership.
Check completeness against the current goal:
Check orthogonality:
Check DRY:
Prefer a small local duplication over a shared abstraction that couples unrelated modules.
Keep, simplify, move, split, merge, defer, remove, or test a design idea according to current evidence.
Prefer small, reversible changes that establish the needed boundary. When modularizing an existing project, migrate through working slices rather than requiring a complete directory rewrite before the first verification.
For a small project, clear ownership and a few visible dependencies may be enough.
Add finer System boundaries, dedicated public interfaces, more event channels, automated dependency checks, or stricter CI only when team size, reuse needs, or observed coupling justify their cost.
Once the project adopts a dependency rule, apply it consistently. Scale the number of mechanisms, not the meaning of the boundaries.
Return only the parts that help answer the request:
Use a diagram or dependency table only when it makes an important relationship easier to understand. Do not create extra artifacts to make the design appear more complete.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
JasonColapietro/suede-creator-skills
Suede-owned experimentation discipline for hypotheses, sample sizing, test duration, significance, and repeatable experiment programs. Use when comparing variants, deciding whether a result is reliable, or building an experiment backlog and cadence. NOT FOR: analytics instrumentation (use suede-analytics), post-click conversion diagnosis (use suede-site-alchemy), or writing the variant copy itself (use suede-copy).
narrative-io/narrative-skills-marketplace
Translate a fuzzy analytical question into a rigorous investigation plan. Interrogates the ask, grounds the plan in the available data dictionary, applies analytical best practices, and produces a structured brief of query specifications for a downstream query-writing skill. Plans, does not write SQL. Use when: "why did X drop", "is there a relationship between A and B", "who are our highest-value customers", "what's driving the change in Y", "investigate this trend", "design an analysis for", "
event4u-app/agent-config
Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.