agentleFS
bokuwalilybokuwalily/claude-code-skills/skills/migrate-icloud-desktop-assets/SKILL.md

migrate-icloud-desktop-assets

Skill0 starsChanged 5 months agoMITView on GitHub

Safely move media or automation assets out of an iCloud-synced Desktop while preserving legacy paths, producer and consumer behavior, and absolute-path ledgers. Use when Desktop and Documents sync causes file-read failures, cloud placeholders, duplicate posting risk, or a FILEMAP policy requires relocating real directories to a non-synced content root.

The file

We split this skill into the rules it gives an agent

7 rules. About 0 are common, 5 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Read the active AGENTS.md and placement policy.

    line 14
  2. Distinctive:

    Update every producer output root, its docstring, all consumer roots and account configuration, and current specs or docs.

    line 17
  3. Very specific:

    Search ignored and tracked JSON, Python, and JavaScript files.

    line 19
  4. Distinctive:

    Commit only task-owned tracked files.

    line 22
  5. Very specific:

    Default rg skips gitignored ledgers and state.

    line 26
  6. Distinctive:

    Do not fabricate a missing date directory to satisfy a range-shaped expectation.

    line 29
  7. Distinctive:

    Every pre-existing child directory has the same file count before and after.

    line 36

≈ “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

Migrate iCloud Desktop Assets

Procedure

  1. Read the active AGENTS.md and placement policy. Resolve every source and destination to explicit absolute paths.
  2. Confirm each source is a real directory and every destination is absent. Capture per-child-directory file and media counts before moving.
  3. For each pair, run mv <source> <destination> && ln -s <destination> <source> in one command list. Do not use cp or rsync for same-volume moves.
  4. Update every producer output root, its docstring, all consumer roots and account configuration, and current specs or docs.
  5. Back up each mutable ledger as .bak, then mechanically replace the old absolute-path prefix. Include all related media pools whose names share that prefix.
  6. Search ignored and tracked JSON, Python, and JavaScript files. Exclude logs and .bak, but do not rely on default rg ignore behavior.
  7. Validate JSON, test the real consumer path, force a full PIL image load from the destination, and compare the post-move counts with the captured pre-move counts.
  8. Recheck Desktop after iCloud has had time to react. Inspect any conflict directory before removing it, and use rmdir only when it is empty.
  9. Commit only task-owned tracked files. Keep ledger backups local and preserve unrelated working-tree changes.

Pitfalls

  • Default rg skips gitignored ledgers and state. Use rg --no-ignore or the user's exact recursive grep command for the final zero-match proof.
  • status is read-only in zsh. Use a name such as grep_code when recording pipeline exits.
  • iCloud may recreate an old folder as <name> 2 after a symlink appears. Treat it as unknown until a direct content and metadata check proves it empty.
  • Do not fabricate a missing date directory to satisfy a range-shaped expectation. Preserve the pre-move state and report the pre-existing gap.
  • A recursive grep over a large development tree can take minutes. Poll the running process instead of treating empty intermediate output as completion.
  • An untracked .bak is intentional recovery state, not a file to stage automatically.

Verification

  • ls -ld <legacy-paths> shows only symlinks pointing to the new root.
  • Every pre-existing child directory has the same file count before and after; aggregate media totals also match.
  • The consumer returns absolute paths under the new root, and its duplicate filter recognizes rewritten ledger entries.
  • PIL Image.open(path); image.load() succeeds on a real destination image.
  • The final old-prefix search returns zero non-log, non-backup JSON, Python, and JavaScript matches.
  • jq empty passes for all edited JSON, and cmp confirms each ledger equals its backup with only the prefix replacement applied.
  • Targeted syntax checks and project tests pass. If code is shipped, local and remote commit hashes match afterward.

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.