ワンクリックで
add-feature
Scaffold a new feature module with the appropriate layers and MESA conventions
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Scaffold a new feature module with the appropriate layers and MESA conventions
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Quick review of the current diff for bugs, logic errors, convention violations, and test gaps
Scaffold a new Strata interactor with interface, implementation, fake, and test
Add a new screen to an existing feature module with StateHolder, UI, factories, and tests
Add missing test cases, targeting a specific file or all changed files on the branch
Bump library versions in gradle.properties and prepare release notes
Diagnose and fix an error from a build failure, stack trace, or error message
| name | add-feature |
| description | Scaffold a new feature module with the appropriate layers and MESA conventions |
| disable-model-invocation | true |
| argument-hint | <feature-name> [--headless] |
Scaffold a new feature module with the correct directory structure, build configuration, and DI wiring following MESA conventions.
Input: $ARGUMENTS
Extract the feature name from the input (e.g., my-feature). This becomes:
features/<feature-name>/myfeature or my_feature)com.jkjamies.mesa.features.<package-segment>If --headless is provided: Default to api + domain + data (no presentation). Ask the user to confirm, or if any of these should also be excluded.
If no flags are provided: Ask the user which layers this feature needs:
Which layers does this feature need?
- Full feature —
api+domain+data+presentation(UI with StateHolder, Screen, Events)- Headless library —
api+domain+data(no UI)- Custom — Let me pick individual layers
For custom, which layers? (e.g., "api, domain")
If the user selects custom, also ask follow-up questions based on the selected layers:
domain is included: "Does this feature need Strata interactors?"data is included: "Does this feature need a repository?"Create the module directories and files based on the selected layers. Do not scaffold presentation layer files directly — that is handled by the /add-screen skill in Step 6.
api/ layerfeatures/<feature-name>/api/
├── build.gradle.kts
└── src/main/java/<package>/api/
The api module defines the public contract: interfaces for use cases, the Screen type (if navigable), and any shared data types.
build.gradle.kts — Pure Kotlin/JVM or Android library with no internal dependencies.
domain/ layerfeatures/<feature-name>/domain/
├── build.gradle.kts
└── src/main/java/<package>/domain/
The domain module contains business logic implementations. Depends on api and data.
build.gradle.kts — Depends on :features:<feature-name>:api and :features:<feature-name>:data.
data/ layerfeatures/<feature-name>/data/
├── build.gradle.kts
└── src/main/java/<package>/data/
The data module contains repository implementations and data sources.
build.gradle.kts — Minimal dependencies. No dependency on domain or presentation.
presentation/ layer (directory and build config only)If presentation is included, create only the module shell:
features/<feature-name>/presentation/
├── build.gradle.kts
└── src/main/java/<package>/presentation/
build.gradle.kts — Depends on :features:<feature-name>:api and :features:<feature-name>:domain. Includes Compose dependencies.
The actual Screen, State, Event, StateHolder, UI, and Factories files are created by the /add-screen skill in Step 6.
Add the new module(s) to settings.gradle.kts:
include(":features:<feature-name>:api")
include(":features:<feature-name>:domain") // if included
include(":features:<feature-name>:data") // if included
include(":features:<feature-name>:presentation") // if included
Each build.gradle.kts should follow existing module patterns in the project. Read an existing feature module's build files (e.g., features/counter/) to match:
After scaffolding the module structure (delegated skills handle their own license headers):
If presentation is included: Automatically run the /add-screen skill to scaffold the first screen. Offer the user two options for the screen name:
<FeatureName>Screen (e.g., feature settings → SettingsScreen)If domain is included and interactors are needed: Repeat the following loop:
<FeatureName><Action> based on common patterns (e.g., feature settings → FetchSettings or ObserveSettings)StrataInteractor (no flag)StrataSubjectInteractor (--observe)/add-interactor <feature-name> <InteractorName> [--observe]All source files generated directly by this skill (e.g., build.gradle.kts, placeholder source files) MUST include the Apache 2.0 license header. Files generated by delegated skills (/add-screen, /add-interactor) handle their own headers.
/*
* Copyright 2026 Jason Jamieson
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
Run ./gradlew :<new-module>:compileDebugKotlin for each created module to verify they compile.
Report: