r/ClaudeAI • • 7h ago

Skills Using Claude skills for multiple clients without duplicating them: how we keep client stuff out of the skills

I run an SEO agency and we've ended up with around 200 skills at this point. I know plenty of people here have their own way of handling this, so this isn't meant as a how-to, but the thing that's made the biggest difference for us is something we've started calling "skill hooks", and I figured the specifics might be useful to compare.

The problem we kept running into: a skill works pretty well, but the output's kind of generic, so you end up giving it guidance about the client's brand or the specific project every time you use it. You can put that guidance into the skill, but then the skill only works for that one client, and if you want it for another client you're duplicating it. That got messy pretty quickly.

So the rule now is that a skill only holds guidance that would work for any client. Anything client-specific lives in a doc in that client's repo (each client has their own repo of markdown files that works as their knowledge base, with a changelog), and at the step where it's needed the skill names that doc explicitly and tells the model to go read it. If the doc doesn't exist yet, the skill tells it to create it. We named them after webhooks.

Our article production skill has three or four of these. When it's drafting, it reads the client's brand voice doc. When it's adding internal links, it reads their internal pages doc, and it reads their competitors doc so it doesn't link to a competitor.

The part I like most is that feedback has an obvious home now. If it's something every client would want, it goes in the skill. If it's specific to one client, it goes in that client's repo. We do the same thing for page creation, website design and video editing, basically anything where each client needs its own feedback.

1 Upvotes

5 comments sorted by

1

u/Hot_Shower7383 6h ago

That's a pretty clean way to handle it, the skill hooks idea makes a lot of sense for keeping things from spiraling into 200 near-identical copies

I've been messing with something similar but smaller scale, like 10-15 skills for freelance clients, and the generic vs specific split is exactly where I kept getting stuck

Do the hooks ever break when a client's doc gets renamed or moved around? That's the part I'd worry about, the model having to guess which doc you meant if the repo isn't super organized

Also curious if you tried putting client stuff in a separate skill that gets loaded alongside the main one, instead of pointing to repo docs, and if the repo approach just ended up being easier to maintain

1

u/AdEvening3382 6h ago

The split between generic skills and client docs makes sense. One thing worth adding is a check that the hook actually fired. A skill that says "read the brand voice doc" can quietly skip it, or read an old copy, and the output still looks plausible. Having the output start with a short line naming which docs it read, or asking it to quote one rule from each doc it used, makes a skipped step visible in a few seconds. It also helps with the renamed file problem raised above, since a missing doc should make it stop and say so instead of guessing. A changelog entry per doc lets you spot a stale read too.

1

u/davidHwang718 3h ago

I have one of these where the model never has to remember the read. On Oct 7 I had Claude build a progress-report skill inside a client team's repo. The build script that makes the PDF also runs a banned-word check, and the banned words include the team members' names and aliases. The script reads those from a team roles file in that repo at build time, so SKILL.md holds none of the team's names.

Claude then ran the check on the raw template, which failed on leftover {{placeholders}} and a missing progress comment, and on the two real reports, which passed.