The agent wrappers in .claude/commands/, .cursor/rules/ and .windsurf/rules/ are generated from AGENTS/*.md, but they are also committed to git. They have already drifted.
Evidence of drift, right now
.claude/commands: disk=10 tracked=9
.cursor/rules: disk=10 tracked=9
.windsurf/rules: disk=10 tracked=9
untracked:
.claude/commands/sync-uploads.md
.cursor/rules/sync-uploads.mdc
.windsurf/rules/sync-uploads.md
AGENTS/sync-uploads.md is committed. Its three wrappers were generated locally and never committed. Anyone cloning this repo today gets 9 of the 10 skills wired up — /sync-uploads is invisible to their agent unless they happen to run brmbh add skills.
This is not hypothetical drift. It already shipped.
Why it happens
Wrappers are derived data. generateSkillWrappers() (brmbh/cli src/commands/add.js:199) reads each AGENTS/<name>.md, derives a description from its first prose line, and writes three files. Committing the output of a generator means every change to AGENTS/ requires remembering to regenerate and stage 3 extra files per skill. That will be forgotten — it just was.
The trade-off
Wrappers cannot simply be gitignored without thinking it through:
- Via the CLI (
brmbh create) → wrappers are generated at scaffold time (step 4, src/commands/create.js:73-77). Committing them is redundant.
- Via a direct
git clone of this repo → no CLI involved, so an ignored wrapper means the agent sees no skills at all until someone runs brmbh add skills.
So the question is whether a direct clone is a supported way to use this theme. If it is, wrappers must stay committed and need a guard. If the CLI is the only supported path, ignore them.
Options
- Keep committed + add a CI check that regenerates and fails if the working tree changes. Catches exactly this bug. Needs
.github/workflows/ (this repo has no CI at all yet).
- Gitignore them, make
brmbh create / brmbh add skills the only way they appear, and document that a direct clone must run brmbh add skills first.
- Keep committed + a pre-commit hook that regenerates. Local-only, easy to bypass.
Recommend 1 — it preserves the direct-clone path and makes the failure loud.
Immediate fix, independent of which option wins
Commit the three missing sync-uploads wrappers so the repo is at least correct today.
Acceptance
A fresh git clone of this repo exposes all 10 skills to Claude / Cursor / Windsurf, and there is a mechanism that fails loudly when AGENTS/ and the wrappers disagree.
Related: brmbh/cli#3, brmbh/cli#6
The agent wrappers in
.claude/commands/,.cursor/rules/and.windsurf/rules/are generated fromAGENTS/*.md, but they are also committed to git. They have already drifted.Evidence of drift, right now
AGENTS/sync-uploads.mdis committed. Its three wrappers were generated locally and never committed. Anyone cloning this repo today gets 9 of the 10 skills wired up —/sync-uploadsis invisible to their agent unless they happen to runbrmbh add skills.This is not hypothetical drift. It already shipped.
Why it happens
Wrappers are derived data.
generateSkillWrappers()(brmbh/clisrc/commands/add.js:199) reads eachAGENTS/<name>.md, derives a description from its first prose line, and writes three files. Committing the output of a generator means every change toAGENTS/requires remembering to regenerate and stage 3 extra files per skill. That will be forgotten — it just was.The trade-off
Wrappers cannot simply be gitignored without thinking it through:
brmbh create) → wrappers are generated at scaffold time (step 4,src/commands/create.js:73-77). Committing them is redundant.git cloneof this repo → no CLI involved, so an ignored wrapper means the agent sees no skills at all until someone runsbrmbh add skills.So the question is whether a direct clone is a supported way to use this theme. If it is, wrappers must stay committed and need a guard. If the CLI is the only supported path, ignore them.
Options
.github/workflows/(this repo has no CI at all yet).brmbh create/brmbh add skillsthe only way they appear, and document that a direct clone must runbrmbh add skillsfirst.Recommend 1 — it preserves the direct-clone path and makes the failure loud.
Immediate fix, independent of which option wins
Commit the three missing
sync-uploadswrappers so the repo is at least correct today.Acceptance
A fresh
git cloneof this repo exposes all 10 skills to Claude / Cursor / Windsurf, and there is a mechanism that fails loudly whenAGENTS/and the wrappers disagree.Related: brmbh/cli#3, brmbh/cli#6