A collection of Claude Code plugins that automate the AI Unified Process (AIUP) — a structured workflow for taking a software project from raw vision to fully implemented, tested code, with requirements at the center at every step.
AI Unified Process is a disciplined AI-assisted development methodology where every project starts with a written vision, proceeds through requirements, an entity model, and use case specifications, and only then enters implementation. Nothing gets built without a use case. Nothing reaches production without tests traceable to requirements.
This prevents the common failure mode of AI-assisted development: jumping straight to code from a vague prompt, producing something that half-works and can't be maintained.
The methodology is based on the phases of the Rational Unified Process — Inception, Elaboration, Construction, Transition — but adapted for AI-driven workflows.
Inception Elaboration Construction
───────────────── ────────────────────────────────── ────────────────────────────────────────────────
/requirements → /entity-model → /use-case-diagram → /use-case-spec → /flyway-migration
↘ /implement
↘ /browserless-test
↘ /playwright-test
For an Angular/JPA project, the inception and elaboration parts look the same, as they are part of the aiup- core plugin. The construction, however, is optimized for tech stack SpringBoot with JPA and Angular in frontend. It tests the frontend with Angular vitest unittests, the backend with spring-boot integrations tests and the whole app with playwright e2e tests. Further it takes existing backend architecture, a hexagonal multi-module Maven reactor rather than a single flat module into consideration.
Inception Elaboration Construction
───────────────── ────────────────────────────────── ────────────────────────────────────────────────
/requirements → /entity-model → /use-case-diagram → /use-case-spec → /flyway-migration
↘ /implement
↘ /spring-boot-test
↘ /vitest-test
↘ /playwright-test
Each skill picks up where the previous one left off using the files produced along the way (docs/vision.md,
docs/requirements.md, docs/entity_model.md, docs/use_cases.puml, docs/use_cases/UC-*.md,
docs/test_cases/TC-*.md). At any point you can
inspect or manually edit these files before continuing.
Inheriting a legacy codebase? Start with /reverse-engineer — it walks the existing code, configuration, and
schema and produces the same docs/use_cases.puml, docs/use_cases/UC-*.md, and docs/entity_model.md artifacts the
forward workflow would have produced, giving you a documented baseline to work from.
| Inception | Elaboration | Construction | Transition | |
|---|---|---|---|---|
| aiup-core | /requirements |
/entity-model/use-case-diagram |
/use-case-spec/test-case |
|
| aiup-vaadin-jooq | /flyway-migration/implement/browserless-test/playwright-test |
|||
| aiup-angular-jpa | /flyway-migration/implement/spring-boot-test/vitest-test/playwright-test |
- Claude Code installed and running in your project
- A
docs/vision.mdfile at the root of your project describing the product vision, target users, and high-level goals (the/requirementsskill reads this file to derive your requirements catalog — the richer it is, the better the results) - For the Vaadin/jOOQ plugin: a Maven or Gradle project with Vaadin and jOOQ already on the classpath
- For the Angular/JPA plugin: a Maven or Gradle backend project with Spring Boot, Spring Data JPA, and Flyway (flat single module or a hexagonal domain/business/postgres/api/app-style multi-module layout), plus a separate Angular (standalone components) frontend project
/plugin marketplace add ai-unified-process/marketplace
/plugin install aiup-core
/plugin install aiup-vaadin-jooq # for a Vaadin + jOOQ project
/plugin install aiup-angular-jpa # for an Angular + JPA project
Install only aiup-core if you are using a different tech stack — the methodology skills are stack-agnostic.
Install exactly one stack plugin alongside it, matching your project.
Start Claude Code in your project and run:
/requirements
If Claude begins reading docs/vision.md and proposing a requirements catalog, the skills are installed correctly.
The AI Unified Process is a methodology, not a Claude-only product. Agent Skills (SKILL.md) is now an open standard,
and the same skill folders in this marketplace work natively — with auto-triggering by description — in OpenAI Codex
CLI, Cursor, GitHub Copilot, Gemini CLI, and OpenCode. Pair them with the
MCP server configs and the whole workflow runs unchanged.
Tessl is an agent-agnostic package manager and registry for skills: it installs versioned skills and
wires the MCP servers into the correct per-agent directory for whichever coding agent it detects. All plugins are
published to the Tessl registry as aiup/aiup-core, aiup/aiup-vaadin-jooq, and
aiup/aiup-angular-jpa, so
this is the simplest way to adopt
the workflow outside Claude Code — no manual cloning or per-tool MCP translation.
# one-time: configure your agent(s) — creates a tessl.json manifest at the repo root
tessl init --agent claude-code # or: cursor, gemini, codex, copilot, copilot-vscode, agents
# (repeat --agent to set up several at once)
# install the plugins from the registry (latest, or pin @version)
tessl install aiup/aiup-core
tessl install aiup/aiup-vaadin-jooq # for a Vaadin + jOOQ project
tessl install aiup/aiup-angular-jpa # for an Angular + JPA projectInstalled plugins land in .tessl/plugins/ and are tracked in tessl.json, so versions are pinned and reproducible
across your team. New versions are published automatically on every change by
.github/workflows/publish-tessl.yml, so tessl install always resolves the
latest release.
What transfers across agents:
- Skills and methodology — fully portable; every supported agent auto-triggers them by their
description. - MCP servers — Tessl wires them into any agent that supports MCP. Most
aiup-vaadin-jooqservers are HTTP (fine on the agents listed above); a stdio-only client needs an HTTP↔stdio bridge (see Caveats). - Slash-command routing — the dispatcher behavior (
/implement→ stack-specific skill) is a Claude Code idiom. Other agents read the same Markdown but may not honor/-routing identically — invoke skills by intent instead (say "implement UC-001" rather than relying on the dispatcher).
| Component | Portable? | Notes |
|---|---|---|
tessl install aiup/… |
Yes | Works on Claude Code, Cursor, Gemini, Codex, and Copilot — installs skills + MCP |
MCP servers (aiup-*/.mcp.json) |
Yes | Standard MCP — reformat the config per host |
SKILL.md skill folders (aiup-*/skills/*/) |
Yes | Native support in Codex CLI, Cursor, Copilot, Gemini CLI, and OpenCode |
Auto-triggering by description |
Yes | All tools above match user intent against the YAML frontmatter description |
| Workflow methodology (vision → requirements → … → tests) | Yes | The whole point — tool-agnostic |
/plugin marketplace add … install |
Partial | Works in Claude Code and GitHub Copilot; elsewhere use Tessl or clone this repo |
Prefer not to use Tessl? You can wire the skills in by hand:
git clone https://github.com/ai-unified-process/marketplace.gitnext to your project (or add as a submodule).- Make the skill folders visible to your tool — either copy
aiup-core/skills/*/andaiup-vaadin-jooq/skills/*/into your tool's skills directory, or symlink them (e.g.ln -s /path/to/marketplace/aiup-core/skills/requirements ~/.codex/skills/requirements). - Configure the MCP servers from
aiup-core/.mcp.jsonandaiup-vaadin-jooq/.mcp.jsonin your tool's MCP config file. - Trigger skills the same way you would in Claude Code — say "write requirements" or invoke
/requirements. The tool matches your prompt against each skill'sdescriptionand loads the matchingSKILL.md. File outputs (docs/requirements.md,docs/entity_model.md,docs/use_cases.puml,docs/use_cases/UC-*.md) are identical regardless of tool, so the chain composes even if you mix tools across steps.
- Skills: drop folders into
~/.codex/skills/(user-global, default$CODEX_HOME/skills) or repo-local.agents/skills/. Codex matches user prompts against each skill'sdescriptionautomatically; toggle per skill withallow_implicit_invocation. - MCP:
~/.codex/config.tomlunder[mcp_servers.<name>]blocks. Translateaiup-vaadin-jooq/.mcp.jsonlike this:
[mcp_servers.Vaadin]
url = "https://mcp.vaadin.com/docs"
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]See the Codex skills docs and the Codex config reference for the latest details.
- Skills: drop folders into project-local
.cursor/skills/(Cursor 2.4+). Cursor matches against each skill'sdescriptionautomatically. Note: there is no global skills directory yet — copy or symlink the marketplace skills into each project. - MCP: project-level
.cursor/mcp.jsonor global~/.cursor/mcp.json— usesmcpServerswith the same shape as Claude's.mcp.json(urlfor HTTP servers,command/argsfor stdio). Drop in the contents ofaiup-vaadin-jooq/.mcp.jsondirectly.
-
Plugin marketplace: Copilot understands Claude Code's marketplace commands directly, so you can install the plugins the same way as in Claude Code — no manual skill copying or MCP translation:
/plugin marketplace add ai-unified-process/marketplace /plugin install aiup-core /plugin install aiup-vaadin-jooq # or: aiup-angular-jpaThis pulls in the skills and the MCP server configs from each plugin's
.mcp.json. -
Skills (manual alternative): Copilot reads from
.github/skills/,.claude/skills/, and.agents/skills/— pick one. Available in Copilot for VS Code, Visual Studio 2026, and the cloud agent. -
MCP (manual alternative): workspace-level
.vscode/mcp.json(commit it for your team), or user-level via MCP: Open User Configuration. Use"type": "http"for remote servers and"command"/"args"for stdio.
- Skills: drop folders into
.gemini/skills/(project) or~/.gemini/skills/(global). Gemini CLI matches prompts against each skill'sdescriptionautomatically. - MCP:
~/.gemini/settings.jsonmcpServersobject — same shape as Claude's.mcp.json, so it is a near-direct copy.
- Skills: drop folders into project-local
.opencode/skills/or global~/.config/opencode/skills/. OpenCode also scans.claude/skills/and.agents/skills/(project and home directory), so skills already installed for Claude Code — or via Tessl with--agent claude-codeor--agent agents— are picked up without copying. Skills are loaded on demand through OpenCode's built-inskilltool, matched against each skill'sdescription; access can be restricted per skill withpermission.skillpatterns inopencode.json. - MCP:
opencode.jsonat the project root (or~/.config/opencode/opencode.jsonglobally) under the"mcp"key — use"type": "remote"withurlfor HTTP servers and"type": "local"with acommandarray for stdio. Translateaiup-vaadin-jooq/.mcp.jsonlike this:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"Vaadin": { "type": "remote", "url": "https://mcp.vaadin.com/docs" },
"playwright": { "type": "local", "command": ["npx", "@playwright/mcp@latest"] }
}
}See the OpenCode skills docs and the OpenCode MCP docs for the latest details.
- Argument passing (
/use-case-spec UC-001) works everywhere but the syntax varies — Codex, Gemini CLI, and Cursor accept positional arguments after the skill name; in Copilot, pass the ID inline in the chat message after invoking the skill; in OpenCode, skills are not slash commands — state the ID in your prompt ("specify use case UC-001") and the agent loads the matching skill itself. - HTTP MCP servers: most aiup-vaadin-jooq servers are HTTP. Every tool listed above supports HTTP MCP. If you use a client that is stdio-only, you need an HTTP-to-stdio MCP bridge.
- Cursor has no global skills directory — copy or symlink the marketplace skills into each project's
.cursor/skills/. - Methodology stays the same: the file artifacts (
docs/*.md,docs/use_cases/UC-*.md, Flyway migrations) are the contract between steps. As long as a step produces the right file, the next step works regardless of which tool ran the previous one.
Here is a complete end-to-end example of building a hotel reservation system.
/requirements
Claude reads docs/vision.md, identifies functional requirements (as user stories), non-functional requirements (
measurable quality attributes), and constraints, then writes them into docs/requirements.md as three separate tables.
Every requirement gets a stable ID (FR-001, NFR-001, CON-001) and a status. Review the catalog before continuing.
/entity-model
Claude reads docs/requirements.md, identifies the domain entities and their relationships, then writes
docs/entity_model.md with a Mermaid ER diagram and one attribute table per entity (data type, length/precision,
validation rules). Approve the model before moving to use cases.
/use-case-diagram
Claude reads docs/requirements.md, identifies actors and use cases, then writes a PlantUML diagram at
docs/use_cases.puml. Each use case gets a stable ID (UC-001, UC-002, …) that traces back to one or more functional
requirements.
/use-case-spec UC-001
/use-case-spec UC-001 UC-002 UC-003 # multiple at once
Claude writes a detailed specification per use case into docs/use_cases/ covering actors, preconditions, the main
success scenario as numbered steps, alternative flows for error conditions, postconditions, and business rules. Each
spec is a single document — Claude will not bundle multiple use cases together.
/flyway-migration
Claude reads docs/entity_model.md and writes versioned Flyway migrations (V001__create_*.sql, V002__…) into
src/main/resources/db/migration. Primary keys use sequences (no auto-increment), foreign keys and check constraints
are derived from the entity model. Run mvn flyway:migrate to apply.
/implement UC-001
Claude reads the use case spec, the entity model, and existing code to learn your conventions, then implements the data access layer with jOOQ and the UI with Vaadin. It compiles after each layer and stops on errors. It does not write tests — those have dedicated skills.
/browserless-test UC-001
Claude generates server-side Vaadin tests using the official Vaadin Browserless framework
(com.vaadin:browserless-test-junit6) — no browser required. Tests cover navigation, component interactions, form
validation, grid operations, and notifications. Test data is seeded via Flyway migrations under
src/test/resources/db/migration; transaction boundaries are preserved (no @Transactional on tests).
Browserless Testing is free and open source under Apache 2.0 since Vaadin 25.1. It is the official successor to UI Unit Testing (formerly part of the commercial TestBench) and replaces the community Karibu Testing library as the recommended server-side testing approach. The legacy
/karibu-testskill is still installed for existing projects but is no longer recommended for new code — use/browserless-test.
/playwright-test UC-001 # use case test — integration tests for one view
/playwright-test TC-001 # test case journey — one end-to-end flow across views
Claude generates browser-based tests against the running application (default: http://localhost:8080) using
the Drama Finder library for type-safe, accessibility-first element wrappers. Tests are written black-box — they do not
look at the implementation — and never use raw Playwright locators or Thread.sleep().
The skill dispatches on the argument: a UC-* ID produces integration tests for a single view derived from the use
case specification, while a TC-* ID reads a test case document from docs/test_cases/TC-*.md (a user journey
chaining several use cases, created with /test-case) and produces one journey test class walking the whole flow. Test classes are named
after the artifact: UC-001 → UC001CreateReservationIT, TC-001 → TC001CustomerOnboardingIT.
Purpose: Turns a docs/vision.md document into a structured docs/requirements.md catalog with functional
requirements, non-functional requirements, and constraints.
Usage:
/requirements
What it does:
- Reads
docs/vision.mdto understand product mission, users, and goals - Extracts functional requirements as user stories (
As a [role], I want [goal] so that [benefit]) with stable IDs ( FR-001, FR-002, …), priority, and status - Extracts non-functional requirements as measurable quality attributes with category (Performance, Security, Availability, …), priority, and status
- Extracts constraints (technical, regulatory, business) with stable IDs (CON-001, CON-002, …)
- Writes all three as separate tables in
docs/requirements.md— never mixing requirement types in one table
Input: docs/vision.md
Output: docs/requirements.md
Plugin: aiup-core
Purpose: Designs the domain entity model with a Mermaid ER diagram and per-entity attribute tables.
Usage:
/entity-model
What it does:
- Reads
docs/requirements.mdto identify the domain entities implied by the user stories - Draws a Mermaid
erDiagramshowing entities and their relationships (cardinality, role names) — without listing attributes inside the diagram - Produces one attribute table per entity with columns for attribute name, description, data type, length/precision, and validation rules (Primary Key, Sequence, NOT NULL, UNIQUE, foreign keys, check constraints)
- Writes the result to
docs/entity_model.md
Input: docs/requirements.md
Output: docs/entity_model.md
Plugin: aiup-core
Purpose: Generates a PlantUML use case diagram showing actors, use cases, and their relationships derived from the requirements catalog.
Usage:
/use-case-diagram
What it does:
- Reads
docs/requirements.mdto identify actors and the use cases they participate in - Assigns stable IDs (UC-001, UC-002, …), each tracing to at least one functional requirement
- Writes a
.pumlfile atdocs/use_cases.pumlusingleft to right directionand arectangle "System Name"boundary - Uses standard PlantUML syntax only — no implementation details in use case names
Input: docs/requirements.md
Output: docs/use_cases.puml
Plugin: aiup-core
Purpose: Writes detailed specifications for one or more use cases, each as a separate document under
docs/use_cases/.
Usage:
/use-case-spec UC-001
/use-case-spec UC-001 UC-002 UC-003 # multiple use cases at once
What it does:
- Reads
docs/use_cases.pumlanddocs/requirements.mdto scope the use case - Writes one document per use case under
docs/use_cases/using a fixed template covering: Overview (ID, name, primary actor, goal, status), Preconditions, Main Success Scenario (numbered steps), Alternative Flows (for error conditions), Postconditions, and Business Rules - Keeps flow steps free of implementation details
- Refuses to bundle multiple use cases into a single document
Input: Use case ID(s) as argument
Output: docs/use_cases/UC-XXX-*.md (one file per use case)
Plugin: aiup-core
Purpose: Writes an end-to-end test case document (TC-*.md) that chains several use cases into one user journey —
the input that /playwright-test TC-XXX automates as a journey test.
Usage:
/test-case UC-001 UC-004 # journey chaining the listed use cases
What it does:
- Reads the specification of every listed use case from
docs/use_cases/(and refuses to chain unspecified ones) - Assigns the next free
TC-XXXID and names the file after the journey's goal (e.g.docs/test_cases/TC-001-customer-onboarding.md) - Writes the document with a fixed template: Overview (ID, Goal, Priority, Status), Roles, Preconditions (each
naming its seeded data source), a Flow table (
Step | Name | Description | Test Data | Use Case), Validation, and Postconditions (the data the journey leaves behind — the automated test's cleanup contract) - Orders the Flow as the business journey, inserts verification steps between actions, links each action step to its use case spec, and uses literal test data values so the document is executable
- Keeps per-use-case detail out — field-level validations belong to the use case tests; the journey and its end state are the subject
Input: Use case IDs as arguments
Output: docs/test_cases/TC-XXX-*.md (one journey per file)
Plugin: aiup-core
Purpose: Recovers AIUP artifacts (use case diagram, per-use-case specifications, entity model) from an existing codebase so legacy projects can join the AIUP workflow without rewriting documentation by hand.
Usage:
/reverse-engineer
What it does:
- Detects the stack and locates entry points (controllers, routes, view classes), the data layer (ORM models or schema migrations), and authentication/authorization configuration
- Identifies actors from role/authority definitions, authentication boundaries, and external system integrations
- Groups entry points by user goal — not one use case per HTTP endpoint — and assigns stable IDs (
UC-001,UC-002, …) - Writes a PlantUML use case diagram, one specification document per use case, and an entity model with a Mermaid ER
diagram, all in the exact formats produced by
/use-case-diagram,/use-case-spec, and/entity-model - Cross-validates that the three documents agree (every actor has a spec, every UC ID has a file, every entity referenced in a spec exists in the model)
- Reports gaps honestly — endpoints it couldn't classify, use cases where the success scenario was hard to recover
Input: Existing source tree
Output: docs/use_cases.puml, docs/use_cases/UC-XXX-*.md, docs/entity_model.md
Plugin: aiup-core
Purpose: Generates versioned Flyway migration scripts (V*.sql) that create the schema described in
docs/entity_model.md.
Usage:
/flyway-migration
What it does:
- Reads
docs/entity_model.mdand translates each entity into aCREATE TABLEstatement - Creates a
CREATE SEQUENCEfor every primary key (no auto-increment) - Adds NOT NULL, UNIQUE, CHECK, and foreign key constraints from the entity model's validation rules
- Names files using the Flyway convention
V001__create_<table>_table.sql,V002__… - Writes scripts to
src/main/resources/db/migration - Will not drop existing tables without explicit confirmation
Input: docs/entity_model.md
Output: src/main/resources/db/migration/V*.sql
Plugin: aiup-vaadin-jooq
Purpose: Implements a use case end-to-end using Vaadin for the UI layer and jOOQ for the data access layer.
Usage:
/implement UC-001
What it does:
- Reads the use case specification from
docs/use_cases/and the entity model fromdocs/entity_model.md - Reads existing code first to match conventions before creating new files
- Implements the data access layer using jOOQ — verifies it compiles before continuing
- Implements the Vaadin view, wires it to the data access layer, and verifies the full implementation compiles
- Consults the Vaadin, jOOQ, and JavaDocs MCP servers for current API documentation
- Does not create test classes — use
/browserless-testand/playwright-testfor that
Input: Use case ID as argument
Output: Vaadin view + jOOQ data access classes
Plugin: aiup-vaadin-jooq
Purpose: Creates server-side unit tests for Vaadin views using the official Vaadin Browserless framework
(com.vaadin:browserless-test-junit6) — no browser, no WebDriver, no servlet container. Browserless Testing is free
and open source under Apache 2.0 since Vaadin 25.1.
Usage:
/browserless-test UC-001
What it does:
- Reads the use case spec to derive the test scenarios
- Generates a JUnit 5 test class extending
SpringBrowserlessTest(annotated@SpringBootTest) - Uses the
$()/$view()component query API for lookups and thetest()wrapper for interactions - Seeds test data via Flyway migrations under
src/test/resources/db/migration— never via Mockito, services, orDSLContext - Cleans up only test-created data in
@AfterEach(does not wipe the schema) - Preserves transaction boundaries — tests are not annotated
@Transactional - Reads component state through the component's Java API; reserves
test(...)for actions
Input: Use case ID as argument
Output: Browserless test class under src/test/java
Plugin: aiup-vaadin-jooq
Use
/browserless-testinstead for new projects. Since Vaadin 25.1 the official Browserless Testing framework is free and open source under Apache 2.0, making the community Karibu Testing library redundant. This skill is retained for existing codebases that already use Karibu.
Purpose: Creates Karibu unit tests for Vaadin views — server-side tests that exercise the full Vaadin component tree without launching a browser.
Usage:
/karibu-test UC-001
What it does:
- Reads the use case spec to derive the test scenarios
- Generates a JUnit 5 test class using Karibu helpers (
LocatorJ,GridKt,NotificationsKt,ConfirmDialogKt) - Seeds test data via Flyway migrations under
src/test/resources/db/migration— never via Mockito, services, orDSLContext - Cleans up only test-created data in
@AfterEach(does not wipe the schema) - Preserves transaction boundaries — tests are not annotated
@Transactional - Uses the KaribuTesting MCP server for documentation and code generation
Input: Use case ID as argument
Output: Karibu test class under src/test/java
Plugin: aiup-vaadin-jooq
Purpose: Creates browser-based tests for Vaadin views using Playwright with the Drama Finder library for type-safe, accessibility-first element wrappers. Covers two test types, dispatched on the argument:
| Input | Artifact | Test type |
|---|---|---|
UC-* |
Use case specification (docs/use_cases/UC-*.md) |
Use case test — integration tests for one view, grouped in @Nested classes |
TC-* |
Test case document (docs/test_cases/TC-*.md) |
Test case journey — one end-to-end test walking the whole flow across views |
Usage:
/playwright-test UC-001 # integration tests for one view
/playwright-test TC-001 # end-to-end journey test across views
What it does:
- Decides the test type from the argument (
UC-*vsTC-*), then reads the matching document to derive the tests - Generates a test extending
AbstractBasePlaywrightIT(handles browser lifecycle, page creation, and Vaadin synchronization automatically) - For a use case: covers the main success scenario, alternative flows, and validation rules in
@Nestedclasses - For a test case journey: implements the whole Flow as a single
@Testmethod with one private step method per flow row, navigating between views through the UI like a user would — one test class per test case - Names the test class after the artifact:
UC<id><PascalCaseName>ITfor use cases (e.g.UC-001-create-reservation.md→UC001CreateReservationIT) andTC<id><PascalCaseName>ITfor test cases (e.g.TC-001-customer-onboarding.md→TC001CustomerOnboardingIT) - Writes black-box tests against the running application (default:
http://localhost:8080) — does not consult the implementation - Uses Drama Finder element wrappers exclusively — never raw Playwright locators, XPath,
Thread.sleep(), orpage.waitForTimeout() - Reuses existing test data from Flyway migrations; cleans up only test-created data in
@AfterEach - Looks up Drama Finder method signatures via the bundled API reference, falling back to the JavaDocs MCP server
Input: Use case ID (UC-*) or test case ID (TC-*) as argument
Output: Playwright test under src/test/java — UC*IT.java for use case tests, TC*IT.java for journeys
Plugin: aiup-vaadin-jooq
Purpose: Generates versioned Flyway migration scripts (V*.sql) that create the schema described in
docs/entity_model.md, using snake_case column names so they match Hibernate's default JPA field mapping.
Detects whether the backend is a flat single module or a hexagonal multi-module Maven reactor and places
migrations in the correct location (the persistence-adapter module's db/migration directory for a
hexagonal layout).
Usage:
/flyway-migration
Input: docs/entity_model.md
Output: backend/src/main/resources/db/migration/V*.sql (flat) or
<persistence-adapter-module>/src/main/resources/db/migration/V*.sql (hexagonal)
Plugin: aiup-angular-jpa
Purpose: Implements a use case end-to-end across a Spring Boot backend — flat single-module or hexagonal multi-module (ports and adapters enforced at the Maven-module boundary) — and an Angular frontend.
Usage:
/implement UC-001
What it does:
- Reads the use case specification from
docs/use_cases/and the entity model fromdocs/entity_model.md - Detects the backend's module layout before writing any backend code, and follows whichever asymmetric hexagonal conventions the project already established (e.g. outbound-only ports, no inbound use-case interface) rather than "fixing" them into textbook full hexagonal
- Implements the backend per the detected pattern — pure domain record, service, outbound port, DTO, JPA adapter, and REST controller for hexagonal; entity/repository/service/controller for flat — verifying compilation at each module boundary
- Implements the frontend: a standalone Angular component using
signal()state and a hand-writtenHttpClientservice with a colocated*.model.ts - Does not create test classes — use
/spring-boot-test,/vitest-test, and/playwright-testfor that
Input: Use case ID as argument
Output: Backend classes per detected pattern, plus an Angular page/component
Plugin: aiup-angular-jpa
Purpose: Creates Spring Boot tests for REST controllers and Spring Data JPA repositories, detecting and following whichever integration-test convention a project already uses — RestAssured + Testcontainers, or MockMvc — rather than assuming one.
Usage:
/spring-boot-test UC-001
What it does:
- Reads the use case spec to derive the test scenarios
- Detects the existing test convention; if neither exists yet, defaults to RestAssured + Testcontainers (exercises the real HTTP wire format and a real Postgres container, matching the convention this plugin was built from)
- For a hexagonal layout, places integration tests in the composition-root module and any
@DataJpaTestin the persistence-adapter module (the only one with the JPA classpath) - Never mocks the repository/service layer with Mockito
Input: Use case ID as argument
Output: Spring Boot test class under the composition-root (hexagonal) or backend/src/test/java (flat)
Plugin: aiup-angular-jpa
Purpose: Creates Vitest component tests for Angular views using Angular's own testing idioms — TestBed,
ComponentFixture, and HttpTestingController — rather than porting React Testing Library patterns.
Usage:
/vitest-test UC-001
What it does:
- Reads the use case spec to derive the test scenarios
- Generates a test file named
UC-XXX-<slug>.spec.ts, colocated with the component/service, with a top-leveldescribeblock named after the use case - Mocks HTTP calls via
provideHttpClientTesting()/HttpTestingController, verified withhttpMock.verify() - Reads state via signal getters and asserts on rendered DOM via native Angular queries
Input: Use case ID as argument
Output: Vitest spec file colocated with the component (frontend/src/**/*.spec.ts)
Plugin: aiup-angular-jpa
Purpose: Creates browser-based end-to-end tests for Angular views using Playwright's native accessibility-first locators — no wrapper library needed. Since these projects typically have no existing e2e tooling, the skill checks for a conflicting framework (Cypress, Protractor) before scaffolding Playwright.
Usage:
/playwright-test UC-001
What it does:
- Reads the use case spec to derive the test scenarios
- Checks for an existing e2e framework before assuming Playwright is unclaimed
- Generates a test file grouping scenarios in a
test.describeblock per use case, tagged{ tag: "@UC-XXX" } - Writes black-box tests against the running Angular dev server (default:
http://localhost:4200) and backend - Uses Playwright's own locators exclusively — never CSS selectors, XPath, or
waitForTimeout()
Input: Use case ID as argument
Output: Playwright test file under frontend/tests/e2e/
Plugin: aiup-angular-jpa
After running the full workflow for a project, your tree will look like this:
your-project/
├── docs/
│ ├── vision.md ← you maintain this
│ ├── requirements.md ← produced by /requirements
│ ├── entity_model.md ← produced by /entity-model
│ ├── use_cases.puml ← produced by /use-case-diagram
│ ├── use_cases/ ← produced by /use-case-spec
│ │ ├── UC-001-create-reservation.md
│ │ ├── UC-002-cancel-reservation.md
│ │ └── ...
│ └── test_cases/ ← produced by /test-case — journeys for /playwright-test TC-*
│ └── TC-001-book-and-check-in.md
├── src/
│ ├── main/
│ │ ├── java/ ← produced by /implement
│ │ └── resources/
│ │ └── db/migration/ ← produced by /flyway-migration
│ │ ├── V001__create_room_type_table.sql
│ │ └── ...
│ └── test/
│ ├── java/ ← produced by /browserless-test, /playwright-test
│ └── resources/
│ └── db/migration/ ← test data seeds
└── CLAUDE.md
The tree above shows the Vaadin/jOOQ shape. aiup-angular-jpa supports that same flat split or a hexagonal multi-module
Maven reactor (domain/business/postgres/api/app), detected automatically. See each plugin's own
README for its exact project-structure tree.
Create a CLAUDE.md at your project root. Claude loads this automatically at the start of every session:
# Project Context
This project follows the AI Unified Process. Read `docs/vision.md`, `docs/requirements.md`,
and `docs/entity_model.md` for product context before making decisions.
## AIUP Workflow
1. `/requirements` → derives `docs/requirements.md` from `docs/vision.md`
2. `/entity-model` → derives `docs/entity_model.md` from requirements
3. `/use-case-diagram` → produces `docs/use_cases.puml`
4. `/use-case-spec UC-XX` → produces `docs/use_cases/UC-XX-*.md`
5. `/flyway-migration` → produces `src/main/resources/db/migration/V*.sql`
6. `/implement UC-XX` → implements the use case (Vaadin + jOOQ)
7. `/browserless-test UC-XX` → server-side unit tests (recommended, free since Vaadin 25.1)
8. `/playwright-test UC-XX` → browser-based integration tests (or `TC-XX` for an end-to-end journey)
Never skip the spec for a use case before implementing it.
Always read the entity model before writing data access code.The /requirements skill relies heavily on this file. Include at minimum:
# Vision: <Product Name>
## Mission
<One paragraph on what this product does and the problem it solves.>
## Target Users
- <Primary user role and what they need from the system>
- <Secondary user roles>
## Goals
- <Measurable business or product goals>
## Scope
- In scope: <high-level capabilities>
- Out of scope: <explicit non-goals>
## Constraints
- <Regulatory, technical, organizational constraints>Maintain traceability. Every entity should map to at least one functional requirement; every use case should trace to one or more FRs; every test should reference a use case ID. The skills produce stable IDs (FR-001, UC-001, …) — keep them.
Edit between steps. The intermediate documents (requirements.md, entity_model.md, use_cases.puml) are designed
to be reviewed and corrected by hand. Do not skip the review.
Re-run upstream skills when requirements change. If a new functional requirement appears, re-run /entity-model and
/use-case-diagram so the downstream artifacts stay consistent. Re-running is cheap; fixing inconsistencies later is
not.
Keep aiup-core even on non-Vaadin stacks. The methodology skills are stack-agnostic — only the construction-phase
skills are tied to Vaadin/jOOQ. You can pair aiup-core with any implementation toolchain.
Commit docs/ to version control. The vision, requirements, entity model, and use case specs are your project's
institutional memory — they explain why the code is the way it is, which is invaluable for onboarding and debugging
months later.
Visit unifiedprocess.ai for the full methodology.
A marketplace is a curated repository that hosts and distributes multiple Claude Code plugins. It acts as a central hub where plugins can be discovered, installed, and managed. When you add a marketplace to Claude Code, you gain access to all the plugins it contains.
A plugin is a self-contained extension that adds new capabilities to Claude Code. Each plugin can include skills, agents, hooks, and MCP servers. Plugins are technology-specific and encapsulate everything needed to work with a particular tech stack or methodology.
A skill is a specialized behavior defined in a SKILL.md file. Skills can be invoked explicitly as slash commands (
e.g., /requirements) or triggered automatically by Claude when it recognizes a matching task. Skills are namespaced by
their plugin (e.g., aiup-core:requirements).
An MCP (Model Context Protocol) server is an external service that provides Claude with access to specialized tools and documentation. The plugins in this marketplace ship with the following servers:
| Server | Plugin | Description |
|---|---|---|
| context7 | aiup-core |
General library documentation lookup |
| Vaadin | aiup-vaadin-jooq |
Vaadin component and framework documentation |
| KaribuTesting | aiup-vaadin-jooq |
Karibu testing framework documentation |
| jOOQ | aiup-vaadin-jooq |
jOOQ DSL and code generation reference |
| JavaDocs | aiup-vaadin-jooq, aiup-angular-jpa |
Java API documentation lookup |
| Playwright | aiup-vaadin-jooq, aiup-angular-jpa |
Browser automation for integration tests |