src/main/resources/targets/claude/skills/core/dev/micronaut-scaffold/SKILL.md
Scaffold a Micronaut service with @Controller, @Singleton DI, health indicators, compile-time DI, Dockerfile, and integration tests.
npx skillsauth add edercnj/claude-environment micronaut-scaffoldInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scaffolds a complete Micronaut service module following the hexagonal architecture pattern. Produces:
Application.java entrypoint@Controller class with endpoints@Singleton service and port wiringHealthIndicator implementationapplication.yml)Dockerfile (multi-stage build)@MicronautTest)/micronaut-scaffold <ServiceName> — scaffold Micronaut service/micronaut-scaffold <ServiceName> --graalvm — include GraalVM native hints| Parameter | Required | Description |
|-----------|----------|-------------|
| ServiceName | Yes | PascalCase service name |
| --graalvm | No | Add @ReflectiveAccess and reflect-config.json for native image |
| --port | No | HTTP port (default: 8080) |
src/main/java/.../Application.java — Application entrypointsrc/main/java/.../adapter/inbound/rest/{ServiceName}Controller.java — HTTP controllersrc/main/java/.../adapter/inbound/health/{ServiceName}HealthIndicator.java — Health indicatorsrc/main/java/.../config/AppConfig.java — Configuration bindingsrc/main/resources/application.yml — Service configurationDockerfile — Multi-stage Docker buildsrc/test/java/.../adapter/inbound/rest/{ServiceName}ControllerTest.java — Integration testknowledge/stack-patterns/micronaut/index.md — Micronaut patternsknowledge/layer-templates.md — Layer templatesknowledge/architecture-hexagonal.md — Hexagonal conventionspublic class Application {
public static void main(String[] args) {
Micronaut.run(Application.class, args);
}
}
Follow knowledge/stack-patterns/micronaut/index.md §1 Controller pattern:
@Controller("/api/v1/{resource}")
public class {ServiceName}Controller {
private final {Port} port;
public {ServiceName}Controller({Port} port) {
this.port = port;
}
@Get
public List<{Response}> list() { ... }
@Post
@Status(HttpStatus.CREATED)
public {Response} create(@Valid @Body {Request} request) { ... }
}
Follow knowledge/stack-patterns/micronaut/index.md §6 Health Checks pattern.
# src/main/resources/application.yml
micronaut:
application:
name: {service-name}
server:
port: 8080
app:
feature:
enabled: true
max-items: 100
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY . .
RUN mvn -B package -DskipTests
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
@MicronautTest
class {ServiceName}ControllerTest {
@Inject
{ServiceName}Client client; // Declarative HTTP client injected
@MockBean({Port}.class)
{Port} port() { return mock({Port}.class); }
@Test
void list_returnsOk() {
var result = client.list();
assertThat(result).isNotNull();
}
}
@Autowired (Spring annotation — forbidden)@Inject not needed in Micronaut)@Valid on controller request parameters/health/liveness and /health/readinessapplication.yml (no hardcoded values)knowledge/stack-patterns/micronaut/index.md — Micronaut patternsknowledge/layer-templates.md — Layer templatesdevelopment
Documentation freshness gate: validates 6 dimensions (readme, api, adr, etc.) per PR.
testing
Conditional dep-policy gate: CVEs, licenses, versions, freshness; SARIF + report.
documentation
Incrementally updates the service or system architecture document; never regenerative.
development
Scans code and git history for leaked credentials, API keys, and tokens; SARIF output.