AI Essentials #3 - A home for Skills
Skills in Claude are one of those things that sound great and yet have vexed me until very recently. I couldn't get the workflow right even though when they worked, they were amazing.
The first approach
I started out by creating Skills in Cowork itself. That worked well for a while until I realized that Claude Code, which is where I do the coding in an IDE called VS Code, couldn't edit those Skills.
The second approach
Wanting Claude Code to be able to edit the Skills, I pivoted 180 degrees and put the Skills in ~/.claude/skills, where Claude Code could reach them. Pretty quickly I realized I'd made a mistake because now Cowork couldn't find the Skills and definitely couldn't edit them. That's because .claude folders are generally protected by Claude and so I wasn't able to mount ~/.claude/skills to a Cowork task.
The third approach
I created a new folder called claude-kit on my laptop at ~/code/claude-kit. This new folder has Skills, along with other notes and explainers that are helpful to me as I build my products. Since claude-kit is a folder, it can be mounted to a Cowork session and so Cowork can edit it. It's not a perfect setup because Claude Code can't read directly from claude-kit; it reads from ~/.claude/skills.
To match ~/code/claude-kit and ~/.claude/skills, I created symlinks for each individual Skill. Since ~/code/claude-kit is my "single source of truth", the file that's in ~/.claude/skills is kind of like a shortcut or hyperlink that directly links to the respective Skill in ~/code/claude-kit and displays that information. Therefore, on my Mac it looks like I have the same Skill in two places, but it's really just one. Edits made in Cowork automatically hit ~/.claude/skills, and edits made in Claude Code pass through the shortcut and hit ~/code/claude-kit too.
I also needed to back up these Skills somewhere safe so they can't get wiped on my Mac and lost forever. To do that, I first commit to .git; my Mac looks at what changed since the last snapshot and records just that difference into .git. Then I push that difference up to GitHub's servers, and because GitHub already had the prior version, it now has the full project again. If anything happens to my Mac, I can recreate my work from GitHub.
The fourth approach
The third approach worked well except that if I created any new Skills, I was going to get drift between ~/code/claude-kit and ~/.claude/skills. That's because the symlink was at the individual Skill level and I would have to remember to set the symlink up at the same time I created the new Skill. That was a 50/50 bet at best.
The fix was a single symlink at the top: instead of one shortcut per Skill, ~/.claude/skills is now one shortcut to the Skills folder in ~/code/claude-kit. Now, any new Skill I drop into that folder automatically hits ~/.claude/skills through that one shortcut.
Finally, I have both things I wanted: Skills can be edited in both Cowork and Claude Code and they are looking at the same thing, at the same time.
The fifth approach
After the fourth approach stopped working, I reverted back to the third approach. To address the drift issue between ~/code/claude-kit and ~/.claude/skills, I added a new script that runs automatically every time Claude Code starts (i.e., open a new session in VS Code or your Terminal with Claude) as a "startup hook". If I create a new Skill in claude-kit, its shortcut appears in ~/.claude/skills at the next start, and so Claude Code can find the new Skill.
I did the top-level symlink fix originally because it was simpler. You can think of the fifth approach as the third approach, plus a robot to make sure Claude Code knows when a new Skill has been created.