Sandbox
@Doist/todoist-cli

Todoist CLI with agent skills

Todoist CLI gives you a terminal way to add, list, and view Todoist tasks, projects, and inbox items. The same repo also packages agent skills that can be installed into supported agents so they can work with Todoist in a shared format. The CLI handles auth, shell completion, accessible output, and skill syncing.

308 stars18 forksTypeScriptUpdated 6d ago
Who it's for

Builders who want Todoist commands in the terminal and reusable skills in their coding agent.

What it delivers

You can manage Todoist from the command line and keep your agent aligned with the same Todoist workflow.

What it does

Terminal Todoist commands

Commands like `td add`, `td today`, `td inbox`, `td task list`, `td project list`, and `td task view` let you work with Todoist from the shell.

Agent skill installation

`td skill install` can install skills for claude-code, codex, copilot, cursor, gemini, pi, and universal agents.

Auth and token storage

`td auth login`, `td auth token`, `td auth status`, and `td auth logout` manage Todoist access with secure storage or plaintext when requested.

Accessible output

`--accessible` and `TD_ACCESSIBLE=1` add text labels for screen readers and color-blind friendly output.

Shell completion

`td completion install` and `td completion uninstall` add or remove completion support for bash, zsh, fish, and PowerShell.

Skill sync scripts

Scripts keep installed skills in sync with the CLI release and check that the packaged skills match the source files.

How to get it

  1. 1Run
    npm install -g @doist/todoist-cli
  2. 2Install skills for your coding agent
    td skill install claude-code
    td skill install codex
    td skill install copilot
    td skill install cursor
    td skill install gemini
    td skill install pi
    td skill install universal
  3. 3The gemini agent installs to ~/.gemini/config/skills/todoist-cli/SKILL.md, the global…
    td skill list
    td skill uninstall <agent>
  4. 4Run
    git clone https://github.com/Doist/todoist-cli.git
    cd todoist-cli
    npm install
    npm run build
    npm link
  5. 5Run
    td auth login
  6. 6For a read-only OAuth token (scope data:read), run
    td auth login --read-only

README

Todoist CLI

Todoist CLI

A command-line interface for Todoist.

Installation

npm install -g @doist/todoist-cli

Agent Skills

Install skills for your coding agent:

td skill install claude-code
td skill install codex
td skill install copilot
td skill install cursor
td skill install gemini
td skill install pi
td skill install universal

Skills are installed to ~/<agent-dir>/skills/todoist-cli/SKILL.md (e.g. ~/.claude/ for claude-code, ~/.agents/ for universal, etc.). When updating the CLI, installed skills are updated automatically. The universal agent is compatible with Amp, OpenCode, and other agents that read from ~/.agents/.

The gemini agent installs to ~/.gemini/config/skills/todoist-cli/SKILL.md, the global location read by Antigravity, Antigravity CLI and Antigravity IDE alike. For project-scoped Antigravity skills use td skill install universal --local, which writes to .agents/skills/ — the workspace directory Antigravity reads.

td skill list
td skill uninstall <agent>

Uninstallation

First, remove any installed agent skills:

td skill uninstall <agent>

Then uninstall the CLI:

npm uninstall -g @doist/todoist-cli

Local Setup

git clone https://github.com/Doist/todoist-cli.git
cd todoist-cli
npm install
npm run build
npm link

This makes the td command available globally.

Setup

td auth login

This opens your browser to authenticate with Todoist. Once approved, the token is stored in your OS credential manager:

  • macOS: Keychain
  • Windows: Credential Manager
  • Linux: Secret Service/libsecret

Secure storage is required by default. If it is unavailable, login fails without writing a credential to disk. To explicitly use plaintext config-file storage, pass --credential-store=plaintext; the CLI always prints a warning when it writes a credential this way. Existing plaintext tokens are migrated automatically the next time the CLI reads them successfully from the config file.

For a read-only OAuth token (scope data:read), run:

td auth login --read-only

To explicitly store a credential in plaintext instead of the OS credential manager:

td auth login --credential-store=plaintext

In read-only mode, commands that change Todoist data (create/update/delete/complete/move/archive, etc.) are blocked by the CLI.

Some commands need opt-in OAuth scopes, requested via --additional-scopes=<list> (comma-separated):

td auth login --additional-scopes=app-management   # td apps ...
td auth login --additional-scopes=backups           # td backup ...
td auth login --additional-scopes=billing           # td billing ...

Run td auth login --help for the full list. When a command fails for lack of a scope, the error suggests a re-login command that preserves whichever flags were originally used.

Alternative methods

Manual token: Get your API token from Todoist Settings > Integrations > Developer:

td auth token "your-token"

Manual tokens use the system credential manager by default too. To explicitly store one in plaintext, add --credential-store=plaintext; the CLI prints a warning after the write.

Environment variable:

export TODOIST_API_TOKEN="your-token"

TODOIST_API_TOKEN always takes priority over the stored token.

Note: externally provided tokens (TODOIST_API_TOKEN or td auth token) are treated as unknown scope and assumed write-capable. The CLI cannot currently auto-detect OAuth scope for these tokens.

Auth commands

td auth status   # check if authenticated + mode (read-only/read-write/unknown)
td auth logout   # remove saved token and auth metadata

To switch back to normal write access, re-run:

td auth login

Usage

td add "Buy milk tomorrow #Shopping"   # quick add with natural language
td today                               # tasks due today + overdue
td inbox                               # inbox tasks
td task list                           # all tasks
td task list --project "Work"          # tasks in project
td task list --project "Work" --ids-only # one task ID per line
td project list                        # all projects
td task view https://app.todoist.com/app/task/buy-milk-8Jx4mVr72kPn3QwB  # paste a URL

Run td --help or td <command> --help for more options.

Supported list commands accept --ids-only when each result has a stable ID. It prints one ID per line and no human-readable empty-state text. When more pages exist, the pagination notice goes to stderr so stdout remains safe for pipes. --ids-only, --json, and --ndjson are mutually exclusive.

Accessibility

For users who rely on screen readers or cannot distinguish colors, use the --accessible flag or set TD_ACCESSIBLE=1 to add text labels to color-coded output:

td today --accessible
# or
export TD_ACCESSIBLE=1
td today

When active, due dates get a due: prefix, deadlines get a deadline: prefix, durations get a ~ prefix, and favorite items get a suffix. Default output without the flag is unchanged.

Shell Completions

Tab completion is available for bash, zsh, fish, and PowerShell:

td completion install        # prompts for shell
td completion install bash   # or: zsh, fish, pwsh

Restart your shell or source your config file to activate. To remove:

td completion uninstall

Development

npm install
npm run build       # compile
npm run dev         # watch mode
npm run type-check  # type check
npm run fix         # auto-fix lint + format
npm test            # run tests

Files in the repo

Repository payload30 top-level entries
  • .agents
  • .claude
  • .github
  • .vscode
  • docs
  • icons
  • scripts
  • skills
  • src
  • .gitignore
  • .npmrc
  • .nvmrc
  • .oxfmtrc.json
  • .oxlintrc.json
  • .prettierignore
  • AGENTS.md
  • CHANGELOG.md
  • CLAUDE.md
  • CODEBASE.md
  • CONTRIBUTING.md
  • lefthook.yml
  • LICENSE
  • package-lock.json
  • package.json
  • README.md
  • release.config.js
  • renovate.json
  • tsconfig.build.json
  • tsconfig.json
  • vitest.config.ts

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
herdrdev/
herdr

the runtime your coding agents live on

37k
googleworkspace/
cli

Google Workspace CLI — one command-line tool for Drive, Gmail, Calendar, Sheets, Docs, Chat, Admin, and more. Dynamically built from Google Discovery Service. Includes AI agent skills.

31k
manaflow-ai/
cmux

Open source Ghostty-based macOS terminal with vertical tabs and notifications for AI coding agents. Built for multitasking, organization, and programmability.

27k
microsoft/
skill-recorder

Desktop app that records your on-screen work session and uses the GitHub Copilot CLI to reconstruct it as an intent + ordered steps, then builds a reusable Skill or Automation for Microsoft Scout, Microsoft Copilot Cowork, or Copilot Studio.

3.9k