Phase 1.8 dogfood findings on external Claude plugins
INV 0003: Phase 1.8 dogfood findings on external Claude plugins
Section titled “INV 0003: Phase 1.8 dogfood findings on external Claude plugins”Status: Closed Author: Donald Gifford Date: 2026-04-21
Question
Section titled “Question”Does the Phase 1 MVP of claudelint produce useful diagnostics on
real Claude plugin distributions, and are there gaps in discovery
that prevent it from finding artifacts in the wild?
Hypothesis
Section titled “Hypothesis”Running against the plugin cache under ~/.claude/plugins/cache/
should surface:
- a small number of skills/commands/agents per plugin
- low-severity content warnings (trigger-clarity, no-emoji) but no schema errors
Context
Section titled “Context”Phase 1.8 of the implementation plan requires dogfooding on at least two external plugin repos before declaring the MVP complete. The goal is to surface real-world usability issues that synthetic fixtures cannot.
Triggered by: IMPL-0001 Phase 1.8.
Approach
Section titled “Approach”- Run
claudelint run <plugin>against two plugins extracted to the local Claude plugins cache. - Note every file discovered and every diagnostic surfaced.
- Compare against the plugin source tree to see if any artifacts were missed.
- Fix any discovery gaps before repeating.
Environment
Section titled “Environment”| Component | Version / Value |
|---|---|
claudelint | pre-v0.1.0 (branch docs/claudelint-linter-rfc) |
| Go | 1.26.1 |
| Plugin cache | ~/.claude/plugins/cache/donaldgifford-claude-skills/ |
Findings
Section titled “Findings”Discovery: plugin layouts without .claude/ were invisible
Section titled “Discovery: plugin layouts without .claude/ were invisible”First run against go-development/2.0.1:
$ claudelint run ~/.claude/plugins/cache/donaldgifford-claude-skills/go-development/2.0.10 diagnostics, 1 files checkedOnly the plugin’s top-level README.md was inspected; the eight files
under skills/, commands/, and agents/ were silently ignored.
Root cause. internal/discovery/classify.go required every
skills/, commands/, agents/, and hooks/ path to live below a
.claude/ segment. That assumption holds for user repositories
(.claude/skills/foo/SKILL.md) but breaks for plugin distributions,
where the plugin IS the .claude/ root and its kind directories sit
at the plugin top level.
Fix. Added a classifyPluginLayout fallback that matches the
plugin-root shape (.../skills/foo/SKILL.md,
.../commands/foo.md, etc.) when no .claude/ parent is present.
Re-run of the same command:
$ claudelint run ~/.claude/plugins/cache/donaldgifford-claude-skills/go-development/2.0.1agents/go-style.md: info: artifact contains emoji [style/no-emoji]commands/review.md: info: artifact contains emoji [style/no-emoji]commands/scaffold.md: info: artifact contains emoji [style/no-emoji]skills/go/SKILL.md:3:1: warning: skill description has no trigger phrase [skills/trigger-clarity]4 diagnostics, 8 files checkedPlugin A: donaldgifford-claude-skills/go-development@2.0.1
Section titled “Plugin A: donaldgifford-claude-skills/go-development@2.0.1”- Files checked: 8 (3 commands, 1 agent, 1 skill, 1 CLAUDE.md-equivalent, 1 plugin manifest, 1 README).
- Diagnostics: 4 total.
- 3×
style/no-emoji(info) on agents and commands. - 1×
skills/trigger-clarity(warning) on the top-level Go skill’sdescription:— the plugin does not use a “Use when …” phrase.
- 3×
- No schema errors. The plugin is structurally valid.
Plugin B: donaldgifford-claude-skills/docz
Section titled “Plugin B: donaldgifford-claude-skills/docz”- Files checked: 27 (across two versions:
1.1.1/and1.2.0/). - Diagnostics: 12 total.
- 12×
skills/trigger-clarity(warning) — every skill description across both versions is missing a “Use when …” phrase.
- 12×
- Again no schema errors. The finding is a real, actionable content concern: docz skills would benefit from clearer activation triggers.
Conclusion
Section titled “Conclusion”Answer: Yes, claudelint produces useful diagnostics on real
plugins. The dogfood run surfaced exactly one structural gap
(classifier missing plugin-root layouts) and a consistent content
finding (skills/trigger-clarity on every surveyed plugin) that an
upstream PR could address.
The classifier gap is the kind of issue dogfooding is designed to expose. Left in place, it would have meant claudelint worked on its own fixtures but failed silently on 100% of real-world plugin distributions — the opposite of the tool’s purpose.
Recommendation
Section titled “Recommendation”- Landed: Extend
internal/discovery/classify.gowith a plugin-root fallback (this investigation’s commit). - Follow-up: Open issues on
donaldgifford-claude-skills/docz(or submit a PR) proposing “Use when …” trigger phrases on every skill description. - Follow-up: Add the plugin-layout cases to the Phase 2 broader dogfood matrix when more external plugins come online.
References
Section titled “References”- IMPL-0001 — Phase 1.8 acceptance criteria
- DESIGN-0001 — discovery-model section
- Commit adding
classifyPluginLayout