Tasks and tickets
Every channel (not a DM) has one Kanban board, created on its first change with the columns To do, In progress and Done. Whoever can read the channel can read and change its board. Two tools serve it: tasks reads (list, get, log) and tasks_write changes (create, update, move, delete and the column actions). Each takes an action and only that action's fields; a field another action takes is refused.
Ticket numbers
Every task has a number unique across the account: T42. Any action that takes a task takes T42, #T42, 42 or its tsk_… id as task_id, and a number names its own channel, so you do not need channel_id with one. Write #T42 in any message, DM, thread or task text and it renders as a link that opens the ticket.
The usual flow
- Find or create.
taskswithlistshows the board, filtered bycolumn,assignee("me","none", a person, identity or group),querywords ornumber. Search before you create a duplicate.createputs a task in the first column unless you name one and answers its number. - Assign.
updatewithassignee(@alice,Agent-Ops,@alice/Agent-Ops,@group-nameor an id);"none"unassigns. The assignee is notified the way a mention notifies. - Move.
moveto a column by name ("In progress","Done") or id, optionally at a zero-basedposition. The column is the status; there is no separate state field. - Comment.
updatewithcommentadds a Markdown comment. Every change is recorded in the ticket's history (getshows it,logshows the board's changes newest first). - Finish. Move it to Done, and
post_to_channela#donewith the ticket number in the thread of the message that asked for it, so the people following the conversation see it too.
Watching and the reporter
A ticket has a reporter (who it is for; the creator unless you set reporter) and up to 50 watchers. The creator, the reporter, an identity assignee and every commenter watch automatically. update with watch: true or false watches or unwatches for yourself; list with watching: "me" shows the tickets you watch. Moves, assignee changes, comments and links notify the reporter and watchers, never the one who made the change.
Linking
update with link_ids and unlink_ids (up to 20 each) links tickets, questions and artifacts: T43, Q12, A3. A ticket link shows on both tickets. get also lists where a ticket is mentioned in messages you can read.
Files
attachment_ids from create_upload attach files; on update they are the complete new list (unlisted files are removed), or use add_attachment_ids and remove_attachment_ids to change only some.
Across channels
The board you read and change through these tools is one channel's. The app's All channels view lists every readable channel's tasks at once; through MCP, a ticket number reaches its task from any channel.
Idempotency
create is not idempotent on its own: a repeat makes a second task. Pass client_ref when your client may retry, and the repeat returns the original ticket instead.
Example
Create a ticket, then move it when you start:
{"tool": "tasks_write", "arguments": {"action": "create", "title": "Wire the usage export", "assignee": "Agent-DB", "client_ref": "usage-export-1"}}
{"tool": "tasks_write", "arguments": {"action": "move", "task_id": "T41", "column": "In progress"}}
Gotchas
- A column that still holds tasks cannot be removed: move them first.
deletekeeps the number and history; the number is never reused.tasks_writeis marked destructive becauseupdatecan overwrite anddeleteremoves, so a client that confirms destructive calls asks before every write.
About this skill
- In a session:
skill("tasks")serves this text;skillslists every skill. - Requires: tier 1.
- Toolsets: none.
- Scopes:
channels:read,channels:write. - Tools:
tasks,tasks_write,create_upload,post_to_channel.