api-contract-review
Review REST API contracts for HTTP semantics, versioning, backward compatibility, and response consistency. Use when user asks…
Analyze Java project architecture at macro level - package structure, module boundaries, dependency direction, and layering. Use when user asks "review architecture", "check structure", "package organization", or when evaluating if a codebase follows clean architecture
Claude Code
$ npx -y skills add decebals/claude-code-java --skill architecture-review --agent claude-code
Codex
$ npx skills add decebals/claude-code-java --skill architecture-review -a codex -y
Cursor
$ npx skills add decebals/claude-code-java --skill architecture-review -a cursor -y
Gemini CLI
$ npx skills add decebals/claude-code-java --skill architecture-review -a gemini-cli -y
GitHub Copilot
$ npx skills add decebals/claude-code-java --skill architecture-review -a github-copilot -y
OpenCode
$ npx skills add decebals/claude-code-java --skill architecture-review -a opencode -y
Windsurf
$ npx skills add decebals/claude-code-java --skill architecture-review -a windsurf -y
name: architecture-review description: Analyze Java project architecture at macro level - package structure, module boundaries, dependency direction, and layering. Use when user asks "review architecture", "check structure", "package organization", or when evaluating if a codebase follows clean architecture principles. license: MIT
Analyze project structure at the macro level - packages, modules, layers, and boundaries.
---
| Smell | Symptom | Impact | |-------|---------|--------| | Package-by-layer bloat | `service/` with 50+ classes | Hard to find related code | | Domain → Infra dependency | Entity imports `@Repository` | Core logic tied to framework | | Circular dependencies | A → B → C → A | Untestable, fragile | | God package | `util/` or `common/` growing | Dump for misplaced code | | Leaky abstractions | Controller knows SQL | Layer boundaries violated |
---
com.example.app/
├── controller/
│ ├── UserController.java
│ ├── OrderController.java
│ └── ProductController.java
├── service/
│ ├── UserService.java
│ ├── OrderService.java
│ └── ProductService.java
├── repository/
│ ├── UserRepository.java
│ ├── OrderRepository.java
│ └── ProductRepository.java
└── model/
├── User.java
├── Order.java
└── Product.java**Pros**: Familiar, simple for small projects **Cons**: Scatters related code, doesn't scale, hard to extract modules
com.example.app/
├── user/
│ ├── UserController.java
│ ├── UserService.java
│ ├── UserRepository.java
│ └── User.java
├── order/
│ ├── OrderController.java
│ ├── OrderService.java
│ ├── OrderRepository.java
│ └── Order.java
└── product/
├── ProductController.java
├── ProductService.java
├── ProductRepository.java
└── Product.java**Pros**: Related code together, easy to extract, clear boundaries **Cons**: May need shared kernel for cross-cutting concerns
com.example.app/
├── domain/ # Pure business logic (no framework imports)
│ ├── model/
│ │ └── User.java
│ ├── port/
│ │ ├── in/ # Use cases (driven)
│ │ │ └── CreateUserUseCase.java
│ │ └── out/ # Repositories (driving)
│ │ └── UserRepository.java
│ └── service/
│ └── UserDomainService.java
├── application/ # Use case implementations
│ └── CreateUserService.java
├── adapter/
│ ├── in/
│ │ └── web/
│ │ └── UserController.java
│ └── out/
│ └── persistence/
│ ├── UserJpaRepository.java
│ └── UserEntity.java
└── config/
└── BeanConfiguration.java**Key rule**: Dependencies point inward (adapters → application → domain)
---
┌─────────────────────────────────────────┐ │ Frameworks │ ← Outer (volatile) ├─────────────────────────────────────────┤ │ Adapters (Web, DB) │ ├─────────────────────────────────────────┤ │ Application Services │ ├─────────────────────────────────────────┤ │ Domain (Core Logic) │ ← Inner (stable) └─────────────────────────────────────────┘ Dependencies MUST point inward only. Inner layers MUST NOT know about outer layers.
// ❌ Domain depends on infrastructure
package com.example.domain.model;
import org.springframework.data.jpa.repository.JpaRepository; // Framework leak!
import javax.persistence.Entity; // JPA in domain!
@Entity
public class User {
// Domain polluted with persistence concerns
}
// ❌ Domain depends on adapter
package com.example.domain.service;
import com.example.adapter.out.persistence.UserJpaRepository; // Wrong direction!
// ✅ Domain defines port, adapter implements
package com.example.domain.port.out;
public interface UserRepository { // Pure interface, no JPA
User findById(UserId id);
void save(User user);
}---
---
src/main/java/com/example/
└── app/
├── User.java
├── UserController.java
├── UserService.java
├── UserRepository.java
├── Order.java
├── OrderController.java
├── ... (100+ files in one package)**Fix**: Introduce package structure (start with by-feature)
util/ ├── StringUtils.java ├─
Agent Skills for Java projects, following the open Agent Skills specification This project is not affiliated with Anthropic.
Review REST API contracts for HTTP semantics, versioning, backward compatibility, and response consistency. Use when user asks…
Generate changelogs from git commits. Use when user says "generate changelog", "update changelog", "what changed since last…
Clean Code principles (DRY, KISS, YAGNI), naming, function design and readability. Use when code is hard to read, with long…
Review Java concurrency code for thread safety, race conditions, deadlocks, and modern patterns (Virtual Threads,…
Common design patterns with Java examples (Factory, Builder, Strategy, Observer, Decorator, etc.). Use when user asks "implement…
Generate conventional commit messages for Java projects. Use when user says "commit", "create commit", "commit changes", or after…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.