ship-skill
Skill2 starsChanged 22 days agoMITView on GitHub
Publish a finished Claude Code skill or hook everywhere it belongs - sanitize it, add it to the public claude-code-hooks repo with both READMEs updated, back it up, and queue the promotion. Use whenever a skill or hook is finished or substantially changed, when Jared says /ship-skill, "publish the skill", "put it everywhere", or when a session is about to end having written a new skill.
In this repository15 other files it gives its agents.
- bankSkill
- build-toolSkill
- busy-workSkill
- freebieSkill
- idea-vetSkill
- linkedin-engageSkill
- make-skillSkill
- post-weekSkill
- seat-templateSkill
- sparSkill
- validate-accuracySkill
- vid-batchSkill
- week-planSkill
- written-redraftSkill
- x-engageSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 9 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈9
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Distinctive: line 54
Four places carry counts and every one of them drifts: Update all four in the same commit:
- Distinctive: line 66
Run the tests from their published location before committing, not from where they were written.
- Distinctive: line 77
Do not post anything outward from here.
- Distinctive: line 83
If the skill belongs in The Back Office classroom on Skool, say so in your output and name which room.
- Distinctive: line 89
Do not push a public repo before the sanitizer agent has come back clean.
- Distinctive: line 90
Do not strip real names, dates or business specifics.
- Distinctive: line 92
Do not publish a seat.
- Distinctive: line 93
Do not publish a hook without its test.
- Distinctive: line 94
Do not post to Skool, a newsletter or a social channel from this skill.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Put a finished skill where it belongs
~/.claude/skills/ and ~/.claude/hooks/ are gitignored. ~/.claude/.gitignore is *
with exceptions only for .gitignore, CLAUDE.md and settings.json, so a skill that lives
only there exists in exactly one place on one machine. That is the reason this runs, and the
backup is the same action as the publish.
A skill is not done when it runs. It is done when it is public, backed up and findable.
0. Does it go public at all
Most do. The ones that do not are the seats and anything whose content is one business's pricing, roadmap, refund policy or private accounts. If a skill is private on purpose, say so in your output and stop here; do not sanitize it into something meaningless.
The published set already keeps real names, real dates and real business specifics on purpose. The repo README argues for that: a sanitized example with every specific removed teaches nothing. So sanitizing is narrow. It removes ids and secrets, nothing else.
1. Sanitize, then have a cold agent check it
Replace, and nothing more:
| Real | Placeholder |
| A Notion data source id | collection://YOUR-<NAME>-DATA-SOURCE-ID |
| Your real home directory in a path | <HOME> |
| A Buffer org id | YOUR-BUFFER-ORG-ID |
| A Canva design id | <CANVA-DESIGN-ID> |
| Any other account id, topic string or token | an <angle-bracket> name |
Then dispatch one cold agent, pointed at the exact files, told to scan for secrets, real
home directory paths, personal email addresses, private ids and any file that should never be
in a repo, and to return PASS or FAIL rather than fixing anything. See
review-prompts/ for the two prompts this is the third of. It is the
review anything public gets on top of the two normal ones. Its dispatch prompt carries the no-spawn line and
the verify-before-reporting rule. Do not push before it comes back.
2. Into the public repo
Your public repo. Here that is claude-code-hooks, MIT.
skills/<name>/SKILL.md, plus any script the skill cannot run without. A skill that ships its own script is better than one that does not, so include it when it is yours to give.hooks/<name>.mjsand its test. Not every published hook has one, and every one that can be tested should.- Any placeholder you invented goes on the list in
skills/README.mdunder "Installing one".
Four places carry counts and every one of them drifts. Update all four in the same commit:
README.md, the top table row forhooks/orskills/.README.md, the count in the opening line of section 1 or section 2.README.md, "All N are plain Node scripts", for a hook.skills/README.md, the opening line and its table.
A hook also needs a bullet in the right group in README.md section 1, a ### <name> (Event)
detail section saying what incident produced it, and its matcher in the Install block if that
matcher differs from the ones already shown. A skill needs a row in the skills/README.md
table.
Run the tests from their published location before committing, not from where they were written. A path that resolves at home can break one directory over.
3. Record it
- A dated UPDATE in the matching
projects/aide-data/memory/projects/*.md. - The Claude Code memory that covers this system, plus its one line in
MEMORY.md. ~/.claude/CLAUDE.mdif the skill changes how any session behaves.
4. Promotion, which is a queue and not a post
Do not post anything outward from here. Publishing to his channels is his call and goes through the normal pipeline. What this does is make sure the thing is queueable:
- File a row in the Notion Content Bank (
Draftnaming the skill and what went wrong that produced it,Platformblank so/idea-vetrecommends freely). The bank is a menu and never drains, so this is an addition, never a schedule. - If the skill belongs in The Back Office classroom on Skool, say so in your output and name which room. Do not create a room, post a lesson, or touch Skool without him saying yes: it is a paid community and a publish there is outward-facing.
Do not
- Do not push a public repo before the sanitizer agent has come back clean.
- Do not strip real names, dates or business specifics. That is what makes the file worth reading, and the repo says so out loud.
- Do not publish a seat.
- Do not publish a hook without its test.
- Do not post to Skool, a newsletter or a social channel from this skill.
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
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.

