Install
openclaw skills install todokanManage tasks, boards, thoughts, and reviews in Todokan via MCP
openclaw skills install todokanTodokan is a kanban-style task manager. You can manage the user's tasks, boards, and projects through MCP tools.
TODOKAN_API_KEY, TODOKAN_MCP_URL (declared in skill metadata)Activate the Todokan skill when the user has one of the following intents:
| Intent | Example |
|---|---|
| Create / edit / delete a task | "Create a task: review PR" |
| Show boards or tasks | "Show me my tasks", "What's on the dev board?" |
| Change status | "Mark task X as done" |
| Save research results | "Save this as a task / document in Todokan" |
| Briefing / summary from tasks | "Give me a briefing of my open tasks" |
| Attach a document to a task | "Write a note on task X" |
| Search topics across boards | "What did I note about the investor meeting?" |
| Retrieve changes since last check | "What's new since this morning?" |
Do not activate when the user is just talking about tasks in general without referencing Todokan.
Follow this order to achieve consistent results:
1. list_habitats → Which workspaces exist?
2. list_boards → Which boards exist? (note the IDs)
3. list_tasks → Tasks on a board (with filters)
4. search_across_habitats → Full-text search across boards/habitats
5. get_events_since → Retrieve changes since a timestamp
6. list_board_labels → Available labels + usage counts
7. list_task_documents → Documents attached to a task
8. read_document → Content of a document
9. create_task / create_board / create_habitat
10. update_task / update_task_by_title
11. create_document / add_document_to_task
12. delete_task → Only after explicit confirmation
13. propose_task_variants → Generate 2-3 variants
14. confirm_task_fields → Review fields before creation
Golden rule: Never write blindly. Always call list_boards first to discover IDs — never guess UUIDs.
Before executing write actions, clarify the following:
create_tasklist_boards, let the user choose)normal if unclearupdate_taskdelete_taskcreate_documentSource: [URL or filename]
Created by: Agent on [date]
/mcp-worker): Read-only + comments (add_comment). No task/board CUD, no document creation./mcp): Full access. Still ask before destructive actions.list_tasks).## Briefing: [Board Name] — [Date]
**Open (todo):** X tasks
**In progress (doing):** Y tasks
**Completed (done):** Z tasks
### Urgent (high priority)
- [ ] [Task Title] — due [Date]
- [ ] [Task Title] — due [Date]
### In Progress
- [~] [Task Title] — since [Date]
### Next Steps
[1-2 sentences recommendation based on the data]
## Task Draft
| Field | Value |
|-------------|-------------------------------|
| Board | [Board Name] |
| Title | [Title, max 80 chars] |
| Description | [Description, max 500 chars] |
| Status | todo |
| Priority | [low / normal / high] |
| Due | [YYYY-MM-DD or —] |
| Labels | [label1, label2] |
Should I create this task?
## Document Draft
**Title:** [Title]
**Format:** markdown
**Linked to:** [Task Title] on [Board Name]
---
[Document content]
---
Should I create this document?
Habitat (workspace/project)
└── Board (kanban board, type: "task" or "thought")
└── Task (individual item with status, priority, labels, due date)
└── Document (attached notes/docs in markdown, text, or html)
task for actionable items, thought for ideas/notes.| Status | Meaning |
|---|---|
todo | Not started |
doing | In progress |
done | Completed |
| Priority | Meaning |
|---|---|
low | Low priority |
normal | Default priority |
high | High/urgent priority |
list_habitats — List all workspaceslist_boards — List all boards (returns id, name, version)list_tasks — List tasks with filters: boardId, status, label/labels, limit, cursorsearch_across_habitats — Full-text search over habitats/boards/tasks in one callget_events_since — Unified feed since timestamp (task events + comments + documents)list_board_labels — Get unique labels on a board with usage countslist_task_documents — Get documents attached to a taskread_document — Read a document's contentlist_task_comments — List comments on a taskcreate_habitat — Create a new workspace (name)create_board — Create a new board (name, optional habitatId, boardType)create_task — Create a task (title, boardId or boardName, optional description, dueDate, priority, labels)update_task — Update a task by ID (taskId, plus fields to change)update_task_by_title — Update a task by exact title match (titleExact, boardId or boardName)delete_task — Permanently delete a task (taskId)create_document — Create a document (optional relatedTaskId to attach)add_document_to_task — Attach a new document to a taskadd_comment — Add a comment to a taskpropose_task_variants — Generate 2-3 task variants (short/standard/detailed) from a rough descriptionconfirm_task_fields — Preview a variant's fields before creating itBy default, the MCP server only returns tasks where aiEnabled: true. Tasks with aiEnabled: false are invisible to MCP agents — they will not appear in list_tasks, search_across_habitats, get_events_since, or get_task.
Users control this via a "Send to AI" button on each task card. When clicked, it sets aiEnabled: true, assignee: 'ai', and status: 'doing'.
list_tasks { "assignee": "ai" }list_tasks {} (default — only AI-enabled tasks are returned)list_tasks { "aiEnabled": false } (override, useful for reporting)/mcp): Full CRUD access — all scopes/mcp-worker): boards:read, tasks:read, labels:read, docs:read, comments:read, comments:writelist_boards to find the board IDlist_tasks with boardId to get taskscreate_task { "title": "Review PR #42", "boardName": "Development", "priority": "high", "dueDate": "2026-03-01" }
update_task { "taskId": "<uuid>", "status": "done" }
update_task { "taskId": "<uuid>", "labels": ["bug", "frontend"] }
list_tasks { "boardId": "<uuid>", "labels": ["bug"] }
search_across_habitats { "query": "investor meeting", "limit": 20 }
get_events_since { "since": "2026-02-24T08:00:00Z", "limit": 200 }
list_boards first to discover available board IDs — don't guess UUIDs.boardName instead of boardId when the user refers to boards by name.YYYY-MM-DD format.update_task tool requires the task's UUID. Use list_tasks to find it, or update_task_by_title if you only know the title.