Planning With Files
jarrodwatts/claude-code-config
Transforms workflow to use Manus-style persistent markdown files for planning, progress tracking, and knowledge storage.
Assign items to a CLOSED label vocabulary that is too large to put in a prompt — product taxonomies, category hierarchies, tag vocabularies, routing tables, ICD/SIC-style code lists.
$ npx skills add oaustegard/claude-skills --skill hallucinating-labels -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install oaustegard/claude-skills hallucinating-labels --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/hallucinating-labels .claude/skills/hallucinating-labels && rm -rf skills-srcUse ~/.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/
Install the "hallucinating-labels" agent skill from https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labels into .claude/skills/hallucinating-labels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hallucinating-labels", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labelsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add oaustegard/claude-skills --skill hallucinating-labels -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install oaustegard/claude-skills hallucinating-labels --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/hallucinating-labels .agents/skills/hallucinating-labels && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "hallucinating-labels" agent skill from https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labels into .agents/skills/hallucinating-labels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hallucinating-labels", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add oaustegard/claude-skills --skill hallucinating-labels -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install oaustegard/claude-skills hallucinating-labels --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/hallucinating-labels .cursor/skills/hallucinating-labels && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "hallucinating-labels" agent skill from https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labels into .cursor/skills/hallucinating-labels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hallucinating-labels", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/oaustegard/claude-skills.git --path hallucinating-labels--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add oaustegard/claude-skills --skill hallucinating-labels -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install oaustegard/claude-skills hallucinating-labels --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/hallucinating-labels .gemini/skills/hallucinating-labels && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "hallucinating-labels" agent skill from https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labels into .gemini/skills/hallucinating-labels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hallucinating-labels", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install oaustegard/claude-skills hallucinating-labelsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add oaustegard/claude-skills --skill hallucinating-labels -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/hallucinating-labels .github/skills/hallucinating-labels && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "hallucinating-labels" agent skill from https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labels into .github/skills/hallucinating-labels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hallucinating-labels", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add oaustegard/claude-skills --skill hallucinating-labels -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install oaustegard/claude-skills hallucinating-labels --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oaustegard/claude-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/hallucinating-labels .opencode/skills/hallucinating-labels && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "hallucinating-labels" agent skill from https://github.com/oaustegard/claude-skills/tree/main/hallucinating-labels into .opencode/skills/hallucinating-labels/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "hallucinating-labels", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
hallucinating-labelsAssign items to a CLOSED label vocabulary that is too large to put in a prompt — product taxonomies, category hierarchies, tag vocabularies, routing tables, ICD/SIC-style code lists.
Hallucinating Labels is an agent skill from oaustegard/claude-skills. Assign items to a CLOSED label vocabulary that is too large to put in a prompt — product taxonomies, category hierarchies, tag vocabularies, routing tables, ICD/SIC-style code lists. A cheap model writes the label it thinks the vocabulary would use, and an embedder snaps that writing onto the nearest legal value, so the schema is never transmitted and the output is always in-vocabulary. Use for "classify these into our taxonomy", "tag these against the existing tag list", "map these queries to categories", "the…
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `CHANGELOG.md`, `README.md` and `scripts/snap.py`).
It sits in AI & LLM Engineering, covering Structured output and tool calling. The repository describes itself as: My collection of Claude skills. The licence is MIT.
Read from SKILL.md and the folder at commit cf49d47. It shows what the files ask for, not the result of running them.
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.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
softwaredoug.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Hallucinating Labels loads about 2.8k tokens when it runs. Until then it costs about 209 tokens; SKILL.md has 1,548 words of instructions outside code blocks.
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.
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.
The full file from oaustegard/claude-skills at commit cf49d47, republished under its MIT licence (© oaustegard). 1,548 words, ~2,807 tokens.
.claude/skills/hallucinating-labels/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Ask a cheap model to write a plausible label for the item. Snap that label onto the real vocabulary with an embedder. The model never sees the label set.
Doug Turnbull's pattern (softwaredoug.com, 2026-08-10), with the two prompt and boundary corrections that measurement produced.
If the whole vocabulary fits in a prompt, do not use this skill. Ship the label list and ask for a constrained choice. Measured on WANDS (860 labels, 468 queries, one gold label each, gemini-3.5-flash-lite):
| approach | acc@1 | acc@3 | input tokens/item |
|---|---|---|---|
| structured output, all 860 labels shipped | 0.701 | 0.744 | 5,265 |
| this skill | 0.564 | 0.690 | 6 |
| embed the item directly, no model | 0.417 | 0.564 | 0 |
Shipping the vocabulary is 14 points more accurate and 880× more expensive. Take the accuracy unless the tokens are the problem. The tokens are the problem when the vocabulary does not fit, when a provider enum cap rejects it, or when per-call cost at volume dominates — a 5,000-label vocabulary is roughly 30k tokens on every single call.
This skill still beats every model-free baseline by a wide margin, so it is the right tool whenever shipping the vocabulary is off the table.
1. Write the vocabulary to a file, one label per line, and index it once.
python3 scripts/snap.py build --vocab categories.txt --out .snap-index.pklDefault backend is tfidf — sklearn only, no download. Pass --backend minilm when
sentence-transformers and a ~90 MB download are available and the items share no wording
with the labels; it scored 0.564 to tfidf's 0.528 on WANDS. Where items literally contain
their own label words, tfidf wins outright (0.416 vs 0.356 on a memory-tag corpus).
2. Write the labels yourself, in batches of 40, using the register prompt below. Write them to a file, one per line, in the same order as the items.
3. Snap.
python3 scripts/snap.py snap --index .snap-index.pkl --labels written.txt --k 3Add --min-score 0.35 to get null instead of a bad snap, and --items items.txt --union
for long items (see below). Output is JSON with the top-k legal labels per item.
4. Report the nulls and the low scores. A snap at cosine 0.18 is noise wearing a legal label. Never present one as a classification.
This is the correction that matters most, and it is the opposite of what the source post's prompt says. Its prompt opens "create a novel, never-seen-before classification". That instruction is safe only with a model too weak to follow it.
Measured on the same 40 WANDS queries, MiniLM backend:
| prompt | model | acc@1 | acc@3 |
|---|---|---|---|
| embed the query directly, no model | — | 0.500 | 0.650 |
| "novel, never-seen-before" | gemini-3.5-flash-lite | 0.575 | 0.675 |
| "novel, never-seen-before" | Haiku 4.5 subagent | 0.100 | 0.275 |
| register-anchored (below) | Haiku 4.5 subagent | 0.525 | 0.750 |
Haiku obeyed. Asked for novelty it produced novelty — Hydraulic Styling Thrones,
Weathered Branch-Frame Reflectors, Chromatic Comfort Accents — and scored a fifth of
what doing nothing scores. Gemini flash-lite half-ignored the same instruction and wrote
Salon & Styling Chairs, Rustic Wall Mirrors, which is what the snap needs. The pattern
wants a novel instance in the vocabulary's register, and "never-seen-before" asks for
novel wording. A better instruction-follower is worse at the badly-worded prompt.
The register prompt also beat the novelty prompt on Gemini across all 468 queries (0.564 vs 0.489 acc@1), so it is strictly the better wording. Use this:
You are writing entries for a {DOMAIN} vocabulary.
For each item below, write the label that this vocabulary WOULD file that item under. Write it the way the vocabulary writes labels — match the examples' register, length and wording exactly.
Do not worry about whether the label already exists. Write the obvious one. Do not invent novel or creative wording, do not use marketing adjectives, do not hedge, do not explain.
Examples of the register: {6-8 REAL LABELS FROM THE VOCABULARY}
Output one line per item, in the same order, formatted exactly as:
<n>. <label>ITEMS: {NUMBERED ITEMS}
The examples are load-bearing — they are how the register gets communicated. Draw 6-8 real labels from the vocabulary. They are not the vocabulary; sending eight labels is not sending five thousand.
Batching is free: 0.496/0.641 batched ×40 against 0.489/0.613 unbatched, at 1/17 the input tokens and 1/9 the wall-clock.
Write the labels yourself when the items are already in context — you are the cheap model
here, and it costs one short generation. Delegate to a Haiku subagent only in batches,
and only when the item list is long enough to be worth it. A subagent invocation carries
a measured floor of ~32,500 tokens before it reads your prompt: a general-purpose Haiku
subagent asked to output the single word ok, with zero tool calls, spent 32,539. Per
item that floor is 813 tokens at batch 40 and 32,500 at batch 1.
Parse the model's numbered reply back by index, not by zipping positionally. When the
model drops item 2 of 40, zipping shifts every later item onto its neighbour's label and
nothing signals it. A dropped item is an empty label and then a null.
--union, not a different patternThe written label replaces direct embedding cleanly when item and label are the same kind of string — a WANDS query and a WANDS category are both short noun phrases. When the item is a 1,500-character document and the label is one word, the written label throws away most of the document, and the direct embedding still has it. The two are complementary.
Memory store, 1,273 tags, 250 documents of 300-2000 characters, mean 4.8 gold tags, tfidf:
| arm | @1 | @3 | @5 |
|---|---|---|---|
| embed the document directly | 0.416 | 0.628 | 0.712 |
| write 5 tags, novelty prompt | 0.208 | 0.352 | 0.424 |
| write 5 tags, register prompt | 0.508 | 0.700 | 0.792 |
both, interleaved (--union) | 0.672 | 0.852 | 0.888 |
Note the middle two rows. With the wrong prompt this corpus says the pattern loses to doing nothing by 2x; with the right one it wins, and the union wins by a lot more. Long items amplify the register error rather than causing a separate problem — a distinctive vocabulary is exactly where novel wording lands furthest from anything legal.
Rule: item and label share a register → write labels and snap them. Item is a long document
→ do that and pass --items ... --union. Neither case is a reason to reach for the
novelty prompt.
The encoder is the whole system when you cannot reach an API. Snapping the raw query, no model call anywhere, full WANDS set:
| encoder | int8 ONNX | acc@1 | acc@3 |
|---|---|---|---|
| all-MiniLM-L6-v2 | 23 MB | 0.417 | 0.564 |
| bge-small-en-v1.5 | 33 MB | 0.427 | 0.583 |
| gte-small | 33 MB | 0.455 | 0.594 |
| bge-base-en-v1.5 | 109 MB | 0.462 | 0.630 |
gte-small is the knee. bge-base buys +0.007 acc@1 for 3.3x the download.
Do not substitute a tiny local model for the label-writing half. Pleias Monad (57M)
and Baguettotron (321M) both have onnx-community builds — 35 MB and 236 MB at q4f16 —
so a wholly client-side pipeline packages fine. Neither earns its bytes. As writers they
score 0.425 and 0.400 acc@1 against a 0.500 no-model control on the same 40 queries: they
echo the query (smart coffee table → Smart coffee table) and bleed from the few-shot
exemplars (chair and a half recliner → Chair & Recycling Bins). As likelihood
rerankers over the encoder's top-10 — which asks them for no format compliance at all —
they score 0.325 and 0.350 against the same 0.500, with the gold label present in that
top-10 for 82.5% of queries.
The reason is the same one that makes the register prompt matter: what the cheap model contributes here is not reasoning but a prior over how taxonomies name things, learned from web-scale pretraining. A small model trained for reasoning has no retail-taxonomy prior, and reasoning does not substitute for one. In a browser, ship the encoder alone.
| signal | cause | fix |
|---|---|---|
| Snapped labels are wrong but confident; written labels read like ad copy | novelty-anchored prompt, obeyed | switch to the register prompt; read the written labels before blaming the snap — Hydraulic Styling Thrones is a prompt bug, not an embedder bug |
| Everything snaps to the same one or two labels | the register examples are unrepresentative, or the vocabulary has one dominant string | draw examples spanning the vocabulary's breadth |
| Scores cluster near 0.15 | items and labels share no surface wording | --backend minilm, and --union if items are long |
| Item n onward all shifted by one | positional zipping of a reply with a dropped line | parse by the emitted index; verify counts match before snapping |
| Accuracy below the no-model control | novelty-anchored prompt, or a long item without --union | fix the prompt first — it cost 30 points on one corpus and 7.5 on another; then add --union |
Run the no-model control before shipping this anywhere. Snap the items directly
(--labels items.txt, no written labels) and compare. On one of the two corpora measured
here the control won by 2x under the wrong prompt. If you have no gold labels to score against, hand-check 20
items both ways — the control is one command and its absence is how this pattern gets
adopted where it loses.
bm25 — ranked retrieval over documents. Different problem: no closed label set.agent-routing — routing to a small named set, which fits in a prompt. Ship it instead.muninn_utils.hypothetical_classifier — the same pattern as a Python API with Gemini
wired in, for Muninn sessions.Experiment, arms and artifacts: oaustegard/experiments/hypothetical-classification.
© oaustegard, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in hallucinating-labels of oaustegard/claude-skills.
Open the folder on GitHubat commit cf49d47
Hallucinating Labels 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Hallucinating Labels this skilloaustegard/claude-skills | 150 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Planning With Filesjarrodwatts/claude-code-config | 1.1k | 5 repos | ~967 | Automated safety check: Pass | None | |
| Tool Use Data Synthesissunny-glow/Auto-BenchMax | 1.3k | — | ~3.3k | Automated safety check: Pass | None | |
| Agent Harness ConstructionKartikLabhshetwar/mind-mentor | 148 | 6 repos | ~500 | Automated safety check: Pass | Apache-2.0 | |
| Prompt Engineering Patternswshobson/agents | 40k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Model Benchmarkstheopenco/llmgateway | 1.7k | — | ~1.1k | Automated safety check: Notes | Custom licence |
jarrodwatts/claude-code-config
Transforms workflow to use Manus-style persistent markdown files for planning, progress tracking, and knowledge storage.
sunny-glow/Auto-BenchMax
Synthesize training data for ANY tool-use / agentic benchmark, in ANY repo.
KartikLabhshetwar/mind-mentor
Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates.
wshobson/agents
Reference for designing and tuning production LLM prompts: few-shot examples, chain-of-thought, structured outputs, templates and system prompts.
theopenco/llmgateway
Run and report repository model or provider-mapping benchmarks.
mastra-ai/mastra
Universal quality bar and final audit rubric for any agent system prompt.
oaustegard/claude-skills
Builds interactive Vega-Lite charts from uploaded data: analyzes the fields, picks five to ten fitting chart types, and produces a React artifact with the data embedded inline.
oaustegard/claude-skills
Builds self-contained single-file HTML pages such as reports, decks, postmortems, flowcharts and prototypes from a small spec using a bundled Python composer and templates.
oaustegard/claude-skills
Rewrites model-sounding prose into plain technical writing and checks that every claim survives, for PR text, docs, commit messages and similar drafts.
oaustegard/claude-skills
Guides building standards-based Preact apps with native-first choices, HTM syntax, import maps and vendored ESM, from single-file demos to larger builds.
oaustegard/claude-skills
Deprecated sampler that captures short windows of the Bluesky firehose, clusters trending terms and builds an HTML report; replaced by the browsing-bluesky skill.
oaustegard/claude-skills
Has a fresh-context adversary attack a blog post, recommendation, analysis brief or piece of code before you ship it, using a profile suited to that kind of artifact.
Categories
Assign items to a CLOSED label vocabulary that is too large to put in a prompt — product taxonomies, category hierarchies, tag vocabularies, routing tables, ICD/SIC-style code lists. Hallucinating Labels is an agent skill from oaustegard/claude-skills. Assign items to a CLOSED label vocabulary that is too large to put in a prompt — product taxonomies, category hierarchies, tag vocabularies, routing tables, ICD/SIC-style code lists.
Hallucinating Labels fits situations like: classify these into our taxonomy; tag these against the existing tag list; map these queries to categories; the enum is too big to send.
Run `npx skills add oaustegard/claude-skills --skill hallucinating-labels -a claude-code`. Or copy the skill folder (hallucinating-labels in oaustegard/claude-skills) into .claude/skills/hallucinating-labels in your project. Claude Code loads it when a task matches its description.
Run `npx skills add oaustegard/claude-skills --skill hallucinating-labels -a codex`. Or copy the skill folder (hallucinating-labels in oaustegard/claude-skills) into .agents/skills/hallucinating-labels in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add oaustegard/claude-skills --skill hallucinating-labels -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/hallucinating-labels, .gemini/skills/hallucinating-labels, .github/skills/hallucinating-labels and .opencode/skills/hallucinating-labels in your project.
Going by SKILL.md and its folder, Hallucinating Labels needs Python for the scripts in its folder and the command-line tools its instructions call (python3). Our summary lists: Python 3.
SKILL.md names 1 domain. As links in the text: softwaredoug.com. This is read from the text; nothing was executed.
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.
Hallucinating Labels is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Hallucinating Labels: Planning With Files (jarrodwatts/claude-code-config, 1.1k stars), Tool Use Data Synthesis (sunny-glow/Auto-BenchMax, 1.3k stars), Agent Harness Construction (KartikLabhshetwar/mind-mentor, 148 stars) and Prompt Engineering Patterns (wshobson/agents, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
oaustegard (a GitHub user) maintains it in oaustegard/claude-skills, which has 150 GitHub stars. The repository holds 66 skills in this directory. The repository was last updated on October 8, 2026.
Source: oaustegard/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.