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"
]
}
}
}