From todoist-gtd
MANDATORY gate BEFORE any Todoist operation — orchestrates GTD semantics the CLI alone can't provide (outcomes are sections not tasks, workspace vs personal filtering, horizon alignment). Invoke FIRST for weekly review, outcome coaching, and pattern detection. Triggers on 'clean up outcomes', 'team priorities', 'is this a good outcome', 'weekly review', 'am I overcommitting', 'check my patterns', 'should I take this on', 'scope creep', 'freedom score'. (user)
npx claudepluginhub spm1001/batterie-de-savoir --plugin todoist-gtdThis skill is limited to using the following tools:
**Be proactive.** If todoist isn't working, fix it — don't list commands for the user to run.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Be proactive. If todoist isn't working, fix it — don't list commands for the user to run.
Find and install from the plugin cache:
TODOIST_DIR=$(find ~/.claude/plugins/cache -path "*/todoist-gtd/*/pyproject.toml" -exec dirname {} \; 2>/dev/null | head -1)
uv tool install "$TODOIST_DIR"
export PATH="$HOME/.local/bin:$PATH"
If CLAUDE_PLUGIN_ROOT is set, use that instead: uv tool install "${CLAUDE_PLUGIN_ROOT}".
todoist doctor
If doctor reports no token, run todoist auth for setup instructions, then todoist auth --token TOKEN to store it (Keychain on Mac, plugin data dir on Linux). No manual env vars or shell profile edits needed.
NEVER echo the API token back to the user. The token is a secret.
MCP-free Todoist integration using the official Python SDK (v4, httpx-based). Adds semantic understanding of GTD structure and outcome quality coaching on top of the CLI's data access.
Core insight: The CLI provides data. This skill provides meaning.
IMPORTANT: Invoke this skill BEFORE making Todoist queries. The CLI doesn't know the user's GTD structure — this skill does. Without it, you'll query wrong fields (tasks vs sections), miss context (outcomes are sections, not tasks), and produce confusing results.
Use for:
DO NOT assume project names or team member details. Every user's Todoist is different. Discover dynamically:
# Who am I?
todoist whoami
# What projects exist?
todoist projects
# What's the structure of a specific project?
todoist sections --project "Project Name"
# Who's on a shared project?
todoist collaborators --project-id "<id>"
Regardless of how each user names their projects, look for this structure:
| GTD Concept | Where in Todoist | How to Find |
|---|---|---|
| Desired Outcomes | Sections in an outcomes project | Look for projects named like "Desired Outcomes", "Goals", "OKRs" |
| Next Actions | Tasks under outcome sections, or in context projects | Look for projects named with @ prefix or action-oriented names |
| Waiting For | Tasks in a waiting/follow-up project | Look for "@Wait", "Waiting For", or similar |
| Someday/Maybe | Tasks in a someday/backlog project | Look for "@Someday", "Someday/Maybe", or similar |
| Areas of Focus | Sections in an areas project | Look for "Areas of Focus", "Responsibilities", or similar |
| Reference | Projects for reference material | Varies by user |
This is the most critical structural insight:
Desired Outcomes Q2 (project)
+-- Built team capacity for... (section = outcome)
| +-- [tasks under this section]
+-- Established new measurement... (section = outcome)
+-- Secured commitment to... (section = outcome)
Why it matters: Outcomes are SECTIONS. Query with sections, not tasks.
The CLI auto-detects workspace (team) projects and filters accordingly:
| Project Type | Signal | Default Behavior |
|---|---|---|
| Personal | No workspace_id | Shows all tasks (no filtering) |
| Personal with collaborators | Collaborators but no workspace_id | Shows all tasks (they're all yours) |
| Workspace (team) | Has workspace_id | Auto-filters to your tasks only |
Flags for workspace projects:
--unassigned: shows unassigned tasks (triage mode)--team: shows all team members' tasks--assignee "Name": shows specific person's tasks# Your tasks on a shared project (default)
todoist tasks --project "Shared Project"
# Triage unassigned tasks
todoist tasks --project "Shared Project" --unassigned
# Everyone's tasks
todoist tasks --project "Shared Project" --team
# Specific person
todoist tasks --project "Shared Project" --assignee "Full Name"
GTD contexts (like @Wait, @Work, @Someday) are PROJECTS, not labels. Query with --project, not --label.
todoist tasks --project "@Wait" # Correct
todoist tasks --label "waiting-for" # Wrong (unless user uses labels)
Discover the user's context projects by listing all projects and looking for the @ prefix pattern or similar naming convention.
GTD organises commitments across six horizons. Each horizon informs the ones below it:
| Horizon | Focus | Question | Review Cadence |
|---|---|---|---|
| H5: Purpose | Why do I exist in this role? | "What's my unique contribution?" | Annual |
| H4: Vision | What does success look like in 3-5 years? | "Where am I heading?" | Quarterly |
| H3: Goals | What do I want to achieve in 1-2 years? | "What milestones matter?" | Quarterly |
| H2: Areas of Focus | What are my ongoing responsibilities? | "Am I covering all my areas?" | Monthly |
| H1: Projects/Outcomes | What multi-step results am I committed to? | "What's on my plate?" | Weekly |
| Ground: Actions | What's the next physical action? | "What do I do right now?" | Daily |
In Todoist mapping:
When creating or coaching on outcomes, use this framework:
Use this when: Creating new outcomes, reviewing stale outcomes, or when someone is stuck on "where do I start?"
Tier 2 (Outcomes) ask: "What do I want to have achieved?" Tier 3 (Projects/Actions) ask: "What do I need to do?"
Quick test:
The pattern: Past-tense verb, describes what's different when done, includes the "so what".
| Activity (Tier 3) | Achievement (Tier 2) |
|---|---|
| Write the docs | New team members can onboard within a day |
| Build rate limiter | API stays responsive under peak load |
| Attend conference | Established voice in industry discussions |
| Complete audit | Audit trail catches anomalies before users notice |
For the full GTD methodology (5 stages, clarify decision tree, setup guidance, review cadences): See references/GTD_METHODOLOGY.md
For detailed coaching patterns and examples: See references/COACHING.md
"Project" has 3 meanings:
| Context | Meaning | Example |
|---|---|---|
| Todoist | Container for tasks | An outcomes project |
| GTD Tier 3 | Multi-step outcome | "Launch Panel+ v2" |
| Business | Work initiative | "The migration project" |
For full terminology guide: See references/TERMINOLOGY.md
All commands return JSON. Key patterns:
todoist sections --project "Outcomes Project" # Outcomes (sections!)
todoist tasks --section-id "<outcome-id>" # Tasks under an outcome
todoist tasks --project "@Wait" --older-than 30d # Stale waiting-fors
todoist filter "assigned to: me" # Your tasks across projects
todoist tasks --project "@Work" --include-section-name # Tasks with section context
Critical: tasks and task return complete objects with .comments[] inline. filter returns tasks only (no comments — filters can span projects).
For full query patterns, data model, and API limitations: see references/CLI_REFERENCE.md
BEFORE creating, use the Natural Planning Model:
Outcome goes in: A section in the user's outcomes project Tasks go under: That outcome section
# DON'T create outcome as a task
todoist add "Build team documentation" # WRONG
# DO create as section in the outcomes project
todoist add-section "Built team capacity through documentation" \
--project "Desired Outcomes Q2" # CORRECT (use actual project name)
Next actions must be concrete, physical, and start with a verb describing what you'd actually do.
Bad (vague, outcome-ish):
Good (concrete, physical):
The test: "What would I actually do when I sit down to do this?"
When delegating an outcome:
ALWAYS complete, NEVER delete (unless truly erroneous).
| Bad Practice | Why Wrong | Better |
|---|---|---|
| Creating outcome as task | Confuses structure | Use add-section |
| Tier 3 project as outcome | Inflates outcome count | Challenge: "Activity or achievement?" |
| Completing without reflection | Loses learning | Prompt for resolution notes |
| Joint ownership | No clear driver, item drifts | One owner per outcome |
| No next action on active outcome | Outcome stalls invisibly | Every active outcome needs at least one next action |
Three parts: Clarify, Check Lists, Calendar.
Three phases: Get Clear, Get Current, Get Creative.
For the full review checklists: See references/GTD_METHODOLOGY.md
For pattern detection and coaching: See references/PATTERNS.md
Surface these concerns when analysing data:
Overcommitment:
Strategic gaps:
Staleness:
Quality:
If the user has a Claude-specific inbox project:
todoist tasks --project "@Claude" (or whatever it's named).comments[] for contextSee references/PATTERNS.md for the full workflow.
| Query | CLI Command |
|---|---|
| All projects | todoist projects |
| Current user | todoist whoami |
| Outcomes | todoist sections --project "OUTCOMES_PROJECT" |
| Tasks under outcome | todoist tasks --section-id "<outcome-id>" |
| Tasks with section names | todoist tasks --project "X" --include-section-name |
| Person's work | todoist tasks --project "X" --assignee "Name" |
| Unassigned (triage) | todoist tasks --project "X" --unassigned |
| Stale waiting-fors | todoist tasks --project "@Wait" --older-than 30d |
| Today's tasks | todoist filter "today" |
| Operation | CLI Command |
|---|---|
| Create outcome | todoist add-section "name" --project "OUTCOMES_PROJECT" |
| Create task | todoist add "content" --project "PROJECT" --section "SECTION" |
| Complete task | todoist done "<task-id>" |
| Rename task | todoist update "<task-id>" --content "new name" |
| Move to project | todoist update "<task-id>" --project "PROJECT" |
| Move to section | todoist update "<task-id>" --section "SECTION" |
Note: Replace OUTCOMES_PROJECT, PROJECT, SECTION with the user's actual project/section names discovered via todoist projects and todoist sections.
The CLI is plumbing. This skill is meaning.