Docs

Domains

What it does

Domains are labels you define, so tasks, projects, and comments can be filtered by the same short code.

Open Domains (/settings/domains). A domain has a code, a label, a color, and a sort order. The code does not change after create. You can archive a code and restore it. Archiving hides it from pickers. It does not delete the tasks that used it.

A domain is not a permission and not an email domain. It does not grant scopes. The Dash domain filter uses this catalog.

The screen is a thin client. There is no MCP tool that creates labels. Agents pass a domain code that already exists, for example on task_create.

MCP tools

No MCP tool administers this catalog. Tools that accept a domain code:

ToolScopeRole
task_createtasks:writeOptional domain on a new task
task_listtasks:readFilter domain
comment_createcomments:writeOptional domain on a comment

An unknown code is not created on the fly.

HTTP endpoints

MethodPathRole
GET/cockpit/api/domainsList the catalog
POST/cockpit/api/domainsCreate. Body includes code, label, color, sort_order
PATCH/cockpit/api/domains/:codeUpdate label, color, sort, or archived

Color is #rrggbb. Writes require an owner or admin session. A member gets 403.

Permissions

Catalog writes are an owner or admin session, not a token scope. There is no domains scope on the permission-set layer. Tasks and comments still need their own scopes.

Row access is RLS by creator. Admins see all rows. Members see their own. The catalog itself is workspace-wide for people who can open the screen.

Agent example

Call task_list with a code you read from this screen. Do not invent one.

{
  "tool": "task_list",
  "arguments": {
    "domain": "delivery",
    "status": "todo",
    "limit": 20
  }
}

Expected result: todo tasks tagged delivery that this token may see. An empty list means nothing is in that label, not that the label is missing. Creating the label is the POST above, from an admin session.

{
  "ok": true,
  "tasks": []
}