Scans a folder for recent screenshots, visually classifies which ones are relevant to current work, and organizes them into a target directory with descriptive filenames. Use when collecting screenshots for PRs, bug reports, docs, or Linear issues.
Scanned 9/19/2026
Install to Claude Code
npx -y skills add mostafa-drz/claude-skills --skill organize-screenshots --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Organize Screenshots?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mostafa-drz-organize-screenshots)More formats (shields.io, HTML) on the badges page.
---
name: organize-screenshots
description: >-
Scans a folder for recent screenshots, visually classifies which ones are relevant
to current work, and organizes them into a target directory with descriptive filenames.
Use when collecting screenshots for PRs, bug reports, docs, or Linear issues.
argument-hint: <target-dir> [--source dir] [--days N]
disable-model-invocation: true
allowed-tools:
- AskUserQuestion
- Bash
- Read
- Glob
metadata:
trigger: "Collecting screenshots for PRs, bug reports, docs, or Linear issues."
tags: "files, organization, productivity"
---
# Organize Screenshots
Scan for recent screenshots, visually classify them, and organize with descriptive names.
## Preferences
_Read `~/.claude/skills/organize-screenshots/preferences.md` using the Read tool. If not found, no preferences are set._
## Context
_On startup, use Bash to detect: current git branch and count recent screenshots in the source folder (default ~/Desktop). Skip any that fail._
## Command routing
Check `$ARGUMENTS`:
- **`help`** → display help then stop
- **`config`** → interactive setup then stop
- **`reset`** → delete `~/.claude/skills/organize-screenshots/preferences.md`, confirm, stop
- **anything else** → process screenshots
### Flags
Parse from `$ARGUMENTS`:
- **`--source <dir>`** — override source folder (default: ~/Desktop or preference)
- **`--days <N>`** — look back N days (default: 3 or preference)
- **`--move`** — move instead of copy
- **`--all`** — skip classification, take everything
- **Remaining text** — target directory
### Help
```
Screenshots — Scan, classify, and organize screenshots
Usage:
/organize-screenshots <target-dir> Scan Desktop, organize into target
/organize-screenshots <target-dir> --source ~/Downloads Scan specific folder
/organize-screenshots <target-dir> --days 1 Only last 24 hours
/organize-screenshots <target-dir> --move Move instead of copy
/organize-screenshots <target-dir> --all Skip classification, take all
/organize-screenshots config Set defaults
/organize-screenshots reset Clear preferences
/organize-screenshots help This help
Examples:
/organize-screenshots ./docs/images
/organize-screenshots ./pr-assets --days 1
/organize-screenshots ~/bug-report --source ~/Downloads --move
What it does:
1. Finds recent screenshots in source folder
2. Visually reviews each one (reads the image)
3. Classifies: relevant to current work or not
4. Suggests descriptive filenames
5. Copies (or moves) to target with new names
Current preferences:
(shown above under Preferences)
```
### Config
Use **`AskUserQuestion`**:
**Q1** — "Default source folder?" (~/Desktop (default), ~/Downloads, custom path)
**Q2** — "Lookback days?" (1 day, 3 days (default), 7 days)
**Q3** — "Default action?" (Copy (default), Move)
**Q4** — "Naming style?" (descriptive — feature-what-it-shows (default), timestamp — YYYY-MM-DD-description, sequential — 01-description)
Save to `~/.claude/skills/organize-screenshots/preferences.md`.
## First-time detection
If no preferences file exists, show:
"First time using /organize-screenshots? Run `/organize-screenshots config` to set source folder and defaults, or continue — scanning ~/Desktop for the last 3 days."
Then proceed.
## Steps
### 1. Identify work context
Read context to understand what's relevant:
- Current branch name and recent commits (from pre-injected context)
- CLAUDE.md if present (for project/feature names)
- Any files discussed in current conversation
Build a mental model of what screenshots to look for.
### 2. Find screenshots
Scan source folder for images modified within lookback period:
```
find {source} -maxdepth 1 -type f \( -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.webp" \) -mtime -{days}
```
If none found → inform user, stop.
If >20 found → ask if user wants to narrow time range or proceed.
### 3. Visual review
For each image:
1. **Read the image** using Read tool (multimodal)
2. **Classify**: Is it related to current work context?
- Related: shows project UI, relevant code, error messages, terminal output matching current work
- Unrelated: random browser tabs, personal content, unrelated apps
3. **Describe** if relevant: generate a short descriptive filename
If `--all` flag, skip classification — include everything.
### 4. Present findings
```
Found {N} screenshots in {source} from the last {days} days.
{M} appear related to current work:
1. Screenshot 2026-02-17 at 11.19.00 AM.png
→ {descriptive-name}.png
Shows: {brief description}
2. Screenshot 2026-02-17 at 11.24.00 AM.png
→ {descriptive-name}.png
Shows: {brief description}
Skipped {K} unrelated screenshots.
```
Use **`AskUserQuestion`** to confirm:
- "Organize these screenshots?" (Approve all, Exclude specific ones, Include skipped ones, Cancel)
### 5. Organize
Create target directory:
```
mkdir -p {target}
```
Copy (or move) each approved screenshot. **Important:** macOS screenshot filenames contain a Unicode narrow no-break space (U+202F) before AM/PM. Always use `find` with timestamp wildcards:
```
# CORRECT — use find with wildcards:
find {source} -maxdepth 1 -name "*2026-02-17*11.19*" -exec cp {} "{target}/{descriptive-name}.png" \;
# WRONG — will fail due to Unicode:
cp "Screenshot 2026-02-17 at 11.19.00 AM.png" dest/name.png
```
### 6. Naming convention
```
{context}-{what-it-shows}.{ext}
```
- All lowercase, hyphens as separators
- Context first (feature, page, component), then what's shown
- No dates or timestamps in filename (unless timestamp naming style preference)
- Under 60 characters
- Preserve original extension
Examples:
- `settings-page-form-validation.png`
- `api-error-500-response.png`
- `dashboard-metrics-overview.png`
- `terminal-test-failures.png`
### 7. Report
```
Organized {M} screenshots:
{target}/
├── {name-1}.png
├── {name-2}.png
└── {name-3}.png
Originals: {preserved in source / moved}
Next steps:
1. Review in {target}/
2. Upload to PR, Linear, or docs as needed
```
### 8. Learn
If user renames files after organizing, note the naming pattern.
If user changes source folder, save preference.
## Principles
- **Always copy by default** — originals stay. User decides when to delete.
- **Ask before acting** — present classification, get confirmation before copying.
- **Be conservative** — when in doubt, include and let user exclude.
- **Respect privacy** — skip screenshots with personal info, don't describe their contents.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!