The explicit agents array in .claude-plugin/plugin.json causes Claude Code
to load zero subagents; it discovers agents/*.md on its own, and the explicit
list suppresses that discovery. Reproduced on Claude Code 2.1.219: with the
key present, plugin details reports Agents (0); with it removed, all four load
(code-reviewer, security-auditor, test-engineer, web-performance-auditor).
Safe to omit since #260 moved agents/README.md into docs/, so the agents/
directory now holds only real agent definitions. Scoped to the Claude Code
manifest only; the Codex manifest is untouched.
Claude Code v2.1.140+ flags the repo-root commands/ folder as "ignored" in
/doctor, `claude plugin list`, and the /plugin detail view, because
.claude-plugin/plugin.json points `commands` at ./.claude/commands (outside the
default folder) while a root commands/ still exists for Antigravity CLI.
List both locations explicitly so the default folder is no longer "ignored".
Per the plugins reference, the array form keeps the default and adds the custom
dir; the command loader only registers .md files, so Antigravity's
commands/*.toml are silently skipped (no extra Claude commands) and the lint
clears. No behavior change for Claude, Antigravity, or any other tool.
The .claude-plugin/plugin.json agents array still listed only 3 personas;
add web-performance-auditor so the manifest matches the agents/ directory
(now 4). Verified with `claude plugin validate .`.
Replace relative path source ("./") with the canonical GitHub source
object format ({ "source": "github", "repo": "owner/repo" }).
This resolves schema validation errors seen in Claude CLI v2.1.156+
where the relative path format caused 'Invalid input' errors in
strict marketplace JSON validators.
Also adds:
- $schema reference for editor autocomplete and validation
- top-level description field (was nested under metadata)
- owner URL, homepage, license, and keywords fields
Closes#212
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The hard-coded `"version": "1.0.0"` in .claude-plugin/plugin.json
pins every install at the snapshot taken when that string was first
set. Per the Claude Code marketplace docs:
> Setting `version` pins the plugin. If `plugin.json` declares
> `"version": "1.0.0"`, pushing new commits without changing that
> string does nothing for existing users, because Claude Code sees
> the same version and keeps the cached copy. Bump the field on
> every release, or omit it to use the commit SHA.
> https://code.claude.com/docs/en/plugin-marketplaces#version-resolution-and-release-channels
Two consequences observed in practice:
1. Users who ran `/plugin install agent-skills@addy-agent-skills`
weeks ago do not receive the 37 commits landed on main since
the 0.6.0 release (including the new `doubt-driven-development`
and `interview-me` skills, plus several frontmatter and
cross-reference fixes). `claude plugin update` reports no
change because the cached and remote `version` strings match.
2. The release tags `0.5.0` and `0.6.0` have shipped with no
corresponding bump in `plugin.json`, so the existing release
cadence already does not feed Claude Code's update mechanism.
Dropping the `version` field switches the plugin to commit-SHA
versioning, which the same docs explicitly recommend:
> If you omit `version` and host this marketplace in git, every
> commit automatically counts as a new version. This is the
> simplest setup for internal or actively-developed plugins.
Given the repo's commit cadence (37 commits / ~3 weeks between
0.6.0 and HEAD) and its content profile (mostly markdown SKILL.md
files with low per-commit breakage risk), commit-SHA versioning
fits this project better than manual semver bumps. Git tags and
GitHub Releases remain available as editorial milestones for
changelog and announcements; they just no longer need to drive
the update mechanism.
Closes#145.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The github source object form `{ "source": "github", "repo": "..." }`
fails to install on Claude Code v2.1.112 with:
fatal: repository 'https://github.com/:addyosmani/agent-skills.git/' not found
The `:owner/:repo` template is not interpolated, producing a malformed
URL. Since the plugin lives in the same repo as the marketplace, switch
to a relative path (`./`) which sidesteps the github source path
entirely and works for all marketplace add transports (github, https,
ssh, local).
CI workflow `.github/workflows/test-plugin-install.yml` already uses
`claude plugin marketplace add ./`, so the change is exercised on every
push.
The Claude Code plugin schema accepts string|array for the `skills`
field; passing a directory path auto-discovers every `<name>/SKILL.md`
beneath it (per https://code.claude.com/docs/en/plugins-reference,
which lists `"./custom/skills/"` as a valid example).
Switching `skills` from a 21-element array to `"./skills"` keeps the
fix for #112 (skills are still explicitly declared, so discovery is
not suppressed) while removing the maintenance burden — adding a new
skill no longer requires also editing this manifest.
`agents` stays as an explicit array because `./agents/` contains
`README.md`, which would be picked up as a malformed agent if the
directory form were used here.
The previous commit used directory strings ("./skills", "./agents")
which is not the correct plugin.json schema. Real Claude Code plugins
(e.g. davidfowl/dotnet-skillz, pluginagentmarketplace/custom-plugin-graphql)
use arrays of paths — either skill directory paths or explicit file paths.
Corrects the fix to list all 21 skill directories and 3 agent files
as proper arrays.
Fixes#112
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude Code's plugin loader requires explicit path declarations when
any path field (like `commands`) is already present. Without `skills`
and `agents` fields, auto-discovery is suppressed and all 21 skills
return "Unknown skill" when invoked via the Skill tool.
Adds:
"skills": "./skills"
"agents": "./agents"
This makes all 21 skills discoverable and invokable by name (e.g.
`code-review-and-quality`) and registers the 3 agent personas
(`code-reviewer`, `test-engineer`, `security-auditor`) as subagents.
Fixes#112
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Enable this repo to work as a Claude Code plugin so users can
install it via `/plugin marketplace add addyosmani/agent-skills`.
Add:
- .claude-plugin/plugin.json — plugin manifest exposing
.claude/commands/ as namespaced slash commands under
the agent-skills: prefix
- .claude-plugin/marketplace.json — marketplace catalog
listing this repo as the agent-skills plugin
Fix:
- hooks/hooks.json — rewrite from deprecated flat-array format
to the plugin-system format keyed by event type; use
${CLAUDE_PLUGIN_ROOT} so the hook resolves correctly when the
plugin is installed from the marketplace into the local cache
- README — replace non-existent `claude plugin add` with the
correct `/plugin marketplace add` workflow; document namespaced
slash commands and --plugin-dir usage; add .claude-plugin/ to
the project tree