Skip to main content

Abilities

Tags: abilities, automation, workflows

Workflow ability configuration and management

In the product: Abilities

Resources

Request and response models used by the endpoints on this page.

AbilityRequirementResponse

FieldTypeRequiredDescription
kindLiteral[feature, connection, member_credential, phone_number]
slugString
subjectLiteral[org, workspace, member]Default: workspace

Example:

{
"kind": null // Literal[feature, connection, member_credential, phone_number],
"slug": "string" // String,
"subject": null // Literal[org, workspace, member], optional, default: workspace
}

AbilityResponse

FieldTypeRequiredDescription
abilityTypeString
celConditionString
configDict[str, Any]
enabledBoolean
idInteger
uuidString

Example:

{
"id": 0 // Integer,
"uuid": "string" // String,
"abilityType": "string" // String,
"config": {} // Dict[str, Any],
"enabled": false // Boolean,
"celCondition": "string" // String, optional
}

AbilityTypeResponse

FieldTypeRequiredDescription
attachmentScopesArray<Literal[workflow, task, toolkit, tool, supervisor]>Parent surfaces where new instances of this ability may be attached
categoryString
channelsArrayChannels this ability is available on (sorted). null means all channels. Declarative introspection metadata, not an enforcement point — the ability's resolve() remains authoritative.
configSchemaDict[str, Any]
descriptionString
requiredFeatureStringWorkspace feature slug required for this ability to be available
requiresArrayEffective workspace-resource requirements (GRA-6204), e.g. [{kind: 'feature', slug: 'gmail'}, {kind: 'connection', slug: 'gmail'}]. Includes requiredFeature adapted as a feature-kind entry. Enabling the ability with unmet connection requirements returns a correctible 400 unless allowMissingConnections is passed.
requiresChatBooleanIf true, the ability only resolves inside a chat context (default: False)
singletonBooleanIf true, only one instance of this ability can exist per scope (default: False)
slugString
systemBooleanIf true, this is an auto-injected system ability hidden from users (default: False)
titleString

Example:

{
"slug": "string" // String,
"title": "string" // String,
"category": "string" // String, optional,
"description": "string" // String, optional,
"configSchema": {} // Dict[str, Any], optional, default: PydanticUndefined,
"singleton": false // Boolean, optional, default: False, If true, only one instance of this ability can exist per scope,
"system": false // Boolean, optional, default: False, If true, this is an auto-injected system ability hidden from users,
"attachmentScopes": [] // Array<Literal[workflow, task, toolkit, tool, supervisor]>, optional, default: PydanticUndefined, Parent surfaces where new instances of this ability may be attached,
"requiredFeature": "string" // String, optional, Workspace feature slug required for this ability to be available,
"requires": [] // Array<AbilityRequirementResponse>, optional, default: PydanticUndefined, Effective workspace-resource requirements (GRA-6204), e.g. [{kind: 'feature', slug: 'gmail'}, {kind: 'connection', slug: 'gmail'}]. Includes requiredFeature adapted as a feature-kind entry. Enabling the ability with unmet connection requirements returns a correctible 400 unless allowMissingConnections is passed.,
"requiresChat": false // Boolean, optional, default: False, If true, the ability only resolves inside a chat context,
"channels": "string" // Array<String>, optional, Channels this ability is available on (sorted). null means all channels. Declarative introspection metadata, not an enforcement point — the ability's resolve() remains authoritative.
}

AbilityTypesResponse

FieldTypeRequiredDescription
typesArray

Example:

{
"types": [] // Array<AbilityTypeResponse>
}

CreateAbilityRequest

FieldTypeRequiredDescription
abilityTypeStringThe ability type slug (e.g., 'oversight:supervisor')
allowMissingConnectionsBooleanSkip the ability↔app-connection dependency check (GRA-6204). Pass true to deliberately add the ability before its required app connection(s) are enabled; workflow validation will still report the gap as a correctible finding. (default: False)
celConditionStringCEL condition for activation
configDict[str, Any]Ability configuration
customToolIdIntegerOptional tool ID (if tool-scoped)
customToolkitIdIntegerThe toolkit ID to attach to
enabledBooleanWhether the ability is enabled (default: True)
orderIntegerExecution order (lower = earlier) (default: 0)
taskIdIntegerOptional task ID (if task-scoped)
workflowIdWorkflowIdStable Workflow root id. Resolved server-side to the workflow's draft revision (ability edits always target the draft).
workflowRevisionIdWorkflowRevisionIdExplicit WorkflowRevision pin. Use when attaching to a specific revision rather than the draft pointed at by workflowId.

Example:

{
"abilityType": "string" // String, The ability type slug (e.g., 'oversight:supervisor'),
"workflowId": null // WorkflowId, optional, Stable Workflow root id. Resolved server-side to the workflow's draft revision (ability edits always target the draft).,
"workflowRevisionId": null // WorkflowRevisionId, optional, Explicit WorkflowRevision pin. Use when attaching to a specific revision rather than the draft pointed at by workflowId.,
"taskId": 0 // Integer, optional, Optional task ID (if task-scoped),
"customToolkitId": 0 // Integer, optional, The toolkit ID to attach to,
"customToolId": 0 // Integer, optional, Optional tool ID (if tool-scoped),
"config": {} // Dict[str, Any], optional, default: PydanticUndefined, Ability configuration,
"enabled": false // Boolean, optional, default: True, Whether the ability is enabled,
"order": 0 // Integer, optional, default: 0, Execution order (lower = earlier),
"celCondition": "string" // String, optional, CEL condition for activation,
"allowMissingConnections": false // Boolean, optional, default: False, Skip the ability↔app-connection dependency check (GRA-6204). Pass true to deliberately add the ability before its required app connection(s) are enabled; workflow validation will still report the gap as a correctible finding.
}

UpdateAbilityRequest

FieldTypeRequiredDescription
allowMissingConnectionsBooleanSkip the ability↔app-connection dependency check when re-enabling (GRA-6204). Pass true to deliberately enable the ability before its required app connection(s) are enabled. (default: False)
celConditionStringCEL condition for activation
configDict[str, Any]Ability configuration
enabledBooleanWhether the ability is enabled
orderIntegerExecution order (lower = earlier)

Example:

{
"config": {} // Dict[str, Any], optional, Ability configuration,
"enabled": false // Boolean, optional, Whether the ability is enabled,
"order": 0 // Integer, optional, Execution order (lower = earlier),
"celCondition": "string" // String, optional, CEL condition for activation,
"allowMissingConnections": false // Boolean, optional, default: False, Skip the ability↔app-connection dependency check when re-enabling (GRA-6204). Pass true to deliberately enable the ability before its required app connection(s) are enabled.
}

Endpoints

List

GET /api/v2/w/{workspace_uuid}/abilities

Description:

List configured ability instances for a workflow or task scope.

Provide exactly one of:

  • workflow scope: workflowId and/or workflowRevisionId (workflowId resolves to the draft revision; workflowRevisionId pins an explicit revision)
  • taskId for task-scoped abilities

When workflow scope is given, only workflow-scoped abilities (task_id IS NULL) on the resolved revision are returned.

Authorization: Requires agents:read scope

Parameters:

  • workflowId (Integer)
  • workflowRevisionId (Integer)
  • taskId (Integer)

Response: List of AbilityResponse


Create

POST /api/v2/w/{workspace_uuid}/abilities

Description:

Create (enable) a configured ability on a workflow or task scope.

Backs gr abilities enable. The request must name a workflow scope (workflowId stable root → draft revision, workflowRevisionId explicit pin, or taskId resolved to its owning revision) or a toolkit scope (customToolkitId) — abilities cannot be attached to an agent row directly. workflowId is entity-honest (GRA-6422): it never secretly means a revision id.

Authorization: Requires agents:write scope

Parameters:

Response: See AbilityResponse


Types

GET /api/v2/w/{workspace_uuid}/abilities/types

Description:

List available ability types from the code registry.

Returns ability type definitions including slug, title, category, description, channels, flags, and config schema.

System abilities (auto-injected for core functionality) are hidden by default and surfaced only with includeSystem=true. Abilities gated behind workspace features are hidden when the feature is not enabled.

Authorization: Requires agents:read scope

Parameters:

  • includeSystem (Boolean)

Response: See AbilityTypesResponse


Types {#get-types-slug:path}

GET /api/v2/w/{workspace_uuid}/abilities/types/{slug:path}

Description:

Return the full spec for a single ability type by slug.

Includes title, description, category, channels, singleton/system flags, required feature, and the JSON Schema of the params model. Backs gr abilities get --name X.

The :path converter lets the slug contain a colon (e.g. communication:phone_call_tools).

Authorization: Requires agents:read scope

Parameters:

  • slug (String)

Response: See AbilityTypeResponse


Delete Ability Uuid

DELETE /api/v2/w/{workspace_uuid}/abilities/{ability_uuid}

Description:

Delete a configured ability instance by UUID.

Backs the removal half of gr abilities management. Distinct from disable (which sets enabled=false but keeps the config).

Authorization: Requires agents:write scope

Parameters:

  • ability_uuid (String)

Response: See None


Update Ability Uuid

PATCH /api/v2/w/{workspace_uuid}/abilities/{ability_uuid}

Description:

Update a configured ability (configure / enable / disable).

Backs gr abilities configure (config + celCondition) and the enable/disable toggles (enabled). config is merged with the existing config; pass enabled to toggle activation.

Authorization: Requires agents:write scope

Parameters:

Response: See AbilityResponse