agentleFS
PaulRBergPaulRBerg/dot-agents/skills/ai-prune/SKILL.md

ai-prune

Skill6 starsChanged 6 days agoMITView on GitHub

If a slash or dollar invocation already added these instructions to the conversation, follow them directly. In that case, do not invoke this skill again through a skill tool. Review everything under .ai/ and .cache/. Decide which entries are clearly outdated relative to the repository's current state. Archive the matching .ai/ entries. Move the matching .cache/ entries to the macOS Trash. Prefer to keep entries. Change only entries with concrete evidence that they are outdated. This skill runs only on…

1 other project uses a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

6 rules. About 0 are common, 3 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If a slash or dollar invocation already added these instructions to the conversation, follow them directly.

    line 13
  2. Very specific:

    Keep -I because these trees are usually Git-ignored.

    line 52
  3. Distinctive:

    Do not run per-file commands over the inventory.

    line 55
  4. Distinctive:

    Keep and list as uncertain anything without such evidence, anything still referenced by live docs, scripts, or configuration, and anything …

    line 67
  5. Very specific:

    Remove directories under .ai/ that became empty, except the protected ones.

    line 78
  6. Very specific:

    Verify by listing .ai/archive/$today/ and re-running the inventory from step 2.

    line 80

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

AI Prune

If a slash or dollar invocation already added these instructions to the conversation, follow them directly. In that case, do not invoke this skill again through a skill tool.

Review everything under .ai/ and .cache/. Decide which entries are clearly outdated relative to the repository's current state. Archive the matching .ai/ entries. Move the matching .cache/ entries to the macOS Trash. Prefer to keep entries. Change only entries with concrete evidence that they are outdated.

This skill runs only on macOS. If uname -s is not Darwin or /usr/bin/trash is missing, stop and report.

Arguments

  • path (optional): Repository root or any path inside the repository. Default to the current directory.
  • --dry-run (optional): Report the planned moves and deletions without changing the filesystem.

Never Touch

  • .ai/todos/ and .ai/archive/ (including everything beneath them).
  • TODO.md and PROMPT.md files anywhere: they are user-owned notes. Do not read or move them.
  • Live agent state: coordination ledgers, leases, locks, inboxes, and notification queues (for example .ai/coord/, .cache/job-leases/). If another agent may currently write to a directory, treat it as live, not outdated.
  • Tool-managed caches that the repository's configuration still uses (prettier, ruff, pytest, uv, vitest, coverage, bundler and package-manager caches). Tools regenerate them on demand. They are never "outdated".
  • Anything modified within the last 24 hours, unless it is unambiguously a leftover of finished work.

Workflow

  1. Resolve the root. For a supplied file, use its containing directory. For a supplied directory, use that directory. Inside Git, resolve the Git root with git -C "$start_dir" rev-parse --show-toplevel. Outside Git, use the directory itself.

    Store the root as repo_root. Compute today=$(date +%Y-%m-%d). If neither .ai/ nor .cache/ exists, stop.

  2. Inventory both trees with modification times, excluding the protected paths:

    fd -H -I -l -t f -E todos -E archive -E TODO.md -E PROMPT.md . "$repo_root/.ai"
    fd -H -I -l -t f . "$repo_root/.cache"

    Keep -I because these trees are usually Git-ignored. Without it, nested ignore patterns (for example a global PLAN.md rule) silently omit entries from the inventory.

    Do not run per-file commands over the inventory. Read the listing. Open only files whose relevance is unclear.

  3. Establish the present state of the repository: git log --oneline -30, the current tree, README.md, AGENTS.md or CLAUDE.md, and the task runner or tool configuration. Then assess each entry. Assess a whole directory only when the same decision applies to all its contents. Treat an entry as clearly outdated only when evidence such as the following applies:

    • A plan, handoff, thread, or report whose work is visibly complete in the Git history or the current tree.
    • Notes that reference files, symbols, branches, PRs, or tools that no longer exist.
    • Debriefs, evidence captures, renders, logs, or temporary directories (random suffixes, .tmp, dated run folders) from a task that has finished.
    • Caches or outputs for tooling the repository no longer configures.

    Keep and list as uncertain anything without such evidence, anything still referenced by live docs, scripts, or configuration, and anything protected above.

  4. Apply the decisions unless --dry-run was given:
    • .ai/ entries: move each to .ai/archive/$today/<path relative to .ai> so the archive mirrors the original layout. Create parent directories with mkdir -p. A same-day re-run merges into the existing dated folder. If the destination path already exists, leave the source in place and report the collision. Do not overwrite the destination.
    • .cache/ entries: move to the Trash with /usr/bin/trash -s <path>... in one call for all entries. -s fails on the first path that cannot be moved. Never use rm. Finder can restore trashed entries. Still classify any borderline entry as "kept".
    • Remove directories under .ai/ that became empty, except the protected ones.
  5. Verify by listing .ai/archive/$today/ and re-running the inventory from step 2. Every path you acted on must be absent from its source. These directories are usually Git-ignored. Verify on the filesystem rather than with git diff.

Completion

Report one outcome line, then a table with columns Path, Action (archived, trashed, kept), and Reason. Include kept entries only when you considered them and judged them uncertain. Do not list protected or obviously live paths. Keep paths, commands, and diagnostics undecorated.

  • Success: 🗂️ Archived <n> → .ai/archive/<today> · Trashed <m> from .cache · Kept <k> uncertain
  • No-op: ✅ Nothing outdated under .ai or .cache · Kept <k> uncertain
  • Dry run: 🔎 Would archive <n> → .ai/archive/<today> · Would trash <m> from .cache · Kept <k> uncertain

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.