Skip to content

Reconcile agent-skills with both skill hosts - #16

Merged
DROOdotFOO merged 1 commit into
mainfrom
skills-reconcile
Aug 8, 2026
Merged

Reconcile agent-skills with both skill hosts#16
DROOdotFOO merged 1 commit into
mainfrom
skills-reconcile

Conversation

@DROOdotFOO

Copy link
Copy Markdown
Owner

Audited ~/.agents/skills against the upstream agent-skills archive and against
both hosts that read it.

What already agreed

The skill tables in CLAUDE.md are exact. 18 skills are explicitly categorised
(code-pattern, web3, MCP-companion) and the prose claims "Workflow skills (40
total)". Upstream ships 58 directories containing a SKILL.md, and 58 - 18 = 40.
All 18 named skills exist upstream. No change needed.

What did not

1. The external is never pruned. include = ["*/skills/**"] filters correctly
today -- a dry-run refresh only wants to add/update real skills. But chezmoi does
not remove entries from an archive external once written, so 15 directories that
no longer exist upstream were still present. Most were inert leftovers from older
repo layouts, where stripComponents = 2 mapped other top-level dirs into place:

On disk Came from
scribe agents/scribe
workflows .github/workflows
suites benchmarks/suites
hooks scripts/hooks
pg-essays corpus/pg-essays

The note on the external blamed upstream skills/ for containing non-skill dirs.
It does not -- the archive's skills/ is clean. Note corrected, leftovers removed.

2. The two hosts disagreed on a name clash. virtuals-protocol-acp existed in
both skills/ (stale) and skills-extra/ (chezmoi-managed).

  • Raxol's Skills.Store scans skills_external_dirs in order and later
    :ets.insert calls overwrite earlier ones, so its last root wins ->
    skills-extra.
  • sync-skills.sh links the first root, which was skills/ -> the stale copy.

This was latent until #14 reformatted seller.md; the copies then diverged
(29237 vs 29292 bytes) and Claude Code was loading a stale skill while Raxol
loaded the current one
. SKILL_ROOTS is now ordered skills-extra then
skills, so both hosts resolve a clash identically.

3. hf-cli was untracked. Installed into the external by the hf CLI on
Aug 5, present in neither repo, so it would disappear on a fresh machine. Vendored
into skills-extra, with its zero-byte manifest preserved via the empty_ prefix
(chezmoi skips empty files otherwise).

Also documented in CLAUDE.md: the precedence rule for both hosts, the accounting
table, and one remaining asymmetry -- Raxol globs **/SKILL.md at any depth while
the sync script only looks one level down. Nothing is nested today, so both index
the same 60.

Manual testing

  • Derived the removal list from the live archive, not by hand
  • Confirmed only 2 of the 15 held a SKILL.md, and both were vendored first
  • Verified byte-for-byte that nothing existed only in the stale copies
  • Removals went to Trash, not deleted
  • After re-running the sync script: 0 broken symlinks; both vendored skills resolve to skills-extra
  • Final accounting agrees for both hosts: 58 external + 2 vendored = 60
  • Vendored hf-cli frontmatter still parses (name, description); prettier's only edits were a blank line and a missing EOF newline
  • Rendered sync-skills.sh passes shellcheck unfiltered
  • pre-commit passes

🤖 Generated with Claude Code

Audited ~/.agents/skills against the upstream agent-skills archive.
The skill tables in CLAUDE.md were already exact -- 18 categorised
plus 40 workflow skills is precisely the 58 upstream SKILL.md files.
Three things did not agree.

chezmoi never prunes an archive external, so ~/.agents/skills had 15
entries absent from upstream. Most were inert (no SKILL.md), left by
older repo layouts where stripComponents = 2 mapped other top-level
dirs into place: agents/scribe -> scribe, .github/workflows ->
workflows, benchmarks/suites -> suites. The note on the external
blamed upstream skills/ for shipping non-skill dirs; it does not.

Two of those 15 were live skills, and one was actively wrong:
virtuals-protocol-acp existed in both roots, and the two hosts
disagreed about which copy to load. Raxol's Skills.Store scans
skills_external_dirs in order and later :ets.insert calls overwrite
earlier ones, so its last root (skills-extra) wins. sync-skills.sh
links the first root, which was skills/ -- the stale one. After the
prettier reformat in #14 the copies diverged, so Claude Code was
loading a stale skill while Raxol loaded the current one. Reorder
SKILL_ROOTS so both hosts resolve a clash the same way.

hf-cli was installed into the external by the hf CLI and tracked by
neither repo, so it would vanish on a fresh machine. Vendor it into
skills-extra, preserving its empty manifest via the empty_ prefix.
@DROOdotFOO
DROOdotFOO merged commit 8ebc443 into main Aug 8, 2026
5 checks passed
@DROOdotFOO
DROOdotFOO deleted the skills-reconcile branch August 8, 2026 18:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant