Best for
- Use when structuring or modularizing a system, assigning responsibilities, reviewing coupling, adapting an existing topology, or planning an incremental structural change.
aigengame/godot-agent/.agents/skills/design-domain-modular-architecture/SKILL.md
Design and review domain-centered modular architectures for software systems. Turn the applicable domain model, architecture direction, and project constraints into module boundaries, ownership, dependencies, communication, and evolution paths. Use when structuring or modularizing a system, assigning responsibilities, reviewing coupling, adapting an existing topology, or planning an incremental structural change.
Decision brief
Design and review domain-centered modular architectures for software systems. Turn the applicable domain model, architecture direction, and project constraints into module boundaries, ownership, dependencies, communication, and evolution paths.
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-domain-modular-architecture"Inspect the Agent Skill "design-domain-modular-architecture" from https://github.com/aigengame/godot-agent/blob/b616e7fbaf782a44df4a1b24614d7ad02a7446f2/.agents/skills/design-domain-modular-architecture/SKILL.md at commit b616e7fbaf782a44df4a1b24614d7ad02a7446f2. 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
1. Define the current goal, evidence, constraints, success conditions, and excluded scope. 2. Read the existing domain, language, architecture, and decision artifacts. 3. Identify the applicable domain model, architecture drivers, invariants, load-bearing mechanisms, assumptions…
These checks evaluate structural fitness. Preserve the artifact lifecycle status, claim evidence state, and evidence from authoritative inputs. Treat an unsupported conclusion as a structural claim that still requires validation; do not advance its claim evidence state.
Translate the current architecture direction and applicable domain model into the smallest usable modular structure. Give the current system complete and distinct responsibilities, one authority for each rule, one-way dependencies, and clear extension paths.
Before assigning module or context boundaries, inspect the project artifacts that already govern language and architecture. These can include:
Establish only the facts that can change the design:
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 95/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 31 | 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
Translate the current architecture direction and applicable domain model into the smallest usable modular structure. Give the current system complete and distinct responsibilities, one authority for each rule, one-way dependencies, and clear extension paths.
Use Domain-Driven Design (DDD) as the theoretical basis for judging module boundaries and evolution. Do not treat it as a set of patterns that every project must implement. Introduce a Bounded Context, Aggregate, Repository, Domain Service, or other DDD building block only when it solves an observed problem.
For design work, recommend one concrete architecture. Include a module tree, responsibility placement, dependency and communication rules, and incremental implementation steps. Present alternatives only after the recommendation, with the conditions that would make an alternative preferable.
For analysis or review-only work, describe the observed architecture and report verified findings. Recommend a change only when evidence shows that the current design does not meet the applicable criteria.
Apply this method to any modular structure. Treat an existing topology, its module names, dependency rules, and composition mechanisms as current constraints. Review them against the current goal and structural criteria. Recommend evidence-supported changes when they no longer fit. Use the default topology only when no governing topology exists; do not silently replace an existing topology with it.
Before assigning module or context boundaries, inspect the project artifacts that already govern language and architecture. These can include:
Follow the declared priority of these artifacts and any rules scoped to a directory or domain context. Preserve established terms, definitions, context boundaries, and owners. Do not introduce a second name for an existing concept or silently change a term's meaning.
Use the Ubiquitous Language of the applicable Bounded Context to name modules, types, interfaces, events, use cases, tests, and documents. When no Bounded Context is defined, use the established project and domain terms.
Do not infer a DDD meaning from a filename alone. For example, a file named
CONTEXT.md does not necessarily define a Bounded Context.
Report conflicts between authoritative artifacts and explain their architecture impact. Do not hide a conflict by selecting one source without explanation.
When the applicable domain artifacts are absent or materially inconsistent, report the gap and continue only with explicit assumptions agreed with the user. Do not invent domain knowledge from directory or code structure. Require a new glossary, context map, or ADR only when the user asks for one or the change needs a durable decision record.
Establish only the facts that can change the design:
open, meaning that the available evidence does not establish the claim at its required scope. Record evidence separately; do not invent or infer a stronger state or ordering.Ask only questions whose answers would materially change the architecture. Continue with explicit assumptions for the rest. Preserve each structure-sensitive input's source, identifier, artifact or decision lifecycle status, claim evidence state, and evidence.
When there is no evidence of several independent domain models, start with this single-context shape:
foundation/
domain/
application/
adapters/
inbound/
outbound/
bootstrap/
Treat these names as responsibility labels, not required directory names. Select names that match the project language and system form.
| Responsibility | Common name choices |
|---|---|
| Domain-neutral technical capabilities | foundation, libs, platform, infrastructure |
| Domain model and rules | domain, model, business, a domain capability name |
| Use cases and application flow | application, use-cases, workflows, services |
| External interaction boundary | adapters, interfaces, delivery |
| Input adaptation | inbound, ui, presentation, api, cli, consumers |
| Output adaptation | outbound, infrastructure, integrations, persistence, gateways |
| Composition and startup | bootstrap, composition-root, startup, app |
State the local meaning when a name is ambiguous. For example, infrastructure can
mean a technical foundation or concrete external integration, services can mean use
cases or domain services, and model can mean a domain model or a data-transfer shape.
Do not use one name for several responsibilities without explicit subdivisions.
Keep an existing physical layout when it already expresses the required boundaries. Create only the areas whose responsibilities exist. Do not create empty directories for symmetry.
Divide modules by conceptual cohesion and reason to change, not by file type, framework component, or organization chart.
Place domain-neutral technical capabilities here. Examples include:
Do not use Foundation as a catch-all. Keep domain rules, use-case flow, and vendor
integration out of it. If the project calls this area infrastructure, distinguish it
from outer database, network, and vendor adapters.
Place language, model, and rules that describe the problem domain here. Examples include:
Keep the Domain independent of UI, databases, network protocols, concrete frameworks, and vendor SDKs.
Place behavior that drives the domain model toward a user or system goal here. Examples include:
Let Application decide when to invoke domain behavior. Do not repeat domain rules or move domain invariants into Application.
Place code that translates external input into application intent here. Examples include:
Call Application entry points. Do not mutate Domain internals directly.
Place concrete external integrations here. Examples include:
Implement ports owned by Application or Domain. Let the side that needs a capability own its contract. Put a port in Domain only when the capability is part of the domain language; otherwise, let Application own it.
Place construction and startup work here. Examples include:
Allow Bootstrap to know the concrete types that it composes. Keep domain rules and use-case flow out of it.
Use a context-first shape when the system contains different languages, models, rule owners, or independent evolution boundaries:
contexts/
<context-name>/
domain/
application/
adapters/
inbound/
outbound/
foundation/
bootstrap/
Allow each Bounded Context to contain its applicable Domain, Application, and Adapters. Do not treat a Bounded Context as another dependency layer. When several models exist, organize the applicable layers inside each context.
Integrate contexts through explicit public contracts. Translate models at the boundary when their meanings differ. Add an Anti-Corruption Layer when one model would otherwise leak into another. Do not share an internal domain model merely to remove translation.
Allow similar words to have different precise meanings in different contexts. Do not force a system-wide model when the language does not support one.
Do not assume that a Bounded Context is a module, service, directory, deployment unit, or team. Introduce multiple contexts only when a real model boundary exists.
Use this default source-dependency direction:
Inbound Adapters
↓
Application
↓
Domain
↓
Foundation
Let Outbound Adapters depend on ports and contracts owned by Application or Domain. Do not let Application or Domain depend on a concrete Outbound Adapter.
Allow same-area modules to depend on public interfaces in one direction. Keep the complete dependency graph acyclic.
Use direct calls through public interfaces for stable downward requests:
Do not let a lower area import, hold, or invoke a concrete higher-area type. When a lower area must initiate an upward notification, use an indirect mechanism:
Define a callback or observer contract in the lower area or in a neutral boundary. Let the higher area register its implementation. Let the module that owns a fact define its event, and let subscribers decide how to respond.
Treat a return value as the response to an existing downward call, not as an independent upward dependency. Do not use a global event bus to hide unclear ownership or control flow.
Choose one clear direction between peer modules, coordinate them in Application, or use an event defined by the owner of a fact. At a context boundary, use an explicit integration contract and model translation.
When the direction is unclear, identify who owns the rule, who owns the fact, and who coordinates the use case. Do not create reciprocal references.
Distinguish source dependency from runtime control flow. Application can call an Outbound Adapter through a port at runtime while the adapter still depends on the inner-owned port in source code.
Do not use a service locator, shared mutable state, dynamic lookup, or a global message hub to bypass the dependency rules.
At every project size, keep the Ubiquitous Language, alignment between the domain model and implementation, rule and state ownership, model scope, and conceptual module boundaries visible.
Identify the Core Domain as the cohesive part of the model that expresses the system's main domain-specific value. Classify a necessary custom capability that is not the main differentiator as a Supporting Subdomain. Classify a common capability that gives no domain-specific advantage as a Generic Subdomain. Apply these distinctions when they change modeling effort, ownership, or sourcing, even within one Bounded Context.
Consider Bounded Contexts, a Context Map, upstream and downstream relationships, an Anti-Corruption Layer, or a Shared Kernel only when several models, languages, or ownership boundaries make them useful.
Map only the contexts needed for the current decision. Do not model the complete system in advance.
Use a building block only when its semantics fit:
| Building block | Use it when |
|---|---|
| Entity | An object is distinguished by identity rather than attributes, and its identity continues through its lifecycle; storage persistence is not required. |
| Value Object | A concept is defined by values, constraints, and value equality. |
| Domain Event | An occurred fact has domain meaning. |
| Domain Service | Domain behavior has no natural Entity or Value Object owner. |
| Aggregate | Related Entities and Value Objects need one consistency and transaction boundary, with external access controlled by an Aggregate Root. |
| Factory | Complex construction must always produce a valid result. |
| Repository | An Aggregate Root needs collection-like access expressed in the Ubiquitous Language. |
| Module | A set of concepts shares meaning and a reason to change. |
Do not create entities/, services/, repositories/, or similar directories merely
to display these patterns.
Prefer a design that reveals intent and remains easy to change:
Establish only the large-scale rules needed now. Change module boundaries when new domain knowledge or implementation evidence shows that the current structure no longer expresses the model, duplicates ownership, or obstructs common changes.
When new evidence changes an architecture driver, domain meaning, invariant, or claim evidence state, revisit only the affected module boundaries and their dependents. Preserve unaffected owners and contracts.
Do not preserve an obsolete plan only because it was defined early. Do not add a speculative extension point to prepare for an unverified future.
Use an optional experiments/, sandbox/, or project-specific area when prototypes
need looser internal rules. Allow experiments to depend on production modules; never
let production depend on experiments. Before promotion, classify each accepted
responsibility, move or reimplement it under the correct owner, and add its tests.
This section governs only placement, dependency direction, and promotion into the modular structure. It does not define the experiment charter, claim evidence state, or acceptance decision.
These checks evaluate structural fitness. Preserve the artifact lifecycle status, claim evidence state, and evidence from authoritative inputs. Treat an unsupported conclusion as a structural claim that still requires validation; do not advance its claim evidence state.
Confirm that the selected responsibilities, modules, and contexts cover the current problem space:
misc, common, or hidden module is required to explain the system.An essential capability with no owner proves that the design is incomplete.
Use orthogonal basis as a system metaphor for the modules or cohesive module groups that own the required capabilities. Together, they must cover the current capability set, while each owner remains necessary and non-overlapping. Confirm that:
Merge or redraw modules or groups that are interchangeable, always change together for the same reason, or cannot state distinct responsibilities. Remove one whose absence does not affect a required capability.
Treat DRY as single authority for knowledge and rules, not only as removal of similar code. Confirm that:
When the same knowledge has several independently editable copies, select one authority and replace the others with one-way references or derived representations.
Review extension paths against observed variation points. Confirm that:
Do not demand an interface, plugin point, or event at every location. Preserve extension seams only for changes the current evidence supports.
Return only the sections needed for the request, but keep the result concrete. Include:
For design work, if several solutions remain valid, recommend one first. State the conditions under which another solution would become better.
Do not introduce these mechanisms by default:
common module or directories named only after DDD patterns.Frequently asked questions
Design and review domain-centered modular architectures for software systems. Turn the applicable domain model, architecture direction, and project constraints into module boundaries, ownership, dependencies, communication, and evolution paths.
The source record exposes this install command: npx skills add https://github.com/aigengame/godot-agent --skill ".agents/skills/design-domain-modular-architecture". Inspect the command and pinned source before running it.
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
coreyhaines31/marketingskills
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
prowler-cloud/prowler
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre