Chelle Code Michelle Hallworth

chelle code / guide

Never edit a .skill zip

Two of my Claude skills silently lost their corrections in one week. Here is why, and the three-part fix that keeps skills in git instead.

For: Anyone maintaining their own Claude skills across more than one session. Updated September 28, 2026. Free to use and adapt.

What happened

My skills used to live only as .skill zip files. A session would unpack one into its own container, edit that copy, and zip it back over whatever was on disk. With several sessions open at once, none of which could see the others, whoever saved last won. There was no error and nothing in the diff to notice, because git tracks a zip but cannot diff one.

Two skills regressed that way inside one week. One lost more than half of its grading rubric, so it was scoring job postings against rules I had already corrected. The other lost several corrections I had made by hand, including an overclaim I had specifically removed, which was sitting in the file again. Neither announced itself. Both were found by accident.

The fix

1. Source is plain text in git, and it is the only thing anyone edits. Each skill is a directory (skills/<name>/SKILL.md plus its references and scripts). The zip is a build artifact. Two sessions editing different files now merge cleanly, and git diff shows exactly what changed.

2. The build refuses to run on uncommitted changes. That one check is the collision detector. If the uncommitted files are yours, you forgot to commit, and the publish script commits them for you. If they are not yours, another session is mid-edit right now, and packaging that tree would ship half of work you cannot see. Stop and wait. Do not --force past it.

3. Every bundle is stamped with the commit it was built from, in a comment at the end of its SKILL.md. A session can read its own installed skill, compare the stamp to the source, and know whether it is behind without downloading anything.

A shrink guard backs this up: the build also refuses when a file would lose more than 10% of its size, which is exactly what both regressions looked like.

The publish script, in outline

publish.sh --check     # which skills are out of date; changes nothing
publish.sh <name>      # commit that skill's source, build, stamp, commit the artifact
publish.sh --all       # the same, for every skill

If you only change SKILL.md

Small edits to the instructions alone do not need a rebuild. Paste the new SKILL.md into the skill editor directly, but commit the source first; saving without a matching commit puts your account ahead of git, which is the same silent drift in the other direction.

← All free things

Subscribe to Chelle Code

New writing and new free tools. Free, whenever there's something to send.

Draft: signup is not wired to Buttondown yet.