Claude-skill-registry drafts-manager
Triage Drafts inbox and route notes to OmniFocus tasks or Obsidian documents
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/drafts-manager" ~/.claude/skills/majiayu000-claude-skill-registry-drafts-manager && rm -rf "$T"
skills/data/drafts-manager/SKILL.mdDrafts Manager Skill
Triage the Drafts inbox using a hybrid AI + human confirmation workflow. Routes content to OmniFocus (tasks) or Obsidian (notes) based on content analysis.
When to Activate
Use this skill when user wants to:
- Triage or process their Drafts inbox
- Route notes to OmniFocus or Obsidian
- Check what's captured in Drafts
- Clean up old drafts
Architecture
Two-Phase Hybrid Triage:
- Export & Analyze - Drafts exports inbox → Geoffrey analyzes → presents suggestions
- Confirm & Process - User confirms routing → Drafts processes each draft → archives
┌─────────┐ URL ┌─────────┐ JSON ┌─────────┐ Table ┌──────┐ │Geoffrey │ ────► │ Drafts │ ─────► │Geoffrey │ ──────► │ User │ │ trigger │ │ export │ │ analyze │ │review│ └─────────┘ └─────────┘ └─────────┘ └──┬───┘ │ Confirmed │ ┌─────────┐ URL ┌─────────┐ Routes ┌──────────┐ ┌───▼────┐ │Geoffrey │ ────► │ Drafts │ ───────► │OmniFocus │ │Process │ │ trigger │ │ process │ │ Obsidian │ │ list │ └─────────┘ └────┬────┘ └──────────┘ └────────┘ │ Archives
Available Scripts
Scripts are in
./scripts/ directory. Run via:
bun ./scripts/script-name.js
trigger_export.js
Triggers the Drafts "Geoffrey Export Inbox" action via URL scheme.
Output: Path to exported JSON file
Use when: Starting triage
trigger_process.js
Triggers the Drafts "Geoffrey Process Draft" action with routing instructions.
Parameters: uuid, destination, project, tags, folder
Use when: Processing confirmed drafts
Required Drafts Actions
IMPORTANT: User must install these Drafts actions (found in
./actions/):
Geoffrey Export Inbox
Exports all inbox drafts to a JSON file for Geoffrey to analyze.
Location:
~/Library/Mobile Documents/iCloud~com~agiletortoise~Drafts5/Documents/geoffrey-export.json
Output format:
{ "exported": "2025-11-23T10:30:00Z", "count": 5, "drafts": [ { "uuid": "ABC123", "title": "First line of draft", "content": "Full content...", "tags": ["inbox"], "createdAt": "2025-11-22T14:00:00Z", "modifiedAt": "2025-11-22T14:00:00Z", "isFlagged": false } ] }
Geoffrey Process Draft
Processes a single draft based on routing instructions from URL parameters.
URL Parameters:
- Draft to processuuid
- "omnifocus", "obsidian", "archive", or "trash"destination
- OmniFocus project (if destination=omnifocus)project
- Comma-separated tags (if destination=omnifocus)tags
- Due date (if destination=omnifocus)dueDate
- Obsidian folder (if destination=obsidian)folder
Content Analysis Rules
When analyzing drafts, look for these signals:
Route to OmniFocus (Task)
Signals:
- Starts with action verb: "call", "email", "buy", "schedule", "review", "check"
- Contains: "todo", "task", "@due", "@defer"
- Short (< 50 words)
- Contains person names
- Shopping lists or errands
Apply omnifocus-manager routing rules for project/tag assignment
Route to Obsidian (Note)
Signals:
- Longer content (> 100 words)
- Meeting notes: "meeting with", "discussed", "attendees"
- Ideas/brainstorms: "idea:", "thought:", "what if"
- Reference material: links, quotes, research
- Journal entries: "today I", feelings, reflections
Archive in Drafts
Signals:
- Reference that may be needed again
- Snippets of code or text
- Temporary notes that are now done
Delete (Trash)
Signals:
- Empty or nearly empty
- Test/scratch content
- Duplicates
- Outdated info no longer needed
Obsidian Routing Rules
| Content Type | Folder | Frontmatter |
|---|---|---|
| Meeting notes | | date, attendees, topics |
| Ideas/brainstorms | | tags, created |
| Research | | source, tags, related |
| Journal | | date |
| General notes | | tags, created |
Frontmatter template:
--- created: {{date}} source: drafts tags: [from-drafts] related: [] ---
Main Workflow: Triage Drafts
Phase 1: Export & Analyze
-
Trigger export:
open "drafts://x-callback-url/runAction?action=Geoffrey%20Export%20Inbox" -
Wait for export file (2-3 seconds)
-
Read exported JSON:
cat ~/Library/Mobile\ Documents/iCloud~com~agiletortoise~Drafts5/Documents/geoffrey-export.json -
Analyze each draft using content signals above
-
Present suggestions table:
## Drafts Inbox Triage Found **5 drafts** to process: | # | Title | Suggestion | Destination | Details | |---|-------|------------|-------------|---------| | 1 | Call John about... | Task | OmniFocus | Project: Meetings, Tags: John, Follow Up | | 2 | Meeting notes 11/22 | Note | Obsidian | Folder: Meetings/ | | 3 | [empty] | Delete | Trash | Empty draft | | 4 | Shopping list | Task | OmniFocus | Project: Single Actions, Tags: Chores | | 5 | Idea for app... | Note | Obsidian | Folder: Geoffrey/Inbox/ | **Questions:** - #4: Should this go to a specific store location tag? Which numbers need changes? (Or type "process all" to confirm)
Phase 2: Process & Archive
-
For each confirmed draft, trigger process action:
# OmniFocus task open "drafts://x-callback-url/runAction?action=Geoffrey%20Process%20Draft&uuid=ABC123&destination=omnifocus&project=Meetings&tags=John,Follow%20Up&dueDate=2025-11-30" # Obsidian note open "drafts://x-callback-url/runAction?action=Geoffrey%20Process%20Draft&uuid=DEF456&destination=obsidian&folder=Meetings" # Archive open "drafts://x-callback-url/runAction?action=Geoffrey%20Process%20Draft&uuid=GHI789&destination=archive" # Delete open "drafts://x-callback-url/runAction?action=Geoffrey%20Process%20Draft&uuid=JKL012&destination=trash" -
Report results:
## Summary Processed 5 drafts from inbox ## Actions - 2 tasks created in OmniFocus - 2 notes saved to Obsidian - 1 draft deleted ## Status ✅ Complete ## Next Steps - Review tasks in OmniFocus inbox - Check Obsidian notes in Geoffrey/Inbox/
Error Handling
Drafts not running:
Status: ❌ Failed Error: Drafts app is not running. Please open Drafts and try again.
Action not installed:
Status: ❌ Failed Error: Drafts action "Geoffrey Export Inbox" not found. Please install from: skills/drafts-manager/actions/
Export file not found:
Status: ⚠️ Partial Error: Export file not created. Drafts may have timed out. Try running the action manually in Drafts.
OmniFocus not running:
Status: ⚠️ Partial Warning: OmniFocus not running. Task creation may have failed. Please verify tasks were created.
Installation
1. Install Drafts Actions
Import the action files from
./actions/:
Option A: Import from file
- Open Drafts
- Go to Actions → Manage Actions
- Import from
actions/geoffrey-export-inbox.draftsAction - Import from
actions/geoffrey-process-draft.draftsAction
Option B: Create manually
- Open Drafts
- Create new action "Geoffrey Export Inbox"
- Add Script step with code from
actions/geoffrey-export-inbox.js - Repeat for "Geoffrey Process Draft"
2. Verify Installation
Run:
open "drafts://x-callback-url/runAction?action=Geoffrey%20Export%20Inbox"
Check for export file at:
~/Library/Mobile Documents/iCloud~com~agiletortoise~Drafts5/Documents/geoffrey-export.json
Tips for Best Results
Tagging in Drafts
Use these tags for manual pre-routing:
- Force route to OmniFocustask
- Force route to Obsidiannote
- Keep in Drafts archivearchive
- Trash without reviewdelete
Quick Capture Patterns
When capturing to Drafts, these patterns help AI routing:
- Start tasks with verbs: "Call", "Email", "Buy"
- Start notes with context: "Meeting:", "Idea:", "Note:"
- Use @ for OmniFocus hints: "@due(tomorrow)", "@project(Work)"
Regular Triage
Best practice: Triage Drafts daily to keep inbox small
- Morning: Process yesterday's captures
- Evening: Quick review of day's notes
Learned Routing Patterns
These patterns were learned through actual triage sessions with the user.
Content Type → Destination
| Content Type | Destination | Obsidian Folder | OmniFocus Details |
|---|---|---|---|
| Meeting notes | Obsidian | | - |
| Conference notes | Obsidian | | - |
| Development roadmap | Obsidian | | Format as checklist |
| API keys/credentials | Delete | - | Security risk |
| Error logs/JSON junk | Delete | - | Cruft |
| Random passwords | Delete | - | Cruft |
| Contact info | Contacts app | - | Also create follow-up task |
| Book recommendations | OmniFocus | - | Tags: Reading |
| Gift ideas | OmniFocus | - | Tags: Chores, Shopping |
| Action items from meetings | OmniFocus | - | Tags: Follow Up |
| Reference links (AI, UDL) | Obsidian | | - |
| Personal project ideas | OmniFocus | - | Tags: Coding |
| Presentation schedules | Obsidian | | Future dates → tasks |
| Survey links | OmniFocus | - | Include links in notes |
Signals for Each Destination
→ OmniFocus Task:
- Starts with action verbs: "Submit", "Call", "Email", "Build", "Add"
- Contains due date context: "first week of December", "by end of year"
- Travel approvals, surveys to send, podcasts to record
- Book to read, thing to buy, project to build
- Multiple action items → single task with checklist in notes
→ Obsidian Note:
- Meeting notes (look for date, attendees, discussion points)
- Conference notes (look for session titles, speakers, links)
- Development docs with code/commands (wrap in code blocks)
- Reference material with links to external resources
- Topic brainstorms and idea lists
→ Contacts App:
- Contains name + phone/email
- Create contact AND follow-up task if there's an action
→ Delete:
- Empty or nearly empty
- JSON/error logs
- API keys (security)
- Random strings/passwords
- Test data that's no longer needed
→ Archive in Drafts:
- Outdated but potentially useful later
- Reference that may be needed again
Project/Folder Mappings
Obsidian Folders:
- All meeting and conference notesMeetings/2025/
- AI Studio development docsWork/AI-Studio/
- Jocular Kangaroo projectWork/Jocular-Kangaroo/
- Presentation archivesWork/Presentations/
- Geoffrey roadmap and ideasGeoffrey/
- Reference materials and linksReference/
OmniFocus Projects (go to Inbox if not found):
- CoSN Work - CoSN-related tasks
- Meetings - Follow-ups with people
- Research for Future Plans - Books, research tasks
OmniFocus Tags:
- Follow Up - Tasks requiring follow-up
- Reading - Books to read
- Chores - Shopping, errands
- Coding - Development tasks
- Geoffrey - AI-assistable tasks
- Email - Tasks requiring email
Special Handling
Multi-item notes:
- If note contains multiple distinct items, either:
- Create single task with items as checklist in notes
- Split into separate tasks (ask user preference)
Development roadmaps:
- Format as Obsidian file with checkboxes
- Use
for pending items- [ ] - Use
for completed items- [x] - Include code blocks for commands
Sensitive data:
- API keys → Delete immediately
- Student investigation data → Archive carefully, don't expose
- Credentials → Delete or move to secure storage
Contact + Task pattern:
- Add to Contacts app via add_contact.js
- Create follow-up task with contact details in notes
- Example: "Send maps to Kim Crowder" with email in notes
Future Enhancements
- Batch processing without confirmation for tagged drafts
- Smart date extraction from draft content
- Template matching for common note types
- Sync with omnifocus-manager tag hierarchy
- Obsidian template application
- Draft content search/query
- Auto-detect project roadmaps and format as checklists
- Recognize CoSN, ACPE, Kiwanis contexts for project routing