介绍
# OmniFocus
通过 JXA(JavaScript 自动化脚本)控制 OmniFocus。
## 要求
- 安装了 OmniFocus 3 或 4 的 macOS - OmniFocus 必须正在运行(否则将自动启动)
## 快速参考
```bash # Run via the wrapper script ./scripts/of <command> [args...]
# Or directly osascript -l JavaScript ./scripts/omnifocus.js <command> [args...] ```
## 命令
### 列表/查询
| 命令 | 描述 | |---------|-------------| | `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>` | 移动到项目 |
### 重复
```bash # repeat <taskId> <method> <interval> <unit> of repeat abc123 fixed 1 weeks of repeat abc123 due-after-completion 2 days of repeat abc123 defer-after-completion 1 months of unrepeat abc123 ```
方法:`fixed`、`due-after-completion`、`defer-after-completion` 单位:`days`、`weeks`、`months`、`years`
## 输出格式
所有命令均返回 JSON。成功响应包含 `"success": true`。错误响应包含 `"error": "message"`。
```json { "success": true, "task": { "id": "abc123", "name": "Task name", "note": "Notes here", "flagged": false, "completed": false, "deferDate": "2026-01-30", "dueDate": "2026-02-01", "project": "Project Name", "tags": ["tag1", "tag2"], "repeat": {"method": "fixed", "rule": "RRULE:FREQ=WEEKLY;INTERVAL=1"} } } ```
## 示例
```bash # Add task to inbox of add "Buy groceries"
# Add task to specific project of add "Review docs" "Work Projects"
# Set due date and flag of due abc123 2026-02-01 of flag abc123 true
# Add tags of tag abc123 "urgent" of tag abc123 "home"
# Create recurring task of add "Weekly review" "Habits" of repeat xyz789 fixed 1 weeks
# Search and complete of search "groceries" of complete abc123
# Get today's tasks of today ```
## 说明
- 任务 ID 是 OmniFocus 内部 ID(在所有任务响应中返回) - 日期使用 ISO 格式:YYYY-MM-DD - 项目和文件夹名称区分大小写 - 使用 `tag` 命令时,如果标签不存在将自动创建 - 所有输出均为 JSON 格式,以便于解析
## 技术详情
此技能主要使用 JavaScript 自动化脚本 (JXA) 进行操作,对于标签和重复操作则使用 AppleScript 作为后备方案(这是因为 JXA 在处理这些特定的 OmniFocus API 时存在已知的类型转换 Bug)。
这种混合方案提供了: - 便于解析的 JSON 输出 - 对标签名称中的特殊字符的可靠转义 - 带有明确提示的错误处理
**首次运行:**OmniFocus 可能会提示允许自动化访问。请在系统设置 > 隐私与安全性 > 自动化中启用此权限。