Process Obsidian and Drafts inboxes using scan-classify-confirm-execute. Claude pre-classifies all items, groups by action type, presents a numbered summary for user confirmation. Use when: 'process inbox', 'clear inbox', 'let's process', or during reviews.
Three-pass workflow: Claude scans and classifies everything, user confirms with minimal effort, Claude executes in batch.
!obsidian search query="categories: Projects status: active" vault="{{VAULT_NAME}}" limit=30 2>/dev/null || echo "(Could not scan projects)"
!obsidian search query="tags: area" vault="{{VAULT_NAME}}" limit=20 2>/dev/null || echo "(Could not scan areas)"
Read ALL items from both inboxes. Assign each a sequential number (flat across both sources).
Drafts inbox: mcp__drafts__drafts_inbox — read all items.
Obsidian inbox: obsidian search query="path:Inbox/" vault="{{VAULT_NAME}}" — then read each item.
Token management: For files over 5000 lines, read only the first 50-100 lines plus frontmatter. Enough to classify — specialized skills handle full content later.
Apply heuristics in order (first match wins):
| Signal | Type | Routing |
|---|---|---|
File >50k chars + book metadata (author + title + publisher/contributor) | Book | References/ with categories: ["[[Books]]"] |
type: capture + LLM conversation markers (role alternation, claude.ai/chatgpt links, ## Prompt:/## Response:) | LLM conversation | Rename descriptively, Notes/, flag /process-llm-conversation |
| Course/transcript indicators + dialogue structure | Course transcript | Flag /process-transcript |
| Structured teaching material, handout/worksheet indicators | Course handout | Flag /process-transcript |
| Coaching session indicators (1:1 session structure, coaching language) | Coaching transcript | Flag /process-transcript |
| Meetup/group discussion transcript indicators | Group transcript | Flag /process-transcript |
tags: [clippings] + full body (>500 chars after frontmatter) | Article (full content) | Flag /ingest-written-content |
tags: [clippings] + minimal body OR body is a single URL | URL stub | Fetch & classify, or file as reference |
Filename matches Name (@handle) + minimal body | Person stub | References/ as Person note |
source-file: in frontmatter or ![[non-markdown]] embed | Wrapper note | Read attachment, summarize, file |
| Confluence URL or work-related technical content | Work reference | Notes/ with areas: [[Work]] |
| Working draft or in-progress reference material (WIP indicators, partial content, mentions active workbench cluster or project with workbench items) | In-progress work | Workbench/ with status: drafting, link to parent project |
| Short note (<500 chars) + action language (imperative verbs, "need to", "todo") | Action item | Extract to project/Action Pool |
| None of the above | Needs context | Ask user |
For items where routing destination is ambiguous, use mcp__qmd__query with vec sub-query + intent "finding the right project or area to route this inbox item to."
Group items by action type (what happens to them). Present ALL items in a single output.
Output format:
## Inbox Summary: X Drafts + Y Obsidian items
### Quick File (move + enrich frontmatter)
1. [Obsidian] **Note Name** — brief description
→ Destination/ | areas: [[Area]] | categories: [[Category]]
### Specialized Processing (flag for dedicated skills)
2. [Obsidian] **Note Name** (size, type)
→ `/skill-name` — brief rationale
### Fetch & Classify (URL-only, need content to route)
3. [Obsidian] **Note Name** — what the URL appears to be
→ Fetch to decide: likely options
### Action Extraction (pull actions into projects/pools)
4. [Drafts] **"Draft text preview"** — context
→ Extract to [[Project Name]] or [[Action Pool]]
### Delete (no lasting value)
5. [Source] **Note Name** — why it has no value
### Needs Context (can't confidently classify)
6. [Source] **Note Name** — what's unclear
→ Question for user
---
Anything to adjust? Reference by number. "Looks good" to proceed.
Formatting rules:
[Drafts] or [Obsidian]→ for routing recommendationThis is the ONLY decision point. Wait for user input.
Accepted response patterns:
looks good / go / confirmed — execute all as recommended3 → delete — override item 3's routing7 → project X — redirect to specific project5 is a book I want → add to Wishlist — add context that changes routingskip 1, 4 — leave items in inbox for later (don't process this session)tell me more about 6 — re-read item 6 and present more detailAfter receiving input:
Process in this order (simplest first — maximizes value if interrupted):
mcp__drafts__drafts_trashFor each item:
categories, areas, status, tags, createdareas: ["[[Work]]"] and appropriate categoriesFor URL-only items confirmed for fetching:
defuddle parse "$URL" --md to extract content/ingest-written-contentFor items containing action items:
~focused, ~quick, ~2h, ~errand[[Action Pool]]For wrapper notes (non-markdown file references):
## Summary section into the wrapper noteFor items classified as in-progress work:
status: drafting, created, project (if identifiable), tagsWorkbench/ (or appropriate subdirectory if a cluster exists)These get moved out of Inbox/ but NOT deeply processed inline. Filing and deep processing are separate operations.
For each item:
categories, areas, status: active, created, tags)For Drafts items routed to Obsidian:
mcp__drafts__drafts_archivemcp__drafts__drafts_trashCommit vault changes, then present summary:
## Processing Complete
### Executed
- X items quick-filed
- X URLs fetched and filed
- X actions extracted → [[destinations]]
- X items deleted
- X drafts archived
### Ready for Specialized Processing
- [[Note Name]] → `/skill-name`
- [[Note Name]] → `/skill-name`
### Skipped (still in inbox)
- Item X — reason
Inbox: N → M | Committed: "Process inbox: N items routed"
Omit empty sections. If specialized items exist, remind the user they can process them at leisure with the listed skill commands.