Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Lm655hdgDo5xsSLNomgdsy
agent-skills
Packaging reusable capabilities for a Spring AI agent as SKILL.md folders, loaded on demand through the Skill tool from org.springaicommunity:spring-ai-agent-utils.
Article: Agent Skills in Spring AI: Packaging Reusable Capabilities for Your Agents. The whole walkthrough lives in the article; this directory is only the code and the captured output.
Versions
| Component | Version |
|---|---|
| Spring Boot | 4.1.1 |
| Spring AI | 2.0.1 |
| spring-ai-agent-utils | 0.13.0 |
| Java | 25 |
Run it
./scripts/run-all.sh
Every test drives a hand-written scripted chat model, so no API key and no network are needed.
What is in here
| Path | What it is |
|---|---|
src/main/java/com/ankurm/agentskills/SkillClients.java |
Builds the SkillsTool from classpath or directory skills and a ChatClient with ToolCallingAdvisor |
src/main/resources/skills/release-notes |
A skill with a references/ file |
src/main/resources/skills/sql-review |
A skill with a scripts/ file and an allowed-tools key |
src/main/resources/skills/incident-summary |
A minimal skill |
src/test/java/.../SkillListingTest |
What the model sees before it loads anything |
src/test/java/.../SkillLoadRoundTripTest |
The two model calls for one skill |
src/test/java/.../SkillLoadingEdgeCasesTest |
Unknown name, duplicate name, no description, allowed-tools |
src/test/java/.../ListingCostTest |
Tool-description size against inlining every body, 3 to 100 skills |
Captured output
| File | Shows |
|---|---|
output/01-skill-listing.txt |
The Skill tool name, schema and <available_skills> block |
output/02-skill-load-round-trip.txt |
The tool result fed back to the model |
output/03-loading-edge-cases.txt |
Unknown, duplicate and description-less skills |
output/04-listing-cost.txt |
Character counts (not tokens) as skills are added |
Not measured
No real model was called. Whether a given model chooses the right skill is not tested here.