The Complete Claude Guide
← Back to topic
Chapter 15 · CLI

Creating plugins: manifest, components and publishing

Creating your own plugin lets you package capabilities the team needs repeatedly: commands, agents, skills and hooks. The manifest defines the package, and evals verify it works before publishing.

Verified against source on 2026-09-30

Video

Package one proven Skill

You will create a manifest, keep components in the right directories and separate structural validation from behavioral testing. Outputs are illustrations.

Official creation, manifest and eval sources checked September 30, 2026 describe session-only loading as a way to develop without a marketplace. Publishing and sharing are separate steps; this lesson does neither.

Decide whether packaging helps

Keep a standalone Skill for a single project if it works. A Plugin becomes useful for a versioned collection reused across projects. Do not add hooks or servers just to make the package look substantial.

Plan a local plugin containing only the tested course-update-check Skill.
Return the directory tree and minimum manifest.
No hooks, MCP, installation, marketplace publication or account connection.
Create the directory layout

Use a separate practice folder:

course-tools/
  .claude-plugin/
    plugin.json
  skills/
    course-update-check/
      SKILL.md

Only the manifest belongs inside .claude-plugin/. The skills/ directory is beside it at the Plugin root, not inside it. Copy the tested Skill and inspect its actual contents before loading.

Example plugin.json:

{
  "name": "course-tools",
  "version": "0.1.0",
  "description": "Source-grounded course draft checks"
}

This is a local example, not an installed or endorsed package. Do not put keys, raw customer drafts or personal paths in the manifest.

Validate structure

Run the documented validator against your folder:

claude plugin validate ./course-tools

Read the actual result. Validation checks package structure; it does not prove the Skill follows evidence, produces useful writing or avoids unintended effects. If it fails, fix the named field/path before attempting a session.

Load for one session

When ready for a model session, from the directory containing the package:

claude --plugin-dir ./course-tools

This loads the package for that session without an installation entry. The session still uses the applicable Claude plan or billing. Inspect the namespaced Skill, such as /course-tools:course-update-check, in the menu. Use /reload-plugins after changes where needed and verify the loaded version.

Run course-tools:course-update-check on this pair only.
Source: one chapter ready; date unset.
Draft: all chapters ready; launch tomorrow.
Return unsupported claims and a corrected draft. Do not edit or publish.

Illustrative result:

Unsupported: all chapters ready; launch tomorrow.
Correction: One chapter is ready. The launch date is not set.
Build an acceptance set

Retest an accurate draft, an unsupported date and a missing source. Record the expected behavior before the run and the actual result after it. A package that only passes its greeting or happy path is not ready for work.

The official eval system can run model-backed evaluations. Check account, model, number of runs and pricing before any such execution. A written test matrix is enough for this lesson; there is no need to run a paid eval or publish a marketplace entry.

Graded practice

Easy: layout

Build manifest plus one Skill. Success: root placement is correct and validator result is read.

Intermediate: namespacing

Load locally and find the correct command. Success: you know which package/version supplied it.

Challenging: regression

Change one instruction and rerun three cases. Success: no unsupported claim becomes accepted.

Troubleshooting

Skill missing: verify it is outside .claude-plugin/ and inside its own Skill directory.

Old instructions: reload and verify behavior, not file timestamp alone.

Validation passed but output wrong: repair instructions and acceptance cases.

Public release requested: review package contents, license and audience separately.

Unexpected dependency: stop and inspect before loading work data.

Mechanism animation (illustration)

Filmed demo · Video is added in the media phase

Recap

Comprehension check

What is the manifest role in a plugin?

Recap

Sources and further reading

← Previous Back to topic Next →