First-party. This plugin is built and maintained by ShipWithAI. Unlike the reviewed third-party tools in this toolkit, it is our own product — judge it accordingly.

Problem it solves

Generic Spring Boot skill packs are exhaustive and passive: one large reference document that loads only when a keyword happens to match. When the model scaffolds an @Entity, nothing guarantees the “add @Version” rule fires. The knowledge exists but is not activated at the moment of the mistake.

This toolkit inverts that. A deterministic hook runs on every Java edit and surfaces an advisory the instant a known anti-pattern appears. The reference material is there to explain why — it is not the mechanism.

How to install

/plugin marketplace add ShipWithAI/shipwithai-plugins
/plugin install shipwithai-java-backend-toolkit@shipwithai

Then run the setup skill to wire the guardrail hook into the project.

How to use

Four mechanisms, in the order they matter:

  1. Guardrail hookhooks/jpa-guardrail.py runs PostToolUse on Write/Edit of *.java (plus application.properties / .yml for config rules), and emits an advisory or blocks.
  2. Scaffold skillsjpa-entity, spring-rest-endpoint, db-migration, rest-error-handler, idempotent-endpoint, security-filter-chain, jwt-auth, integration-test, test-slice. Generate code that never trips the guardrail.
  3. Knowledge skillspringboot-conventions, split by domain: persistence, web, transactions, testing.
  4. Reviewer agentspringboot-reviewer, whose checklist is the ruleset.

A sample of what the ruleset catches:

RuleWhat it catchesSeverity
jpa-optimistic-lock@Entity without @Version — lost updateswarning
tx-proxy@Transactional on a non-public method — silently not proxiedwarning
jpa-eager-fetchFetchType.EAGER association — over-fetch and N+1warning
jpa-osivspring.jpa.open-in-view=true — lazy loads leak to the viewwarning
nplus1-heuristicrepository call inside a loopinfo
jpql-injectionquery built by string concatenationblocks

Pro tips

  • Prefer the scaffold skills over asking for an entity in prose. Correct-by-default generation means the guardrail never has to fire.
  • When the hook flags something you believe is fine, read the matching springboot-conventions reference before overriding — the rules encode failure modes that look harmless in review.
  • Keep the reviewer agent and the hook on the same version. They share one ruleset; that is the whole point.

When NOT to use

Not for anything that is not Spring Boot + JPA. Not a substitute for tests — it catches a specific class of persistence and web mistakes, and it is silent about your business logic.