How to Share Claude Code Skills Across Repos, Teams, and Clients

Skills are the new unit of institutional knowledge. Here's how we package, share, and govern them across a studio that runs on Claude Code.

Eli Wood headshot

Eli Wood

April 23, 2026 6 min read
Whiteboard sketch: a central skill card with arrows fanning out to three connected repos, showing a skill being shared across a studio.

At Black Flag Design, skills are how our institutional knowledge actually ships. A skill (the slash-command workflow you write once and run forever) is the smallest durable unit of "how we do things here." The /after-meeting-report we run every Wednesday. The /synthesize that turns five transcripts into a client brief. The /spike that boots a client project from zero. These aren't scripts. They're opinions, encoded.

The moment a skill proves its worth in one repo, the question is: who else should have it? That question is harder than it sounds, and getting it wrong is how teams end up with forty-five half-broken slash commands nobody trusts. Here's how we think about sharing skills across a studio.

1. Skills are opinions, not utilities

Whiteboard sketch: four stacked shelves with a skill card being placed onto one of them, representing the levels of sharing.

Before you think about where a skill lives, be honest about what it is. A utility is a pure function: it does the same thing regardless of who runs it. A skill is an opinion: it encodes a specific way of working, with specific assumptions about the repo around it, the client on the other side, and the outputs that count as "done."

That distinction drives every sharing decision downstream. Utilities can live anywhere. Opinions need to live close to the people who hold them. Our /after-meeting-report assumes a specific directory structure, a specific client list, and a specific definition of "insight." Exporting it to another studio wholesale would be worse than useless; it would ship our biases into their workflow.

What to do: before you share a skill, write down the three assumptions it's making. If any of those assumptions would be wrong in the destination context, don't share it. Fork it.

2. Four levels of sharing, each with a clear job

We run skills at four levels, and each answers a different question.

  • Personal (~/.claude/skills/). Rough drafts, half-formed experiments, the /loop you haven't decided is worth keeping. Nobody else sees these. Perfect for "I run this twice a week and it saves me ten minutes."
  • Per-repo (.claude/skills/ or .cursor/skills/). Skills that only make sense in this codebase. A /refresh-one-project that knows this repo's submodule structure. These travel with git, get reviewed with PRs, and rot honestly when the code around them changes.
  • Org-wide (plugin or dotfiles module). The ones every project in the studio uses. /feedback, /value-report, /export-to-pdf. We package these as a Claude Code plugin that every teammate installs once. Updates roll out from one source.
  • Per-client (client repo or submodule). Skills that encode a specific client's vocabulary, stakeholders, or deliverables. These live in the client's meeting-os directory and do not leak back to the org level.

The mistake to avoid: defaulting everything to org-wide because it "might be useful." Useful-to-maybe-someone is how a skills library becomes a graveyard.

What to do: for every new skill, pick the narrowest level where it's still useful, and start there. Promote only when a second team asks for it.

3. Packaging matters more than the skill itself

Whiteboard sketch: a skill card at center with a gear, a checkmark stamp, a version tag, a review eye, and pruning shears around it.

A skill is a markdown file plus, maybe, a bash helper. That sounds trivial. It isn't. A shareable skill needs four things the solo-use version doesn't: a stable entry point, a clear input contract, an output shape the caller can trust, and instructions that read cold.

For each skill we promote beyond personal level, we enforce the same packaging:

  1. One SKILL.md at the root. It leads with what this is, when to use it, when not to. A teammate who's never seen the skill should be able to decide in 30 seconds whether to run it.
  2. Inputs named explicitly. "Pass the client slug and the week start date" beats "works it out from context."
  3. Outputs saved to predictable paths. If the skill writes files, they land under a documented directory, every time.
  4. A metrics log. Every run writes one row to metrics/agent_value/. This is how we know which skills are load-bearing and which are decorative.

The packaging is what makes a skill reusable. The markdown is just the seed.

What to do: treat the SKILL.md as API documentation, not a note to yourself. If a new teammate can't run it correctly on day one, it isn't ready to share.

4. Freshness beats portability, every time

The biggest temptation with shared skills is to make them perfectly generic so they work everywhere. Resist it. A skill that's 80% fitted to one studio and updated weekly will outperform a skill that's 100% generic and updated twice a year.

Our /after-meeting-report hard-codes the clients we're currently working with. That feels wrong to share. But the alternative, a generic version that discovers clients dynamically, would lag two weeks behind reality every time a new engagement starts. The maintenance overhead of "generic" is where most shared skills die.

The pattern that works for us: the org-wide plugin ships an opinionated default. Teams that need different behavior fork it into their own repo, mark the fork as "own this, we won't sync upstream," and move on. Forks are a feature, not a failure.

This mirrors how we think about AI-assisted engineering discipline: small scope, weekly rebalance, ruthless about what earns its keep.

What to do: write skills for the work in front of you. Share the ones that prove useful twice. Let teams fork when their context diverges, and don't apologize for it.

5. Governance is the boring part that keeps it working

Shared skills rot faster than shared code, because the feedback loop is looser. A broken function fails a test. A broken skill just produces worse output that nobody notices for a month.

We run three disciplines to keep the library healthy:

  • Skill owners. Every org-wide skill has a named owner. If it breaks, they fix it or retire it. No orphans.
  • Quarterly pruning. Once a quarter, we look at the metrics log and cut any skill that hasn't been run in 60 days. Pruned skills go to an archive/ folder, not the trash, so we can revive them.
  • Review on promotion. Moving a skill from personal to org-wide is a PR, with a reviewer. The question the reviewer asks is always: is this an opinion this whole studio actually holds, or is this one person's workflow?

Governance is the least fun part of a skills library. It's also the only reason the library still works a year in.

What to do: name an owner for every shared skill, schedule a quarterly prune, and require review on promotion. Skip any of those and the library degrades quietly.


The one-paragraph version

Skills are the durable unit of how your team works. Share them at the narrowest level where they're still useful (personal, per-repo, org-wide, per-client), package them like you'd package an API (SKILL.md, named inputs, predictable outputs, metrics), prefer a fresh opinionated version over a stale generic one, and accept forks as a feature. Then do the boring governance work: name owners, prune quarterly, review on promotion. A skills library is a studio's memory; treat it that way.

If you're about to share your first skill, start with one that solves a real problem for a second person you already know, not a theoretical team you might build one day.

About the author

Eli Wood headshot
Eli Wood

CEO, Black Flag Design

Eli Wood leads Black Flag Design, a creative technology company focused on shipping ambitious digital products, AI systems, and design-forward software with a direct point of view on how technology changes work.

Related stories

More from the journal

Pen-and-ink sketch of a small clockwork robot working at a tool-covered workbench late at night while a human sleeps peacefully on a couch in the background, a wall clock reading 2:00 above
ai April 24, 2026 13 min read

The Agent Stays Up Late, Not Me

Every senior engineer knows the right way to set up a codebase. None of them do it. Here’s the four-stage framework we use — The Ratchet — to take a vibe-coded project all the way to a thing you’d trust in production, and the punchline about why this only just became worth doing.

Most teams have always known they should be running tests, type-checking, security audits, accessibility checks, dead-code analysis, prose linting, and a coverage floor. Most teams run two of those. Here’s why that math has finally inverted, and the four-stage framework we use to ratchet a vibe-coded project to a hardened one.

Keith Pattison

Keith Pattison

Founder, Black Flag Design

Read
Black Flag Journal
claude code April 20, 2026 5 min read

What a Year of Claude Code Trails Tells You About Your Team

Claude Code leaves evidence — sessions, commits, PRs, review notes. Read it like a logbook and you'll find what devs actually need to know before they go deeper.

After a year of shipping with Claude Code across real client work, the signal isn't in any single session — it's in the trails. Here's what those trails told us about where Claude Code shines, where it drifts, and the habits devs should build before they lean in harder.

Eli Wood headshot

Eli Wood

CEO, Black Flag Design

Read
Black Flag Journal
playbook April 20, 2026 6 min read

The Black Flag Playbook: Six Principles for Shipping with AI

Battle-tested principles for teams building real software with AI-generated code. Human judgment, tight scope, and weekly evidence — the disciplines that keep AI-built systems reliable.

The six rules we use to ship production software with AI. Small scope, weekly demos, human-led oversight, and continuous improvement — drawn from six months of real client engagements.

Keith Pattison

Keith Pattison

Founder, Black Flag Design

Read