Initial commit

This commit is contained in:
Zhongwei Li
2025-11-30 08:35:59 +08:00
commit 90883a4d25
287 changed files with 75058 additions and 0 deletions

View File

@@ -0,0 +1,324 @@
---
name: omnifocus-manager
description: Manage OmniFocus tasks, projects, and inbox with proper tagging and organization
triggers:
- "add task"
- "create task"
- "new task"
- "follow up with"
- "triage omnifocus"
- "triage my omnifocus"
- "omnifocus inbox"
- "clean up omnifocus"
- "check omnifocus"
- "show tasks"
- "what's due"
- "omnifocus review"
allowed-tools: Read, Bash
version: 0.1.0
---
# OmniFocus Manager Skill
Manage OmniFocus tasks with proper project assignment, tagging, and organization based on user preferences.
## When to Activate
Use this skill when user wants to:
- Add/create tasks
- Follow up with someone
- Triage or review inbox
- Clean up or organize tasks
- Check what's due or available
- Query task status
## User Preferences
**Task Creation Philosophy:**
- Always assign to a project (never leave in Inbox)
- Always set expected completion date
- Tag with person + "Follow Up" for 1:1 discussions
- Use location tags for shopping tasks
## Available Scripts
Scripts are in `./scripts/` directory. Run via:
```bash
osascript -l JavaScript ./scripts/script-name.js
```
**IMPORTANT:** Always use pure JXA, NOT Omni Automation URL scheme. The URL scheme triggers security popups for every unique script. JXA runs silently.
Key JXA patterns:
- `doc.inboxTasks.push(task)` - create new tasks
- `app.add(tag, {to: task.tags})` - add existing tags (not push!)
- `task.assignedContainer = project` - move to project
### get_inbox.js
Returns remaining inbox tasks (matches OmniFocus Inbox perspective).
**Filter logic:** Tasks with no project + not completed + not dropped + not deferred to future
**Output:** JSON with count and task array (id, name, note, tags, dueDate)
**Use when:** Starting inbox triage
### get_tags.js
Returns full tag hierarchy with groupings.
**Output:** JSON with all 129 tags organized by parent/children
**Use when:** Need to find correct tags for a task
### get_projects.js
Returns full project/folder structure.
**Output:** JSON with projects and folder paths
**Use when:** Need to find correct project for a task
### add_task.js
Creates a new task with proper tags and project.
**Parameters:** name, project, tags[], dueDate, deferDate, note, flagged
**Use when:** Creating new tasks
### update_task.js
Updates any existing task (not just inbox).
**Parameters:** name or id, project, tags[], dueDate, deferDate
**Use when:** Triaging/moving tasks, adding tags
### create_tag.js
Creates a new tag, optionally under a parent.
**Parameters:** name, parent (optional)
**Use when:** Tag doesn't exist for a person or category
## Tag Hierarchy Reference
**Top-level categories:**
- **Activity** - What type of work (Creative, Coding, Writing, Reading, Research, etc.)
- **Energy** - Required mental state (Full Focus, Short Dashes, Brain Dead, Low, High)
- **Location** - Where to do it (Home, Grocery Stores, PSD Sites, Other Shopping)
- **People** - Who's involved (Personal family, PSD staff by department)
- **Groups** - Team meetings (Cabinet, Engineering Team, DLI Admin, etc.)
- **Time** - When to do it (Morning, Afternoon, Evening)
- **Communications** - How to communicate (Email, Phone, In Person, etc.)
- **Online** - Online tools (Freshservice, Github, Google Docs)
- **Standalone** - Follow Up, Waiting For, Waiting, Kiwanis
**People → PSD breakdown:**
- Tech: Mel, Bill, Reese, Mark, Brad, Mason, Jordan, etc.
- DCRC: Jodi, Terri, Laura
- Comms: Danielle, Jake, Shana
- ESC: Ashley, John Y, Patrick, Krestin, James, Wendy, Janna, etc.
- SSOs: Moose, Brent
**Special tags:**
- Geoffrey - tasks that AI can assist with
- Full Focus - requires dedicated focus time
## Task Routing Rules
### By Task Type → Project
| Task Type | Project | Default Due |
|-----------|---------|-------------|
| Discussions with people | Meetings | 7 days |
| Phone calls | Meetings | 7 days |
| CoSN-related | CoSN Work | 7 days |
| Digital Promise work | Digital Promise | 7 days |
| AI/automation projects | AI Studio | 7 days |
| Coding/development | Coding Projects | 7 days |
| Research/learning | Research for Future Plans | 7 days |
| SOP/process development | Standard Operating Procedures | 14 days |
| Form/procedure updates | Department Procedures | 7 days |
| District reimbursements | Purchasing & Acquisitions | 7 days |
| Travel approvals | (appropriate project) | 14 days |
| Data governance | Data Governance | 14 days |
| Tech support issues | → Freshservice ticket | N/A |
### By Task Type → Tags
| Task Type | Tags |
|-----------|------|
| Discussion with person | [Person name], Follow Up |
| Phone call | Phone, Follow Up |
| Research tasks | Research |
| AI-assistable tasks | Geoffrey |
| Focus time needed | Full Focus |
| Admin/organizational | Organization |
| Safety/security related | (relevant ESC person) |
### Routing Signals
**Goes to Meetings project:**
- "talk to [person]"
- "discuss with"
- "follow up with"
- "check with"
- "call [person/org]"
- "get [thing] to [person]"
**Goes to Research for Future Plans:**
- "look at/into"
- "what about"
- CISA resources
- Training to consider
- External resources to review
**Goes to Coding Projects or AI Studio:**
- AI/automation ideas
- "build a program"
- Geoffrey capabilities
- Technical tools to explore
**Needs Freshservice (skip for now):**
- User-reported issues
- Equipment requests
- "doesn't work/load"
- Form rebuild requests
## Common Workflows
### Add a Task
1. Parse user request for: task name, person (if any), context clues
2. Apply routing rules above to determine:
- **Project** - based on task type
- **Tags** - person + communication method + activity type
- **Due date** - based on task type timing
3. If tag doesn't exist, create it with `create_tag.js`
4. Run `add_task.js` with parameters
5. Return standardized output
**Example:**
```
User: "Follow up with Mel about the drone program"
Actions:
- Task: "Follow up with Mel about the drone program"
- Project: PSD > General Technology > Digital Innovation Leads
- Tags: Mel, Follow Up
- Due: Next 1:1 date or 7 days
```
### Triage Inbox
1. **Get inbox tasks:**
```bash
osascript -l JavaScript ./scripts/get_inbox.js
```
This returns only remaining tasks (no project, not completed, not dropped, not deferred)
2. **Present assumptions in batches (10-15 tasks):**
- Read task notes for context clues
- Apply routing rules to suggest project, tags, due date
- Flag unclear tasks that need user input
3. **Ask clarifying questions:**
- Who is [person/acronym]?
- Which project for [ambiguous task]?
- Should this be skipped (needs email context)?
4. **Batch update confirmed tasks:**
```bash
osascript -l JavaScript ./scripts/update_task.js '{"name":"...", "project":"...", "tags":[...], "dueDate":"..."}'
```
5. **Create missing tags/projects as needed:**
```bash
osascript -l JavaScript ./scripts/create_tag.js '{"name":"PersonName", "parent":"ESC"}'
```
6. **Skip tasks that need:**
- Email context (user needs to read first)
- Freshservice ticket creation
- More information to route properly
**Triage output format:**
```markdown
## My assumptions on remaining tasks:
| # | Task | Project | Tags | Notes |
|---|------|---------|------|-------|
| 1 | task name | Meetings | Person, Follow Up | context |
**Questions:**
- #X: Who is [person]?
- #Y: Which project for this?
Which numbers need correction?
```
### Clean Up Tasks
1. Find tasks that are:
- Overdue
- Stale (no activity)
- Missing tags
- In wrong project
2. Suggest actions:
- Complete
- Defer
- Delete
- Re-tag
- Move
## Error Handling
**If OmniFocus not running:**
```
Status: ❌ Failed
Error: OmniFocus is not running. Please open OmniFocus and try again.
```
**If tag not found:**
- Check for similar tags (fuzzy match)
- Suggest creating new tag
- Ask user to clarify
**If project not found:**
- List available projects in that domain
- Suggest closest match
- Ask user to specify
## Output Format
Always use standardized format:
```markdown
## Summary
Created task with proper tags and project assignment
## Actions
- Created task: "[task name]"
- Project: [full project path]
- Tags: [tag1, tag2, tag3]
- Due: [date]
- Notes: [if any]
## Status
✅ Complete
## Next Steps
- Task appears in [relevant perspective]
- Follow up scheduled for [date if applicable]
```
## Future Enhancements
- [ ] Batch task creation
- [ ] Smart project suggestion based on content
- [ ] Calendar integration for due dates
- [ ] Recurring task patterns
- [ ] Perspective queries
- [ ] Task completion tracking