agentleFS
Adonis0123Adonis0123/adonis-skills/skills/agent-symlink-init/SKILL.md

agent-symlink-init

Skill4 starsChanged 6 days agoMITView on GitHub

Initialize or migrate agent-skill symlinks in any repository. Use when a project needs `.claude/skills` linked to `.agents/skills`, `AGENTS.md` linked to `CLAUDE.md`, migration away from `.ruler`-based AI rules, or removal of legacy `sync-llm-skills` copy/sync setups. Trigger on requests about Claude/Codex skill symlinks, AGENTS/CLAUDE symlinks, `.claude/skills` setup, replacing copied skill folders with symlinks, or cleaning old ruler/sync automation.

The file

Show its rules and text

We split this skill into the rules it gives an agent

30 rules. About 0 are common, 13 are distinctive, and 17 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈13

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 17

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Ensure .claude/skills points at the repository's .agents/skills directory.

    line 15
  2. Distinctive:

    Ensure AGENTS.md is a symlink to CLAUDE.md when CLAUDE.md exists.

    line 16
  3. Distinctive:

    Remove obsolete ruler or sync automation only when it is actually present and the user explicitly requested that migration.

    line 17
  4. Distinctive:

    Keep the migration idempotent and non-destructive.

    line 18
  5. Very specific:

    Run when .claude/skills is missing or does not point at the repository's .agents/skills directory, or when AGENTS.md should point to …

    line 40
  6. Very specific:

    If the user explicitly names only one link, narrow symlink-init to that link.

    line 48
  7. Very specific:

    If .claude/skills is a regular directory or file instead of a symlink, preserve it before replacing it:

    line 64
  8. Distinctive:

    Prefer a backup named .claude/skills.bak

    line 65
  9. Distinctive:

    If that backup path already exists, choose a timestamped backup name

    line 66
  10. Distinctive:

    Create or refresh the symlink:

    line 67
  11. Distinctive:

    If AGENTS.md is a regular file, back it up before replacing it

    line 74
  12. Very specific:

    Remove any associated comments (e.g.

    line 82
  13. Distinctive:

    Do not add new ignore entries for the symlinks.

    line 83
  14. Distinctive:

    Run this module only when ruler artifacts still exist and the user requested ruler migration/removal.

    line 87
  15. Distinctive:

    Remove the .ruler directory.

    line 89
  16. Very specific:

    Remove scripts whose keys clearly belong to ruler automation, such as ruler:apply or ruler:check

    line 91
  17. Very specific:

    Remove only the ruler-related fragment from postinstall

    line 92
  18. Very specific:

    Remove postinstall entirely if nothing remains

    line 93
  19. Very specific:

    Remove ruler-specific ignore entries (e.g.

    line 95
  20. Very specific:

    Do not re-add /AGENTS.md to .gitignore — the symlink must be tracked by git

    line 96
  21. Distinctive:

    Do not delete CLAUDE.md unless the user explicitly asks.

    line 97
  22. Very specific:

    Run this module only when legacy copy/sync automation is present and the user requested sync migration/removal.

    line 101
  23. Very specific:

    Remove the sync-llm-skills.ts file under scripts/ if it exists.

    line 103
  24. Very specific:

    Remove only the --sync-llm flag from skills:test:local if the rest of the command is still valid

    line 106
  25. Very specific:

    Remove sync-related fragments from postinstall

    line 107
  26. Very specific:

    Remove the .claude/skills ignore entry and any associated comments — the symlink must be tracked by git, not ignored

    line 110
  27. Very specific:

    Leave .agents/skills contents in place.

    line 112
  28. Very specific:

    When cleaning postinstall, remove only the obsolete command fragment and keep remaining commands in order.

    line 118
  29. Distinctive:

    If the repository already matches the target layout, report that no migration is needed instead of rewriting files.

    line 120
  30. Distinctive:

    Run lightweight checks after editing:

    line 124

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Agent Symlink Init

Set up or migrate a repository to the symlink-based agent-skill layout.

Outcomes

  • Make .agents/skills the source of truth.
  • Ensure .claude/skills points at the repository's .agents/skills directory.
  • Ensure AGENTS.md is a symlink to CLAUDE.md when CLAUDE.md exists.
  • Remove obsolete ruler or sync automation only when it is actually present and the user explicitly requested that migration.
  • Keep the migration idempotent and non-destructive.

Detect Before Editing

Confirm the requested repository or project root before editing. For a Git repository, use git rev-parse --show-toplevel and work from that root within the authorized scope. Do not require .git to be a directory: worktrees and separate Git directories use a .git file. A package.json alone does not prove a Git root.

For a non-Git project, use the root explicitly identified by the user; if it is unclear, ask for the target directory. Perform only the requested filesystem setup and report that Git tracking checks are unavailable.

Inspect these paths first:

  • .agents/skills
  • .claude/skills
  • CLAUDE.md
  • AGENTS.md
  • the .ruler directory
  • the sync-llm-skills.ts script under the scripts directory
  • package.json
  • .gitignore

Classify the work into these modules:

  1. symlink-init Run when .claude/skills is missing or does not point at the repository's .agents/skills directory, or when AGENTS.md should point to CLAUDE.md but does not.
  2. migrate-from-ruler Offer when a .ruler directory exists or package.json still contains ruler-related scripts or postinstall fragments. Run only when the user's request includes migrating/removing ruler.
  3. migrate-from-sync Offer when legacy copy-based sync automation exists. A --sync-llm flag alone is not proof: inspect the referenced script/function. If it only ensures .claude/skills -> .agents/skills, it already implements the target symlink model and must remain.

Detection identifies candidates; it does not authorize every module. Run symlink-init alone when that is all the user requested. Before deleting .ruler, sync scripts, or package scripts, require a request that clearly authorizes that migration and name the exact removal set. Preserve or back up untracked/otherwise hard-to-recover content before replacement or deletion.

If the user explicitly names only one link, narrow symlink-init to that link. For example, “only initialize .claude/skills” must not create or replace AGENTS.md; report the other link as an optional follow-up instead.

Execute symlink-init

  1. Ensure .agents/skills exists:
mkdir -p .agents/skills
  1. Ensure .claude exists:
mkdir -p .claude
  1. If .claude/skills is a regular directory or file instead of a symlink, preserve it before replacing it:
    • Prefer a backup named .claude/skills.bak
    • If that backup path already exists, choose a timestamped backup name
  2. Create or refresh the symlink:
ln -sfn ../.agents/skills .claude/skills
  1. Unless the user narrowed the request to .claude/skills only, if CLAUDE.md exists, ensure AGENTS.md points to it:
    • If AGENTS.md is a regular file, back it up before replacing it
ln -sfn CLAUDE.md AGENTS.md
  1. Update .gitignore:
    • Remove any .claude/skills and AGENTS.md ignore entries if they exist. These symlinks must be tracked by git so that collaborators get them on clone.
    • Remove any associated comments (e.g. # Agent skills (symlinked), # START Ruler Generated Files).
    • Do not add new ignore entries for the symlinks.

Execute migrate-from-ruler

Run this module only when ruler artifacts still exist and the user requested ruler migration/removal.

  1. Remove the .ruler directory.
  2. Edit package.json:
    • Remove scripts whose keys clearly belong to ruler automation, such as ruler:apply or ruler:check
    • Remove only the ruler-related fragment from postinstall
    • Remove postinstall entirely if nothing remains
  3. Edit .gitignore:
    • Remove ruler-specific ignore entries (e.g. ruler block comments, /CLAUDE.md, /AGENTS.md if they were ruler-generated ignores)
    • Do not re-add /AGENTS.md to .gitignore — the symlink must be tracked by git
  4. Do not delete CLAUDE.md unless the user explicitly asks. The goal is to replace the automation mechanism, not to discard the current source-of-truth document.

Execute migrate-from-sync

Run this module only when legacy copy/sync automation is present and the user requested sync migration/removal. Do not run it against a current symlink helper merely because its CLI flag is named --sync-llm.

  1. Remove the sync-llm-skills.ts file under scripts/ if it exists.
  2. Edit package.json:
    • Remove scripts["skills:sync:llm"]
    • Remove only the --sync-llm flag from skills:test:local if the rest of the command is still valid
    • Remove sync-related fragments from postinstall
    • Remove postinstall entirely if nothing remains
  3. Edit .gitignore:
    • Remove the .claude/skills ignore entry and any associated comments — the symlink must be tracked by git, not ignored
    • The old ignore was for copy-based sync artifacts; symlinks should be committed
  4. Leave .agents/skills contents in place. Migrate the linkage model, not the skill payload itself.

Editing Rules

  • Make the smallest safe change set.
  • Preserve unrelated package.json scripts.
  • When cleaning postinstall, remove only the obsolete command fragment and keep remaining commands in order.
  • Skip modules whose signals are absent.
  • If the repository already matches the target layout, report that no migration is needed instead of rewriting files.

Verify

Run lightweight checks after editing:

test -L .claude/skills && readlink .claude/skills
test -f CLAUDE.md && test -L AGENTS.md && readlink AGENTS.md

Also inspect:

  • package.json for stale ruler or sync commands
  • .gitignore for duplicate or contradictory entries
  • git diff --stat or equivalent to summarize the migration

Report Back

Return:

  1. Which modules ran
  2. Which files were created, updated, backed up, or removed
  3. Verification results
  4. Any follow-up action the user should consider, such as reinstalling dependencies if postinstall behavior changed

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.