您的仓库,尽在终端
taskforge 是一个小巧的命令行工具,用于读写您 Obsidian 仓库中的任务。它使用与应用相同的解析器,因此循环任务会正常推进,归档文件会落到正确的位置,任务行也会保持您原有的格式。把它交给一个 shell 脚本或智能体,它编辑的是真实的 markdown 文件,没有任何内容托管在别处。
即将随 TaskForge 3.0 推出
TaskForge 命令行工具和 MCP 服务器将随 TaskForge 3.0 版本一起发布。本页内容描述的是它们上线后的使用方式。TaskForge 应用本身现在就可以下载使用。
CLI 还是 MCP 服务器?
在没有 MCP 连接的 shell 环境中使用 CLI:脚本、cron、CI,或是在仓库检出目录里工作的编码智能体。如果您的智能体已经与 TaskForge 建立了 MCP 连接,则优先使用 MCP 工具;它们是类型化的,返回结构化错误,方便智能体据此自我纠正,而且不需要在您的 PATH 里安装任何东西。两者驱动的是同一个引擎,语义完全一致,选择您运行环境里已经接好的那一个就行。手动编辑仓库文件是最后的办法。
安装
macOS 和 Linux 用户可通过 Homebrew 安装:
brew install azhard/tap/taskforge 更喜欢 npm?同一个二进制文件也以包的形式发布:
npm install -g taskforge 应用内置的自动安装功能即将推出,届时打开仓库就会自动完成安装。在此之前,请使用上面的 Homebrew tap 安装。
快速上手
使用 --vault 让 taskforge 指向某个仓库,或者一次性设置 TASKFORGE_VAULT。每个读取类命令都支持 --json 参数,输出机器可读的结果,方便智能体解析。
taskforge schema 打印仓库的任务方言:状态符号、日期格式、自定义字段、新任务的去向。这是智能体首先要读取的信息。
taskforge add "call the plumber" --due 2026-07-10 --priority high 把一条任务追加到仓库的默认新任务位置,格式与您仓库自己的任务书写方式一致。
taskforge query 'prop:priority_label=urgent' --sort priority --count 统计带有自定义字段 priority_label:: urgent 的任务数量,优先级最高的排在最前。去掉 --count 即可列出这些任务。
taskforge query 'desc:"invoice" text:acme' --json 查找描述中提到 invoice、标题中提到 acme 的任务,以 JSON 形式输出。匹配时忽略重音符号和大小写,因此 cafe 也能匹配 café。
taskforge done <task-id> 完成一个任务。如果它会循环,下一次发生会被写回文件,和应用的处理方式完全一致。
taskforge show <task-id> --json 读取一个任务及其内容哈希,这样后续编辑可以传入 --if-hash,拒绝覆盖过期的副本。
查询语法
查询参数是一组以空格分隔的标记,必须全部匹配。常用的标记有:
| text:word | 标题包含该词(忽略重音符号和大小写)。 | text:groceries |
| desc:"phrase" | 任务描述包含该短语。 | desc:"send invoice" |
| tag:name | 任务带有 #name 标签。 | tag:work |
| prop:key=value | 自定义字段 key 的值等于 value。 | prop:area=home |
| prop:key | 自定义字段 key 存在,值不限。 | prop:estimate |
| --sort due|priority|created | 对结果排序。默认按截止日期,最近的排最前。 | --sort priority |
| --count | 返回匹配数量,而不是任务列表本身。 | --count |
自定义字段的 key 可以包含字母、数字和下划线,因此 priority_label 和 area_2 都是合法写法。
唯一的前提条件:仓库契约文件
taskforge 会读取一个由 TaskForge 写入您仓库的小型契约文件 taskforge/schema.json,它精确描述您的任务格式,让 CLI 按您的方式编辑任务,而不是靠猜测。请至少用 TaskForge 3.0 或更高版本打开一次仓库,进入 Settings, AI & Agents,并保持 'Generate agent files' 开关为开启状态。这样就会写入这份契约文件。
如果 taskforge 找不到仓库,它会告诉您三种指定仓库的方法:
- 在命令中传入 --vault /path/to/vault。
- 设置 TASKFORGE_VAULT 环境变量。
- 用 TaskForge 3.0 及以上版本打开一次仓库,使 taskforge/schema.json 文件存在,然后在该仓库文件夹内运行命令。
仅在本地运行
taskforge 在您自己的电脑上运行,只会接触您指定仓库中的 markdown 文件。不需要账号,不需要 API 密钥,也不会发起任何网络请求。无论您用什么方式同步仓库,iCloud、Dropbox 还是 Obsidian Sync,改动都会随之送达您的其他设备。
想让智能体来操作它?
CLI 面向终端和脚本。如果您想让 Claude Desktop 或其他 MCP 客户端通过工具接口添加和完成任务,请改用 MCP 服务器。同一个仓库,同一套规则。两种方式用的都是同一个 taskforge 二进制文件,运行 taskforge mcp --stdio 就能把它切换成 MCP 服务器。
设置 MCP 服务器 →CLI 编辑任务,应用让它们持续可用。
taskforge 可以从任意终端写入您的仓库;TaskForge 把同一批文件变成您手机和电脑上的列表、小组件和提醒。可在 iPhone、iPad、Mac 和 Android 上免费下载。