Skip to main content
Loopy has five extension points, from zero-code Markdown files to full Java SPIs.

Skills

Domain knowledge the agent reads on demand

Slash Commands

Markdown-defined commands from files

Subagents

Specialist agents for delegation

Tool Profiles

New tools via Java SPI

Skills

Skills are the fastest way to make Loopy smarter. A skill is a Markdown file with YAML frontmatter. The agent sees skill names and descriptions upfront but only loads full content when relevant โ€” no tokens wasted.

Create a skill

Place a SKILL.md in your project:
Next time you run Loopy in that directory, the agent discovers the skill automatically.

Where skills live

Install from the catalog

Loopy ships with 23+ curated skills from 8 publishers:

Publish skills as a JAR (SkillsJars)

Package skills as a Maven dependency so teams get them automatically:
Add the JAR to pom.xml and Loopy discovers it on the classpath. Skills follow the agentskills.io spec โ€” they work in 40+ agentic CLIs, not just Loopy.

Slash Commands

Slash commands let you define reusable prompts as Markdown files, following Claude Codeโ€™s ~/.claude/commands/ convention. Type /command-name in the chat and the agent executes the expanded prompt.

Create a slash command

Create a .md file in your project or home directory:

How it works

  1. YAML front matter โ€” name and description fields. If no front matter, the filename becomes the name.
  2. $ARGUMENTS substitution โ€” replaced with whatever the user types after the command. /review focus on error handling substitutes โ€œfocus on error handlingโ€.
  3. Agent delegation โ€” the expanded prompt is sent to the agent as if the user typed it.

Where commands are discovered

Markdown commands override built-in Java commands with the same name.

Subagents

Subagents are specialist agents the main agent delegates to via the Task tool. Define them as Markdown files โ€” no Java required.

Create a subagent

Create .claude/agents/test-runner.md:
The main agent delegates testing tasks to this subagent automatically based on the description field.

Frontmatter fields

Tips

  • Keep description specific โ€” โ€œRuns tests and reports resultsโ€ routes better than โ€œhelps with testingโ€
  • Restrict tools to what the subagent needs. A test runner doesnโ€™t need Edit
  • Subagents run in isolated context windows โ€” they canโ€™t see the main conversation
  • Subagents cannot spawn other subagents (the Task tool is excluded automatically)

Tool Profiles (Java SPI)

Add new tools the agent can call. Implement a Java interface, package as a JAR, and Loopy discovers it at startup via ServiceLoader.

Implement ToolProfileContributor

Register via ServiceLoader

Create META-INF/services/io.github.markpollack.loopy.tools.ToolProfileContributor:

What ToolFactoryContext provides

Built-in profiles

Custom profiles load alongside built-in profiles, not replacing them.

Listeners

Observe what the agent does without changing its behavior.

ToolCallListener

Fires around every tool execution:

AgentLoopListener

Fires at loop lifecycle boundaries:
Wire listeners through the MiniAgent builder:
Listener methods should not throw exceptions โ€” exceptions are logged and swallowed to avoid crashing the agent loop.

Programmatic API

Embed Loopyโ€™s agent in other Java applications:

Multi-step with session memory

Context is preserved across run() calls by default:

Builder options

Custom endpoints (vLLM, LM Studio)