coding-agent-extension-builder
Generate Claude Code plugins, skills, and marketplaces using Kotlin DSL.Use when the user wants to:- Create a new plugin with commands and skills- Create a marketplace to distribute plugins- Generate correct folder structure (.claude-plugin/, skills/, commands/)- Avoid mistakes in JSON format and YAML front matter field names
When & Why to Use This Skill
The coding-agent-extension-builder is a specialized Kotlin DSL designed to streamline the development of Claude Code plugins, skills, and marketplaces. It provides a type-safe environment to generate standardized folder structures and configuration files, effectively eliminating common manual errors in JSON formatting and YAML front matter while accelerating the deployment of agentic capabilities.
Use Cases
- Scenario 1: Rapidly scaffolding new Claude Code plugins with predefined commands and skills, ensuring all metadata and directory requirements like '.claude-plugin/' and 'SKILL.md' are met automatically.
- Scenario 2: Establishing and managing a centralized marketplace to distribute custom agent extensions across teams, ensuring consistent versioning and authorship tracking.
- Scenario 3: Enhancing development reliability by using compile-time safety to validate tool permissions, licenses, and complex hook configurations (like PreToolUse or SessionStart) before generating the final extension package.
| name | coding-agent-extension-builder |
|---|---|
| description | | |
| license | MIT |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep |
coding-agent-extension-builder
Kotlin library for generating coding agent extensions with compile-time safety.
Why Use This Library
Writing extensions by hand is error-prone:
- Need to remember
marketplace.jsonformat - Need correct folder structure (
.claude-plugin/plugin.json,skills/*/SKILL.md) - Easy to misspell field names (
allowed-tools?allowedTools?) - Mistakes are hard to catch because agents still work with invalid config
Quick Start
// 1. Create a plugin
val plugin = Plugin.Builder(
name = "my-plugin",
description = "My plugin description",
version = "1.0.0"
)
.author(name = "Your Name")
.addCommand(
Command.Builder(
name = "my-command",
description = "What this command does",
body = "# Command\n\nInstructions..."
).build()
)
.addSkill(
Skill.Builder(
name = "my-skill",
description = "When to use this skill",
body = "# Skill\n\nGuidance..."
).build()
)
.build()
// 2. Create marketplace (optional)
val marketplace = Marketplace.Builder(
name = "my-marketplace",
owner = Owner(name = "Your Name")
)
.addPlugin(plugin)
.build()
// 3. Write to disk
marketplace.writeClaudeCodeExtension(Path("output"))
// Or just the plugin: plugin.writeClaudeCodeExtension(Path("output"))
Generated Structure
output/my-marketplace/
├── .claude-plugin/
│ └── marketplace.json
└── plugins/
└── my-plugin/
├── .claude-plugin/
│ └── plugin.json
├── commands/
│ └── my-command.md
└── skills/
└── my-skill/
└── SKILL.md
API Reference
Skill.Builder(name, description, body)
.license(license: String)- Set license.allowedTools(vararg tools: String)- Restrict tools.addMetadata(key, value)- Add custom metadata
Command.Builder(name, description, body)
- No optional fields currently
Plugin.Builder(name, description, version)
.author(name: String)- Set author.addCommand(command: Command)- Add command.addSkill(skill: Skill)- Add skill.addHook(hook: HookMatcher)- Add hook
HookMatcher.Builder(event: HookEvent)
.matcher(pattern: String)- Tool pattern (e.g., "Write|Edit").command(command: String, timeout: Int?)- Add command hook.prompt(prompt: String, timeout: Int?)- Add prompt hook (LLM-based)
HookEvent: PreToolUse, PostToolUse, PermissionRequest, Notification, UserPromptSubmit, Stop, SubagentStop, PreCompact, SessionStart, SessionEnd
Marketplace.Builder(name, owner)
.addPlugin(plugin: Plugin)- Add embedded plugin.addPlugin(name, source, ...)- Add external plugin reference.metadata(description, version, pluginRoot)- Set metadata
Run in Workspace
cd workspace
cp src/main/kotlin/Main.kt.template src/main/kotlin/Main.kt
# Edit Main.kt
./gradlew :workspace:run