Projects

Work planning boards.

7 actions. Each is callable by the agent as a tool, over HTTP via /api/invoke, and (usually) from a UI page.

projects.list

GET

List projects in the workspace. Optionally filter by parent (for tree), kind, status, or owner. By default returns only live projects; pass deleted: true to list soft-deleted (trashed) projects instead — use this to find a project id to restore via projects.restore.

When the agent calls it: To recover a deleted project: call projects.list with { deleted: true } to find it, then projects.restore with its id. Note: archive (status="archived") is different — archived projects still appear in normal lists.

  • AI tool: projects_list
  • API: GET /api/invoke/projects.list

Input

Field Type Required Description
parentId union
kind "workspace" | "initiative" | "campaign" | "launch" | "sprint" | "experiment"
status "active" | "archived" | "planning" | "completed"
ownerId string
subjectId string
deleted boolean
limit integer
offset integer
orderBy string
orderDir "asc" | "desc"
q string
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "parentId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "kind": {
      "type": "string",
      "enum": [
        "workspace",
        "initiative",
        "campaign",
        "launch",
        "sprint",
        "experiment"
      ]
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "archived",
        "planning",
        "completed"
      ]
    },
    "ownerId": {
      "type": "string",
      "minLength": 1
    },
    "subjectId": {
      "type": "string",
      "minLength": 1
    },
    "deleted": {
      "type": "boolean"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "orderBy": {
      "type": "string"
    },
    "orderDir": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "q": {
      "type": "string"
    }
  }
}

projects.get

GET

Get one project by id.

  • AI tool: projects_get
  • API: GET /api/invoke/projects.get

Input

Field Type Required Description
id string yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ]
}

projects.create

POST · mutating

Create a new project. Use kind="campaign" for a date-ranged initiative that should appear on the Gantt timeline; kind="workspace" for a generic notion-style container.

  • AI tool: projects_create
  • API: POST /api/invoke/projects.create

Input

Field Type Required Description
name string yes
description string
icon union
color union
status "active" | "archived" | "planning" | "completed"
kind "workspace" | "initiative" | "campaign" | "launch" | "sprint" | "experiment"
goalType union
startDate union
endDate union
subjectId union
parentId union
missionId union
ownerId union
deletedAt union
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string"
    },
    "description": {
      "default": "",
      "type": "string"
    },
    "icon": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "color": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "status": {
      "default": "active",
      "type": "string",
      "enum": [
        "active",
        "archived",
        "planning",
        "completed"
      ]
    },
    "kind": {
      "default": "workspace",
      "type": "string",
      "enum": [
        "workspace",
        "initiative",
        "campaign",
        "launch",
        "sprint",
        "experiment"
      ]
    },
    "goalType": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "promote",
            "grow",
            "launch",
            "monitor",
            "support",
            "crowdfunding"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "startDate": {
      "anyOf": [
        {},
        {
          "type": "null"
        }
      ]
    },
    "endDate": {
      "anyOf": [
        {},
        {
          "type": "null"
        }
      ]
    },
    "subjectId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "parentId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "missionId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "ownerId": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "null"
        }
      ]
    },
    "deletedAt": {
      "anyOf": [
        {},
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "name"
  ]
}

projects.update

PATCH · mutating

Update a project (name, dates, status, parent, owner, etc.).

  • AI tool: projects_update
  • API: PATCH /api/invoke/projects.update

Input

Field Type Required Description
id string yes
patch object yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    },
    "patch": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1
        },
        "name": {
          "type": "string"
        },
        "description": {
          "default": "",
          "type": "string"
        },
        "icon": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "color": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        },
        "status": {
          "default": "active",
          "type": "string",
          "enum": [
            "active",
            "archived",
            "planning",
            "completed"
          ]
        },
        "kind": {
          "default": "workspace",
          "type": "string",
          "enum": [
            "workspace",
            "initiative",
            "campaign",
            "launch",
            "sprint",
            "experiment"
          ]
        },
        "goalType": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "promote",
                "grow",
                "launch",
                "monitor",
                "support",
                "crowdfunding"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "startDate": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ]
        },
        "endDate": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ]
        },
        "subjectId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "missionId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "ownerId": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1
            },
            {
              "type": "null"
            }
          ]
        },
        "createdAt": {},
        "updatedAt": {},
        "deletedAt": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ]
        }
      }
    }
  },
  "required": [
    "id",
    "patch"
  ]
}

projects.delete

DELETE · mutating

Soft-delete a project (moves it to Trash). Sets deleted_at; the project is hidden from default lists and its detail page, but child projects, tickets, and content that reference it are preserved. Reversible via projects.restore. This is NOT the same as archiving — to archive (keep visible, read-only) call projects.update with { patch: { status: "archived" } }.

When the agent calls it: Use this when the user wants to remove a project. Always confirm first. To merely archive, use projects.update with status="archived" instead.

  • AI tool: projects_delete
  • API: DELETE /api/invoke/projects.delete

Input

Field Type Required Description
id string yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ]
}

projects.restore

POST · mutating

Restore a soft-deleted (trashed) project by clearing its deleted_at, returning it to active lists. Find trashed project ids via projects.list with { deleted: true }.

When the agent calls it: Pairs with projects.list { deleted: true }, which lists what is in the Trash and the ids you can restore.

  • AI tool: projects_restore
  • API: POST /api/invoke/projects.restore

Input

Field Type Required Description
id string yes
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ]
}

projects.timeline

GET

Get a Gantt-shaped timeline of all date-bounded projects (kind in [campaign, launch, sprint]) intersecting a window.

  • AI tool: projects_timeline
  • API: GET /api/invoke/projects.timeline

Input

Field Type Required Description
from any
to any
kind "workspace" | "initiative" | "campaign" | "launch" | "sprint" | "experiment"
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "from": {},
    "to": {},
    "kind": {
      "type": "string",
      "enum": [
        "workspace",
        "initiative",
        "campaign",
        "launch",
        "sprint",
        "experiment"
      ]
    }
  }
}