feat: add sync-skills skill mirror - #6
Merged
Conversation
Adapt upstream steipete/agent-scripts sync-skills to Bram's layout: flat per-skill symlinks for both ~/.claude/skills and ~/.codex/skills instead of upstream's whole-root Codex link, canonicalized targets, --dry-run and --no-instructions flags, AGENT_SCRIPTS_DIR/MANAGER_SKILLS_DIR overrides. Replaces the hand-maintained Codex symlink list in the README. Extends the CI shell syntax check to scripts/.
There was a problem hiding this comment.
Pull request overview
Adds an idempotent scripts/sync-skills helper to rebuild the per-machine Claude/Codex skill mirror from canonical sources, replacing the previously hand-maintained symlink list and extending CI shell syntax checks to include scripts/.
Changes:
- Add
scripts/sync-skillsto create/retarget per-skill symlinks in~/.claude/skillsand~/.codex/skills, prune broken/stale managed links, and optionally link globalAGENTS.MDpointers. - Update docs and repo guidance (
README.md,AGENTS.MD,CHANGELOG.md) to standardize on the script-driven mirror workflow. - Add/adjust several skills (new
maya-plugin-e2e, updates toone-password,obsidian,hermes-win,bram-maintainer-loop) and broaden CI’s bash syntax scan scope.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| skills/one-password/SKILL.md | Updates 1Password workflow guidance (service-account path + tmux usage). |
| skills/obsidian/SKILL.md | Updates Obsidian vault path guidance and adds CLI troubleshooting note. |
| skills/maya-plugin-e2e/SKILL.md | Adds a new Maya plugin E2E proof workflow skill. |
| skills/maya-plugin-e2e/agents/openai.yaml | Registers the new skill for the OpenAI agent UI. |
| skills/hermes-win/SKILL.md | Adds GoHealth CLI operational notes and restore procedure. |
| skills/bram-maintainer-loop/SKILL.md | Tightens maintainer-loop worker creation and permission-integrity guidance. |
| scripts/sync-skills | New mirror builder/pruner for Claude/Codex per-skill symlinks + optional instruction pointers. |
| README.md | Replaces the manual symlink list with scripts/sync-skills instructions and notes. |
| CHANGELOG.md | Documents the skill mirror sync addition. |
| AGENTS.MD | Adds guidance to run scripts/sync-skills after skill add/remove/rename; adds GitHub untrusted comment rule. |
| AGENTS.md | Removes a now-redundant file (GitHub safety guidance moved into AGENTS.MD). |
| .github/workflows/ci.yml | Expands bash syntax check scope to include scripts/. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
12
to
+16
| - App config: `~/Library/Application Support/obsidian/obsidian.json` | ||
| - Default vault name: `obsidian` | ||
| - Usual local vault path: `~/obsidian` | ||
| - Usual local vault path: `/Users/bram/obsidian` | ||
| - Official CLI: `obsidian` | ||
| - Vault commands resolve the vault from cwd; run them from `~/obsidian`. | ||
| - Vault commands resolve the vault from cwd; run them from `/Users/bram/obsidian`. |
Comment on lines
21
to
25
| command -v obsidian | ||
| obsidian version | ||
| obsidian vaults | ||
| cd ~/obsidian | ||
| cd /Users/bram/obsidian | ||
| obsidian commands filter=search: |
Comment on lines
28
to
30
| Global commands like `version` and `vaults` work outside a vault. Vault-content | ||
| commands may print `Vault not found.` outside `~/obsidian`. Use `obsidian | ||
| commands may print `Vault not found.` outside `/Users/bram/obsidian`. Use `obsidian | ||
| commands`, not `obsidian help`, for CLI discovery. |
|
|
||
| ```bash | ||
| cd ~/obsidian | ||
| cd /Users/bram/obsidian |
Comment on lines
+60
to
+61
| sed -n '1,220p' "/Users/bram/obsidian/Folder/Note.md" | ||
| rg -n "term" "/Users/bram/obsidian" |
|
|
||
| ```bash | ||
| cd ~/obsidian | ||
| cd /Users/bram/obsidian |
|
|
||
| ```bash | ||
| cd ~/obsidian | ||
| cd /Users/bram/obsidian |
| - Scope: vault `Codex Automation`, `read_items` + `write_items`; no vault creation. Recovery: `Private/Bram Codex Service Account`, field `token`. | ||
| - Export only for the single command: `OP_SERVICE_ACCOUNT_TOKEN="$BRAM_OP_SERVICE_ACCOUNT_TOKEN" op item get "<known item>" --vault "Codex Automation" ...`. | ||
| - Never use `op signin` or `--account` on the service path. Missing/expired/inaccessible: report exact error and ask; no automatic desktop fallback. | ||
| - Service-account `op` reads require an explicit vault query. |
| @@ -0,0 +1,146 @@ | |||
| --- | |||
| name: maya-plugin-e2e | |||
| description: "Maya plugin UI/e2e proof workflow: use when testing Maya plugins through Maya Stall, Windows Maya hosts, pluginArtifacts, screenshots/recordings, Scenario Result JSON, untrusted-plugin popups, UI clicking, or PR closeout gates that need real Maya evidence." | |||
Comment on lines
+19
to
+25
| AGENT_SCRIPTS=${AGENT_SCRIPTS_DIR:-$HOME/Projects/agent-scripts} | ||
| AGENT_SKILLS="$AGENT_SCRIPTS/skills" | ||
| MANAGER_SKILLS=${MANAGER_SKILLS_DIR:-$HOME/Projects/manager/skills} | ||
| CODEX_ROOT="$HOME/.codex/skills" | ||
| CLAUDE_ROOT="$HOME/.claude/skills" | ||
| AGENTS_MD="$AGENT_SCRIPTS/AGENTS.MD" | ||
|
|
This was referenced Jul 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ports upstream
steipete/agent-scripts'scripts/sync-skills— the helper that builds the per-machine agent skill mirror — adapted to this fork's documented layout.Why
The mirror had drifted badly and nothing was maintaining it. Before this change,
~/.claude/skillsheld 9 broken links pointing at a skill experiment deleted back in July (code-review,domain-modeling,grilling,implement,improve-codebase-architecture,prototype,research,to-spec,wayfinder— all confirmed absent fromorigin/main), while ~20 skills that exist inskills/were invisible to Claude Code entirely:beeper,create-cli,frontend-design,hopper-debugger,instruments-profiling,markdown-converter,maya-dev,maya-plugin-e2e,nano-banana-pro,native-app-performance,notcrawl,openai-image-gen,release-tweets,sonos, the fourswift*/swiftui-*ones,to-issues,to-prd,xurl.~/.codex/skills/bram-maintainer-loop-v2pointed into a deleted worktree.Keeping the README's hand-maintained symlink list in sync by hand is what failed; the script replaces it.
What changed
scripts/sync-skills(new) — idempotent mirror builder. Adaptations from upstream:~/.codex/skills/agent-scripts -> …/skills); the README here explicitly forbids that shape, and it would duplicate every skill against the existing per-skill links. Both roots get<name> -> <canonical skill dir>.pwd -P), so repo-owned skills resolve to their own repo (gog -> ~/Projects/gogcli/.agents/skills/gog) rather than chaining through a symlink.teachskill would getln -sfn'd inside itself — and never clobber a real file/dir.-n/--dry-run,--no-instructions, andAGENT_SCRIPTS_DIR/MANAGER_SKILLS_DIRoverrides. The~/Projects/managersource is skipped silently when absent.Sources in collision priority order:
agent-scripts/skills> manager skills > codex-local extras. Broken links are always pruned; healthy links into a managed root are pruned only when the skill is gone; hand-made foreign links are left alone.Docs — README's 23-line hand-maintained Codex symlink list replaced with the sync-skills section, plus a
scripts/entry; CHANGELOG entry; oneAGENTS.MDline telling agents to run it after adding/removing/renaming a skill.CI — the shell syntax check covered only
skills/*/scripts/*, so nothing inscripts/was ever checked. Now covers both.Verification
bash -nclean; CI's syntax loop run locally overskills scripts— passes.~/.claude/skillsand~/.codex/skillsnow identical, zero broken links, all 9 dead links pruned andbram-maintainer-loop-v2retargeted to canonical.skills mirror up to date (48 skills).scripts/validate-skillspasses (41 skills).Reviewer notes
49213a41…3f0c0b94) that were sitting unpushed on localmain;origin/mainwas behind them. Only4cb18d84is new work.~/.claude/skills,~/.codex/skills, and the global instruction pointers~/.claude/CLAUDE.md,~/.claude/AGENTS.md,~/.codex/AGENTS.md -> AGENTS.MD. The README already documented those three pointers as the intended global setup; two of them were simply missing. Use--no-instructionsto skip them,--dry-runto preview everything.craft-promptto the symlink list this PR deletes. Correct resolution is dropping that line — sync-skills linkscraft-promptautomatically.scripts/validate-skillshas a latent locale bug, pre-existing and not touched here: under a bare locale it fails every UTF-8SKILL.mdwithinvalid byte sequence in US-ASCII.LANG=en_US.UTF-8works around it.