{
  "markdown": "# pulser — SKILL.md Linter for Claude Code\n\n<p align=\"center\">\n  <img src=\"docs/banner.svg\" alt=\"pulser — Diagnose. Prescribe. Fix.\" width=\"100%\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://thestack-ai.github.io/pulser/\">Website</a> ·\n  <a href=\"https://www.npmjs.com/package/pulser-cli\">npm</a> ·\n  <a href=\"./README.ko.md\">한국어</a>\n  <br><br>\n  <a href=\"https://github.com/TheStack-ai/pulser/actions/workflows/ci.yml\"><img src=\"https://github.com/TheStack-ai/pulser/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"https://www.npmjs.com/package/pulser-cli\"><img src=\"https://img.shields.io/npm/v/pulser-cli?color=10b981\" alt=\"npm\"></a>\n  <a href=\"https://www.npmjs.com/package/pulser-cli\"><img src=\"https://img.shields.io/npm/dm/pulser-cli?color=06b6d4\" alt=\"downloads\"></a>\n  <a href=\"https://github.com/TheStack-ai/pulser/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/TheStack-ai/pulser\" alt=\"license\"></a>\n  <a href=\"https://github.com/TheStack-ai/pulser\"><img src=\"https://img.shields.io/github/stars/TheStack-ai/pulser?style=social\" alt=\"stars\"></a>\n  <a href=\"https://github.com/rohitg00/awesome-claude-code-toolkit\"><img src=\"https://awesome.re/mentioned-badge.svg\" alt=\"Mentioned in Awesome Claude Code Toolkit\"></a>\n  <a href=\"https://github.com/marketplace/actions/pulser-claude-code-skill-linter\"><img src=\"https://img.shields.io/badge/Marketplace-Pulser-10b981?logo=github\" alt=\"GitHub Marketplace\"></a>\n</p>\n\n\"Check my skills.\" Diagnose, classify, prescribe, and fix — without leaving the conversation.\n\n```\n$ pulser\n\n  pulser v0.4.0\n\n  54 skills scanned · Score: 89/100\n  ✓ 48 healthy  ⚠ 4 warnings  ✗ 2 errors\n\n  Top issues:\n    cardnews    — No Gotchas, no allowed-tools\n    geo-audit   — 338 lines, single file\n\n  💊 Rx #1 — cardnews\n  [GOTCHAS] Add Gotchas section\n    Why: Anthropic's highest-ROI improvement\n    Template:\n      ## Gotchas\n      1. Validate output against conventions\n      2. Check scope — don't over-generate\n\n  Fix type: AUTO\n```\n\n## What it does\n\npulser scans your `SKILL.md` files against 8 diagnostic rules derived from Anthropic's published principles in [\"Building Claude Code: How We Use Skills\"](https://code.claude.com/docs/en/skills):\n\n| Rule | What it checks |\n|------|---------------|\n| `frontmatter` | Required `name` and `description` fields |\n| `description` | Trigger keywords, \"Use when\" pattern, length |\n| `file-size` | SKILL.md under 500 lines |\n| `gotchas` | Gotchas section with failure patterns |\n| `allowed-tools` | Tool restrictions appropriate for skill type |\n| `structure` | Supporting files for large skills |\n| `conflicts` | Trigger keyword overlap between skills |\n| `usage-hooks` | Skill usage logging hook installed |\n\nEach skill is auto-classified by type (analysis, research, generation, execution, reference) with confidence scoring. Prescriptions are tailored to the detected type.\n\n## Install\n\n```bash\nnpm install -g pulser-cli\n```\n\nOn install, pulser registers itself as a Claude Code skill — say \"check my skills\" or `/pulser` to run it conversationally.\n\n## Usage\n\n### In Claude Code\n\nJust say it:\n\n```\ncheck my skills\n```\n\nOr use the slash command:\n\n```\n/pulser\n```\n\nClaude runs the diagnosis, summarizes results, and offers to fix issues — all within the conversation.\n\n### In terminal\n\n```bash\n# Scan default path (~/.claude/skills/)\npulser\n\n# Scan a specific directory\npulser ./my-skills/\n\n# Scan a single skill\npulser --skill reasoning-tracer\n\n# Auto-fix issues with backup\npulser --fix\n\n# Rollback the last fix\npulser undo\n\n# JSON output (for CI/automation)\npulser --format json\n\n# Markdown report\npulser --format md\n\n# Treat warnings as errors\npulser --strict\n\n# Disable TUI animation\npulser --no-anim\n```\n\n## Eval — Skill Testing\n\nNew in v0.4.0: test your skills against real inputs.\n\n```bash\npulser eval\n```\n\nWrite `eval.yaml` next to your `SKILL.md`:\n\n```yaml\ntests:\n  - name: \"catches bugs\"\n    input: \"Review: function add(a,b) { return a - b }\"\n    assert:\n      - starts-with: \"The bug\"\n      - contains: \"subtract\"\n      - min-length: 30\n```\n\npulser runs each test through `claude -p`, checks assertions, and tracks regressions automatically.\n\n```\n$ pulser eval\n\n  reviewer (2 tests)\n    ✓ catches bugs         320ms\n    ✓ passes clean code    280ms\n\n  2 passed · 0 failed · 0.6s\n```\n\nSupported assertions: `contains`, `not-contains`, `starts-with`, `ends-with`, `min-length`, `max-length`, `matches` (regex).\n\n### Exit Codes (eval)\n\n| Code | Meaning |\n|------|---------|\n| `0` | All tests passed |\n| `1` | Failures found |\n| `3` | Regression detected (previously passing test now fails) |\n\n## Core Pipeline\n\n1. Diagnose — Scan and classify issues across 8 rules\n2. Prescribe — Explain why it matters, provide ready-to-use templates\n3. Fix — Auto-apply safe structural fixes with full backup\n4. Eval — Test skills against real inputs, track regressions\n5. Rollback — Instant undo, your safety net\n\n## Exit Codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | All rules passed |\n| `1` | Errors found |\n| `2` | Warnings found (with `--strict`) |\n\n## Patient Monitor TUI\n\nWhen running in a TTY terminal, pulser displays a hospital-style patient monitor with real-time waveform animation:\n\n- Green ECG — Skills being scanned\n- Green capnography — Pass/warn/fail counts\n- Cyan plethysmograph — Health score\n- Yellow respiratory — Prescription count\n\nDisable with `--no-anim` or pipe to a file.\n\n## License\n\nMIT — [TheStack-ai](https://github.com/TheStack-ai)\n\n## Featured in\n\n- [GitHub Marketplace — Pulser Action](https://github.com/marketplace/actions/pulser-claude-code-skill-linter)\n- [Awesome Claude Code Toolkit](https://github.com/rohitg00/awesome-claude-code-toolkit)\n- [Anthropic Plugin Directory](https://platform.claude.com) *(under review)*\n",
  "bytes": 5777,
  "sha": "505d18520ab0017f48dc9ee209da812260ff59e5b5832da0304ae3d975635bea",
  "repo_slug": "thestack-ai/pulser",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_thestack_ai_pulser_pulser_adfea54e/readme"
}