home / skills / krishagel / geoffrey / drafts-manager

drafts-manager skill

/skills/drafts-manager

This skill triages Drafts inbox, analyzes content, and routes items to OmniFocus tasks or Obsidian notes for organized processing.

npx playbooks add skill krishagel/geoffrey --skill drafts-manager

Review the files below or copy the command above to add this skill to your agents.

Files (7)
SKILL.md
13.0 KB
---
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:**

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:
```bash
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:**
```json
{
  "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:**
```yaml
---
created: {{date}}
source: drafts
tags: [from-drafts]
related: []
---
```

## Main Workflow: Triage Drafts

### Phase 1: Export & Analyze

1. **Trigger export:**
   ```bash
   open "drafts://x-callback-url/runAction?action=Geoffrey%20Export%20Inbox"
   ```

2. **Wait for export file** (2-3 seconds)

3. **Read exported JSON:**
   ```bash
   cat ~/Library/Mobile\ Documents/iCloud~com~agiletortoise~Drafts5/Documents/geoffrey-export.json
   ```

4. **Analyze each draft** using content signals above

5. **Present suggestions table:**
   ```markdown
   ## 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:
   ```bash
   # 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:**
   ```markdown
   ## 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

Overview

This skill triages your Drafts inbox and routes each item to OmniFocus tasks, Obsidian notes, archives, or trash using a hybrid AI + human confirmation workflow. It analyzes exported Drafts JSON for signals like action verbs, length, and context to suggest destinations and metadata. You review suggestions, confirm changes, and the skill triggers Drafts actions to process and archive the drafts.

How this skill works

The skill triggers a Drafts export action that writes a JSON file. It parses each draft against routing rules (OmniFocus signals, Obsidian signals, archive, delete) and presents a concise suggestion table for your review. After you confirm, the skill invokes the Drafts process action for each draft with URL parameters (uuid, destination, project, tags, folder) and reports the processing summary. Errors (missing actions, export file not found, apps not running) are surfaced with clear remediation steps.

When to use it

  • Triage and clear your Drafts inbox regularly
  • Route captured items into OmniFocus or Obsidian from Drafts
  • Convert meeting notes, ideas, or reference material into Obsidian
  • Turn short action items, errands, or follow-ups into OmniFocus tasks
  • Clean up old or low-value drafts by archiving or deleting

Best practices

  • Install the two Drafts actions: Geoffrey Export Inbox and Geoffrey Process Draft before use
  • Use simple capture patterns: start tasks with verbs and notes with context tags
  • Tag drafts to force routing: task, note, archive, delete
  • Triage daily—morning for previous captures, evening for same-day clean-up
  • Confirm suggested routing to avoid accidental deletions or misroutes

Example use cases

  • Short: “Call Sara about invoice” → suggested OmniFocus task with project and tags
  • Long: meeting notes with attendees and topics → Obsidian file in Meetings/ with frontmatter
  • Shopping list or errands → OmniFocus single-actions project with Chores tag
  • Journal or brainstorm → Obsidian Geoffrey/Inbox with created and tags frontmatter
  • Empty/test drafts or API keys → suggested Trash with security warning

FAQ

What Drafts actions do I need installed?

Install Geoffrey Export Inbox (creates the export JSON) and Geoffrey Process Draft (processes single drafts via URL parameters). Both are required for the workflow.

What if the export file isn't created?

Open Drafts and run the export action manually. Check the expected path ~/Library/Mobile Documents/iCloud~com~agiletortoise~Drafts5/Documents/geoffrey-export.json and retry; the skill will warn if the file is missing.