
drafts-manager
by krishagel
Personal AI infrastructure built on Claude Code
SKILL.md
name: drafts-manager description: Triage Drafts inbox and route notes to OmniFocus tasks or Obsidian documents triggers:
- "triage drafts"
- "process drafts"
- "check drafts"
- "what's in drafts"
- "drafts inbox"
- "clean up drafts"
- "export drafts" allowed-tools: Read, Bash, Write version: 0.1.0
Drafts 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:
uuid- Draft to processdestination- "omnifocus", "obsidian", "archive", or "trash"project- OmniFocus project (if destination=omnifocus)tags- Comma-separated tags (if destination=omnifocus)dueDate- Due date (if destination=omnifocus)folder- Obsidian folder (if destination=obsidian)
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 | Meetings/ | date, attendees, topics |
| Ideas/brainstorms | Geoffrey/Inbox/ | tags, created |
| Research | Reference/ | source, tags, related |
| Journal | Journal/ | date |
| General notes | Geoffrey/Inbox/ | 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:
task- Force route to OmniFocusnote- Force route to Obsidianarchive- Keep in Drafts archivedelete- Trash without review
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 | Meetings/2025/ | - |
| Conference notes | Obsidian | Meetings/2025/ | - |
| Development roadmap | Obsidian | Work/[Project]/Roadmap.md | 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 | Reference/ | - |
| Personal project ideas | OmniFocus | - | Tags: Coding |
| Presentation schedules | Obsidian | Work/Presentations/ | 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:
Meetings/2025/- All meeting and conference notesWork/AI-Studio/- AI Studio development docsWork/Jocular-Kangaroo/- Jocular Kangaroo projectWork/Presentations/- Presentation archivesGeoffrey/- Geoffrey roadmap and ideasReference/- Reference materials and links
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
- [x]for completed items - 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
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
3ヶ月以内に更新がある
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon