8.5 KiB
name, description, triggers, allowed-tools, version
| name | description | triggers | allowed-tools | version | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| omnifocus-manager | Manage OmniFocus tasks, projects, and inbox with proper tagging and organization |
|
Read, Bash | 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:
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 tasksapp.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
-
Parse user request for: task name, person (if any), context clues
-
Apply routing rules above to determine:
- Project - based on task type
- Tags - person + communication method + activity type
- Due date - based on task type timing
-
If tag doesn't exist, create it with
create_tag.js -
Run
add_task.jswith parameters -
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
-
Get inbox tasks:
osascript -l JavaScript ./scripts/get_inbox.jsThis returns only remaining tasks (no project, not completed, not dropped, not deferred)
-
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
-
Ask clarifying questions:
- Who is [person/acronym]?
- Which project for [ambiguous task]?
- Should this be skipped (needs email context)?
-
Batch update confirmed tasks:
osascript -l JavaScript ./scripts/update_task.js '{"name":"...", "project":"...", "tags":[...], "dueDate":"..."}' -
Create missing tags/projects as needed:
osascript -l JavaScript ./scripts/create_tag.js '{"name":"PersonName", "parent":"ESC"}' -
Skip tasks that need:
- Email context (user needs to read first)
- Freshservice ticket creation
- More information to route properly
Triage output format:
## 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
- Find tasks that are:
- Overdue
- Stale (no activity)
- Missing tags
- In wrong project
- 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:
## 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