Skip to content

workflows.json reference

The .cate/workflows.json file is the single source of truth for a Cate-managed repository. Created during setup, it defines everything Cate needs to manage your project: issue tracker connection, status definitions, autonomy settings, work queue priorities, and command definitions.

Field names use camelCase (protobuf JSON serialization format).

{
"version": "2",
"project": { ... },
"tracker": { ... },
"git": { ... },
"autonomy": { ... },
"statuses": [ ... ],
"queue": { ... },
"commands": { ... }
}

Basic project metadata.

FieldTypeDescription
namestringRepository or project name
descriptionstringBrief project description, used by agents for context

Connection details for the issue tracker and project board. The shape differs by provider.

"tracker": {
"provider": "github",
"owner": {
"name": "acme-corp",
"type": "OWNER_TYPE_ORGANIZATION"
},
"repo": "my-project",
"projectName": "My Project Board",
"projectNumber": 3,
"statusFieldId": "PVTSSF_lADOBQ...",
"statusOptions": {
"ready": { "optionId": "47fc9ee4" },
"in_progress": { "optionId": "98236657" },
"in_review": { "optionId": "da82de31" },
"human_review": { "optionId": "12a5b6c7" },
"done": { "optionId": "b6b4a997" }
}
}
FieldTypeDescription
providerstringMust be "github"
owner.namestringGitHub username or organization name
owner.typestring"OWNER_TYPE_USER" or "OWNER_TYPE_ORGANIZATION"
repostringRepository name
projectNamestringDisplay name of the GitHub Projects board
projectNumbernumberGitHub Projects board number (visible in the board URL)
statusFieldIdstringGitHub Projects Status field ID from the GraphQL API
statusOptionsobjectMap of status keys to their GitHub option IDs

The statusFieldId and all optionId values come from the GitHub GraphQL API during setup. Do not invent placeholder values — all IDs must be real.

"tracker": {
"provider": "jira",
"projectName": "My Project",
"statusOptions": {
"ready": { "optionId": "10004" },
"in_progress": { "optionId": "10005" },
"in_review": { "optionId": "10006" },
"human_review": { "optionId": "10007" },
"done": { "optionId": "10008" }
},
"jira": {
"site": "mycompany.atlassian.net",
"cloudId": "dc9ebf1b-bdaf-49c9-93c9-e625b5381f4d",
"projectKey": "PROJ",
"boardId": 2,
"blockingLinkType": "Blocks"
}
}
FieldTypeDescription
providerstringMust be "jira"
projectNamestringJira project display name
statusOptionsobjectMap of status keys to Jira status IDs (as optionId)
jira.sitestringJira site URL, e.g. mycompany.atlassian.net
jira.cloudIdstringJira cloud instance ID
jira.projectKeystringJira project key, e.g. PROJ
jira.boardIdnumberJira board ID
jira.blockingLinkTypestringIssue link type for blocker relationships. Default: "Blocks". Omit unless your Jira instance uses a different name.

Git conventions for the project.

FieldTypeDefaultDescription
defaultBranchstring"main"Default branch name
branchPatternstring"task/ISSUE-{number}-{description}"Branch naming pattern. Use {number} and {description} as placeholders.
commitFormatstring"conventional"Commit message format. "conventional" uses feat(scope): description. Use "{number} {description}" for a simpler format.

Default autonomy level applied to all issues.

FieldTypeDefaultDescription
defaultstring"full"Either "full" or "supervised". See Autonomy levels.

Array of status definitions. Each entry maps to a column on your project board.

FieldTypeDescription
idstringInternal key in snake_case. Used in queue entries and status transitions.
namestringDisplay name. Must match the column name on your project board exactly.
colorstringHex color for dashboard display.
"statuses": [
{ "id": "ready", "name": "To Do", "color": "#3b82f6" },
{ "id": "in_progress", "name": "In Progress", "color": "#f59e0b" },
{ "id": "in_review", "name": "AI Review", "color": "#8b5cf6" },
{ "id": "human_review", "name": "Human Review", "color": "#ec4899" },
{ "id": "done", "name": "Done", "color": "#22c55e" }
]

Defines which board statuses each agent role pulls work from, in priority order.

Entries are processed in order. Each entry has a status (referencing a status id).

"worker": {
"entries": [
{ "status": "ready" }
]
}

Agents skip issues with open blockers automatically.

Reviewers only pick up issues that have an open PR.

"reviewer": {
"entries": [
{ "status": "in_review" }
]
}

Issues that surface in the dashboard’s human review queue.

"human-review": {
"entries": [
{ "status": "human_review" }
]
}

This queue is optional. If omitted, Cate doesn’t surface human review items in the dashboard, but agents continue to work normally.

Tracks which issues are actively being worked on.

"in_progress": {
"entries": [
{ "status": "in_progress" }
]
}

Defines available commands, their parameters, tab lifecycle, and status transitions.

FieldTypeDescription
namestringDisplay name in the dashboard menu
descriptionstringBrief description shown in the menu
promptstringPath to the prompt file, relative to .cate/
tabobjectTab lifecycle
parametersobjectNamed input parameters
transitionsarrayValid status transitions this command can make

Persistent commands (work, review) have pre-allocated tabs. The app dispatches issues to idle persistent tabs automatically.

"tab": { "persistent": { "minAllocation": 3 } }

minAllocation controls how many tabs are created when the repo opens.

Ephemeral commands (plan, collaborate, setup, human review, etc.) spin up on demand and terminate when the session ends.

"tab": { "ephemeral": {} }