skillmother

May 2, 2026 ยท View on GitHub

The CI/CD pipeline for AI coding skills.

npm install -g skillmother

Why I Built This

I write a lot of SKILL.md files. At some point I had a dozen of them across projects and they were all quietly rotting.

Descriptions were too vague for Claude to even activate. File references pointed to code that got renamed three sprints ago. One skill had 200+ instructions -- way past what any LLM can actually follow. And I had no way to know if a skill worked until I ran it and watched it do something dumb.

The final straw was trying to share skills with my team. Everyone had their own .claude/skills/ with different versions of the same skill. No quality checks. No sync. No tests.

So I built skillmother. One CLI that lints, tests, detects drift, and syncs skills -- the same way you'd lint and test your actual code.

Quick Start

skillmother init                    # set up in your project
skillmother create                  # guided skill creation wizard
skillmother lint                    # check for issues
skillmother test                    # behavioral tests via Claude API
skillmother drift                   # find stale file references
skillmother sync ./team-skills/     # distribute skills to your team
skillmother validate --ci           # CI gate (lint + drift)

Commands

skillmother init

Sets up .skillmother/skills/ with an example skill and a GitHub Actions workflow.

skillmother init
skillmother init --no-ci          # skip GitHub Actions
skillmother init --skip-example   # skip example skill

skillmother create

8-step wizard that walks you through writing a skill. Asks about name, description, domain context, key files, instructions, patterns, anti-patterns, and invocation. The output passes all lint rules by construction.

skillmother create
skillmother create --output ./custom/path/

skillmother lint [paths...]

12 rules across 4 categories:

CategoryRules
Frontmatterdescription-required, name-format, name-length, name-consecutive-hyphens, name-dir-mismatch, description-length, description-too-short
Lengthtoo-long (>500 lines), word-count (>5000), instruction-overload (>150), empty-body
Referencesfile-not-found (checks paths with / against disk)
Activationweak-description, description-too-brief, no-action-verb
skillmother lint                              # auto-discover skills
skillmother lint .claude/skills/              # lint a directory
skillmother lint path/to/SKILL.md             # lint one file
skillmother lint --project-root /my/project   # resolve refs against project root
skillmother lint --json                       # JSON output for CI

skillmother test [paths...]

This is the one nobody else has. Sends prompts to Claude with your skill loaded as system instructions, then asserts on the response. You're testing whether the skill actually makes Claude do the right thing.

Requires ANTHROPIC_API_KEY. Costs about $0.01 per test case with Haiku.

export ANTHROPIC_API_KEY=sk-ant-...
skillmother test
skillmother test --model claude-sonnet-4-5-20250929  # different model
skillmother test --verbose                           # show full responses
skillmother test --json

Test Format

Place a tests.json alongside your SKILL.md:

{
  "skill": "my-skill",
  "model": "claude-haiku-4-5-20251001",
  "tests": [
    {
      "name": "uses async patterns",
      "prompt": "Write a function that fetches data from an API",
      "assert": [
        {
          "type": "pattern",
          "value": "(async|await)",
          "description": "Should use async/await"
        }
      ]
    }
  ]
}

Assertion types:

TypeDescription
containsResponse includes the value (case-insensitive)
not-containsResponse does NOT include the value
patternResponse matches a regex (case-insensitive)
mentions-fileResponse mentions a file path or filename
uses-patternResponse matches a coding pattern regex (falls back to substring)

skillmother drift [paths...]

Finds file references in your skills that no longer exist in the codebase. Suggests renames when it finds similar files.

skillmother drift
skillmother drift --project-root /my/project
skillmother drift --json

skillmother sync [source]

Copies skills from a shared source to each dev's local Claude Code setup.

skillmother sync                             # auto-discover source
skillmother sync ./team-skills/              # explicit source
skillmother sync --target ~/.claude/skills/  # explicit target
skillmother sync --dry-run                   # preview changes

skillmother validate [paths...]

Lint + drift combined. Designed for CI. Exits with code 1 on any error.

skillmother validate --ci             # minimal output
skillmother validate --json
skillmother validate --project-root .

CI Setup

skillmother init generates this automatically, or set it up yourself:

# .github/workflows/validate-skills.yml
name: Validate Skills
on:
  pull_request:
    paths:
      - '.claude/skills/**'
      - '.skillmother/skills/**'

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install -g skillmother
      - run: skillmother validate --ci

Skills Built with Skillmother

I use skillmother to lint and test all of my own skills:

  • active-listening -- detects preference statements and persists them across sessions
  • stay-focused -- flags out-of-scope edits before they happen
  • unstuck -- catches fix-break loops and forces structured diagnosis
  • prove-it -- challenges tests to make sure they actually catch bugs
  • talk-slow -- progressive disclosure to save tokens and reduce cognitive overload
  • make-me-claude-god -- one command to become a Claude Code power user
  • production-ready -- define your production standards, then enforce them on every line of code
  • font-matchmaker -- reads your project and recommends fonts that match its personality

Project Structure

.skillmother/
  config.json
  skills/
    coding-standards/
      SKILL.md
      tests.json
    error-handling/
      SKILL.md
      tests.json

License

MIT