OmniFocus 技能通过 JXA(JavaScript for Automation)控制 macOS 上的 OmniFocus 3 或 4,实现任务、项目和文件夹的管理。
用途
该技能用于任务管理、待办事项列表、项目跟踪和 GTD 工作流。它允许用户通过命令行与 OmniFocus 交互,执行查询、创建、修改和重复任务等操作。
主要能力
技能提供以下命令类别:
- 列表/查询:inbox(列出收件箱任务)、folders(列出所有文件夹)、projects [folder](列出项目,可按文件夹过滤)、tasks <project>(列出项目中的任务)、tags(列出所有标签)、today(今日到期或逾期任务)、flagged(已标记的未完成任务)、search <query>(按名称搜索任务)、info <taskId>(查看任务完整详情)。
- 创建:add <name> [project](添加任务到收件箱或项目)、newproject <name> [folder](创建项目)、newfolder <name>(创建顶级文件夹)、newtag <name>(创建或获取标签)。
- 修改:complete <taskId>(标记完成)、uncomplete <taskId>(标记未完成)、delete <taskId>(永久删除)、rename <taskId> <name>(重命名任务)、note <taskId> <text>(追加备注)、setnote <taskId> <text>(替换备注)、defer <taskId> <date>(设置推迟日期,格式 YYYY-MM-DD)、due <taskId> <date>(设置截止日期)、flag <taskId> [true|false](设置标记)、tag <taskId> <tag>(添加标签,不存在则创建)、untag <taskId> <tag>(移除标签)、move <taskId> <project>(移动到项目)。
- 重复:repeat <taskId> <method> <interval> <unit>(设置重复规则)、unrepeat <taskId>(取消重复)。方法包括 fixed、due-after-completion、defer-after-completion;单位包括 days、weeks、months、years。
使用方式
通过包装脚本运行:./scripts/of <command> [args...],或直接运行:osascript -l JavaScript ./scripts/omnifocus.js <command> [args...]。
所有命令返回 JSON。成功响应包含 "success": true,错误包含 "error": "message"。任务 ID 是 OmniFocus 内部 ID,在所有任务响应中返回。日期使用 ISO 格式 YYYY-MM-DD。项目和文件夹名称区分大小写。使用 tag 命令时,标签不存在会自动创建。
示例:
- 添加任务到收件箱:
of add "Buy groceries" - 添加任务到特定项目:
of add "Review docs" "Work Projects" - 设置截止日期和标记:
of due abc123 2026-02-01、of flag abc123 true - 添加标签:
of tag abc123 "urgent"、of tag abc123 "home" - 创建重复任务:
of add "Weekly review" "Habits"、of repeat xyz789 fixed 1 weeks - 搜索并完成:
of search "groceries"、of complete abc123 - 获取今日任务:
of today
适用场景
适用于需要自动化管理 OmniFocus 任务的用户,特别是遵循 GTD 工作流、需要批量操作或集成到脚本中的场景。
限制
需要 macOS 系统,并安装 OmniFocus 3 或 4。OmniFocus 必须正在运行(或会自动启动)。首次运行时,OmniFocus 可能会提示允许自动化访问,需在系统设置 > 隐私与安全性 > 自动化中启用。技术细节:该技能对大多数操作使用 JXA,但对标签和重复操作使用 AppleScript 回退(由于 JXA 与这些特定 OmniFocus API 存在已知的类型转换错误)。这种混合方法提供了 JSON 输出、对标签名称中特殊字符的健壮转义以及清晰的错误处理。