Agent skill

Write A Skill

by borghei in borghei/Claude-Skills

Author, lint, and publish skill packages that satisfy the library authoring standard.

MITAuto-check passedAgent Workflows

Install Write A Skill

skills CLI
$ npx skills add borghei/Claude-Skills --skill write-a-skill -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install borghei/Claude-Skills write-a-skill --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/borghei/Claude-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/engineering/write-a-skill .claude/skills/write-a-skill && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
write-a-skill
GitHub stars
874
Token cost
~3.2k tokens
SKILL.md length
1,707 words
Files
11 (incl. scripts, references, assets)
Skills in repo
364
Repo updated
First seen
Licence
MIT

At a glance

Author, lint, and publish skill packages that satisfy the library authoring standard.

  • Works in 4 steps: Write the description first, before any… → Fill in a spec JSON: name, title,… → Run the scaffolder with --dry-run to… → …
  • Creating a new skill
  • SKILL.md covers When to use this skill, Inputs the skill expects, Clarify First and Workflows, plus 3 more sections
  • Runs Python scripts from its folder; calls python3

What it does

Write A Skill is an agent skill from borghei/Claude-Skills. Author, lint, and publish skill packages that satisfy the library authoring standard. Use when creating a new skill, reviewing a skill PR, or fixing one that never activates.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including scripts, reference files and assets (for example `assets/sample_descriptions.json`, `assets/sample_lint_rules.json` and `assets/sample_skill_spec.json`).

It sits in Agent Workflows, covering Skill authoring and Linting and formatting. The repository describes itself as: 385 AI skills, 77 expert agents, and 900 stdlib Python tools for every team: engineering, PM, marketing, C-level, compliance, business ops, research, and a LinkedIn toolkit… The licence is MIT.

When your agent uses it

  • Creating a new skill
  • Reviewing a skill PR
  • Fixing one that never activates

Example prompts

  • “/write-a-skill”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Write the description first, before any other content. If you cannot express the
  2. Fill in a spec JSON: name, title, description, category, domain, script names,
  3. Run the scaffolder with --dry-run to inspect the file plan, then again to write it.
  4. Fill every TODO marker. The scaffold is deliberately unshippable until you do.

What it can do on your machine

Read from SKILL.md and the folder at commit c9a1487. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 4 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Write A Skill loads about 3.2k tokens when it runs, and up to ~9k if it reads all its reference files. Until then it costs about 47 tokens; SKILL.md has 1,707 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~47
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from borghei/Claude-Skills at commit c9a1487, republished under its MIT licence (© borghei). 1,707 words, ~3,216 tokens.

Download SKILL.mdSave it as .claude/skills/write-a-skill/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
write-a-skill
description
Author, lint, and publish skill packages that satisfy the library authoring standard. Use when creating a new skill, reviewing a skill PR, or fixing one that never activates.
license
MIT + Commons Clause
metadata.version
1.0.0
metadata.author
borghei
metadata.category
engineering
metadata.domain
meta-skills
metadata.updated
2026-07-21
metadata.tags
authoring, meta-skill, linting, standards, packaging

Write A Skill

The meta-skill for building skill packages. It turns standards/skill-authoring-standard.md from a document you agree with into a gate you can run: scaffold the package, write a description that actually activates, place content in the right file, and lint against all 11 patterns before anyone reviews it. Most rejected skills fail on two things — a description nothing matches, and a SKILL.md carrying content that belonged in references/.

When to use this skill

  • Creating a new skill from a one-line idea and needing the package structure right the first time
  • Reviewing a skill PR and wanting a mechanical pass before spending attention on judgement
  • Fixing a skill that never activates despite being well written — almost always a description problem
  • Splitting an oversized SKILL.md that has crept past 500 lines
  • Auditing a whole domain for description collisions after adding several neighbouring skills
  • Onboarding a new author who needs the standard operationalised rather than explained

Inputs the skill expects

  • The skill's one-sentence purpose and the domain directory it belongs in
  • The three to five user sentences that should activate it (these become the description)
  • Which existing skills sit closest to it in trigger space
  • Whether it emits a deliverable (drives the Pattern 11 Clarify First gate) or only advises
  • The analysis each script will perform, and the sample input each will run against
  • Any deep knowledge that will exceed the SKILL.md budget and belongs in references/

Under Pattern 9 this skill is self-contained except for one permitted outbound reference: standards/skill-authoring-standard.md. Standards apply library-wide, so citing them does not create a cross-skill dependency. Nothing here may point at another skill's files.

Clarify First

Before scaffolding, confirm these inputs. If any is unknown or vague, ASK — do not assume:

  • Trigger sentences — the literal phrases a user would type; they set the description, which decides whether the skill ever activates
  • Nearest existing skills — determines whether this should be a new package or an extension of one that already owns the trigger space
  • Generative or advisory — generative skills require the Clarify First gate; advisory ones must omit it
  • What the scripts compute — a skill whose scripts only reformat user input will not clear the 40% time-saving bar

Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.

Workflows

Workflow 1 — Scaffold a new package
  1. Write the description first, before any other content. If you cannot express the trigger set in 240 characters, the skill's scope is still too broad — narrow it.
  2. Fill in a spec JSON: name, title, description, category, domain, script names, and whether the skill is generative.
  3. Run the scaffolder with --dry-run to inspect the file plan, then again to write it.
  4. Fill every TODO marker. The scaffold is deliberately unshippable until you do.
bash
python3 engineering/write-a-skill/scripts/skill_scaffold.py \
  --input engineering/write-a-skill/assets/sample_skill_spec.json \
  --out engineering --dry-run --format text

The scaffolder refuses specs whose description exceeds 240 characters or lacks a Use when clause. That refusal is the point — it stops you building 4,000 lines of package around a skill that will never activate.

Workflow 2 — Audit descriptions for activation and collision
  1. Run the auditor across the target domain, or against a JSON list while drafting.
  2. Fix anything scoring under 70: budget overruns, missing Use when, filler adjectives.
  3. Read the collision report. Any pair above 0.50 overlap means an assistant is guessing between them — either merge the skills or re-cut their triggers so each owns distinct vocabulary.
bash
python3 engineering/write-a-skill/scripts/description_audit.py \
  --input engineering/write-a-skill/assets/sample_descriptions.json \
  --min-score 70 --collision-threshold 0.5 --format text

Exit code is 1 when any description scores below --min-score, which makes this usable as a CI gate. Point --domain engineering at a whole directory to audit every shipped description at once.

Workflow 3 — Lint before review
  1. Run the linter in --strict mode so warnings fail too.
  2. Fix errors in pattern order — P2 and P1 findings first, since frontmatter and description problems invalidate everything downstream.
  3. Re-run until clean, then run each workflow's bash block verbatim and paste the output into the PR. A skill whose own examples were never executed is not done.
  4. Hand the reviewer assets/skill-review-checklist.md for the judgement half.
bash
python3 engineering/write-a-skill/scripts/skill_lint.py \
  --skill engineering/write-a-skill \
  --rules engineering/write-a-skill/assets/sample_lint_rules.json \
  --strict --format json

The linter distinguishes tools from helper modules. A scripts/*.py file that a sibling script imports and that has no __main__ guard is a library, so the argparse / --format / guard requirements are not applied to it; it is still checked for stdlib-only imports and the line-count budget. Imports that resolve to a .py file in the same scripts/ directory are permitted under Pattern 9 — reaching into a different skill's directory stays an error. Verify both behaviours with the built-in fixtures before shipping a linter change:

bash
python3 engineering/write-a-skill/scripts/skill_lint.py --selftest

Decision frameworks

Where does this content go?

The single most common authoring mistake is putting everything in SKILL.md. Route content by asking what reads it and when.

ContentDestinationTest
Workflows, decision tables, activation contextSKILL.mdAn assistant needs it on every invocation
Frameworks, benchmark tables, maturity models, regulatory detailreferences/*.mdNeeded on some invocations; would blow the 500-line budget
Deterministic analysis over user datascripts/*.pyA human would otherwise do it by hand for 15+ minutes
Anything the user fills in and keepsassets/*The output belongs to the user, not the skill

If SKILL.md exceeds 500 lines, the split is almost never "trim prose." It is one whole section that should have been a reference from the start.

Description budget allocation [PROVEN]

240 characters, spent in this order:

SegmentBudgetContains
What it does~80 charsOne clause, concrete verb, the artifact produced
Use when triggers~140 chars3 trigger phrases in the user's own words
Slack~20 charsLeave it — descriptions grow at every revision

Never spend budget on: the skill's own name, feature enumerations (those are tags), "pairs with X" routing prose (that goes in the body), or adjectives. The description is resident in context for every session in which the skill is installed — it is the most expensive text in the package per byte.

SignalBuild itDo not build it
Time saved per use15+ minutesUnder 5 minutes
Repeat frequencyMonthly or moreOnce ever
Judgement encodedReal thresholds, named methodsGeneric process everyone knows
Nearest skill's trigger overlapUnder 0.4Over 0.6 — extend that skill instead
ScriptsCompute something non-obviousReformat what the user typed

Two "do not build it" columns is a rejection. One is a warning worth arguing about.

Show full SKILL.md (646 more words)Show less
Script count and shape [PROVEN]

Two to three scripts, 150-300 lines each. Under 150 lines means the tool does not justify a file; over 300 means it is two tools. Every script takes --format {text,json} with text as the default, exits 1 on findings so CI can gate on it, and ships a sample_*.json in assets/ so the workflow block in SKILL.md is runnable by someone who just cloned the repo.

Anti-Patterns

The Keyword-Stuffed Description

Mistake: Padding the description with every synonym the author can think of, on the theory that more words means more matches. Why it happens: Discovery feels like search, and search rewards keywords. It also feels free, because the cost is paid in someone else's context window. Instead: Write the three sentences a user would actually type, and lift the distinctive nouns and verbs from those. Then run description_audit.py — if it reports a collision above 0.5 with a neighbouring skill, the fix is sharper scope, not more words.

The Encyclopedia SKILL.md

Mistake: Writing an 900-line SKILL.md that covers the domain exhaustively, with references/ left empty. Why it happens: The author knows the domain deeply and everything genuinely feels important. Splitting also feels like admitting the content is second-tier. Instead: Keep in SKILL.md only what an assistant needs on every single invocation — workflows, decision tables, activation context. Move frameworks and exhaustive detail to references/ and link them by relative path. references/ is not the demotion bin; it is where deep content is actually usable, because it gets loaded on demand instead of never.

The Untested Workflow

Mistake: Shipping bash blocks in Workflows that were written by hand and never executed, often with flags the script does not implement. Why it happens: The workflow is written before the script is finished, and nobody goes back once the flags settle. Instead: Run every bash block verbatim against the shipped sample data as the last step before opening the PR, and paste the real output into the PR description. A script that crashes on its own sample input is the single loudest quality signal a reviewer can get.

The Menu Skill

Mistake: Presenting five approaches with balanced pros and cons and letting the reader choose. Why it happens: It feels more honest and less presumptuous than picking one, especially when the author has seen all five work. Instead: State the recommendation, give the reason, then give the escape hatch — the specific condition under which the recommendation stops applying. Users invoke a skill for a position, not a survey; anything less than a recommendation they could have found themselves in thirty seconds.

The Cross-Skill Dependency

Mistake: Writing "see the X skill for the scoring model" or importing a helper from ../other-skill/scripts/. Why it happens: Duplication feels wrong to engineers, and DRY is a deeply trained instinct. Instead: Copy the helper. Skills are distributed as individual folders, so a cross-skill import is a broken package the moment someone extracts one directory. A helper module inside the skill's own scripts/ directory is fine — that ships with the folder. standards/ is the only permitted outbound reference, because it applies to every skill everywhere.

Files

FilePurpose
scripts/skill_lint.pyLint a skill folder against all 11 patterns; per-pattern findings, exit 1 on error. --selftest runs the built-in helper/dependency fixtures
scripts/lint_checks.pyHelper library for skill_lint.py — rule set, frontmatter parser, SKILL.md and structure checks. No CLI by design
scripts/skill_scaffold.pyGenerate a compliant package skeleton from a JSON spec, with every required section stubbed
scripts/description_audit.pyScore descriptions on budget and trigger quality; flag colliding skill pairs
references/authoring-playbook.mdSection-by-section guidance, worked description rewrites, and the content-routing rules
references/pattern-checklist.mdThe 11 patterns as concrete pass/fail criteria with common failure modes and fixes
assets/sample_skill_spec.jsonRunnable scaffold input for Workflow 1
assets/sample_descriptions.jsonRunnable audit input for Workflow 2, including deliberately failing examples
assets/sample_lint_rules.jsonThreshold overrides for Workflow 3
assets/skill-review-checklist.mdReviewer checklist covering the judgement half the linter cannot check

© borghei, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 10 other files (scripts, references, assets) in engineering/write-a-skill of borghei/Claude-Skills.

  • SKILL.md
  • assets/sample_descriptions.json
  • assets/sample_lint_rules.json
  • assets/sample_skill_spec.json
  • assets/skill-review-checklist.md
  • references/authoring-playbook.md
  • references/pattern-checklist.md
  • scripts/description_audit.py
  • scripts/lint_checks.py
  • scripts/skill_lint.py
  • scripts/skill_scaffold.py

Open the folder on GitHubat commit c9a1487

Compare with similar skills

Write A Skill next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Write A Skill compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Write A Skill this skillborghei/Claude-Skills874—~3.2kAutomated safety check: PassMIT
Authoring Skillsfriday-platform/friday-studio104—~2.4kAutomated safety check: PassCustom licence
Meta Skill Creatorclawdotnet/openclaw.net519—~4.8kAutomated safety check: PassMIT
Bmad Builderaj-geddes/claude-code-bmad-skills487—~1.9kAutomated safety check: NotesCustom licence
Om Create Skillgo-musicfox/go-musicfox2.6k1 repos~1.8kAutomated safety check: PassGPL-3.0
Desloprohitg00/pro-workflow2.9k—~899Automated safety check: PassNone

Similar skills

  • Authoring Skills

    friday-platform/friday-studio

    Authors new agent skills that follow the Anthropic + agentskills.io specification.

    104 GitHub stars~2.4k tokensUpdated 1 mo ago
    Agent WorkflowsAuto-check passed
  • Meta Skill Creator

    clawdotnet/openclaw.net

    Use this meta-skill instead of answering directly only when the current user explicitly asks to create, compose, synthesize, or propose a new meta-skill that orchestrates multiple existing skills.

    519 GitHub stars~4.8k tokensUpdated 4 days ago
    Agent WorkflowsAuto-check passed
  • Bmad Builder

    aj-geddes/claude-code-bmad-skills

    Meta-skill for scaffolding and validating custom PLANNING/ORCHESTRATION skills within the BMAD Planning & Orchestrator plugin.

    487 GitHub stars~1.9k tokensUpdated 3 mo ago
    DevelopmentAuto-check: notes
  • Om Create Skill

    go-musicfox/go-musicfox

    Author a new OM skill from a brief, or split an oversized SKILL.md into layered references/ files — conservatively, behind the lint + completeness gate.

    2.6k GitHub starsUsed in 1 repo~1.8k tokens
    DevelopmentAuto-check passed
  • Deslop

    rohitg00/pro-workflow

    Remove AI-generated code slop, unnecessary comments, and over-engineering from the current branch diff.

    2.9k GitHub stars~899 tokensUpdated 8 days ago
    DevelopmentAuto-check passed
  • Claude Code Plugin Structure

    anthropics/claude-plugins-official

    Official

    Explains the directory layout, plugin.json manifest and component organization of a Claude Code plugin, including auto-discovery and portable paths.

    37k GitHub starsUsed in 10 repos~3.4k tokens
    Agent WorkflowsAuto-check passed

More from borghei/Claude-Skills

All 364 skills in this repo
  • Agents In The Team

    borghei/Claude-Skills

    Run delivery when AI coding and ops agents take tickets. An agent skill from borghei/Claude-Skills.

    874 GitHub stars~4.2k tokensUpdated yesterday
    Auto-check passed
  • AI Content Disclosure

    borghei/Claude-Skills

    Check AI-generated marketing content and reviews for required disclosures under the EU AI Act, FTC rules and platform AI-label policies.

    874 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • AI Prototyping

    borghei/Claude-Skills

    Idea to AI-generated prototype to customer validation to engineering handoff.

    874 GitHub stars~3.6k tokensUpdated yesterday
    Auto-check passed
  • Analytics Engineer

    borghei/Claude-Skills

    Analytics engineering across data modeling, dbt, transformation, and semantic layers.

    874 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Ansoff Matrix

    borghei/Claude-Skills

    Ansoff Matrix — 4-quadrant framework for growth options: market penetration, market/product development, and diversification.

    874 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Brainstorm Okrs

    borghei/Claude-Skills

    OKR brainstorming and validation using the Radical Focus framework — outcome objectives, measurable key results, counter-metrics.

    874 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed

Questions about Write A Skill

What does Write A Skill do?

Author, lint, and publish skill packages that satisfy the library authoring standard. Write A Skill is an agent skill from borghei/Claude-Skills. Author, lint, and publish skill packages that satisfy the library authoring standard.

When should I use Write A Skill?

Write A Skill fits situations like: creating a new skill; reviewing a skill PR; fixing one that never activates.

How do I install Write A Skill in Claude Code?

Run `npx skills add borghei/Claude-Skills --skill write-a-skill -a claude-code`. Or copy the skill folder (engineering/write-a-skill in borghei/Claude-Skills) into .claude/skills/write-a-skill in your project. Claude Code loads it when a task matches its description.

How do I install Write A Skill in Codex?

Run `npx skills add borghei/Claude-Skills --skill write-a-skill -a codex`. Or copy the skill folder (engineering/write-a-skill in borghei/Claude-Skills) into .agents/skills/write-a-skill in your project. Codex loads it when a task matches its description.

Can I use Write A Skill in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add borghei/Claude-Skills --skill write-a-skill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/write-a-skill, .gemini/skills/write-a-skill, .github/skills/write-a-skill and .opencode/skills/write-a-skill in your project.

What does Write A Skill need to run?

Going by SKILL.md and its folder, Write A Skill needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.

Does Write A Skill access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Write A Skill safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Write A Skill use?

Write A Skill is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Write A Skill use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.8k tokens, read only when the agent opens those files.

What are the alternatives to Write A Skill?

Skills that share tags, products or a category with Write A Skill: Authoring Skills (friday-platform/friday-studio, 104 stars), Meta Skill Creator (clawdotnet/openclaw.net, 519 stars), Bmad Builder (aj-geddes/claude-code-bmad-skills, 487 stars) and Om Create Skill (go-musicfox/go-musicfox, 2.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Write A Skill?

borghei (a GitHub user) maintains it in borghei/Claude-Skills, which has 874 GitHub stars. The repository holds 364 skills in this directory. The repository was last updated on October 7, 2026.

Source: borghei/Claude-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.