Your Personal space is a workspace only you belong to, so its tasks use the Tasks routes. The /api/personal-tasks endpoints below are deprecated: they keep working for CLIs released before personal reached the workspace routes, and will be removed. Do not build on them.
| Method | Path | Description |
|---|---|---|
| GET | /api/personal-tasks?status=&priorities=&q=&doneSince=&threadId=&limit=&cursor=&includeOpenCount= | Deprecated: kosuke tasks list personal now calls GET /api/organizations/{workspaceId}/tasks with your Personal space id. List your personal tasks, newest first. status is a csv of todo, in_progress, done; includeOpenCount counts Todo and In progress with the same filters, independent of status and cursor. |
| POST | /api/personal-tasks | Deprecated: kosuke tasks create personal now calls POST /api/organizations/{workspaceId}/tasks with your Personal space id. File a personal task: yours alone, in no workspace. From a Sensei Turn it joins the Turn’s thread unless threadId names another. Check kosuke tasks list personal for one that covers it first. |
| GET | /api/personal-tasks/{taskId} | Deprecated: kosuke tasks get personal now calls GET /api/organizations/{workspaceId}/tasks/{taskId} with your Personal space id. Get one of your personal tasks. |
| PATCH | /api/personal-tasks/{taskId} | Deprecated: kosuke tasks update personal now calls PATCH /api/organizations/{workspaceId}/tasks/{taskId} with your Personal space id. Edit one of your personal tasks. dueOn or threadId null clears it. |
| DELETE | /api/personal-tasks/{taskId} | Deprecated: kosuke tasks delete personal now calls DELETE /api/organizations/{workspaceId}/tasks/{taskId} with your Personal space id. Delete one of your personal tasks. |
| POST | /api/personal-tasks/{taskId}/move | Deprecated: kosuke tasks move personal now calls POST /api/organizations/{workspaceId}/tasks/{taskId}/move with your Personal space id. Move a Todo or In progress personal task into a workspace you belong to, as its Todo task assigned to you; the personal task is removed. A due date becomes the description’s last line. Only when the member asks. |
| POST | /api/personal-tasks/{taskId}/start | Deprecated: kosuke tasks start personal now calls POST /api/organizations/{workspaceId}/tasks/{taskId}/start with your Personal space id. Start a Todo or In progress Personal task in a deployed Personal Repository. |
Your Personal space
kosuke tasks list|create|get|update|delete|move|start personal reads your Personal space id with kosuke user personal-space get (GET /api/user/personal-space, which answers { data: { id } } and makes the space on first use), then calls the same workspace route with that id as workspaceId. Every flag of the workspace command works, and the answers are workspace tasks. GET /api/tasks lists your Personal space beside your workspaces.
Only you reach your Personal space: another member's credential is refused with 403, and their GET /api/tasks never lists your tasks. Sensei reaches it for you. A session or Cron credential acts in its own workspace and has no Personal space, so personal is refused there.
kosuke tasks create personal --title "Send Q3 invoices to Giulia" --due-on 2026-11-03
kosuke tasks list personal --status todo,in_progress --include-open-count true
kosuke tasks update personal <taskId> --status in_progress
kosuke tasks move personal <taskId> --org-id <workspaceId>
Create needs only title; description is optional and defaults to an empty string. All legacy create, update, list, move and start inputs remain available.
Two things to know about the workspace routes:
ifRevisionaccepts the task'sdescriptionRevision, whichtasks getprints; a sessionless task also accepts itsupdatedAtfor compatibility. A changed task answers409TASK_CONFLICT.- Errors carry the
TASK_*codes of Tasks.
Deprecated endpoints
What follows describes /api/personal-tasks, for a client that still calls it.
The task
| Field | Value |
|---|---|
id | The task id. |
title | 1 to 255 characters. |
description | Markdown. Empty by default. |
priority | none, low, medium, high or urgent. Default none. |
status | todo, in_progress or done. Default todo. |
dueOn | A calendar day, YYYY-MM-DD, or null. It has no time and no time zone. |
threadId | The Sensei thread that filed it or works on it, or null. |
createdAt, updatedAt | ISO timestamps. |
doneAt | When it became Done, or null. Leaving Done clears it. |
A personal task has no repository, branch, sandbox or pull request. Sensei works on it in its thread.
File and edit
Create takes title and optional description, priority, status, dueOn and threadId. It answers 201 with { data: PersonalTask }. A threadId must name one of your own Sensei threads. From a Sensei Turn, the task joins the Turn's thread unless threadId names another.
Update takes any of the same fields. Send dueOn or threadId as null to clear it. Add ifRevision, the task's updatedAt as you read it, to write only over the task you read. When the task changed since, nothing changes and the answer is 409 with the current task in task. Delete answers 204.
List
List answers { data: PersonalTask[], meta: { pagination: { pageSize, hasMore, nextCursor } } }, newest first. Pass nextCursor as cursor for the next page. limit is at most 100.
| Filter | Value |
|---|---|
status | Comma-separated todo, in_progress, done. |
priorities | Comma-separated priorities. |
q | Text the title contains. |
doneSince | An ISO timestamp. Done tasks finished before it are left out. |
threadId | One thread's tasks. |
includeOpenCount | true adds meta.openCount: Todo plus In progress under the same filters, independent of status and cursor. |
Move into a workspace
Move takes orgId, a workspace you belong to. The personal task becomes that workspace's Todo task, with its title, description and priority, and you as its Assignee. A due date becomes the description's last line, such as Due 3 Nov 2026. The personal task is removed in the same step. Move answers { data: { orgId, taskId } }, where taskId is the new workspace task.
Limits
- A Done personal task does not move.
- A workspace task never becomes personal.
- Sandbox, Cron and Slack credentials reach no personal task. Sensei can file, read, edit and move them, but not delete one.
Errors
| Status | Code | When |
|---|---|---|
| 400 | VALIDATION_ERROR | The body or a filter does not match the schema, such as an empty title or a dueOn that is not a day. |
| 400 | PERSONAL_TASK_INVALID_THREAD | threadId is not one of your Sensei threads. |
| 401 | UNAUTHORIZED | No valid credential. |
| 403 | PERSONAL_TASK_FORBIDDEN | A move names a workspace you do not belong to. |
| 404 | PERSONAL_TASK_NOT_FOUND | The task does not exist or is not yours. |
| 409 | PERSONAL_TASK_DONE | A move named a Done task. |
| 409 | PERSONAL_TASK_CONFLICT | An edit's ifRevision is not the task's updatedAt: the task changed since you read it. |
Responses and errors has the full table.