[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-1b3b81cc-b378-4615-965f-87ccecc6566a":3,"$fG0WtpzYlXHepNVGeVQanUUT9UPESzBb0z7jAA9TYB2E":43},{"id":4,"title":5,"description":6,"categoryId":7,"moduleId":8,"tags":9,"prompt":10,"icon":11,"source":12,"sourceUrl":13,"authorId":14,"authorName":15,"isPublic":16,"stars":17,"runs":18,"createdAt":19,"updatedAt":19,"module":20,"category":27,"packages":34},"1b3b81cc-b378-4615-965f-87ccecc6566a","todoist-automation","自动化Todoist任务管理、项目、部分、筛选和批量操作通过Rube MCP（Composio）。始终首先搜索当前架构的工具。","cat_prod_automation","mod_productivity","sickn33,productivity","---\nname: todoist-automation\ndescription: \"Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio). Always search tools first for current schemas.\"\nrisk: critical\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Todoist Automation via Rube MCP\n\nAutomate Todoist operations including task creation and management, project organization, section management, filtering, and bulk task workflows through Composio's Todoist toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Todoist connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n3. If connection is not ACTIVE, follow the returned auth link to complete Todoist OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Tasks\n\n**When to use**: User wants to create, update, complete, reopen, or delete tasks\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List projects to find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List sections within a project for task placement [Optional]\n3. `TODOIST_CREATE_TASK` - Create a single task with content, due date, priority, labels [Required]\n4. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in one request [Alternative]\n5. `TODOIST_UPDATE_TASK` - Modify task properties (content, due date, priority, labels) [Optional]\n6. `TODOIST_CLOSE_TASK` - Mark a task as completed [Optional]\n7. `TODOIST_REOPEN_TASK` - Restore a previously completed task [Optional]\n8. `TODOIST_DELETE_TASK` - Permanently remove a task [Optional]\n\n**Key parameters for CREATE_TASK**:\n- `content`: Task title (supports markdown and hyperlinks)\n- `description`: Additional notes (do NOT put due dates here)\n- `project_id`: Alphanumeric project ID; omit to add to Inbox\n- `section_id`: Alphanumeric section ID for placement within a project\n- `parent_id`: Task ID for creating subtasks\n- `priority`: 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgent\n- `due_string`: Natural language date like `\"tomorrow at 3pm\"`, `\"every Friday at 9am\"`\n- `due_date`: Specific date `YYYY-MM-DD` format\n- `due_datetime`: Specific date+time in RFC3339 `YYYY-MM-DDTHH:mm:ssZ`\n- `labels`: Array of label name strings\n- `duration` + `duration_unit`: Task duration (e.g., `30` + `\"minute\"`)\n\n**Pitfalls**:\n- Only one `due_*` field can be used at a time (except `due_lang` which can accompany any)\n- Do NOT embed due dates in `content` or `description` -- use `due_string` field\n- Do NOT embed duration phrases like \"for 30 minutes\" in `due_string` -- use `duration` + `duration_unit`\n- `priority` in API: 1=normal, 4=urgent (opposite of Todoist UI display where p1=urgent)\n- Task IDs can be numeric or alphanumeric; use the format returned by the API\n- `CLOSE_TASK` marks complete; `DELETE_TASK` permanently removes -- they are different operations\n\n### 2. Manage Projects\n\n**When to use**: User wants to list, create, update, or inspect projects\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List all projects with metadata [Required]\n2. `TODOIST_GET_PROJECT` - Get details for a specific project by ID [Optional]\n3. `TODOIST_CREATE_PROJECT` - Create a new project with name, color, view style [Optional]\n4. `TODOIST_UPDATE_PROJECT` - Modify project properties [Optional]\n\n**Key parameters**:\n- `name`: Project name (required for creation)\n- `color`: Todoist palette color (e.g., `\"blue\"`, `\"red\"`, `\"green\"`, `\"charcoal\"`)\n- `view_style`: `\"list\"` or `\"board\"` layout\n- `parent_id`: Parent project ID for creating sub-projects\n- `is_favorite` \u002F `favorite`: Boolean to mark as favorite\n- `project_id`: Required for update and get operations\n\n**Pitfalls**:\n- Projects with similar names can lead to selecting the wrong project_id; always verify\n- `CREATE_PROJECT` uses `favorite` while `UPDATE_PROJECT` uses `is_favorite` -- different field names\n- Use the project `id` returned by API, not the `v2_id`, for downstream operations\n- Alphanumeric\u002FURL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available\n\n### 3. Manage Sections\n\n**When to use**: User wants to organize tasks within projects using sections\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List existing sections to avoid duplicates [Prerequisite]\n3. `TODOIST_CREATE_SECTION` - Create a new section in a project [Required]\n4. `TODOIST_UPDATE_SECTION` - Rename an existing section [Optional]\n5. `TODOIST_DELETE_SECTION` - Permanently remove a section [Optional]\n\n**Key parameters**:\n- `project_id`: Required -- the project to create the section in\n- `name`: Section name (required for creation)\n- `order`: Integer position within the project (lower values appear first)\n- `section_id`: Required for update and delete operations\n\n**Pitfalls**:\n- `CREATE_SECTION` requires `project_id` and `name` -- omitting project_id causes a 400 error\n- HTTP 400 \"project_id is invalid\" can occur if alphanumeric ID is used; prefer numeric ID\n- Deleting a section may move or regroup its tasks in non-obvious ways\n- Response may include both `id` and `v2_id`; store and reuse the correct identifier consistently\n- Always check existing sections first to avoid creating duplicates\n\n### 4. Search and Filter Tasks\n\n**When to use**: User wants to find tasks by criteria, view today's tasks, or get completed task history\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_TASKS` - Fetch incomplete tasks with optional filter query [Required]\n2. `TODOIST_GET_TASK` - Get full details of a specific task by ID [Optional]\n3. `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` - Retrieve completed tasks within a date range [Optional]\n4. `TODOIST_LIST_FILTERS` - List user's custom saved filters [Optional]\n\n**Key parameters for GET_ALL_TASKS**:\n- `filter`: Todoist filter syntax string\n  - Keywords: `today`, `tomorrow`, `overdue`, `no date`, `recurring`, `subtask`\n  - Priority: `p1` (urgent), `p2`, `p3`, `p4` (normal)\n  - Projects: `#ProjectName` (must exist in account)\n  - Labels: `@LabelName` (must exist in account)\n  - Date ranges: `7 days`, `-7 days`, `due before: YYYY-MM-DD`, `due after: YYYY-MM-DD`\n  - Search: `search: keyword` for content text search\n  - Operators: `&` (AND), `|` (OR), `!` (NOT)\n- `ids`: List of specific task IDs to retrieve\n\n**Key parameters for GET_COMPLETED_TASKS_BY_COMPLETION_DATE**:\n- `since`: Start date in RFC3339 format (e.g., `2024-01-01T00:00:00Z`)\n- `until`: End date in RFC3339 format\n- `project_id`, `section_id`, `parent_id`: Optional filters\n- `cursor`: Pagination cursor from previous response\n- `limit`: Max results per page (default 50)\n\n**Pitfalls**:\n- `GET_ALL_TASKS` returns ONLY incomplete tasks; use `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` for completed ones\n- Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors\n- Do NOT use `completed`, `!completed`, or `completed after` in GET_ALL_TASKS filter -- causes 400 error\n- `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` limits date range to approximately 3 months between `since` and `until`\n- Search uses `search: keyword` syntax within the filter, not a separate parameter\n\n### 5. Bulk Task Creation\n\n**When to use**: User wants to scaffold a project with multiple tasks at once\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - Find section IDs for task placement [Optional]\n3. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in a single request [Required]\n\n**Key parameters**:\n- `tasks`: Array of task objects, each requiring at minimum `content`\n- Each task object supports: `content`, `description`, `project_id`, `section_id`, `parent_id`, `priority`, `labels`, `due` (object with `string`, `date`, or `datetime`), `duration`, `order`\n\n**Pitfalls**:\n- Each task in the array must have at least the `content` field\n- The `due` field in bulk create is an object with nested fields (`string`, `date`, `datetime`, `lang`) -- different structure from CREATE_TASK's flat fields\n- All tasks can target different projects\u002Fsections within the same batch\n\n## Common Patterns\n\n### ID Resolution\nAlways resolve human-readable names to IDs before operations:\n- **Project name -> Project ID**: `TODOIST_GET_ALL_PROJECTS`, match by `name` field\n- **Section name -> Section ID**: `TODOIST_GET_ALL_SECTIONS` with `project_id`\n- **Task content -> Task ID**: `TODOIST_GET_ALL_TASKS` with `filter` or `search: keyword`\n\n### Pagination\n- `TODOIST_GET_ALL_TASKS`: Returns all matching incomplete tasks (no pagination needed)\n- `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE`: Uses cursor-based pagination; follow `cursor` from response until no more results\n- `TODOIST_GET_ALL_PROJECTS` and `TODOIST_GET_ALL_SECTIONS`: Return all results (no pagination)\n\n### Due Date Handling\n- Natural language: Use `due_string` (e.g., `\"tomorrow at 3pm\"`, `\"every Monday\"`)\n- Specific date: Use `due_date` in `YYYY-MM-DD` format\n- Specific datetime: Use `due_datetime` in RFC3339 format (`YYYY-MM-DDTHH:mm:ssZ`)\n- Only use ONE due field at a time (except `due_lang` which can accompany any)\n- Recurring tasks: Use natural language in `due_string` (e.g., `\"every Friday at 9am\"`)\n\n## Known Pitfalls\n\n### ID Formats\n- Task IDs can be numeric (`\"2995104339\"`) or alphanumeric (`\"6X4Vw2Hfmg73Q2XR\"`)\n- Project IDs similarly vary; prefer the format returned by the API\n- Some tools accept only numeric IDs; if 400 error occurs, try fetching the numeric `id` via GET_PROJECT\n- Response objects may contain both `id` and `v2_id`; use `id` for API operations\n\n### Priority Inversion\n- API priority: 1 = normal, 4 = urgent\n- Todoist UI display: p1 = urgent, p4 = normal\n- This is inverted; always clarify with the user which convention they mean\n\n### Filter Syntax\n- Filter terms must reference real entities in the user's account\n- `#NonExistentProject` or `@NonExistentLabel` will cause HTTP 400\n- Use `search: keyword` for text search, not bare keywords\n- Combine with `&` (AND), `|` (OR), `!` (NOT)\n- `completed` filters do NOT work on GET_ALL_TASKS endpoint\n\n### Rate Limits\n- Todoist API has rate limits; batch operations should use `BULK_CREATE_TASKS` where possible\n- Space out rapid sequential requests to avoid throttling\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List all projects | `TODOIST_GET_ALL_PROJECTS` | (none) |\n| Get project | `TODOIST_GET_PROJECT` | `project_id` |\n| Create project | `TODOIST_CREATE_PROJECT` | `name`, `color`, `view_style` |\n| Update project | `TODOIST_UPDATE_PROJECT` | `project_id`, `name`, `color` |\n| List sections | `TODOIST_GET_ALL_SECTIONS` | `project_id` |\n| Create section | `TODOIST_CREATE_SECTION` | `project_id`, `name`, `order` |\n| Update section | `TODOIST_UPDATE_SECTION` | `section_id`, `name` |\n| Delete section | `TODOIST_DELETE_SECTION` | `section_id` |\n| Get all tasks | `TODOIST_GET_ALL_TASKS` | `filter`, `ids` |\n| Get task | `TODOIST_GET_TASK` | `task_id` |\n| Create task | `TODOIST_CREATE_TASK` | `content`, `project_id`, `due_string`, `priority` |\n| Bulk create tasks | `TODOIST_BULK_CREATE_TASKS` | `tasks` (array) |\n| Update task | `TODOIST_UPDATE_TASK` | `task_id`, `content`, `due_string` |\n| Complete task | `TODOIST_CLOSE_TASK` | `task_id` |\n| Reopen task | `TODOIST_REOPEN_TASK` | `task_id` |\n| Delete task | `TODOIST_DELETE_TASK` | `task_id` |\n| Completed tasks | `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` | `since`, `until` |\n| List filters | `TODOIST_LIST_FILTERS` | `sync_token` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.\n","","imported","https:\u002F\u002Fgithub.com\u002Fsickn33\u002Fantigravity-awesome-skills","user_system_seed","SkillOPIC",true,201,1496,"2026-05-16 13:44:31",{"id":8,"name":21,"slug":22,"icon":23,"description":24,"sort":25,"createdAt":26},"效率工具","productivity","mdi-lightning-bolt-outline","文档处理、数据分析、自动化工作流",4,"2026-05-16 12:53:40",{"id":7,"name":28,"slug":29,"icon":30,"description":31,"moduleId":8,"sort":32,"skillCount":33,"createdAt":26},"自动化","automation","mdi-robot-outline","工作流自动化、批处理",3,101,[35],{"id":36,"skillId":4,"version":37,"fileName":38,"fileSize":39,"filePath":40,"fileHash":41,"manifest":42,"createdAt":19},"f8c2842c-17cb-459f-b675-01dca8d1f11c","1.0.0","todoist-automation.zip",4570,"uploads\u002Fskills\u002F1b3b81cc-b378-4615-965f-87ccecc6566a\u002Ftodoist-automation.zip","4f9663ca6378847bdd970d289f00ec9931a0542ddb8b87c20bc48171a136bee9","[{\"path\":\"SKILL.md\",\"isDirectory\":false,\"size\":12386}]",{"code":44,"message":45,"data":46},200,"success",{"items":47,"stats":48,"page":51},[],{"averageRating":49,"totalRatings":49,"ratingCounts":50},0,[49,49,49,49,49],{"limit":52,"offset":49,"hasMore":53,"nextOffset":52,"ratedOnly":16},15,false]