skills/skill-writer/SKILL.md
Author or refactor a skill in this repo. Use when the user asks to "create a skill", "write a skill", "add a new skill", "document this as a skill", or to restructure an existing SKILL.md (split it up, slim it down, fix the frontmatter). Covers frontmatter conventions, file layout, and the rule for splitting deep reference material into linked docs instead of bloating SKILL.md.
npx skillsauth add joyco-studio/skills skill-writerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A skill in this repo is a self-contained directory under skills/skills/<name>/ with one entry-point file (SKILL.md) and any number of supporting docs alongside it. The harness loads SKILL.md's frontmatter to decide when to surface the skill; the body is what the agent reads when it triggers.
This skill is for writing those entries well: tight SKILL.md, deep material lifted into siblings.
SKILL.md is growing past ~250 lines and needs to be split.SKILL.md.If the user just wants to use an existing skill (e.g. "review this PR" → pr-description-writer), invoke that skill directly. This skill is for authoring.
skills/skills/<name>/
SKILL.md # required — entry point and frontmatter
<topic>.md # optional — deep reference, templates, examples
<another-topic>.md
One directory per skill. The directory name matches the skill's name field, kebab-case. Existing examples to model after:
skills/skills/webaudio/SKILL.md, skills/skills/lab-experiment/SKILL.md.skills/skills/trace-audit/ (SKILL.md + detection-heuristics.md + report-format.md), skills/skills/webaudio/ (SKILL.md + writing-effects.md).Required:
---
name: <kebab-case-id> # matches directory name
description: > # the trigger text — see below
One paragraph that names the task and lists the verbs/phrases that
should make Claude reach for this skill.
---
Conventional in this repo:
license: MIT
metadata:
author: joyco-studio
version: "0.0.1"
For user-invocable slash commands (the user types /skill-name <args>):
user-invocable: true
argument-hint: <expected-arg-shape>
The description is the only thing the harness sees when deciding whether to load the skill. Treat it as a trigger spec, not marketing copy:
@joycostudio/suno", "SunoProvider", "trace JSON file").Look at lab-experiment for a description heavy on trigger phrases, and webaudio for one heavy on library/domain terms — both work, pick the form that matches how users will reach for the skill.
Default: write everything in SKILL.md. Split a section into its own sibling .md only when all of these hold:
SKILL.md (rule of thumb: ≥80 lines, or its own table of contents starts to make sense).<topic>.md" handoff point, so the agent knows when to open it.Don't split for the sake of it. A 250-line SKILL.md that reads top-to-bottom is better than a 60-line stub that punts every section to a sibling — splitting costs the agent a tool call and fragments the mental model.
For a concrete before/after walkthrough of pulling a section out of a fat SKILL.md, see splitting-example.md.
From SKILL.md, link with a relative path so editors and previews resolve it:
See [`detection-heuristics.md`](./detection-heuristics.md) for the full pattern list.
In step-by-step workflows, name the file inline at the step that needs it (see trace-audit/SKILL.md — "Refer to detection-heuristics.md for the full set of patterns"). The agent reads the workflow top-to-bottom; tell it exactly when to open the sibling.
There's no rigid template, but the skills that work well share this skeleton:
trace-audit) or topic sections (for guide-style skills like webaudio).Skip any section that isn't earning its keep. A guide skill might not need a workflow; a workflow skill might not need a mental model.
/README.md — title links to the new SKILL.md, description is one or two sentences lifted from the frontmatter (not the full paragraph).ls skills/skills/<name>/).SKILL.md straight through. If your eyes glaze on a section, that's a split candidate (or a delete candidate).name in frontmatter (kebab-case).name and description; description lists trigger phrases or domain terms.license, metadata.author, metadata.version set (repo convention).user-invocable: true and argument-hint present..md..md files are linked from SKILL.md with a relative path at the step that needs them.README.md table updated.SKILL.md reads cleanly top-to-bottom.tools
Add sound effects, UI audio, and ambient sound to a web app using the @joycostudio/suno library. Use when the user wants to play audio on button clicks, hover states, game events, or ambient loops, and when they mention @joycostudio/suno, Suno, AudioSource, Voice, or Mixer.
tools
Analyze a Chrome DevTools Performance trace JSON file for performance anomalies, producing a structured audit report with critical issues, warnings, metrics, timeline hotspots, and actionable recommendations.
development
Analyze a bye-thrash layout thrashing report array. Parses stack traces, identifies user-code functions causing forced reflows, locates the offending style-write → layout-read pairs in source files, and produces a structured fix-suggestion report.
data-ai
Diagnose and resolve git conflicts of any kind — merge, rebase, cherry-pick, stash, revert. Use this skill EVERY time conflicts appear during work, or whenever the user mentions merge conflicts, rebase conflicts, conflict markers, "both modified" files, a failed or conflicted git pull, or asks to "fix conflicts". Use it even when the resolution looks obvious — many conflicts are phantom artifacts of squash merges or rewritten upstream history, and the correct fix is a different git strategy (e.g. git rebase --onto), not editing conflict markers.