Files
2025-11-30 08:35:59 +08:00

13 KiB

name, description, triggers, allowed-tools, version
name description triggers allowed-tools version
drafts-manager Triage Drafts inbox and route notes to OmniFocus tasks or Obsidian documents
triage drafts
process drafts
check drafts
what's in drafts
drafts inbox
clean up drafts
export drafts
Read, Bash, Write 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:

  1. Export & Analyze - Drafts exports inbox → Geoffrey analyzes → presents suggestions
  2. 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 process
  • destination - "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

  1. Trigger export:

    open "drafts://x-callback-url/runAction?action=Geoffrey%20Export%20Inbox"
    
  2. Wait for export file (2-3 seconds)

  3. Read exported JSON:

    cat ~/Library/Mobile\ Documents/iCloud~com~agiletortoise~Drafts5/Documents/geoffrey-export.json
    
  4. Analyze each draft using content signals above

  5. 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

  1. 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"
    
  2. 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

  1. Open Drafts
  2. Go to Actions → Manage Actions
  3. Import from actions/geoffrey-export-inbox.draftsAction
  4. Import from actions/geoffrey-process-draft.draftsAction

Option B: Create manually

  1. Open Drafts
  2. Create new action "Geoffrey Export Inbox"
  3. Add Script step with code from actions/geoffrey-export-inbox.js
  4. 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 OmniFocus
  • note - Force route to Obsidian
  • archive - Keep in Drafts archive
  • delete - 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 notes
  • Work/AI-Studio/ - AI Studio development docs
  • Work/Jocular-Kangaroo/ - Jocular Kangaroo project
  • Work/Presentations/ - Presentation archives
  • Geoffrey/ - Geoffrey roadmap and ideas
  • Reference/ - 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