-
Notifications
You must be signed in to change notification settings - Fork 2
lore
The skills-registry project is three days old at the time of this wiki generation, but the codebase has already lived through a complete architectural pivot. This page walks the timeline.
Day 1. The project shipped publicly as skills-mcp: a CLI that consolidated local AI skills from scattered tool dot-folders (.claude/skills/, .cursor/skills/, etc.) into a single shared directory, then served that directory through a FastMCP server.
The headline commands were gather (walk known dot-folders, copy skills into one place) and add (install a skill from a git URL). The MCP server exposed a single tool, show_skills, backed by a SkillsDirectoryProvider that read the consolidated folder off disk.
About 16 commits landed: initial scaffold, FastMCP v3 migration, show_skills, the auto-update-MCP-client-configs step after gather, and the add-from-git-repo flow.
2026-05-22: a single commit, a tolerance fix in gather to keep going past a failing per-skill copy. The last meaningful change to the consolidate-local-skills model.
2026-05-23 was the pivot. One commit at the head of the day reads:
feat!: GitHub-backed skill registry (init + MCP server + Go CLI)
The breaking change inverted the project's mental model. Instead of "scan the local machine and consolidate what's already there," the new design says "your skills live in a GitHub repo you own; the MCP server fetches them on demand." gather and add were removed, the local-folder MCP server was deleted, show_skills became list_skills + get_skill, and a new publish_skill tool let the LLM write back to the registry.
The same day brought a long string of follow-ups:
-
feat!: rename PyPI package to skills-registry (v0.5.0)andfeat!: rename GitHub repo to skills-registry; drop stale website/— the rename plus deletion of the originalwebsite/andWeb-Prototype.zipdesign assets. -
feat(bootstrap): push initial import via git to avoid GitHub secondary rate limit— introducedPushTreeViaGit. The per-filePOST /git/blobspath was tripping GitHub's ~80-req/minute limit for users with 30–200 skills; the fix was a singlegit pushover HTTPS for the initial import, with credentials wired bygh auth setup-git. The MCP server still goes throughgh apionly. -
feat(cli): F4.1 add remove command + registry.Client.Delete— atomic slug-level removal via the same Git Data API sequence aspublish, with null SHAs in the tree. -
feat(cli): F4.2 wire --json output into every subcommand— persistent--jsonflag incli/internal/jsonout/jsonout.go. -
feat(tui): F3.1/F3.2/F3.3— alt-screen hub with a responsive card grid, toast feedback loop, settings view, rune- and width-aware list truncation. -
feat(cli): route bare skill-registry to wizard/hub/help—bareRouteDecisionbecomes the pure routing function for bare invocation. -
feat(bootstrap): port _ensure_mcp_entry_point to Go— MCP-server install (uv → pipx → pip) moved out of Python and intocli/internal/bootstrap/mcp_install.go, so first-run users never see Python during onboarding. -
feat(install): add curl|sh installer for the Go binary—install.sh, the only commit in the entire repo withdroidas the author.
By end-of-day, 13 PRs (#1 through #12) had been merged and a from-scratch Next.js 16 / React 19 marketing site was live. 82 commits in 24 hours.
Today. Four commits, all addressing review feedback from gemini-code-assist[bot] and factory-droid[bot] on the merged pivot PRs: cancel semantics in the wizard, visibility validation on repo creation, a dot-folder sweep test fix, error handling and TUI-safe output polish.
For a 3-day-old codebase, "longest-standing" is shorthand for "survived the pivot." Three patterns have held since 2026-05-23:
-
gh-only GitHub I/O for the MCP server. No SSH, no embedded HTTP client, no directgitshell-out. Every request goes through the user's authenticatedghCLI, because desktop MCP clients spawn the server in a stripped environment withoutSSH_AUTH_SOCKor fullPATH. Seebackground/design-decisions.md. -
The slugify rule.
lower(s) → non-alphanumeric → "_", mirrored in Python and Go. -
The 2 MiB per-file size cap.
SKILLS_MAX_FILE_BYTES(default 2,097,152) rejects oversized uploads before they hit the GitHub API. Applied identically byRegistryClient.publish_skillandregistry.Client.Publish.
| Feature | Introduced | Removed | Replaced by |
|---|---|---|---|
gather command |
2026-05-21 | 2026-05-23 | Personal registry repo |
Original add (install from git URL) |
2026-05-21 | 2026-05-23 |
publish (writes to the registry) |
show_skills MCP tool |
2026-05-21 | 2026-05-23 |
list_skills + get_skill
|
SkillsDirectoryProvider |
2026-05-21 | 2026-05-23 |
RegistryClient (gh-api) |
| Local-folder MCP server | 2026-05-21 | 2026-05-23 | registry_server.py |
Web-Prototype.zip design assets |
2026-05-21 | 2026-05-23 | Next.js 16 site under website/
|
-
The pivot itself —
gather/add/show_skills→ registry model. One day, one breaking commit. -
PyPI rename —
skills-mcp→skills-registryat v0.5.0. The Python module path stayedskills_mcpto avoid breaking existing installs; the Go binary becameskill-registry(singular). The mismatch is deliberate. -
Website rebuild — original
website/andWeb-Prototype.zipdeleted, replaced with a Next.js 16 / React 19 / Tailwind 4 single-page site (~631 LOC TS). -
Bootstrap UX migration — MCP-entry-point install ported from
init.py:_ensure_mcp_entry_pointtocli/internal/bootstrap/mcp_install.go:EnsureMCPEntryPoint. The Python helper is still in-tree but no longer canonical.
- Day 1 (May 21): 16 commits — working consolidate-local-skills CLI, FastMCP v3 wired up.
- Day 2 (May 22): 1 commit. Effectively a rest day.
-
Day 3 (May 23): 82 commits, full rewrite. New Go binary (~17,500 LOC), rewritten Python MCP server (~2,500 LOC), installer, website, wizard, hub,
remove,--jsonplumbing, 13 PRs merged. The repo went from ~3,000 LOC to ~20,000 LOC in 24 hours. - Day 4 (May 24, today): 4 commits of bot-reviewed polish.