Skip to content

fix: skip symlinked source skills instead of refusing the run - #17

Merged
hibeekaey merged 1 commit into
mainfrom
fix/skills-symlink-skip
Aug 17, 2026
Merged

fix: skip symlinked source skills instead of refusing the run#17
hibeekaey merged 1 commit into
mainfrom
fix/skills-symlink-skip

Conversation

@hibeekaey

Copy link
Copy Markdown
Owner

Found by demonstrating the CLI against a real machine rather than a fixture.

agent skills sync aborted entirely when any source skill was a symbolic link. On a machine with 53 skills, 10 of them plugin-installed links into the shared ~/.agents/skills directory, that meant zero skills ever propagated. The guard was right to distrust symlinks, since one can resolve anywhere, but wrong to fail the whole operation over it.

Now a symlinked source skill is skipped by name, counted in the summary, and everything else syncs. Re-running against the same machine propagated 42 skills to 9 agents with the 10 links reported. Eligibility is computed once so the per-target copy loop cannot disagree with the preflight check.

Tests updated: the old fixture pinned the refuse-everything behaviour, so it now asserts the opposite, that a symlinked skill is skipped while a plain skill alongside it still reaches the target.

Also adds docs/walkthrough.md, every command with real output. It documents the refusals people otherwise mistake for bugs: unowned files never rewritten, Kiro taking stdio servers only, Codex dropping unsupported headers loudly, and Zed's first-match shadowing.

🤖 Generated with Claude Code

The symlink guard was added so a symlinked target directory could not
route rm -rf at the canonical skills. Applied to source skills it was too
blunt: one symbolic link aborted the whole run, and plugin-installed
skills are routinely links into a shared skills directory, so the command
was unusable on any machine with one. Running it for real against 53
skills, 10 of them plugin links, propagated nothing at all.

A symlinked source skill is still never copied, since it can resolve
anywhere. It is now skipped by name, counted in the summary, and the
remaining skills propagate. Eligibility is decided once so the per-target
loop cannot disagree with the check.

Adds docs/walkthrough.md, every command with real output including the
refusals and safety behaviours that are easy to miss.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hibeekaey
hibeekaey merged commit a957d62 into main Aug 17, 2026
3 checks passed
@hibeekaey
hibeekaey deleted the fix/skills-symlink-skip branch August 17, 2026 11:40
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