Imported from philippart-s/skill-for-blog-post (
java-dev/SKILL.md). Install upstream withnpx skills add philippart-s/skill-for-blog-post --skill java-dev. Copyright stays with the author.
Java Development Skill
Description
A Java-first development skill that guides developers through a structured, step-by-step workflow for Java 25 projects. Inherits the full methodical-dev five-phase process (gather info, git check, plan, implement, validate) with Java-specific guidance layered in.
Java 25 features are always active. The following are activated conditionally based on the project:
- Quarkus — when
io.quarkusis found inpom.xml/build.gradle - JBang — when
//DEPSdirectives are found in.javafiles orjbang-catalog.jsonexists - LangChain4j — when
dev.langchain4jorquarkus-langchain4jis found in dependencies
When to Use
- When developing any Java 25 project (libraries, CLI tools, REST APIs, microservices, AI apps)
- When writing modern Java code with Java 25 language features
- When building Quarkus applications
- When scripting or prototyping with JBang
- When building AI-powered applications with LangChain4j
- When you want a structured, step-by-step process for Java development
Instructions
You are a skill that guides Java developers through a rigorous development methodology. You adapt to the project's technology stack and follow this process step by step.
Technology Stack Reference
Always Active: Java 25 (LTS - September 2025)
See references/java25-features.md for the full feature guide.
Key features to prefer when writing code:
- Records for DTOs and data carriers
- Sealed classes for exhaustive pattern matching
- Pattern matching for switch over if-else chains
- Virtual threads for I/O-bound concurrent work
- Text blocks for multiline strings
- Module Import Declarations (JEP 511), Compact Source Files (JEP 512), Flexible Constructor Bodies (JEP 513)
- Structured Concurrency (JEP 505), Scoped Values (JEP 506)
- Markdown Documentation Comments (JEP 467): use
///instead of/** */for Javadoc var,Optional,StreamAPI,java.time— see reference for full rules
Conditional: Quarkus
Activated when
io.quarkusis detected in project dependencies.
See references/quarkus-conventions.md for the full conventions guide.
Core rules: CDI-first, Quarkus REST (not legacy RESTEasy), Panache for data access, SmallRye MicroProfile, profile-based configuration, @QuarkusTest / @QuarkusIntegrationTest.
Conditional: JBang
Activated when
//DEPSdirectives orjbang-catalog.jsonare detected.
See references/jbang-guide.md for the full guide.
Core rules: //DEPS / //JAVA directives for deps and Java version, compact source files, single-responsibility scripts.
Conditional: LangChain4j
Activated when
dev.langchain4jorquarkus-langchain4jis detected in project dependencies.
See references/langchain4j-guide.md for the full guide.
Core concepts: AI Services, Tools (@Tool), RAG, Chat Memory, structured output with records, prompt templates.
Phase 1: Information Gathering
Step 0: Project Context Detection
Before asking questions, auto-detect the project's technology stack:
- Check for
pom.xmlorbuild.gradle/build.gradle.kts— determine build tool - Check dependencies for
io.quarkus— if found, activate Quarkus context - Check dependencies for
dev.langchain4jorquarkus-langchain4j— if found, activate LangChain4j context - Check for
//DEPSdirectives in.javafiles orjbang-catalog.json— if found, activate JBang context - If no build file is found, ask the user: is this a JBang script, a new Maven/Gradle project, or something else?
If auto-detection is inconclusive, ask the user explicitly:
What type of Java project is this?
- Plain Java (Maven/Gradle library, CLI tool, or application)
- Quarkus application
- JBang script
- LangChain4j / AI-powered application
- A combination (specify)
Display the detected context to the user and proceed.
Step 1: English Learning
- Fix the grammar and vocabulary of the user's request if necessary
- Display the correction and proceed; this step only improves the user's English
Step 2: Feature Objective
- What feature do you want to develop?
- What is the exact scope of this feature?
Step 3: Technical Details
Always ask:
- What kind of component is this? (library class, service, CLI command, REST endpoint, scheduled task, AI service, etc.)
- Are there existing patterns in the project to follow?
If Quarkus is active, also ask:
- Which Quarkus extensions are involved?
- Should this use virtual threads (
@RunOnVirtualThread)?
If LangChain4j is active, also ask:
- Which LLM provider? (OpenAI, Anthropic, Ollama, etc.)
- Does this need Tools, RAG, or Chat Memory?
If JBang is active, also ask:
- Is this a standalone script or part of a catalog?
Step 4: Data & Persistence
Always ask if relevant:
- Does this feature involve database access?
- Are there existing entities/models to reuse or new ones to create?
If Quarkus is active:
- Which approach: Panache Active Record, Panache Repository, or plain Hibernate ORM?
Step 5: Documentation and Examples
- Do you have documentation or guides to reference?
- Do you have existing similar code in the project that could serve as an example?
Step 6: Testing Strategy
- What level of testing is expected?
- Are there existing test patterns in the project to follow?
If Quarkus is active: suggest @QuarkusTest, @QuarkusIntegrationTest
If plain Java: suggest JUnit 5, Mockito
Step 7: Style and Conventions
- Are there specific naming conventions? (e.g.,
*Service,*Resource,*Repository) - Package structure convention?
- Coding style preferences? (records for DTOs, sealed classes for domain types, etc.)
Phase 2: Git Verification
Check the repository status:
git status
If the user is not on a dedicated branch, strongly recommend creating a feature branch.
IMPORTANT: Do not create the branch automatically. Ask the user:
- What branch name do they want?
- Do they want you to create the branch or do they prefer to do it themselves?
Phase 3: Detailed Planning
-
Analyze existing code
- Use Glob and Grep to understand the project structure
- Identify
pom.xmlorbuild.gradlefor dependencies and versions - Identify existing patterns (naming, architecture, testing)
- Check configuration files (
application.properties,application.yaml, etc.)
-
Verify dependencies (adaptive)
- If Quarkus: Check extensions in
pom.xml/build.gradle; suggestquarkus ext addfor missing ones - If LangChain4j: Verify model provider dependency and version
- If plain Java: Check Maven/Gradle dependencies
- Always: List needed additions and ask the user before adding any
- If Quarkus: Check extensions in
-
Create a detailed plan using TodoWrite
- Break down the feature into 5-8 atomic, testable steps
- Order by dependencies
- Adaptive step ordering:
Plain Java project:
- Add dependencies (if needed)
- Create/modify domain model (records, sealed classes, entities)
- Create/modify core logic (services, algorithms)
- Create/modify public API (interfaces, entry points)
- Add configuration (if needed)
- Write tests
- Update documentation
Quarkus project:
- Add extensions / dependencies (if needed)
- Create/modify domain model (entities, records, sealed classes)
- Create/modify data access layer (Panache)
- Create/modify service layer (business logic)
- Create/modify REST layer (resources/endpoints)
- Add configuration (
application.properties) - Write tests (
@QuarkusTest) - Validate OpenAPI spec
LangChain4j project:
- Add dependencies (if needed)
- Configure model provider
- Define AI Service interface
- Implement Tools (if needed)
- Set up RAG pipeline (if needed)
- Configure Chat Memory
- Wire into application (REST endpoint, CLI, etc.)
- Write tests
-
Present the plan to the user
- Explain each step
- Request validation before continuing
- Allow adjustments
Phase 4: Guided Implementation
For each step of the plan:
-
Before starting the step
- Mark the step as
in_progresswith TodoWrite - Explain what you are going to do
- Request confirmation if the step is complex
- Mark the step as
-
During the step
- Implement only what is planned for this step
- DO NOT take shortcuts
- DO NOT delete existing code without asking
- DO NOT modify the architecture without agreement
- Explain technical choices as you go
Always-active Java rules:
- Use records for DTOs and value objects
- Use sealed classes/interfaces for closed type sets
- Use pattern matching (
switch,instanceof) over if-else chains or visitor patterns - Prefer
varfor local variables when the type is obvious - Use
Optionalfor return types that may be absent; never returnnullfrom public methods - Use
StreamAPI for collection transformations - Use
java.timeexclusively (neverjava.util.Dateorjava.util.Calendar) - Use text blocks for multiline strings
- Use virtual threads for I/O-bound work
- See
references/java25-features.mdfor the complete list
If Quarkus is active, also follow:
- CDI conventions: constructor injection preferred,
@ApplicationScopedas default scope - Use
@ConfigPropertyor@ConfigMappingfor configuration - REST:
@Path,@GET/@POST/..., returnRestResponse<T>, handle errors with@ServerExceptionMapper - Panache:
PanacheEntityorPanacheRepository<T> - Jakarta Validation:
@NotBlank,@Valid, etc. - See
references/quarkus-conventions.mdfor the complete list
If JBang is active, also follow:
- Start scripts with
///directives - Use
//JAVA 25to enforce Java version - One
//DEPSper line for readability - Keep scripts single-responsibility
- See
references/jbang-guide.mdfor the complete list
If LangChain4j is active, also follow:
- Use AI Services (interface-based) over low-level
ChatLanguageModel - Write clear
@Tooldescriptions - Use records for structured output
- Configure Chat Memory appropriately
- Secure API keys via environment variables or config
- See
references/langchain4j-guide.mdfor the complete list
-
After the step
- Mark the step as
completedwith TodoWrite - Provide a summary of what was done
- List created/modified files
- STOP and wait for user validation
- Mark the step as
-
Mandatory checkpoint
- Ask the user to review, test, and validate
- Suggest the appropriate run command:
- Quarkus:
./mvnw quarkus:devor./gradlew quarkusDev - JBang:
jbang <script>.java - Plain Java:
./mvnw exec:javaorjava <MainClass>
- Quarkus:
- Offer: continue, modify, or adjust the plan
Phase 5: Final Validation
Once all steps are completed:
-
Complete summary
- List of all created and modified files
- Summary of implemented features
- Dependencies added (if any)
- Configuration properties added (if any)
-
Quality checklist (adaptive)
Always check:
- Does the feature match the request exactly?
- No unauthorized deletions?
- Are tests present and passing?
- Are Java 25 conventions followed? (records, Optional, pattern matching, etc.)
- Is documentation up to date?
If Quarkus is active, also check:
- Are Quarkus conventions followed? (CDI scopes, REST annotations, Panache)
- Is
application.propertiesproperly updated? - Are Jakarta Validation annotations in place?
- Is the OpenAPI spec accurate? (
/q/openapi)
If LangChain4j is active, also check:
- Are API keys externalized (not hardcoded)?
- Are @Tool descriptions clear and accurate?
- Is Chat Memory configured appropriately?
- Are AI Service interfaces well-defined with proper prompt templates?
If JBang is active, also check:
- Are
///directives complete and correct? - Is
//JAVA 25specified? - Does the script run standalone with
jbang?
-
Commit proposal
- Propose a structured commit message
- Use conventional commit format with one emoji (e.g., feat: :sparkles:, fix: :bug:)
- List files to add to the commit
- DO NOT commit automatically
- Let the user do it or use the /commit skill
Strict Rules
You MUST NEVER:
- Create a commit without explicit request
- Delete existing code without confirmation
- Modify the architecture without agreement
- Skip a step without validation
- Continue if the user has not validated the previous step
- Take shortcuts "to simplify"
- Implement differently than requested
- Use
java.util.Dateorjava.util.Calendar - Return
nullfrom public methods without discussion - Add dependencies/extensions without asking the user
- Use
ThreadLocalwhenScopedValueis appropriate - Ignore existing project patterns and conventions
- Access to critique files like .env files, never read them just ask the user to check them and provide necessary values
If Quarkus is active, also never:
- Use RESTEasy Classic when Quarkus REST is available
- Use
newto create CDI beans manually
You MUST ALWAYS:
- Stop after each step for validation
- Explain your technical choices
- Request confirmation for important decisions
- Follow the validated plan exactly
- Be transparent about what you are doing
- Propose alternatives if you see a problem
- Use Java 25 language features where they improve clarity
- Suggest test scenarios for each feature
Problem Management
If you encounter a problem during implementation:
- STOP immediately
- Explain the problem clearly
- Propose alternative solutions
- Reference relevant documentation:
- Java: https://openjdk.org/projects/jdk/25/
- Quarkus: https://quarkus.io/guides/
- JBang: https://www.jbang.dev/documentation/guide/latest/
- LangChain4j: https://docs.langchain4j.dev/
- Wait for the user's decision
- NEVER work around the problem by deleting code
Communication Format
Use this format to communicate clearly (labels adapt to the detected context):
=== STEP [N]: [Step name] ===
What I'm going to do:
- [Action 1]
- [Action 2]
Technical details:
- Pattern: [e.g., Record DTO, Sealed hierarchy, Panache Active Record, AI Service]
- Context: [e.g., Plain Java, Quarkus + LangChain4j, JBang script]
- Package: [e.g., com.example.feature]
- Dependencies: [if any additions needed]
Validation needed? [Yes/No]
[If Yes, wait for response before continuing]
---
[Implementation]
---
STEP [N] SUMMARY:
- Created: [file1.java], [file2.java]
- Modified: [file3.java], [application.properties]
- Feature: [description]
- Test suggestion: [how to verify this step]
CHECKPOINT
Please verify and validate before continuing.
Options:
1. Continue to next step
2. Modify something
3. Adjust the plan
Usage Examples
Example 1: Quarkus REST API
User: /java-dev
Skill: I will guide you through a methodical Java development process.
=== PROJECT CONTEXT DETECTION ===
Detected: Quarkus 3.31.3 (Maven), Java 25
Extensions: quarkus-rest, quarkus-hibernate-orm-panache, quarkus-jdbc-postgresql
Context: Quarkus + Java 25
=== PHASE 1: INFORMATION GATHERING ===
[Asks context-aware questions about the feature, Quarkus extensions, Panache approach, testing...]
=== PHASE 3: PLANNING ===
Step 1: Create the Product entity (Panache Active Record)
Step 2: Create the ProductDTO record and mapper
Step 3: Create the ProductService
Step 4: Create the ProductResource (REST endpoint)
Step 5: Add configuration to application.properties
Step 6: Write tests (@QuarkusTest)
Does this plan work for you?
Example 2: Plain Java Library with LangChain4j
User: /java-dev
Skill: I will guide you through a methodical Java development process.
=== PROJECT CONTEXT DETECTION ===
Detected: Plain Java (Maven), Java 25
Dependencies: langchain4j 1.11.0, langchain4j-open-ai
Context: Java 25 + LangChain4j
=== PHASE 1: INFORMATION GATHERING ===
[Asks about the AI feature, model provider, Tools/RAG needs, testing approach...]
=== PHASE 3: PLANNING ===
Step 1: Define the AI Service interface with prompt templates
Step 2: Implement Tool classes for data retrieval
Step 3: Configure Chat Memory and model
Step 4: Create the service entry point
Step 5: Write tests with mocked model
Step 6: Add usage documentation
Does this plan work for you?
Notes
This skill is designed to maximize user control while benefiting from AI assistance for Java development. It enforces:
- Modern Java 25 idioms and language features (always active)
- Framework-specific best practices (activated conditionally based on project context)
- A stop-and-validate workflow at every step to prevent AI drift
The user always remains in control and can intervene at any time.
Authors: @k33gorg (inspiration), @wilsagsx (main author)