| name | notion-triage |
| description | Organize and triage files from the Notion export folder. Use when user says "triage notion", "organize notion", "clean up notion", "notion cleanup", or "let's work on notion". |
Notion Triage
Systematically organize ~7,890 files from the Notion export into the proper Obsidian vault structure through batch decision-making.
When to Use This Skill
- User wants to organize their Notion folder
- User says "triage notion", "clean up notion", "notion cleanup"
- User wants to continue organizing where they left off
Vault Paths
Obsidian Vault: ~/obsidian/
Notion Source: ~/obsidian/Notion/
State File: ~/obsidian/Notion/.triage-state.json
Decision Categories
When triaging each file, assign ONE of these categories:
| Category | Action | Destination |
|---|
| trash | Delete (move to system trash) | trash command |
| archive | Keep but inactive | Stay in Notion/Archives/ |
| project | Active project work | Projects/[ProjectName]/ |
| zettel | Valuable idea for atomic note | Intake/ for later processing |
| personal | Personal content | Personal/ |
| reference | Useful reference material | Assets/Documents/ or project REFERENCE.md |
| skip | Review later | No action, marked as skipped |
Workflow
Phase 1: Session Start
-
Check State File
- Read
.triage-state.json if exists
- Report progress: files processed, remaining, current directory
-
Select Working Directory
- If continuing: resume from last directory
- If new: ask user which Notion subdirectory to start with
- List available directories with file counts
-
Confirm Session Goals
- Ask: "How many files do you want to process this session?" (default: 20)
Phase 2: Batch Processing
For each batch of 5 files:
-
Present Files
=== Batch 1/4 (Files 1-5 of 20) ===
1. [filename1.md] - First 100 chars of content...
2. [filename2.md] - First 100 chars of content...
3. [filename3.md] - First 100 chars of content...
4. [filename4.md] - First 100 chars of content...
5. [filename5.md] - First 100 chars of content...
-
Read Full Content on Request
- If user asks to see a file, read and display it
- Offer summary of what the file contains
-
Collect Decisions
-
Execute Decisions
- Move files to appropriate destinations
- For
project: ask which project folder (or create new)
- For
zettel: move to Intake/ (will be processed by zettelkasten skill later)
- For
trash: use trash command (recoverable)
- Update state file after each batch
Phase 3: Session End
-
Save State
- Update
.triage-state.json with:
- Last processed directory
- Files processed this session
- Total progress
- Timestamp
-
Report Summary
Session Complete:
- Processed: 20 files
- Trashed: 5
- Archived: 3
- Moved to Projects: 4
- Sent to Zettel intake: 6
- Personal: 1
- Skipped: 1
Overall Progress: 156/7890 files (2%)
State File Format
{
"lastUpdated": "2024-12-05T10:30:00Z",
"totalFiles": 7890,
"processed": 156,
"currentDirectory": "Notion/Business-Entrepreneurship",
"completedDirectories": [
"Notion/Health-Fitness"
],
"skippedFiles": [
"Notion/some-file-to-review-later.md"
],
"sessionHistory": [
{
"date": "2024-12-05",
"filesProcessed": 20,
"decisions": {"trash": 5, "archive": 3, "project": 4, "zettel": 6, "personal": 1, "skip": 1}
}
]
}
Quick Commands
During triage, user can say:
- "read 3" - Show full content of file 3
- "all trash" - Mark entire batch as trash
- "all skip" - Skip entire batch
- "stop" - End session and save state
- "status" - Show overall progress
- "switch to [directory]" - Change working directory
Special Handling
Empty Files
Files with 0 bytes or only whitespace → suggest trash
Subdirectories in Notion
When encountering a directory within a file's location:
- If it's a coherent project → suggest moving entire directory to
Projects/
- If it's mixed content → process files individually
Large Files (>50KB)
- Show file size warning
- Offer to show excerpt only
- These are often exported documents - may need
reference or Assets/
Duplicate Detection
If file content closely matches an existing note in Notes/:
- Alert user
- Suggest
trash with link to existing note
File Movement Commands
trash "Notion/path/to/file.md"
mv "Notion/path/to/file.md" "Projects/ProjectName/"
mv "Notion/path/to/file.md" "Intake/"
mv "Notion/path/to/file.md" "Personal/"
mv "Notion/path/to/file.md" "Notion/Archives/"
mv "Notion/path/to/file.pdf" "Assets/PDFs/"
Integration with Other Skills
- Files sent to
Intake/ can later be processed with the zettelkasten skill
- Project folders should follow the standard structure (TODO.md, etc.)
Example Session
User: triage notion
Claude: Checking triage state...
No previous state found. Starting fresh.
Notion folder contains 7,890 files across these directories:
1. Archives/ (2,341 files)
2. Business-Entrepreneurship/ (523 files)
3. Education/ (189 files)
4. Personal/ (445 files)
5. Technology/ (312 files)
6. [root level files] (156 files)
...
Which directory would you like to start with?
User: Let's start with the root level files
Claude: Got it. How many files do you want to process this session?
User: 10
Claude: Starting with root-level Notion files...
=== Batch 1/2 (Files 1-5 of 10) ===
| # | File | Preview |
|---|------|---------|
| 1 | Amish Zombie Movie.md | "A zombie apocalypse movie set in Amish country..." |
| 2 | Ask Me About- Stickers.md | "Idea for stickers that say 'Ask me about X'..." |
| 3 | Beat saber except all the music is bach.md | "Beat saber game variant..." |
| 4 | Bridgewater-Associates-Ray-Dalio-Principles.md | (375KB) Large document... |
| 5 | Chat Roulette VR.md | "Chat Roulette VR. Sort of WarioWare as well." |
**Options:** trash / archive / project / zettel / personal / reference / skip
User:
1. trash
2. trash
3. trash
4. reference
5. trash
Claude: Executing decisions...
✓ Trashed: Amish Zombie Movie.md
✓ Trashed: Ask Me About- Stickers.md
✓ Trashed: Beat saber except all the music is bach.md
✓ Moved to Assets/Documents/: Bridgewater-Associates-Ray-Dalio-Principles.md
✓ Trashed: Chat Roulette VR.md
=== Batch 2/2 (Files 6-10 of 10) ===
...
Notes
- Always use
trash command instead of rm for safety
- Quote file paths that contain spaces
- State file persists between Claude Code sessions
- User can restart from scratch by deleting
.triage-state.json