Apollo Plugin Builder AI WORKFLOW
JD
NEW BUILD
Step 1 of 8

Capture the work

Before you write any code, write down what you're trying to package. The clearer you are here, the cleaner every later step becomes. This works whether you've never built a skill before or you've shipped a dozen.

What are you building?
Mode A
Start fresh
Create a new build and clear saved progress.
Mode B
Resume in progress
Pick up where you left off. Your inputs are saved automatically.
Mode C
Start from the example
Load the deliverability intervention as a starting template. Edit anything.

Apollo Assistant

I will help you build a plugin from repeated work. Here is the path:

  • Capture the workflow and requirements
  • Define the reusable skill
  • Connect the tools involved
  • Add commands to run the work
  • Add hooks for validation
  • Package and prepare to ship
You Create a plugin from a workflow my team repeats.
...
Prompt
</>
Skill
plug
Connectors
>_
Commands
hook
Hooks
7
pkg
Plugin
ship
Ship
</> Skill definition

Define the core skill this plugin will execute.

1
{
2
"name": "workflow_skill",
3
"description": "Runs the repeated workflow",
4
"input_schema": "src/schema/input.json",
5
"output_schema": "src/schema/output.json",
6
"model": "ai-workspace-runtime"
7
}
Test skill
Input  { }
Output

Draft ready. Review connected tools and run checks before using it on real work.

Terminal
> Validating plugin...
Manifest valid
Commands ready
Hooks configured
> Package ready for your AI workspace
Files View all
{} .claude-plugin/plugin.json
{} manifest.json
cmd commands/run.md
chk hooks/validate.sh

Each tab produces one build component. By the end, the workflow can be installed, evaluated, and improved as a plugin instead of copied as another prompt.


What's the workflow called? A short name. Used as the plugin folder name.
kebab-case · no spaces · no special chars
What problem does it solve? One or two sentences. The shorter, the sharper.
0 chars
How often do you do this?
Once
Weekly
Daily
Who runs it?
Just me
My team
Customers or partners
What systems does this workflow touch? Pick what you actually have connected.
Step 2 of 8

Write it as a prompt

A prompt is just text you send the model. It's the lightest possible packaging: zero setup, fine for one-off work. We're starting here because the prompt forces you to make every part of the workflow explicit. That same thinking will go straight into your skill in the next step.

Prompt structure: a 5-part shape

Strong prompts share a common structure. Each part answers a question the model needs answered before it can produce useful output.

  • ROLE who the model is acting as
  • CONTEXT what background info it has
  • TASK what to do, step by step
  • FORMAT what the output should look like
  • CONSTRAINTS what to avoid or never do

Reference: Anthropic's prompt engineering overview at docs.claude.com/en/docs/build-with-claude/prompt-engineering.

ROLE Who or what is the model being?
CONTEXT What background does it need?
TASK The numbered steps. Be specific.
FORMAT Headings, bullets, sections, etc.
CONSTRAINTS What should it never do?
Composed prompt copy
Fill the fields above to see your prompt compose here.
Why we're starting here
flowchart LR
    A[Prompt fields] --> B[Composed prompt]
    B --> C{Test in Claude}
    C -->|Works| D[Lift the process
into a Skill] C -->|Output drifts| E[Tighten
FORMAT and CONSTRAINTS] E --> B D --> F[Step 3]
Step 3 of 8

Lift it into a skill

A skill is a markdown file the model reads. It teaches the model how to do something the same way every time. Once you've installed it, you don't have to retype your prompt: the skill auto-fires when the model sees a request that matches the description.

SKILL.md format

Every skill is a single markdown file with YAML frontmatter at the top. The frontmatter has three required fields:

---
name: skill-name-in-kebab-case
description: When to use this skill. The model reads this to decide whether to fire.
version: 1.0.0
---

The body is the instructions the model follows when this skill is active.

The description is doing the real work. It's what the model uses to auto-trigger the skill. Specific keywords and clear scope are what make a skill fire when it should and stay silent when it shouldn't.

Skill name kebab-case · 3-50 characters
Description When should this skill fire? 80-500 chars.
0 chars · 0 trigger keywords
Process steps Pull these from the TASK in Step 2. Refine.
Output format What every run produces.
How a skill fires
sequenceDiagram
    participant U as User
    participant M as Model
    participant S as Skill library
    U->>M: Asks a question
    M->>S: Scans descriptions
    S-->>M: Skill matches keywords
    M->>M: Loads SKILL.md body
    M->>U: Responds following
the skill instructions
SKILL.md preview copy
Fill the fields above to compose your SKILL.md.
Step 4 of 8

Connect the systems

A skill alone can't read live data. It needs connected tools (MCP, when available) to reach the systems where work actually lives. You picked your tools in Step 1; now we'll wire them up. If your workflow doesn't need live data, you can skip this step.

.mcp.json format

Every connected tool is one entry under mcpServers. The server defines its command, environment variables, and (optionally) the scope of what the skill is allowed to do.

{
  "mcpServers": {
    "server-name": {
      "command": "npx",
      "args": ["-y", "vendor-mcp-server"],
      "env": {
        "API_KEY": "${API_KEY}"
      }
    }
  }
}

Use ${VAR_NAME} for credentials. Never hardcode secrets in the file.

Connectors selected in Step 1 Toggle scope per connector.
Connector map
Your Skill (unnamed)
.mcp.json preview copy
Select connectors in Step 1 to populate this file.
Step 5 of 8

Add slash commands

Slash commands are the way you (or your team) actually run the plugin. Each command is a markdown file in the commands/ directory; typing /command-name in your AI workspace triggers it. Most plugins ship 1-4 commands. Don't overdo it.

Command file format

One markdown file per command in commands/. The file name (minus .md) becomes the slash command.

---
name: command-name
description: One line describing what this command does
---

The body is the instruction the model follows when the command runs.
Reference the skill, mention what to read from connected tools, etc.
Suggested commands Pick the ones that fit. Edit names and descriptions.
Command flow
flowchart TD
    A[User types /command] --> B[Plugin loads command file]
    B --> C[Skill is loaded into context]
    C --> D[connected tools provide live data]
    D --> E[Model executes the workflow]
    E --> F{Hooks fire
at events} F --> G[Output to user]
Commands preview copy
Toggle commands above to see them here.
Step 6 of 8

Add deterministic checks

Hooks are scripts that run at specific events: before a tool runs, after a tool runs, when the model is about to stop. Use them for things you can't trust the model to remember every time. Format checks, schema validation, log writes, banned-word scans. If you don't need any of these, this step is optional.

Hook events available
  • PreToolUse before any tool call
  • PostToolUse after any tool call
  • Stop when the model is about to end its turn
  • SessionStart when a new session opens
  • SessionEnd when a session closes
  • UserPromptSubmit when the user sends a message

Hooks block by default. If your script returns non-zero, the action is halted. Use "timeout": 30 to cap script run time in seconds.

Hooks for this plugin Pick none, one, or several.
When hooks fire
sequenceDiagram
    participant U as User
    participant P as Plugin
    participant H as Hooks
    participant T as Tool
    U->>P: /command runs
    P->>H: PreToolUse fires
    H-->>P: Pass / block
    P->>T: Tool executes
    T->>H: PostToolUse fires
    H-->>P: Pass / block
    P->>U: Result returned
hooks.json preview copy
No hooks selected. This file will be omitted from the plugin.
Step 7 of 8

Assemble the plugin

Now we wrap everything in a manifest. The manifest is the entry point your AI workspace reads to discover your plugin. The folder structure follows the standard plugin layout so auto-discovery finds your skill, commands, and hooks without any extra config.

plugin.json format
{
  "name": "plugin-name",
  "version": "1.0.0",
  "description": "What the plugin does",
  "author": { "name": "You" }
}

The manifest lives at .claude-plugin/plugin.json. Component directories sit at the plugin root. Auto-discovery handles the rest.

Folder tree
your-plugin/ ← will be named after your workflow
Plugin description Becomes plugin.json > description.
Plugin author (optional)
plugin.json preview copy
Fill in the fields above.
Step 8 of 8

Ship it

Last step. We'll run a pre-flight check, then give you three ways to download what you've built. Pick whichever fits how you want to install in your AI workspace.

your AI workspace's built-in evaluation

Before running your skill or plugin in production, your AI workspace includes evaluation skills you can run against it. The skill-creator and plugin-builder skills both have eval modes that test description triggering, schema validity, and end-to-end execution on sample inputs.

Once installed, type evaluate this skill or evaluate this plugin in your AI workspace to run the built-in checks before you point it at real work.

Pre-flight check

Lifecycle (after you ship)
flowchart LR
    A[Build] --> B[Install in your AI workspace]
    B --> C[Run evaluation]
    C --> D[Use for 2 weeks]
    D --> E{Decide}
    E -->|Working| F[Ship to team]
    E -->|Wrong scope| G[Refine]
    E -->|Not used| H[Kill]
    G --> A
Kill criteria When should this plugin be retired?

Download your plugin spec

Once downloaded: open your AI workspace, drop the file into the workspace, and run install plugin (for ZIP) or install skill (for the SKILL.md inside the markdown spec). Then run evaluate this plugin before using it on real work.


Step 1: Overview Plugin readiness 0/100