mirror of
https://github.com/virgiliojr94/book-to-skill.git
synced 2026-09-14 19:43:03 +08:00
349dc4365b
* feat(skill): default generated skills to ~/.agents/skills with Claude Code symlink Personal (user-level) installs of generated book skills now land in the cross-agent root ~/.agents/skills/<slug>/ for every host, so one copy serves Copilot CLI, Amp, and Claude Code. Claude Code does not scan that root, so Step 10 creates a symlink at ~/.claude/skills/<slug> pointing to the generated skill. Host-private and project-local destinations stay available on explicit request, and a pre-existing real directory at ~/.claude/skills/<slug> triggers a migration offer instead of a silent replace. * fix(skill): guard the Claude Code symlink and scope discovery claims Skip symlink creation when a real directory remains at ~/.claude/skills/<skill_name> (ln -sfn would nest the link inside it and Claude Code would keep loading the stale copy), report discovery only for the destination actually used, use <skill_name> consistently for the skill folder placeholder, and clarify in README and how-it-works that the symlink is created when running under Claude Code. * docs: state the Claude Code symlink as attempted-and-verified, not a fact Align README and the how-it-works pipeline diagram with Step 10's read-back rule: the symlink is attempted and verified, and the run report states the actual result. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(skill): keep Hermes Agent on its own personal root under the new default Hermes Agent landed after this branch was opened. Its personal root is partitioned by category ($HERMES_HOME/skills/<category>) and it does not scan the cross-agent root, so it is the one host the collapse cannot serve from ~/.agents/skills. Carry it forward rather than regress it: the Step 5 table keeps the Hermes row, a personal Hermes install uses that root and takes no symlink, and the "Discoverable by" line names Hermes alone for it - no cross-agent claim, since no other host scans the Hermes root. The intro sentence no longer says one copy serves every host, because with Hermes carved out that is not true. README and the pipeline diagram say the same. * fix(skill): name the relocation target as the final skill directory `mv <src> <dest>` was grammatical under both readings and only one worked. With <dest> read as a root, the printed line breaks the symlink the run had just created: the skill lands at <root>/<skill_name> while `ln -sfn <root>` points one level up, so Claude Code resolves to a directory with no SKILL.md. The placeholder is now <dest_root>/<skill_name>, so the move target names the final skill directory and there is one reading left. The fill rule says so explicitly, shows the broken form, and requires the resolved paths be substituted rather than the placeholders printed. --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>