cd /news/developer-tools/drskill-lint-claude-skills · home topics developer-tools article
[ARTICLE · art-85807] src=perrotta.dev ↗ pub= topic=developer-tools verified=true sentiment=· neutral

drskill: lint claude skills

Developer Thiago Perrotta used the drskill linter to scan Claude Code skills bundled in a plugin, working around a known limitation by symlinking the plugin's skill directory into a temporary .claude/skills layout. The scan found four warnings, including frontmatter angle brackets and missing activation conditions, which Perrotta fixed by editing the skill files. The repository now passes `just doctor` with zero errors and warnings, and the check will fail on future warnings.

read2 min views2 publishedJul 28, 2026

♠ I found drskill through Drew Breunig’s post about managing an agent’s loadout.

Problem statement: lint skills bundled in a Claude Code plugin with drskill.

Running it through uvx

is easy enough:

% uvx drskill scan --detailed
drskill scan — 3 harnesses (10 more empty), 9 skills
...
0 errors, 5 warnings (5 new) · token counts are approximate

But none of this repository’s 11 skills appeared. The known limitation explains why:

Claude Code skills bundled inside plugins are not scanned yet.

I projected the plugin’s skill directory into the plain .claude/skills

layout that drskill understands via Justfile

:

doctor:
    #!/usr/bin/env bash
    set -euo pipefail
    tmp=$(mktemp -d)
    trap 'trash "$tmp"' EXIT
    mkdir -p "$tmp/project/.claude/skills" "$tmp/home"
    for skill in "$PWD"/plugins/thiagowfx/skills/*; do
      ln -s "$skill" "$tmp/project/.claude/skills/$(basename "$skill")"
    done
    uv_cache=$(uv cache dir)
    cd "$tmp/project"
    HOME="$tmp/home" UV_CACHE_DIR="$uv_cache" uvx drskill scan --ci --harness claude-code

The temporary HOME

excludes unrelated global skills. Reusing uv’s cache avoids redown drskill there. --ci

makes warnings fail the recipe.

The first isolated scan found four warnings:

drskill scan — 1 harness, 11 skills

WARNINGS
  [e91d] new frontmatter-angle-brackets: 'bloggify' ...
  [a551] new frontmatter-angle-brackets: 'gha' ...
  [6335] new frontmatter-angle-brackets: 'new-apkbuild' ...
  [206e] new missing-activation: 2 skills never say when to use them ...

0 errors, 4 warnings (4 new) · token counts are approximate
exit=2

The fixes were small: remove angle brackets from argument-hint

values and add explicit activation conditions to catchup

and handoff

:

-argument-hint: "<url>"
+argument-hint: "url"

-description: Create portable handoff document for another agent or harness to continue current work.
+description: Create a portable handoff document for another agent or harness to continue current work. Use when the user asks for a handoff, continuation brief, or context transfer.

Now the repository has its own linter:

% just doctor
drskill scan — 1 harness, 11 skills

No findings.
0 errors, 0 warnings · token counts are approximate

Restoring <url>

temporarily made just doctor

exit 2 again, so future warnings will break the check. I should add it to CI at some point.

🤖 *Drafted with *

/bloggify

.— § —

Reply via [email](mailto:serendipity@perrotta.dev?subject=Reply to: drskill: lint claude skills)

── more in #developer-tools 4 stories · sorted by recency
── more on @drskill 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/drskill-lint-claude-…] indexed:0 read:2min 2026-07-28 ·