downloads-triage
Skill14 starsChanged 5 days agoMITView on GitHub
Files what has piled up in ~/Downloads, iCloud Drive's Downloads, and ~/Desktop, sending each item to the Documents archive, the notes vault, or the Trash, using a table-then-drill-down workflow. Use when triaging or clearing Downloads or the Desktop, or asking "what's in my Downloads?" Shows a review table before moving anything; supports drill-down and overrides.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- allenlee0430/allenlee-lab-skillstheir own version, first seen Jul 6, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- allenlee0430/allenlee-lab-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository12 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- CLAUDE.mdCLAUDE.md
- cc-release-reviewSkill
- verifySkill
- assisted-logSkill
- code-theorySkill
- code-walkthroughSkill
- editorSkill
- release-gateSkill
- release-shipSkill
- release-sweepSkill
- rexSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 5 are distinctive, and 4 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.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 64
If the hashes match, the item is a duplicate and its destination is the Trash.
- Distinctive: line 119
Create a destination subfolder only if the filing guide's subfolder policy allows it, and ask first.
- Very specific: line 123
If anything landed in ~/Documents, refresh its indexes:
- Distinctive: line 129
Leave the Documents repo's changes uncommitted for the user.
- Distinctive: line 147
Never move, rename, or trash anything before the table is approved.
- Very specific: line 148
Never rm. The Trash is the only way anything gets deleted.
- Very specific: line 149
Never overwrite. That means mv -n, plus a hash check on any name collision.
- Distinctive: line 150
Never edit a file's contents.
- Very specific: line 151
Never commit in ~/Documents, the vault, or Traveller/.
≈ “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.
Files
Downloads Triage
Empty the three landing zones, oldest item first:
| Tag | Folder | Notes |
dl | ~/Downloads | Local to this Mac; each Mac has its own |
icdl | ~/Library/Mobile Documents/com~apple~CloudDocs/Downloads | iCloud Drive's Downloads, shared by both Macs |
desk | ~/Desktop | Synced by iCloud Desktop & Documents |
Most items are documents bound for the archive at ~/Documents, which has its own rules. Read both before classifying anything, every run, since they change:
~/Documents/CLAUDE.md: the naming convention (Author or Source - Title - Detail.ext), formats, duplicates, subfolder policy.~/Documents/.claude/skills/filing-guide/SKILL.md: what each folder is for, and the tiebreakers.
Nothing moves, gets renamed, or goes to the Trash until the user approves the table.
Do not use when
- Filing or auditing files already inside
~/Documents: that is the Documents project'striage-documentsskill, run from~/Documents. - Routing notes already in the vault's
inbox/: that is/inbox-triage.
Invocation
/downloads-triage: a batch of 10 (default)./downloads-triage 20: a batch of 20. The range is 5–25; clamp anything outside it to the nearest bound and say so. Use: $ARGUMENTS
Step 1: Gather the batch
One sweep across all three folders, oldest modification time first, top level only. A folder on the Desktop or in Downloads is one item.
ic="$HOME/Library/Mobile Documents/com~apple~CloudDocs/Downloads"
for pair in "dl|$HOME/Downloads" "icdl|$ic" "desk|$HOME/Desktop"; do
tag=${pair%%|*} dir=${pair#*|} t=$'\t'
find "$dir" -mindepth 1 -maxdepth 1 \
-not -name .DS_Store -not -name .localized -not -name '.obsidian' \
-exec stat -t "%F %T" -f "%Sm$t$tag$t%z$t%N" {} +
done | sort | head -10 # replace 10 with the batch size NReport the total count across the three folders, not just the batch.
Skip these, and list them under the table instead of in it:
- In-progress downloads: a
*.downloadbundle, or a file modified in the last ten minutes. Safari is still writing it.
For each item in the batch, look only as far as you need to classify it: filename, size, mdls -name kMDItemTitle -name kMDItemAuthors -name kMDItemWhereFroms, and for a PDF its first page (Read with pages: "1"). Files in iCloud may be cloud-only; a plain read downloads them on demand, which is expected.
Check for a copy that's already filed. For each file, look for one of the same size in the archive, then confirm with md5 -r:
find ~/Documents -type f -size "$(stat -f %z "$f")c" \
-not -path '*/.git/*' -not -path '*/Traveller/*' -not -path '*/sohg/*'If the hashes match, the item is a duplicate and its destination is the Trash.
Step 2: Recommend a destination
Choose exactly one for each item:
| Dest | When |
Docs/<Folder>/ | A document worth keeping. Choose the folder from the filing guide (specificity wins), and give it a new name in the archive convention. Leave the name alone when the source is unknown, per the archive's "When NOT to rename". |
Docs/Inbox/ | Worth keeping, but no folder in the guide clearly fits. Say why in the Rationale. |
Vault inbox/ | A markdown note, or a capture meant for writing or reference. It lands in ~/notes/inbox/ untouched, for /inbox-triage to route. |
Vault assets/ | An image or PDF that a vault note embeds or will embed. Name the note in the Rationale. |
Traveller/ | Traveller RPG material for the ~/Documents/Traveller repo. Other tabletop material goes to Docs/Games/. |
Trash | An installer already installed (.dmg, .pkg, .zip of an app), a duplicate confirmed by hash, a receipt or one-off form already acted on, a screenshot that has served its purpose. |
Keep | In active use where it sits. Rare: the Desktop and Downloads are landing zones. |
For an installer, check /Applications before recommending the Trash: mdls -name kMDItemVersion "/Applications/<App>.app". If the installed version is at least the installer's version, it's spent.
Personal financial, medical, and government records (bank, insurance, tax, and health statements) go to Docs/Finance/…, Docs/Health/, or Docs/Personal/ per the guide. Never recommend the Trash for one unless an identical copy is already filed.
Step 3: Present the table
Exactly these five columns:
| # | Item | Dest | New name | Rationale |
|----|------------------------------------|----------------------|---------------------------------------------------|-------------------------------|
| 1 | icdl · steppe-empires-worksheet.pdf | Docs/Games/ | Grainbound - Steppe Empires - Worksheet.pdf | Worldbuilding worksheet set |
| 2 | dl · Obsidian-1.15.0.dmg | Trash | — | 1.15.0 installed |
| 3 | icdl · Search Health for Recovery.png | Docs/Images/ | — | Screenshot, keep as reference |
| 4 | desk · Build & Price Your 2027 Civic… | Docs/Maintenance/ | Honda - 2027 Civic Sedan - Build and Price.pdf | Vehicle purchase research |Prefix each item with its folder tag. Write — in New name when the name stays the same. When several items share a source and destination (a worksheet series, say), still give each its own row, then point out the pattern under the table so a single override can cover them all.
Then say: "Approve all, override any rows, or ask to see specific items by number."
Step 4: Handle the response
The user can mix these in a single reply:
- Approve all ("go", "looks good"): go to Step 5.
- Drill down ("show me 3"): give the metadata, the first page or opening lines, any hash match, and a fuller rationale. Then wait.
- Override ("2 is Keep", "1 goes in Reference"): before changing anything, ask "What made you think
<their choice>over<the recommendation>?" The answer may cover other rows. Re-present every affected row, then ask "Final batch—ready to move?"
Corrections apply to this batch only. If one sounds durable (a folder rule, a naming habit), suggest recording it in the filing guide or memory, not in this skill.
Step 5: Execute
Work through the items one at a time, so a failure can be traced to a single item.
- Move and rename with
mv -n "<src>" "<dest dir>/<new name>".-nnever overwrites. If the destination name already exists, compare withmd5 -r. Identical means the item is a duplicate: trash the source and report it. Different means stop on that row and ask. - Trash with
trash "<src>"(/usr/bin/trash, so it can be undone). Neverrm. - Vault inbox:
mv -ninto~/notes/inbox/. Obsidian picks it up from disk. Add no frontmatter, since routing is/inbox-triage's job. - Traveller:
mv -n. PDFs are gitignored there by design. Commit nothing. - Create a destination subfolder only if the filing guide's subfolder policy allows it, and ask first.
After the batch, verify each row: the source is gone, and the destination exists (or, for the Trash, the item is in ~/.Trash or iCloud's Recently Deleted). Allow a moment for iCloud moves before reporting a failure, and look at the destination before calling one.
If anything landed in ~/Documents, refresh its indexes:
cd ~/Documents && task indexLeave the Documents repo's changes uncommitted for the user.
Step 6: Report
Filed 8, trashed 2:
- steppe-empires-worksheet.pdf → Docs/Games/Grainbound - Steppe Empires - Worksheet.pdf
- Obsidian-1.15.0.dmg → Trash
- …
Skipped: Obsidian-1.15.0.dmg.download (in progress)
23 items left across Downloads, iCloud Downloads, and Desktop.Report a row as done only if it passed verification. Name any row that failed, and what failed.
Rules
- Never move, rename, or trash anything before the table is approved.
- Never
rm. The Trash is the only way anything gets deleted. - Never overwrite. That means
mv -n, plus a hash check on any name collision. - Never edit a file's contents. Notes bound for the vault get no frontmatter.
- Never commit in
~/Documents, the vault, orTraveller/.
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
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.

