| name | schliff |
| description | Deterministic skill linter and scoring engine for Claude Code โ the Ruff for SKILL.md files. 7-dimension structural scoring (structure, triggers, quality, edges, efficiency, composability, clarity) with anti-gaming detection, ~32% rule-based patches, and cross-session episodic memory. An autoresearch loop that measures first, then fixes โ not the other way around. Use for linting, scoring, and autonomously improving any Claude Code skill: trigger accuracy, output quality, edge coverage, token efficiency, composability, or custom metrics. Works with community, custom, project-local, or global skills. Trigger phrases: "make this skill better", "optimize my skill", "iterate on this skill overnight", "improve [metric] from X to Y", "audit skill", "review my skill", "harden skill", "benchmark skill", "lint my skill", "score my skill", or paste SKILL.md for auto-analysis. Also use when user shares skill without explicit instructions. Do NOT use for brand-new skills from scratch โ use skill-creator first, then come to Schliff. Do NOT use for SQL query tuning. Do NOT use for prompt template authoring.
|
Schliff โ Skill Measurement & Iteration Framework
Constraint + clear metric + disciplined iteration = compounding gains. The composite score measures structural quality (file organization, keyword coverage, eval suite breadth) โ not runtime effectiveness. Use --runtime to validate actual behavior.
Quick Start (Only 2 Inputs Required)
/schliff
Target: path/to/SKILL.md
Goal: Make the skill trigger correctly for deployment scenarios
Defaults: Metric=composite_score, Verify=score-skill.py, Iterations=30.
Core Loop (NEVER Pauses)
INPUT: Skill path + GOAL + PRIMARY METRIC + VERIFY method + time budget
SETUP: Read ALL files โ Analyze โ Generate eval suite โ Baseline (#0)
LOOP (N iterations, continues until goal met or budget exhausted):
Exp N: Review skill + results + git history
โ Pick ONE atomic change (based on gaps + history)
โ Edit SKILL.md or references
โ Commit: "schliff exp-N: [description]"
โ Run VERIFY, compute PRIMARY METRIC
โ Improved? Keep. Worse? Revert. Error? Fix or skip.
โ Append to history/ with diffs
CONSTRAINT: Fixed iterations prevent infinite loops; autonomous mode =
NO prompts between iterations, just continuous improvement.
When to Use
- Skill not triggering โ Run
/schliff on trigger-accuracy metric
- Wrong/incomplete outputs โ Set goal, metric = binary eval pass rate
- Harden for edge cases โ Focus on edge-coverage metric
- Skill too verbose โ Optimize token-efficiency metric
- Don't know what's wrong โ Run
/schliff:analyze for auto-discovery
- Any custom goal โ Define GOAL, pick/create METRIC, set VERIFY command
Do NOT use for creating new skills from scratch โ use skill-creator first. Do NOT use for SQL query tuning or prompt template authoring.
Interface: GOAL + METRIC + VERIFY
/schliff
Target: .claude/skills/my-skill/SKILL.md
Goal: Fix skill to handle deployment scenarios correctly
Metric: Binary eval pass rate %
Verify: bash scripts/run-eval.sh
Time budget: 2 hours
Iterations: 30
Regression guards โ prevent one dimension from regressing while improving another:
/schliff
Target: .claude/skills/deploy/SKILL.md
Goal: Maximize trigger accuracy
Metric: Trigger pass rate
Verify: python3 scripts/score-skill.py SKILL.md --json
Constraint: efficiency >= 80, composability >= 90
Quality Dimensions (Configurable via --weights)
| Dimension | Metric | How | Limitation |
|---|
| Structure | Frontmatter lint score | score-skill.py | File quality, not instruction correctness |
| Trigger accuracy | Keyword overlap | TF-IDF heuristic | Does not predict actual triggering |
| Output quality | Eval assertion breadth | Test cases | Does not verify runtime output |
| Edge coverage | Edge-case definitions | Edge test suite | Does not verify runtime handling |
| Token efficiency | Signal/noise density | score-skill.py | Cannot assess content usefulness |
| Composability | Scope boundaries | Static analysis | Cannot verify multi-skill interaction |
| Clarity (default) | Contradiction + ambiguity | score-skill.py (--no-clarity to opt out) | Pattern-based, not semantic |
See references/metrics-catalog.md for rubrics.
Custom Metrics
Define any metric via a shell command returning a number:
Metric: "Time to first correct output (ms)"
Verify: time bash scripts/run-eval.sh | grep "passed"
Validate custom metrics by running once before the loop, for example by checking the return code.
Subcommands
| Command | Purpose |
|---|
/schliff:init | Bootstrap eval-suite + baseline |
/schliff | Autonomous loop with GOAL + METRIC |
/schliff:auto | Self-driving auto-improve: deterministic patches in a loop |
/schliff:analyze | Skill analysis, gaps, anti-patterns, baseline |
/schliff:bench | Single evaluation run, current score |
/schliff:eval | Run eval suite, show results |
/schliff:report | Generate improvement summary + diffs |
/schliff:mesh | Scan skills for trigger overlap, broken handoffs, scope collisions |
/schliff:triage | Cluster logged failures, auto-generate fixes |
/schliff:log-failure | Log a skill failure for later triage |
Before the Loop (Setup Phase)
- Read ALL files โ SKILL.md + references + related skills.
- Parse GOAL + METRIC + VERIFY from input. Use defaults if unspecified.
- Run baseline โ Execute VERIFY, record initial metric as exp #0.
- Generate eval suite if none exists. Use SKILL.md examples as seeds.
- Validate eval suite โ Run once, verify assertions parse correctly.
- Show gap analysis with estimated iterations. Start NEVER-PAUSE mode on confirm.
Autonomous Loop (Eight-Phase Protocol)
Per references/improvement-protocol.md. Immutable rules:
- ONE change per experiment. Run
git diff to verify scope, because atomic edits isolate causation.
- Run VERIFY, check number, keep or discard. This prevents subjective drift.
- Revert on regression:
git revert HEAD. This ensures safe experimentation.
- Re-read ALL files before each change. This prevents contradictions.
- Descriptive commits:
schliff exp-7: add deployment edge cases.
- Stuck (5+ discards): re-read files, review history, try the opposite. This avoids local optima.
- Never modify VERIFY during loop. Metric is fixed; skill is the variable.
- Log everything to
history/ โ diffs, metrics, keep/discard status.
- Plateau guard: Every 5 iterations, compare composite against 5-back. Delta < 1.0 โ switch strategy or stop.
Cross-Session Learning
Read history/results.jsonl at loop start. Parse keep/discard per strategy, compute success rates, prioritize high-ROI strategies. < 1 point over 5 iterations triggers stop suggestion. Visualize with scripts/progress.py.
Multi-File Skills
Read full skill tree before each change. Extract sections to references/ when SKILL.md exceeds 400 lines. Verify cross-file references after each edit. For agents: treat system prompt as SKILL.md, tool definitions as references.
Discovery Mode (Auto-Gap Analysis)
Run /schliff:analyze without a GOAL:
- Run all 7 dimension scorers.
- Identify weakest dimension and failure patterns.
- Cluster eval failures for systemic issues (e.g., "all false negatives share short prompts").
- Propose ranked improvements with estimated iteration cost.
- Suggest GOAL + METRIC + VERIFY. User confirms or overrides.
Use when user says "my skill needs work" without specifying what, e.g., /schliff:analyze path/to/SKILL.md.
Parallel Experimentation
Create 3 candidates on separate git worktree branches, run VERIFY on all, keep highest improvement. Use when stuck (5+ discards) or gap > 15 points. Fallback to sequential if worktree unavailable.
Noisy Metrics
When metrics fluctuate (>5%): run VERIFY 3x, use median, keep only if improvement > 2x noise floor. Revert to best checkpoint if composite dropped > 2 points despite individual keeps.
Cost Tracking
run-eval.sh --log records duration, tokens, delta, status per run. ROI = delta / iterations_spent. Stop when last 5 iterations gained < 0.5 points. Cross-session ROI via progress.py --json.
Self-Evolving Eval Suites
Every 10 iterations: classify tests as mastered/blocked/flaky via classify_eval_health(). Reduce mastered test weight. Log mutations to history/. Run eval evolution BETWEEN sessions (preserves Rule 7).
Improvement Strategies (Dynamic)
Select based on gap analysis. Pick first dimension with gap > 10 points:
- Fix structural issues โ Run
python3 scripts/score-skill.py SKILL.md --json.
- Expand triggers โ Add synonyms, edge cases, negative boundaries.
- Add input/output examples โ Write 3+ concrete before/after pairs.
- Add edge-case handling โ Test with malformed input, missing context, empty files.
- Optimize density โ Remove redundancy, compress verbose phrasing.
- Extract references โ Move deep content to
references/.
- Verify composability โ Check handoff points, run with adjacent skills.
See references/metrics-catalog.md for patterns per dimension.
Example Session
Goal: Trigger accuracy from 60% to 90%
Verify: bash scripts/run-eval.sh | grep "PASS" | wc -l
Exp 1: Add synonyms to description โ 65% โ Keep
Exp 2: Add negative trigger examples โ 70% โ Keep
Exp 3: Compress verbose setup section โ 68% โ Discard (revert)
Exp 4: Add edge case for partial audit โ 75% โ Keep
Parse history/results.jsonl between sessions. Compare keep rates to prioritize high-ROI changes next session.
Lineage
/skill-creator โ v1 โ /schliff โ autonomous grinding โ merge. Roll back via git log --oneline history/. For crashing skills: use systematic-debugging instead, then return to Schliff.
Requirements
Requires Python >= 3.9, Git >= 2.0, jq >= 1.6, Bash >= 4.0. Standard library only. All /schliff:* commands are namespaced. Deterministic scorer, safe to re-run. If scoring fails, returns structured error.
Files
Run ls -R in skill directory. Run python3 scripts/score-skill.py SKILL.md --json for scores. Key files:
scripts/init-skill.py โ Bootstrap eval-suite (--json --dry-run)
scripts/generate-report.py โ Shareable improvement report
scripts/score-skill.py โ Dimension scores incl. runtime (--diff --clarity --weights)
scripts/text-gradient.py โ Invert scorer issues into fix list (--json --top N --apply --dry-run)
scripts/auto-improve.py โ Autonomous loop (--max-iterations N --dry-run --resume)
scripts/skill-mesh.py โ Multi-skill conflict detection (--incremental)
scripts/meta-report.py โ Strategy predictor + auto-calibration
scripts/episodic-store.py โ Cross-session memory (--store --recall --synthesize)
scripts/parallel-runner.py โ Worktree parallel experimentation (--strategies --auto)
scripts/runtime-evaluator.py โ Invoke Claude with test prompts, check output
scripts/analyze-skill.sh โ Legacy linter (score-skill.py has this built-in)
scripts/run-eval.sh โ Run eval suite (--runtime auto-enabled if claude CLI available)
scripts/progress.py โ Convergence charts + strategy analysis (--emit-meta)
hooks/session-injector.js โ SessionStart hook: surfaces untriaged failures
references/improvement-protocol.md โ Full 9-phase loop spec
references/metrics-catalog.md โ Scoring rubrics + custom metrics
templates/eval-suite-template.json โ Eval skeleton for new skills