Loading...
Loading...
Manage Todoist tasks, projects, labels, filters, sections, comments, reminders, and workspaces via the `td` CLI. Use when the user wants to view, create, update, complete, or organize Todoist items, or mentions tasks, inbox, today, upcoming, projects, labels, or filters.
npx skill4agent add doist/todoist-cli todoist-clitd <command> --helptd <command> --helpid:...td task <ref>td project <ref>td workspace <ref>td comment <ref>td notification <ref>view--project--task--workspacep1p4curlfileUrlReadtd attachment view <file-url>--jsonNameSizeType--json--ndjson--ids-only--full--raw--limit <n>--all--cursor <cursor>--show-urlstd <command> --help--ids-only--json--ndjsontd <command> --help--json--dry-run--yes--quiet-qid=$(td task add "Buy milk" --quiet)--no-spinner--progress-jsonl-v/--verbose--accessible--quiet--user <id|email>td auth login
td auth login --read-only
td auth login --additional-scopes=app-management
td auth login --read-only --additional-scopes=app-management
td auth login --additional-scopes=backups
td auth login --read-only --additional-scopes=backups
td auth login --additional-scopes=billing
td auth login --additional-scopes=app-management,backups
td auth login --callback-port 9000 # override the OAuth callback port
td auth login --no-browser-open # print the authorize URL instead of opening a browser
td auth login --credential-store=plaintext # explicitly store the credential in plaintext
td auth login --json # emit the new account record as JSON
td auth login --ndjson # one-line newline-delimited JSON
td auth token
td auth token "$TOKEN" --credential-store=plaintext
td auth status
td auth status --json # full status payload as JSON (--ndjson also supported)
TOKEN=$(td auth token view)
TOKEN=$(td auth token view --user you@example.com)
td auth logout
td auth logout --json # emits `{"ok": true}` (--ndjson is silent)td auth logintd auth statustd auth logout--json--ndjsonloginstatusstoredUserssourcelogout{"ok": true}--json--ndjsontd auth login--callback-port <n>8765--no-browser-open--additional-scopes=<list>td auth login --helpapp-managementdev:app_consoletd apps listtd apps viewbackupsbackups:readtd backup listtd backup downloadbillingbilling:read_writebilling:read--read-onlytd billing--read-onlytd auth login --read-only --additional-scopes=backups--credential-store=plaintexttd auth logintd auth tokenTODOIST_API_TOKENtd auth token viewTOKEN=$(td auth token view)--user <id|email>TODOIST_API_TOKENtd auth login # adds the account; first one becomes default
td accounts list # all stored accounts (with default marker)
td accounts list --json # { accounts: [...], default } envelope; --ndjson streams one account per line
td accounts use <id|email> # set the default account (alias: td accounts default; --json/--ndjson supported)
td accounts current # show the active account (--json/--ndjson supported)
td accounts remove <id|email> # delete an account and its token (--json/--ndjson supported)
td --user <id|email> task list # one-off override for any command
td auth logout --user <id|email> # log out a specific accounttd accountstd usertd users--user <ref>user.defaultUser--usertd accounts use<ref>TODOIST_API_TOKENtd todaytd inboxtd upcomingtd completedtd activitytd task list/view/add/quickadd/update/reschedule/move/complete/uncomplete/delete/browsetd task qaquickaddtd project list/view/create/update/archive/unarchive/archived/delete/move/reorder/join/share/browse/collaborators/permissionstd project progress/health/health-context/activity-stats/analyze-healthtd label ...td filter ...td section ...td folder ...td workspace ...td comment ...td notification ...td reminder ...td template ...td attachment view <file-url>td backup ...td hc locales/search/viewtd statstd settings ...td config viewtd accounts ...td completion ...td view <todoist-url>td doctortd updatetd changelogtd apps list/viewtd auth login --additional-scopes=app-managementtd backup list/downloadtd auth login --additional-scopes=backupstd billing subscription/plan/prices/pricingtd auth login --additional-scopes=billingid:xxxhttps://app.todoist.com/app/task/buy-milk-8Jx4mVr72kPn3QwBhttps://app.todoist.com/app/project/work-2pN7vKx49mRq6YhTid:task uncompletesection archive/unarchive/update/delete/browsecomment update/delete/browsenotification view/accept/rejectreminder get/update/deletereminder location get/update/deleteid:xxxtd today
td inbox --priority p1
td upcoming 14 --workspace "Work"
td completed list --since 2024-01-01 --until 2024-01-31
td completed list --search "meeting notes"
td activity --type task --event completedtd task add "Buy milk" --due tomorrow
td task quickadd "Buy milk tomorrow p1 #Shopping"
td task qa "Review PR @urgent +Alice"
td task list --project "Work" --label "urgent" --priority p1
td task view "Buy milk"
td task view "Plan sprint" --include-children # list direct subtasks, flagging ones that nest further
td task add "Plan sprint" --project "Work" --section "Planning" --labels "urgent,review"
td task update "Plan sprint" --deadline "2026-06-01" --assignee me
td task reschedule "Plan sprint" 2026-03-20T14:00:00
td task move "Plan sprint" --project "Personal" --no-section
td task complete "Plan sprint"
td task uncomplete id:123456
td task delete "Plan sprint" --yes
td task browse "Plan sprint"task addtask quickaddtd task quickaddtd task qap1p4#Project@label/Section+Personquickaddtd task add--deadline--description--parent--duration--uncompletable--orderid:td task quickadd--stdin--json--dry-runtd add <text>td task quickadd--stdin--json--dry-runtd task quickaddqa--duetask addtask updatedue_stringdue_stringstarting <date>--stdintask addtask quickaddtd add--parent--section--project--workspace--assignee--labels--due--deadline--duration--prioritytd task complete --forevertd task update --no-due--no-deadline--no-labelstd task move --no-parent--no-section--include-childrentask viewtd task list --parent id:<id> --all--jsonchildCountchildrenhasMoreChildrenchildrenErrorchildrenErrortd project list --personal
td project list --search "Road"
td project archived
td project view "Roadmap" --detailed
td project view "Roadmap" --raw # don't render the description markdown
td project view "Roadmap" --include-children # list direct sub-projects, flagging ones that nest further
td project collaborators "Roadmap"
td project create --name "New Project" --color blue
td project create --name "New Project" --description "Quarterly OKRs"
td project create --name "Imported" --stdin # read the description from stdin
td project update "Roadmap" --description "Updated scope"
td project update "Roadmap" --favorite
td project update "Roadmap" --folder "Engineering"
td project update "Roadmap" --no-folder
td project update "Roadmap" --parent "Engineering"
td project update "Roadmap" --no-parent
td project update "Roadmap" --parent "Engineering" --json
td project update "Roadmap" --parent "Engineering" --dry-run
td project reorder "Roadmap" --before "Marketing"
td project reorder "Roadmap" --after "Marketing"
td project reorder "Roadmap" --position 0
td project reorder "Roadmap" --position 2 --json
td project reorder "Roadmap" --before "Marketing" --dry-run
td project archive "Roadmap"
td project unarchive "Roadmap"
td project move "Roadmap" --to-workspace "Acme" --folder "Engineering" --visibility team --yes
td project join id:abc123
td project share "Roadmap" alice@example.com
td project share --project "Roadmap" alice@example.com
td project share "Roadmap" alice@example.com --message "Join the planning"
td project share "Roadmap" alice@example.com --json
td project share "Roadmap" alice@example.com --dry-run
td project share "Team Plan" bob@example.com --role guest --auto-invite
td project delete "Roadmap" --yes
td project progress "Roadmap"
td project health "Roadmap"
td project health-context "Roadmap"
td project activity-stats "Roadmap" --weeks 4 --include-weekly
td project analyze-health "Roadmap"
td project archived-count --workspace "Acme"
td project permissions
td workspace list
td workspace view "Acme"
td workspace projects "Acme"
td workspace users "Acme" --role ADMIN,MEMBER
td workspace insights "Acme" --project-ids "id1,id2"
td workspace create --name "Acme"
td workspace update "Acme" --description "Acme Inc." --dry-run # admin-only
td workspace delete "Old WS" --yes # admin-only
td workspace user-tasks "Acme" --user alice@example.com
td workspace activity "Acme" --json
td workspace use "Acme" # persist a default; omitted refs on other workspace commands fall back to it
td workspace use --clear # forget the stored default
td folder list "Acme"
td folder view "Engineering"
td folder create "Acme" --name "Engineering"
td folder update "Engineering" --name "Platform" --workspace "Acme"
td folder delete "Engineering" --workspace "Acme" --yes--include-childrenproject viewchildCountchildrenhasMoreChildrenchildrenError--jsonParent:td label list
td label list --search "bug"
td label view "urgent"
td label create --name "urgent" --color red
td label update "urgent" --color orange
td label delete "urgent" --yes
td label browse "urgent"
td label rename-shared "oldname" --name "newname"
td label remove-shared "oldname" --yes
td filter list
td filter view "Urgent work"
td filter view "Urgent work" --sort priority --sort-order desc # override the view's sorting
td filter view "Urgent work" --sort none # keep the raw API order
td filter create --name "Urgent work" --query "p1 & #Work" --description "Everything blocking the release"
td filter update "Urgent work" --query "p1 & #Work & today"
td filter update "Urgent work" --description "Updated scope" # description-only update
td filter update "Urgent work" --no-description # clear the description
td filter delete "Urgent work" --yes
td filter browse "Urgent work"
td section list "Roadmap"
td section list --search "Planning"
td section list --search "Planning" --project "Roadmap"
td section create --project "Roadmap" --name "In Progress"
td section create --project "Roadmap" --name "QA" --description "Bugs to verify"
td section create --project "Roadmap" --name "Imported" --stdin # read the description from stdin
td section update id:123 --name "Done"
td section update id:123 --description "Sprint backlog" # description-only update
echo "" | td section update id:123 --stdin # empty stdin clears the description
td section reorder "Review" --project "Roadmap" --before "Done"
td section reorder "Review" --project "Roadmap" --after "In Progress"
td section reorder --section "Review" --project "Roadmap" --position 0 --dry-run
td section reorder "Review" --project "Roadmap" --position 2 --json
td section archive id:123
td section unarchive id:123
td section delete id:123 --yes
td section browse id:123td filter view--limit--json{ sections: [{ query, results, nextCursor }] }--ndjson--all--cursortd filter view--sortdefaultprioritydatedeadlinedate-addednameprojectassigneeworkspacenone--sort-order asc|descdefaultnone--alltd label listtd label viewtd label rename-sharedtd label remove-sharedtd comment list "Plan sprint"
td comment list "Roadmap" --project
td comment add "Plan sprint" --content "See attached" --file ./report.pdf
td comment add "Plan sprint" --content "See attached" --file ./report.pdf --file-name "Quarterly report.pdf"
td comment add "Plan sprint" --content "@Ana could you review?" --notify "Ana"
td comment add "Plan sprint" --content "Note to self" --no-notify
td comment update id:123 --content "Updated text"
td comment delete id:123 --yes
td comment browse id:123
td attachment view "https://files.todoist.com/..."
td notification list --unread
td notification view id:123
td notification accept id:123
td notification reject id:123
td notification read --all --yes
td reminder list "Plan sprint"
td reminder list --type time
td reminder add "Plan sprint" --before 30m
td reminder add "Plan sprint" --at "2026-06-01 09:00" --urgent # iOS full-screen alarm
td reminder update id:123 --before 1h
td reminder update id:123 --no-urgent # toggle urgency without changing time
td reminder delete id:123 --yes
td reminder get id:123
td reminder location add "Plan sprint" --name "Office" --lat 40.7128 --long -74.0060 --trigger on_enter --radius 100 # radius in meters
td reminder location update id:456 --radius 200 # radius in meters
td reminder location delete id:456 --yes
td reminder location get id:456td attachment view--jsoncurlReadReadcomment add--notify--notify--no-notifytd comment viewHinttd attachment view--jsontd hc
td hc --help
td hc locale --set-default pt-br
td hc search "filters" --ndjson # one article per line for scripts (--json also supported)
td hc view https://www.todoist.com/help/articles/introduction-to-filters-V98wIHtd hctd hc --helptd hc locale --set-default <locale>~/.config/todoist-cli/config.jsonhc.defaultLocale--localetd hc viewid:Nget.todoist.helpwww.todoist.com/help/articles/...td template export-file "Roadmap" --output template.csv
td template export-url "Roadmap"
td template create --name "New Project" --file template.csv --workspace "Acme"
td template create --name "New Project" --file template.csv --file-name "Q2 plan.csv"
td template import-file "Roadmap" --file template.csv
td template import-file "Roadmap" --file template.csv --file-name "Q2 plan.csv"
td template import-id "Roadmap" --template-id product-launch --locale frtd backup list
td backup download "2024-01-15_12:00" --output-file backup.zipbackupbackups:readtd auth login --additional-scopes=backupsAUTH_ERRORtd auth login --read-only --additional-scopes=backupstd apps list
td apps list --json
td apps view "Todoist for VS Code"
td apps view id:9909
td apps view 9909
td apps view id:9909 --json
td apps view id:9909 --include-secrets
td apps view id:9909 --json --include-secrets
td apps update id:9909 --name "My Renamed App"
td apps update id:9909 --description "Does a useful thing"
td apps update id:9909 --add-oauth-redirect https://example.com/callback
td apps update id:9909 --remove-oauth-redirect https://example.com/callback --yes
td apps update id:9909 --set-webhook-url https://example.com/webhook
td apps update id:9909 --name "My App" --description "New blurb" --set-webhook-url https://example.com/webhook
td apps delete id:9909 --yesappsappsdev:app_consoletd auth login --additional-scopes=app-managementMISSING_SCOPEtd apps list(id:N)--accessibleClient ID: <client_id>--json--ndjsontd apps view <ref>id:NgetAppWebhookUI extensions:<name> (<type>[: <sub-type>])context-menucomposersettingscontext-menuprojecttaskcomposertaskcommentInstall URL:https://app.todoist.com/app/install/<distribution_token>--json--ndjsonuiExtensionsdistributionTokeninstallUrlnull--include-secretsclient_secrettd apps updateupdateAppupdateAppWebhookNO_CHANGES--add-oauth-redirect--remove-oauth-redirectCONFLICTING_OPTIONS--name <name>displayName--description <description>--description ""--nameINVALID_OPTIONS--add-oauth-redirect <url>--remove-oauth-redirect <url>--yestd task deletehttps://<host>http(s)://localhost[:port][/path]http(s)://127.0.0.1[:port][/path]myapp://callbackjavascriptdatafilevbscriptftpALREADY_EXISTS--yes--jsonCONFIRMATION_REQUIRED--set-webhook-url <url>getAppWebhookNO_WEBHOOKhttps://<host>--dry-run--json{ "app": <app>, "webhook": <webhook> }td apps delete <ref>id:N--yes--yesWould delete app: …td folder deletetd workspace delete--dry-runclient_idInstall URL--json--ndjsondistributionToken(hidden — pass --include-secrets to reveal)--json--ndjsonclientSecretverificationTokentestToken--include-secrets(not created)(not configured)nulltd billing # subscription (default subcommand)
td billing subscription --json
td billing plan
td billing prices
td billing pricing --formattedbillingbillingtd auth login --additional-scopes=billingbilling:read_write--read-onlybilling:readMISSING_SCOPE--json--ndjsontd billing subscriptiontd billing plantd billing pricestd billing pricing--formattedtd stats
td stats goals --daily 10 --weekly 50
td stats vacation --on
td settings view
td settings update --timezone "America/New_York" --time-format 24 --date-format intl
td settings themes
td config view
td config view --json
td config view --show-token
td completion install zsh
td completion install pwsh
td completion uninstall
td view https://app.todoist.com/app/task/buy-milk-abc123
td view https://app.todoist.com/app/today
td doctor
td doctor --offline
td doctor --json
td update --check
td update --check --json
td update --channel
td update switch --stable
td update switch --pre-release --json
td changelog --count 10