agent-qa-browser-regre…
Use when verifying an existing browser journey with agent-qa against a running Spring Boot application. Covers target selection,…
Use when threat-modeling or hardening a Spring AI RAG, chat, or tool-calling workflow against prompt injection, unauthorized actions, data exposure, or unbounded execution. Ordinary model-provider integration alone does not require this review.
Claude Code
$ npx -y skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security --agent claude-code
Codex
$ npx skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security -a codex -y
Cursor
$ npx skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security -a cursor -y
Gemini CLI
$ npx skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security -a gemini-cli -y
GitHub Copilot
$ npx skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security -a github-copilot -y
OpenCode
$ npx skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security -a opencode -y
Windsurf
$ npx skills add rrezartprebreza/spring-boot-skills --skill spring-ai-security -a windsurf -y
name: spring-ai-security description: > Use when threat-modeling or hardening a Spring AI RAG, chat, or tool-calling workflow against prompt injection, unauthorized actions, data exposure, or unbounded execution. Ordinary model-provider integration alone does not require this review.
Target Spring Boot 3 and the project's compatible Spring AI 1.x line. Preserve the repository's managed coordinates and provider choices. The Java 17 tool boundary here is deliberately independent of Spring AI APIs. Wire it into the selected version's tool mechanism and verify that adapter separately.
Map user input, uploaded documents, retrieved chunks, memory, tool output and rendered model responses. All can contain attacker-controlled content. A prompt instruction such as "ignore malicious text", a delimiter, classifier or keyword denylist is not an authorization boundary. Record what the model can read and which effects its tools can cause.
or an arbitrary client header. Scope retrieval in the storage query and recheck authorization before returning documents; output-only filtering is too late.
reuse. Bind conversation IDs to caller/tenant authorization; randomness alone is insufficient.
Validate arguments and enforce permissions in application code immediately before effects.
normalized action/arguments, expiry and one-time use. Reauthorize on execution. A model-supplied approved=true field or stale approval after argument changes is not consent.
Carry the same budget through retries and nested calls; a new tool instance must not reset a request's limit. Apply network/DB timeouts and cancellation independently of call counts.
unnecessary private content. Treat returned HTML/Markdown/URLs as untrusted when rendering.
[DocumentReadTool](templates/DocumentReadTool.java) accepts only a document UUID. Its caller identity is server-supplied and immutable, permissions are checked in code, and a server-owned CallBudget is shared across every tool instance for that authenticated turn. All invocation attempts consume it, including denied or malformed calls. Do not create a new budget on retry or share a caller/tool singleton across users. Never expose constructors, caller identity or budgets as tool input. The reader must enforce tenant AND account access in its storage query. For summarizing a preselected upload, prefer no tool at all when a server-authorized document load is sufficient.
The example is read-only. It does not implement approval for writes, a Spring AI adapter, vector-store ACLs, model-output sanitization or network timeouts. Its result-size check runs after loading the body: also bound storage reads/streaming and total bytes in the adapter. The fixture tests identity scoping, invalid arguments, missing permission, exhausted budgets and oversized results without calling a model. It is not a measured prompt-injection detection benchmark.
Use [the good scenario](examples/good-boundary.md) and [the bad scenario](examples/bad-boundary.md) to plan tests involving hostile retrieved text, cross-user conversation IDs, cross-tenant documents, repeated tool calls and legitimate text containing words such as "delete". Assert the unauthorized effect never occurs; model refusal text alone is not a pass.
List the trust boundaries, allowed effects, demonstrated controls and remaining gaps. Label each claim **confirmed**, **suspected**, or **not verified**; distinguish deterministic policy tests from provider/model evaluations. Preserve redacted evidence and test versions. Request approval before sending private fixtures to a model provider or testing live tools.
Production-grade Claude Code and Codex skills for Spring Boot developers
Use when verifying an existing browser journey with agent-qa against a running Spring Boot application. Covers target selection,…
Use when adding Spring AI-specific model observations, token usage, latency, externally configured cost attribution, advisor…
Use when versioning Spring MVC or WebFlux APIs in Spring Boot 3 / Spring Framework 6. Covers explicit URL, header, and media-type…
Use when adding or debugging Spring @Async work, executor saturation, asynchronous failures or lost thread context. Not a…
Use when introducing or correcting grouped Spring Boot configuration, typed property binding, validation, profiles or secret…
Use when packaging a Spring Boot 3 application as an OCI image or GraalVM native executable. Covers buildpacks, layered images,…
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.