I used Claude Code to organize 1,400 screenshots.
Did I finally defeat my chaotic desktop?
Disclosure: This article was written by me, a human, who has vowed to be more organized in 2026. Claude reviewed 1,400 images and provided light editing before pleading for a break.
Also, if you can’t remember exactly who on Substack you’ve subscribed to, consider downloading my free Chrome extension for organizing and analyzing your newsletter subscriptions.
Like many creative and entrepreneurial (and totally not lazy) people, the Desktop folder on my Mac was an impenetrable tangle of files that I had resisted deleting for years.
As of Monday, it contained more than 1,400 screenshots I’d accumulated from multiple projects, including Future Scan (my current AI/ML research tool), StackDigest (shut down in November), Good Bloggy and Piskeddy (both discontinued), plus covers from eBooks, random receipts, digital artwork, research references, and oh so many files I couldn’t even remember saving.
Even better (or worse), the screenshots had useless names like “Screenshot 2024-09-06 at 5.59.48 PM.png” and were scattered without any organization. Some were duplicates or near-blanks that could be trashed entirely.
But I couldn’t just nuke them all and move on with my life. Some belonged to projects I wanted to archive. Others contained sensitive information I needed to keep for my taxes.
Since the new year is coming, and one of my resolutions is to get more organized, I decided it was time to get this done once and for all. And I chose Claude Code (Anthropic’s CLI tool) to help me sort through this chaos.
You are not alone
I kind of dreaded this task, even knowing I would have extensive help from Claude. So I posted about it repeatedly to generate some productive external pressure. And I was heartened to discover that I am definitely not the only person with a tragically messy desktop.
I also heard from a few people who wanted to know if Claude could help with a collection of photos with non-descriptive names like IMG523.jpg.
The answer is, yes, Claude can processes your photos and assign them to categories that you define (e.g., children, pets, London streets, sunset, etc.)
Starting with a context doc
I generally believe that simple prompts get the best results and leave room for productive iteration with AI, so I created a file (FILE_CLEANUP_REFERENCE.md) and saved it to my Desktop. It read:
You are in the Desktop folder on my Mac. As you can see, it is a disaster area. About 80% of files are image captures with virtually meaningless names like “screencapture_date” and they include screen grabs of:
*My current project Future Scan (live, in production)
*My past projects, such as StackDigest (discontinued, but want to keep screen caps), Good Bloggy (discontinued, but want to keep screen caps), Piskeddy (discontinued), Ittytime (discontinued)
*Payment screens with confirmation numbers
*Writing samples from my previous job
*Digital artwork
*Memes
*Miscellaneous things I saw and wanted to remember for later and then promptly forgot
The other 20% of files have names and may be MP4 and PDFs.
I need help identifying the files, weeding out duplicate and useless images, and organizing what remains into folders and tagging them with understandable names.
Please suggest a process to get this done and end the chaos.Then I put Claude into planning mode and asked it to read the reference doc.
Planning mode forces Claude to outline its approach before taking action. Type /plan in the terminal to enable it.
The original plan
After reading the doc, Claude proposed what sounded like a sensible approach: organize the 20% of files with meaningful names first, and then review and triage the remaining files in batches.
After a brief chat, we also agreed on this folder structure:
Artwork: Digital artwork created
Before: Before/after comparisons for this article
Discontinued Projects (with subfolders): Screenshots from Good Bloggy, StackDigest, and other old projects
Future Scan: Future Scan project screenshots
Memes: Self explanatory
Research-Reference: Research and reference materials
To Review: Items needing manual review
Transactions: Transaction receipts/screenshots
Writing Samples: Articles, eBooks, and other content I’ve written for Adobe and other big enterprises
Remember to give Claude reference images for visual identification
Before I unleashed Claude onto the files, I spent some time explaining how it might identify different screen captures (e.g., teal for Future Scan, purple for StackDigest). There were lots of questions and follow-up questions.
After several minutes of this, I realized I should have included this information in the reference doc and added a folder with a few reference images. I ended up pausing the session to get this done, and I’m glad I did.
Armed with this context, Claude identified virtually all my images accurately.
What I learned: Always include a reference image for each type of image you want to Claude to identify.
The easy win
Claude was able to quickly identify files with reasonable names and move them to directories. So I didn’t have to keep clicking “yes” every time Claude wanted to move a file, I updated my Claude settings file to permit the move (mv) command in Bash.
What’s Bash? Bash is a command-line shell, which is essentially a text-based way to interact with your computer. On Mac, it’s built into the Terminal app. Instead of clicking through folders in Finder, you type commands like mv (move), ls (list files), and cd (change directory). Claude Code uses Bash to execute file operations on your system.
The Windows equivalent to Bash is PowerShell. More on that below.
In Claude Code, you can grant mv permission by running /permissions in the command line, choosing Allow, and then entering this rule when prompted: Bash(mv:*)
Or you can edit your settings JSON file directly. In ~/.claude/settings.json (global) or .claude/settings.json (project-level), add:
{"permissions":{"allow":["Bash(mv:*)"]}}You can also be more specific, like Bash(mv ./src/*) to restrict moves to certain directories.
Once you’re done organizing files, you can rescind permission by pairing Deny (or “deny” in the JSON file) instead of Allow/”allow” with the same Bash command.
But what if I’m using a PC?
Windows uses PowerShell instead of Bash. Here are the equivalent commands:
You can also grant Claude permissions using the same instructions I shared for macOS. Just substitute PowerShell equivalents for the Bash commands (e.g., Move-Item instead of mv).
What I learned: Give Claude permission to move files without your approval. And don’t forget to rescind permission when you’re done.
Deleting the dupes
As part of this process, Claude moved files that appeared to be noise—potential blank screenshots, duplicates, and partial captures—into the To-Review folder. I quickly scanned about 50 worthless files and had the satisfaction of nuking them all. I was also glad I did this manual review since a property tax receipt was mixed in with the trash.
What I learned: Review files and delete them yourself rather than having Claude do it automatically. It’s more satisfying, and you’ll avoid losing files that you actually need.
Dealing with special characters
macOS screenshots include a Unicode narrow no-break space (U+202F) before “AM” and “PM” that breaks many command-line operations. This invisible character (e280af in hex) looks identical to a regular space but causes mv and other commands to fail with “No such file or directory.”
Claude discovered this by examining the actual bytes:
ls “Screenshots-Small/” | head -1 | xxd | head -3
# Output shows: e280 af41 4d2e 706e 67 ...AM.pngTo avoid this, we used wildcards to match around the problematic character:
mv Screenshot\ 2024-09-06\ at\ 5.59.48*.png destination/Good news for Windows users: These invisible characters aren’t an issue for screen grabs taken on PCs.
What I learned: If you’re using a Mac and your mv commands fail on screenshot files, the invisible Unicode narrow no-break space (U+202F) before “AM” and “PM” is probably why.
The 2,000 pixel surprise
Pleased that my files with real names had been categorized so quickly and easily, I moved on to my vast collection of “screengrab-xyz” files. I asked Claude to start reviewing them, updating their names, and moving them into appropriate folders.
The actual process looked like this:
Claude read 6-8 images at a time
I reviewed Claude’s descriptions
Claude moved files to appropriate folders
Repeat
Here’s what the logs looked like:
Reading: GoodBloggy-apr-001.png through GoodBloggy-apr-008.png
Claude identifies:
001: “New blog brief form” → Good Bloggy
002: “Blank screenshot” → Delete
003: “Security questions form” → Good Bloggy
004: “Blank” → Delete
005-008: “AI contribution tables” → Good BloggyA sudden crash
But Claude only got through two batches. On the third, an API error message appeared and Claude stopped answering questions. Here is the actual error message:
API Error: 400 {”type”:”error”,”error”:{”type”:”invalid_request_error”,
“message”:”messages.29.content.11.image.source.base64.data: At least one
of the image dimensions exceed max allowed size for many-image requests:
2000 pixels”}}What did it mean? Basically, Claude cannot review images that are 2,000 or more pixels wide on any side when processing multiple images at once. To continue organizing my files, I would need some way to first identify all these “oversized” files and then shrink them to create smaller temp files that Claude could handle.
I could have also asked Claude to process files one at a time, had I been willing to let the process run for hours or break it up into multiple sessions. Single images as large as 8000 x 8000 pixels can be processed, although the larger the image, the slower the processing time (and the more tokens consumed).
Finding and processing the oversized images
Claude and I used macOS’s built-in sips (Scriptable Image Processing System) command-line tool to identify oversized images and corral them into an “Oversized Images” folder. Sips lets you query and manipulate image files without opening a graphics application, and it also supports operations like resizing, converting between formats, rotating, and adjusting color profiles.
We found about 500 of these images using this command:
cd “/path/to/screenshots” && find . -maxdepth 1 -name “*.png” -exec sh -c ‘
w=$(sips -g pixelWidth “$1” 2>/dev/null | tail -1 | awk “{print \$2}”)
h=$(sips -g pixelHeight “$1” 2>/dev/null | tail -1 | awk “{print \$2}”)
if [ “$w” -ge 2000 ] || [ “$h” -ge 2000 ]; then
echo “$1”
fi
‘ _ {} \;
Once these images were identified, we created a Temp folder and used sips again to create smaller copies of the larger images:
# Resize all PNGs in current directory to max 1500px
for f in *.png; do
sips --resampleHeightWidthMax 1500 “$f”
doneYou can also do this manually using Apple’s built-in Preview app: open multiple images, select all, then choose Tools → Adjust Size.
Claude reviewed images in the Temp folder to identify them and then moved the corresponding oversized originals to the right location. Once this was done, I asked Claude to delete both the Temp and Oversized Images folders, and finish reviewing and moving the remaining, non-oversized files.
Because this is a complex, multi-step procedure, I had Claude spell it out and add it to the reference doc before proceeding.
For high-resolution images that exceed 2,000 pixels:
1. Create a temp_resized folder for viewing copies
2. For each large image, create a resized copy (max 1500px) in temp_resized using:
sips --resampleHeightWidthMax 1500 "original.png" --out "temp_resized/original.png"
Important: Keep filenames identical so Claude can match the resized copy to its original
3. Review the RESIZED copy to determine the category
4. Move the ORIGINAL file (not the resized copy) to the destination folder
5. After confirming the original was moved, delete the resized copy from temp_resized
Important: The files in temp_resized are disposable viewing copies. The originals in [source folder] are the real files.
Never delete an original until it has been moved to its destination. When done, temp_resized should be empty and can be deleted.But what if I’m using a PC?
Windows doesn’t have a direct equivalent to sips built in, but you can achieve similar functionality through PowerShell using the System.Drawing library:
# Get image dimensions in PowerShell
Add-Type -AssemblyName System.Drawing
$img = [System.Drawing.Image]::FromFile(”C:\path\to\image.png”)
Write-Host “Width: $($img.Width), Height: $($img.Height)”
$img.Dispose()For more advanced work—resizing, format conversion, metadata extraction—ImageMagick is likely your best choice. Its identify and convert commands mirror much of what sips can do, and it handles a wider range of formats. You’ll need to install ImageMagick separately, but if you regularly work with images from the command line on Windows, it’s worth it.
What I learned: If you’re using AI to scan and identify images, check your your model's size limits and flag any images that exceed them before you start. You may need to consider the tradeoffs between processing images one at a time and creating a set of smaller review files for batch processing.
The renaming round
Because I was committed to the process, I had Claude start renaming files, folder by folder. This was a surprisingly slow and painful process; it could take 20 or more seconds for Claude to process a batch of 8-10 images. Here’s how it broke down:
~10 seconds for Claude to read images
~5 seconds for me to review descriptions
~3 seconds per rename command
Network latency between operations
I let this run for about an hour. And then I turned on “YOLO mode.”
What’s YOLO mode?
It’s a setting that lets Claude execute commands without asking for your approval each time. The name is fitting—”You Only Live Once”—because you’re trusting the AI to make the right calls without oversight. It’s generally not recommended because one wrong rm command can delete important files, or a bad mv can scatter your work into oblivion.
However, if you want to multitask while it works, you can live dangerously:
claude config set --global dangerouslySkipPermissions trueOr more granularly:
claude config add globalAllowedTools “Bash(mv *)”This lets Claude rename and move files without asking for approval on each operation. Use with extreme caution and review Claude’s plan thoroughly before enabling this, and consider restricting it to specific directories.
Token warning: Running extended image analysis sessions like this will burn through your tokens quickly, especially if you’re using Claude Pro ($20/month) or the API for access. (Claude Code isn’t available with free Claude.) Each image Claude analyzes counts against your usage limits. Max subscribers get significantly higher limits, making this kind of bulk operation more practical.
What I learned: If you back up your machine regularly, YOLO is basically living the robot fantasy. You go about your business, while the robot does something terrifically tedious in the background.
Metadata doesn’t help
I hoped macOS screenshot metadata would reveal which app was captured, allowing bulk categorization without viewing. Unfortunately, no.
mdls “Screenshot 2024-04-21 at 11.58.41 AM.png”
# kMDItemComment = “Screenshot” - just confirms it’s a screenshot
# kMDItemIsScreenCapture = 1 - same
# kMDItemContentCreationDate - only shows when, not whatThere’s no metadata field showing which application or window was captured. You must actually look at each image.
⚠️ Beware of sensitive data exposure
During the review, Claude flagged several concerning items:
A debit card image with full number and CVV visible (deleted immediately)
API keys and secret tokens in terminal screenshots (moved to Personal folder, secured)
An insurance card with personal information (deleted)
I was actually glad Claude had uncovered these items, since I’d forgotten they were there.
What I learned: Next time I have to send someone, say, a scan of my insurance card, I’m going to delete it immediately afterwards.
What to do if Claude sees sensitive data
First, don’t panic. While your data is transmitted to Anthropic’s servers for processing, it isn’t used to train models or retained beyond what’s needed to complete your request.
That said, prevention is better than cleanup. Before letting Claude loose on your desktop:
Use a
.claudeignorefile to exclude sensitive directories (like folders containing credentials, financial documents, or client work)Move sensitive files first — if you’re cleaning up Downloads or Documents, relocate anything confidential before starting
Review what Claude accessed in your session if you’re unsure what it saw
If Claude did encounter something sensitive (a tax return, an old password file, API keys in a config), there’s no external exposure to worry about, but it’s a good reminder to secure or delete those files regardless.
Was it worth it?
I’d have to say “mostly.”
For archiving discontinued projects: Yes. Having properly named screenshots of all my old development projects means I can find specific UI references without scrolling through hundreds of date-stamped files.
For ongoing organization: Maybe. I could leave an updated version of my context doc on my desktop and ask Claude to “clean house” every month. While the gold standard is naming and filing screen captures once they’re taken, I’m pretty sure that’s not going to happen.
For learning about AI limitations: Absolutely. Understanding that AI image analysis has size limits and that batch renaming is inherently slow were valuable lessons.
My Desktop is now organized. Screenshots are in project folders with meaningful names. Sensitive files are secured or deleted. The chaos is contained.
Until next time.
Do you have a terrifyingly messy desktop?
Share a screen capture in the comments.











“What I learned: If you’re using AI to scan and identify images, check what size images your model can handle and identify images that exceed this limit up front.”
really good to know. thanks for the lessons learned here and great article.
Karen, that initial screenshot of your screenshots almost brought on a panic attack! As someone who fastidiously organises documents (and emails) I don't think I would have a need for this system BUT I really appreciate your building this as I learnt loads about limitations and Claude code in the process. There are also some people in my life who I definitely think might benefit from this. 🤣