ISS
← Field Notes
DISTRIBUTED SYSTEMS
July 2, 2026 · Distributed Systems · 2 min read

A Shared Skill Hub That Keeps Every Agent in the Fleet in Sync

A merge-and-distribute hub that collects captured skills from every agent box and pushes the combined set back so all of them share one catalog.

Every agent on my fleet learns things as it works. The problem is that what one box figures out stays on that box. If the machine running a scraper works out a clean way to capture a task as a reusable skill, none of the other agents ever see it. That knowledge dies locally. fleet-skills exists to stop that.

The capture-and-collect loop

Each box runs a skill-capture Stop hook. When an agent finishes a task, the hook writes the resulting skill into that box's own ~/.claude/skills/ directory. So far this is just per-machine memory, useful but isolated.

The interesting part is the collection side. The Mac runs fleet-skill-hub.sh, which reaches out to every box, pulls the skills each one has captured, and merges them all into a single place: this repo. Once merged, it commits and pushes, then distributes the combined set back out to every box. After a full cycle, every agent has every skill, no matter which machine originally learned it.

That round trip is the whole idea. Capture is local and cheap. Merge is centralized. Distribution closes the loop so local learning becomes fleet-wide learning without anyone copying files by hand.

Why merge instead of a central store

I could have pointed every agent at one shared network directory and skipped the collect-and-redistribute dance. I chose the merge model on purpose. Each box keeps its own working copy, so an agent still functions if the hub is unreachable or a machine is offline. The hub reconciles them on its own schedule rather than every agent depending on a live mount for every skill lookup. It is closer to how git itself works: local first, synced later.

The catalog lives in INDEX.md, which tracks the current merged set. That file is the single answer to the question "what does the fleet know how to do right now," which turns out to be a question I ask a lot when deciding whether a new task needs a fresh skill or already has one sitting in the shared set.

The takeaway

The lesson from building this at Moonshine Labs was that capture and distribution are two separate problems, and conflating them is where most "shared memory" setups get brittle. Let each node capture locally and keep running on its own. Handle merge and fan-out as a distinct, scheduled step that can fail and retry without taking any agent down with it. Once those two halves are cleanly split, a fleet that learns as one stops being a coordination headache and becomes a background process.

Have something that needs building, or stabilizing?

These notes are the work log. The paid work runs through Moonshine Labs, my product and engineering studio. Tell us what you're building, or grab a call.

Work with us →
the studio: moonshinelabs.io