agentleFS
daronthedragondaronthedragon/skillsmith/skill/SKILL.md

skillsmith

Skill2 starsChanged 3 months agoMITView on GitHub

Build, lint, and evaluate agent skills that demonstrably change behaviour, instead of writing adjectives that change nothing. Use whenever the user asks to create a skill, write a SKILL.md, improve or fix an existing skill, make a skill "actually work", or evaluate whether a skill does anything. Also use when the user says "skillsmith", "new skill", or "lint this skill". Stays active for the rest of the skill-building task. Do NOT use for writing ordinary prompts, system prompts for products, or documentation that is not a skill.

6 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions6 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 6

    1. healthier-vitamins/agentic-grimoire★ 2same name
    2. rikilamadrid/lorekeeper★ 1same name
    3. rikilamadrid/pathfinder★ 1same name
    4. marcosmodly/skillsmith★ 0same name
    5. ong6/skills★ 0same name
    6. RHSTheSecond/skillsmith★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

The file

We split this skill into the rules it gives an agent

9 rules. 0 are common, 7 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 7

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Run this every time a skill is created or changed, in order.

    line 29
  2. Distinctive:

    Name the observable effect first: Before writing a line, state in one sentence what will be different in a transcript when the skill is …

    line 31
  3. Very specific:

    Scaffold, never freehand: Run skillsmith new <name> --summary "..." (add --oneshot for a run-once skill).

    line 35
  4. Distinctive:

    Add one before/after example: Instead-of / do. A real excerpt, not a description of one.

    line 46
  5. Distinctive:

    Do not argue with a warning in the summary - fix it or delete the rule it complains about.

    line 50
  6. Distinctive:

    Write to the agent, in the imperative.

    line 80
  7. Distinctive:

    Keep the body under 250 lines.

    line 91
  8. Distinctive:

    Never claim a skill works until the eval shows a delta.

    line 93
  9. Very specific:

    When skillsmith is active, every new or edited skill ends the task with a lint score and an eval delta (without → with) in the summary.

    line 130

“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Skillsmith

Most skills are decoration: a paragraph of quality words the model already agrees with, loaded into context on every turn, changing nothing. A skill that works is a procedure with a trigger, a persistence rule, and an observable effect someone can measure. Build only that kind.

Persistence

ACTIVE EVERY RESPONSE for the duration of a skill-building task. Still active when unsure whether the current edit counts. Off only when the user says "stop skillsmith" or the skill task is finished and linted.

Procedure

Run this every time a skill is created or changed, in order.

  1. Name the observable effect first. Before writing a line, state in one sentence what will be different in a transcript when the skill is active: fewer tool calls, a test command before every "done", replies under N lines. If you cannot name it, the skill has no purpose yet. Stop and ask.
  2. Scaffold, never freehand. Run skillsmith new <name> --summary "..." (add --oneshot for a run-once skill). It produces a SKILL.md and an eval.json that pass lint by construction. Edit those; do not start from a blank file.
  3. Write the trigger as situations, not a label. The description is the only text the harness reads to decide whether to load the skill. It must say when: tasks, user phrases, file types. It must also say when NOT, naming the nearby tasks the skill should stay out of.
  4. Write the behaviour as numbered steps. Each step is a verb and an object, checkable from a transcript. Conditions name both branches. No step may be "be careful", "consider", or "try to".
  5. Add one before/after example. Instead-of / do. A real excerpt, not a description of one.
  6. Lint, and fix every error. skillsmith lint <dir>. Errors mean the skill cannot work; warnings mean it will drift. Do not ship with errors. Do not argue with a warning in the summary - fix it or delete the rule it complains about.
  7. Fill the eval with real checks. In eval.json, set runner to the command that runs one prompt, write two or more prompts where the skill should change behaviour, and express each expected change as a regex the transcript will or will not contain. Never use a model as the judge.
    • Match the behaviour, not a word. To check "when the agent claims success, a real run backs it", put the claim regex in the check's given field and the proof regex in pattern. The check only bites when given matches, so a run that never makes the claim passes vacuously - being cautious is not a failure. A check without given that greps for one prescribed word reads a correct answer phrased differently as a failure.
    • Make the evidence observable. If a behaviour happens in a tool call - running code, reading a file - the runner must emit a transcript that contains the tool call, or the check cannot see it. For the Claude Code CLI that means --output-format stream-json --verbose; plain text shows only the final message and hides whether anything ran.
    • Make the tasks tempt the failure. A prompt the base model already passes cannot show a delta. Pick tasks where, without the skill, the model is likely to do the wrong thing - claim a value it could recall instead of compute, assert a state it cannot verify.
  8. Run the eval and report the delta. skillsmith eval <dir>/eval.json. A skill with no measurable delta is not done; it is decoration. Report the without → with numbers verbatim in your summary, and keep the eval even when it shows no change - an eval that cannot fail proves nothing, and the one that failed is the record that the passing one is honest.

Rules

  • Write to the agent, in the imperative. Never "this skill helps you".
  • One unconditional rule beats three hedged ones. Delete every "where possible", "try to", "consider", "as needed".
  • Quality words are not instructions. Replace "robust", "clean", "helpful", "best practices" with the concrete behaviour meant.
  • A behavioural skill states that it persists and names its off switch. A one-shot skill says "one-shot" in its description and skips both. When the prose clause is not enough and the skill must hold across a long session, enforce it with skillsmith hook <skill>, which re-asserts the skill's core every turn through a UserPromptSubmit hook instead of trusting the model to remember.
  • Keep the body under 250 lines. Reference material goes in a separate file the skill points at, not in the skill.
  • Never claim a skill works until the eval shows a delta. "Lints clean" is not "works".

Example

Instead of:

---
name: careful
description: Helps the agent be more careful and write better code.
---
Be careful. Consider edge cases. Follow best practices and try to test
where possible.

Do:

---
name: prove-it
description: >
  Nothing is done until it has been run. Use whenever the user asks to
  implement, fix, or change code. Stays active across turns. Do NOT use
  for explanation or prose tasks.
---
## Procedure
1. Before writing "done", run the command that exercises the change.
2. Paste the command and its output in the completion message.
3. If it cannot be run, write "unverified" and say why.
## Observable effect
Every completion message contains a command and its output; the phrase
"should work" does not appear.

Observable effect

When skillsmith is active, every new or edited skill ends the task with a lint score and an eval delta (without → with) in the summary. No skill is called "done" or "working" without both numbers.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.