Todoist Orbit
Use the bundled Python CLI. It is async at the command layer and uses only Python stdlib HTTP primitives, so there is no SDK dependency to install.
Prerequisites
Set TODOIST_API_KEY in the environment.
Find the installed skill path first
ClawHub installs skills under an OpenClaw skills directory such as ~/.openclaw/skills/todoist-orbit/, but do not assume the exact path blindly. Verify the installed location first if needed, then run the script from there.
CODEBLOCK0
Primary command
CODEBLOCK1
If you are running from a checked-out repo instead of an installed skill, adjust SKILL_DIR accordingly.
Common commands
Tasks
CODEBLOCK2
Keep tasks add ... "content" and --description short. Use them for the task title and a brief summary only. If you need multi-line notes, logs, checklists, transcripts, or structured updates, put that material in comments instead of stretching task fields.
Projects
CODEBLOCK3
INLINECODE5 now calls Todoist's server-side GET /api/v1/projects/search endpoint. Keep --exact when you want an exact-name match on top of the API-backed search results.
Sections
CODEBLOCK4
INLINECODE8 is preserved for CLI compatibility, but Todoist REST does not provide a section move endpoint, so the command exits with a documented error instead of attempting a move.
Labels
CODEBLOCK5
INLINECODE9 now calls Todoist's server-side GET /api/v1/labels/search endpoint. Keep --exact when you want an exact-name match on top of the API-backed search results.
Attachments and comments
Upload the file first or let comments add do it implicitly.
CODEBLOCK6
Todoist stores attachments on comments, not directly on the task object. For task attachments, add a task comment with --attachment.
Formatting and safety guidance:
- - Todoist comments are plain text. Treat Markdown rendering, indentation, and pasted shell snippets as best-effort rather than rich formatting.
- For anything longer than a short sentence, prefer
comments add-file or comments add-stdin over inline shell arguments. - Avoid shell interpolation for comment bodies. Commands like
comments add --task-id ... "$NOTE" are fragile and can introduce accidental characters such as a stray leading $. - Use
add-file for saved notes and add-stdin for here-docs or generated output. Both routes preserve multi-line text without shell-quoting games.
Concurrent resolution
CODEBLOCK7
Use resolve when you want project and section lookups plus a task query in one call.
Operational notes
- - Prefer IDs once resolved; names are ambiguous.
- The CLI is REST-only; there is no Sync API fallback.
- INLINECODE21 and
labels search use Todoist's GET /api/v1/projects/search and GET /api/v1/labels/search endpoints. --exact remains as a compatibility flag that narrows the API results to an exact name match. - INLINECODE26 is intentionally unsupported because Todoist REST does not expose a section move operation. The command remains available only to fail clearly for callers that already invoke it.
- INLINECODE27 uploads the file and passes the returned attachment object into the comment create request.
- Prefer short task fields and long comments: task content/description are easier to scan when they stay concise, while comments work better for running logs and multi-line notes.
- Read
references/api-notes.md only when you need endpoint-specific details or attachment behavior.
Todoist Orbit
使用捆绑的Python CLI。它在命令层是异步的,并且仅使用Python标准库的HTTP原语,因此无需安装SDK依赖。
先决条件
在环境中设置TODOISTAPIKEY。
首先找到已安装的技能路径
ClawHub将技能安装在OpenClaw技能目录下,例如~/.openclaw/skills/todoist-orbit/,但不要盲目假设确切路径。如有需要,请先验证安装位置,然后从该位置运行脚本。
bash
SKILL_DIR=$HOME/.openclaw/skills/todoist-orbit
[ -f $SKILLDIR/scripts/todoistorbit.py ] || echo 在运行命令前,请验证todoist-orbit的安装路径
主要命令
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty ...
如果你是从检出仓库而非已安装的技能运行,请相应调整SKILL_DIR。
常用命令
任务
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty tasks list --filter today
python3 $SKILLDIR/scripts/todoistorbit.py --pretty tasks add 发布版本 --project-id id> --section-id id> --due tomorrow --priority 1
python3 $SKILLDIR/scripts/todoistorbit.py --pretty tasks update --content 发布v2版本 --due next monday
python3 $SKILLDIR/scripts/todoistorbit.py --pretty tasks move id> --project-id id> --section-id
python3 $SKILLDIR/scripts/todoistorbit.py --pretty tasks close
保持tasks add ... content和--description简短。仅将它们用于任务标题和简要摘要。如果需要多行笔记、日志、检查清单、转录或结构化更新,请将这些内容放入评论中,而不是扩展任务字段。
项目
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty projects list
python3 $SKILLDIR/scripts/todoistorbit.py --pretty projects search client
python3 $SKILLDIR/scripts/todoistorbit.py --pretty projects add 客户运营 --view-style board --favorite
python3 $SKILLDIR/scripts/todoistorbit.py --pretty projects archive
projects search现在调用Todoist服务端的GET /api/v1/projects/search端点。当需要在API搜索结果之上进行精确名称匹配时,请保留--exact。
分区
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty sections list --project-id
python3 $SKILLDIR/scripts/todoistorbit.py --pretty sections add 收件箱
python3 $SKILLDIR/scripts/todoistorbit.py --pretty sections move
sections move为CLI兼容性而保留,但Todoist REST未提供分区移动端点,因此该命令会退出并显示记录的错误,而不是尝试移动。
标签
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty labels list
python3 $SKILLDIR/scripts/todoistorbit.py --pretty labels search waiting
python3 $SKILLDIR/scripts/todoistorbit.py --pretty labels add waiting-for --color berry_red --favorite
python3 $SKILLDIR/scripts/todoistorbit.py --pretty labels update --name waiting-on --color blue
python3 $SKILLDIR/scripts/todoistorbit.py --pretty labels get
python3 $SKILLDIR/scripts/todoistorbit.py --pretty labels delete
labels search现在调用Todoist服务端的GET /api/v1/labels/search端点。当需要在API搜索结果之上进行精确名称匹配时,请保留--exact。
附件和评论
先上传文件,或让comments add隐式完成。
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty uploads add ./voice-note.m4a
python3 $SKILLDIR/scripts/todoistorbit.py --pretty comments add --task-id 附上语音备忘录 --attachment ./voice-note.m4a
python3 $SKILLDIR/scripts/todoistorbit.py --pretty comments add-file --task-id ./daily-log.txt
python3 $SKILLDIR/scripts/todoistorbit.py --pretty comments add-stdin --task-id <
每日日志
EOF
Todoist将附件存储在评论上,而不是直接存储在任务对象上。对于任务附件,请使用--attachment添加任务评论。
格式和安全指南:
- - Todoist评论是纯文本。将Markdown渲染、缩进和粘贴的shell片段视为尽力而为,而非富文本格式。
- 对于超过短句长度的内容,优先使用comments add-file或comments add-stdin,而不是内联shell参数。
- 避免对评论正文进行shell插值。像comments add --task-id ... $NOTE这样的命令很脆弱,可能会引入意外字符,例如多余的前导$。
- 对已保存的笔记使用add-file,对here-docs或生成输出使用add-stdin。两种方式都能保留多行文本,无需shell引号技巧。
并发解析
bash
python3 $SKILLDIR/scripts/todoistorbit.py --pretty resolve --project 工作 --section 收件箱 --task-filter today
当需要一次调用完成项目和分区查找以及任务查询时,请使用resolve。
操作说明
- - 解析后优先使用ID;名称具有歧义性。
- CLI仅支持REST;没有同步API回退。
- projects search和labels search使用Todoist的GET /api/v1/projects/search和GET /api/v1/labels/search端点。--exact作为兼容性标志保留,用于将API结果缩小到精确名称匹配。
- sections move故意不支持,因为Todoist REST未暴露分区移动操作。该命令仅保留,以便为已调用它的调用者清晰报错。
- comments add --attachment上传文件,并将返回的附件对象传递给评论创建请求。
- 优先使用简短的任务字段和较长的评论:任务内容/描述在保持简洁时更易于浏览,而评论更适合运行日志和多行笔记。
- 仅在需要端点特定细节或附件行为时,阅读references/api-notes.md。