360 Secure SkillHub
360 安全技能中心

Todoist API

该 Skill 提供非交互式 Python 命令行脚本,封装 Todoist API v1,支持任务捕获与快速添加、任务/项目/分区/标签/评论的查询与修改、名称到 ID 的解析、带 --dry-run 与 --confirm 的批量关闭/移动/评论、完成情况报告、活动日志、模板导出与 sync 同步;默认输出结构化 JSON,也可输出摘要或写入文件,并提供只读连通性检测脚本。

tristanmanchester
tristanmanchester
热度 57.58
最近更新 2026-05-18 12:14:56
分类:自动化依赖:代码执行 / 第三方 API / 读写文件应用场景:任务管理 / 工作流 / API 集成 / 自动化脚本 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add todoist-api-skill
Metadata
name
todoist-api
description
Manages Todoist tasks, projects, sections, labels, comments, completed-task reports, activity logs, ID migration, project templates, and sync workflows through Todoist API v1. Use when the user asks to capture tasks, quick-add work, triage an inbox, resolve Todoist names to IDs, bulk-close or move tasks, add repeated comments, review completed work, manage project structure, export templates, or automate Todoist workflows.
license
MIT. See LICENSE.txt
compatibility
Requires HTTPS access to api.todoist.com plus Python 3.9+ or curl. Write operations require a Todoist API token or OAuth access token.
metadata
{"author":"OpenAI","version":"2.0.0","todoist_api":"v1","last_reviewed":"2026-03-05"}

Todoist API

When to use this skill

Use this skill when work involves Todoist data or automation, especially:

  • capture or quick-add new tasks
  • inspect, filter, move, complete, reopen, or delete tasks
  • manage projects, sections, labels, or comments
  • resolve human names to Todoist IDs before writing
  • perform safer bulk edits with dry-runs
  • review completed work or recent activity
  • build Todoist scripts, agents, or integrations around the public API

When not to use this skill

Do not use this skill for:

  • editing the user’s local Todoist app UI directly
  • calendar-specific workflows that belong in a calendar skill
  • attachment upload flows that require multipart handling unless you are prepared to use curl or the raw escape hatch
  • non-Todoist task systems

Safety defaults

  • Start read-only if the user’s intent is ambiguous.
  • Resolve names to IDs before any write.
  • Prefer close over delete unless the user explicitly wants permanent removal.
  • Run --dry-run first for bulk or destructive work.
  • Use --confirm for bulk closes, moves, repeated comments, and deletes.
  • If a command may return a large payload, set --output FILE so stdout stays small and predictable.

Pick the smallest capable surface

  • One object, one endpoint → use a low-level REST wrapper such as get-task, update-project, or get-comment.
  • Natural-language capture → use quick-add-task.
  • Resolve names safely → use resolve-project, resolve-section, resolve-label.
  • Create if missing → use ensure-project, ensure-section, ensure-label.
  • Many matching tasks → use bulk-close-tasks, bulk-move-tasks, bulk-comment-tasks.
  • Completed-work review → use report-completed or get-completed-tasks.
  • Full or incremental sync / batched writes → use sync.
  • Unwrapped or niche endpoint → use raw.

Output contract

The main script prints structured output to stdout by default.

  • --format json returns a stable JSON envelope with fields like action, ok, count, next_cursor, matched_count, changed_count, and resolved.
  • --format summary returns a smaller human-readable summary.
  • --output FILE writes the full output to a file and prints a small JSON notice to stdout.

This is designed for agent pipelines: stdout stays parseable, stderr carries diagnostics, and retries are built in for transient failures.

Scripts

  • scripts/todoist_api.py — main non-interactive Todoist CLI
  • scripts/smoke_test.py — read-only connectivity check

Inspect help first:

python3 scripts/todoist_api.py --help
python3 scripts/todoist_api.py get-tasks-by-filter --help
python3 scripts/todoist_api.py bulk-move-tasks --help
python3 scripts/smoke_test.py --help

Quick start

Set a token:

export TODOIST_API_TOKEN="YOUR_TODOIST_TOKEN"

Read-only smoke test:

python3 scripts/smoke_test.py

Sanity-check access:

python3 scripts/todoist_api.py get-projects --limit 5
python3 scripts/todoist_api.py get-labels --limit 10

Resolve names before writes:

python3 scripts/todoist_api.py resolve-project --name "Inbox"
python3 scripts/todoist_api.py resolve-section --project-name "Client Alpha" --name "Next Actions"
python3 scripts/todoist_api.py resolve-label --name "waiting-on"

High-value agent workflows

Quick add

python3 scripts/todoist_api.py quick-add-task \
  --text "Email Chris tomorrow at 09:00 #Work @follow-up p2"

Create-if-missing section

python3 scripts/todoist_api.py ensure-section \
  --project-name "Client Alpha" \
  --name "Next Actions"

Preview a bulk close

python3 scripts/todoist_api.py bulk-close-tasks \
  --filter "overdue & @errands" \
  --dry-run

Execute the same bulk close

python3 scripts/todoist_api.py bulk-close-tasks \
  --filter "overdue & @errands" \
  --confirm

Move matching tasks into a resolved section

python3 scripts/todoist_api.py bulk-move-tasks \
  --filter "#Inbox & !recurring" \
  --target-project-name "Work" \
  --target-section-name "Next Actions" \
  --dry-run

Report completed work

python3 scripts/todoist_api.py report-completed \
  --since "2026-03-01T00:00:00Z" \
  --until "2026-03-31T23:59:59Z" \
  --by completion \
  --output reports/march-completed.json

Recommended operating pattern

  1. Resolve or list the target object.
  2. Read current state with a low-level getter.
  3. Preview the write with --dry-run.
  4. Execute with --confirm when needed.
  5. Verify by re-reading or by running a report command.

Feature index

Escape hatches

Use raw when the public CLI surface does not yet wrap a needed endpoint:

python3 scripts/todoist_api.py raw \
  --method GET \
  --path /projects/PROJECT_ID/full

Use sync when you need incremental sync or batched commands:

python3 scripts/todoist_api.py sync \
  --sync-token '*' \
  --resource-types '["all"]'