Docs

Desks

What it does

Desks are the projects work hangs on, so a task, a routine, and a workflow template all have a home.

Open Desks (/desks). Team is the org view. List is the project table. ?view=team or ?view=list picks one, and the choice is remembered in the browser. A desk is a project row. Routines and workflow templates bind to a desk so scheduled work has somewhere to land.

The screen is a thin client over the project routes. There is no separate desk table and no MCP tool named desk. Agents pass project_id on tasks and templates.

MCP tools

ToolScopeRole
task_listtasks:readTasks on a desk. Filter project_id
task_createtasks:writeCreate a backlog task on a desk
entity_field_writegraph:writeWrite one project field through provenance
entity_state_getnone (token still required)Read agent_state on projects
entity_state_setprojects:writeReplace agent_state
entity_state_patchprojects:writeShallow-merge agent_state
workflow_template_createworkflows:writeSave a template bound to project_id
workflow_applyworkflows:writeInstantiate that template into tasks on a desk

workflow_apply takes context_project_id for the desk the new tasks should land on.

HTTP endpoints

MethodPathRole
GET/cockpit/api/projectsList view
PATCH/cockpit/api/projects/:idUpdate a project from the list or the team view
GET/cockpit/api/org-structureTeam view
GET, PATCH/cockpit/api/entities/projects/:idDrawer read and update
POST/cockpit/api/entities/projectsCreate from a signed-in session

Project actions also live under /cockpit/api/projects/:id for child counts and for convert, delete, merge, owner, and undo-delete.

Permissions

Token scopes come from one permission-set layer. Task reads need tasks:read. Project field state needs projects:write. Template writes need workflows:write and are token-only. The screen uses the signed-in session.

Row access is RLS by creator. Admins see all rows. Members see their own.

Agent example

Call task_create with the desk you want the work on. Set human_approval_to_close on purpose. The default is false.

{
  "tool": "task_create",
  "arguments": {
    "title": "Send the revised scope",
    "project_id": "desk-1",
    "human_approval_to_close": true
  }
}

Expected result: a backlog task on that project. It does not wake a runtime until it moves to todo. Because the flag is true, closing it later opens a card instead of finishing on its own.

{
  "ok": true,
  "status": "backlog",
  "title": "Send the revised scope",
  "human_approval_to_close": true
}