Capability

A reusable definition of an agent ability that can be referenced by tasks and resolved by bindings.

Overview

Capabilities define abstract abilities that agents or tools can provide. By separating capability definitions from their implementations, plans become portable across different environments. A task can require "code-generation" capability without specifying which specific agent provides it—that's determined at runtime through bindings.

Schema

yaml
apiVersion: planspec.io/v1alpha1
kind: Capability
metadata:
  name: string          # Required, unique identifier
  namespace: string     # Required, resource namespace
  labels: object        # Optional, key-value pairs
  annotations: object   # Optional, metadata
spec:
  description: string   # Required, what this capability provides
  displayName: string   # Optional, human-friendly name
  category: string      # Optional, capability category
  inputs:               # Optional, inputs the capability accepts
    - name: string      # Input name
      type: string      # Input type (string, number, boolean, object, array)
      required: boolean # Whether input is required
      description: string  # Input description
      default: any      # Default value
      format: string    # Format hint (e.g., "uri", "email", "date-time")
      enum: any[]       # Allowed values
      itemType: string  # Type of array items (if type is array)
      objectProperties: object  # Property definitions (if type is object)
  outputs:              # Optional, what the capability produces
    - name: string      # Output name
      type: string      # Output type
      description: string  # Output description
  requirements:         # Optional, capability dependencies
    - name: string      # Required capability name
status:
  phase: string         # Capability availability phase
  conditions: object[]  # Status conditions
  observedGeneration: number  # Last observed generation
  replacement:          # Replacement capability (if deprecated)
    name: string        # Name of replacement capability
    namespace: string   # Optional, namespace of replacement
  deprecationMessage: string  # Deprecation notice

Fields

Spec Fields

FieldTypeRequiredDescription
descriptionstringYesWhat this capability provides
displayNamestringNoHuman-friendly display name
categorystringNoCapability category for organization
inputsobject[]NoInputs the capability accepts
outputsobject[]NoWhat the capability produces
requirementsobject[]NoOther capabilities this one depends on

Input Definition Fields

FieldTypeRequiredDescription
namestringYesInput name
typestringYesType: string, number, boolean, object, array
requiredbooleanNoWhether required (default: false)
descriptionstringNoInput description
defaultanyNoDefault value
formatstringNoFormat hint (e.g., "uri", "email", "date-time")
enumany[]NoList of allowed values
itemTypestringNoType of array items (when type is array)
objectPropertiesobjectNoProperty definitions (when type is object)

Output Definition Fields

FieldTypeRequiredDescription
namestringYesOutput name
typestringYesOutput type
descriptionstringNoOutput description

Requirement Fields

FieldTypeRequiredDescription
namestringYesName of required capability

Status Fields

FieldTypeDescription
phasestringCapability availability phase
conditionsobject[]Status conditions with details
observedGenerationnumberLast observed spec generation
replacementobjectReference to replacement capability (if deprecated)
deprecationMessagestringMessage explaining deprecation

Capability Phases

PhaseDescription
AvailableCapability is available for use
UnavailableCapability is not currently available
DeprecatedCapability is deprecated (see replacement)

Common Categories

CategoryDescription
codeCode generation, review, and refactoring
dataData access, transformation, and analysis
testTest execution and validation
deployDeployment and infrastructure
communicationNotifications and messaging

Example

yaml
apiVersion: planspec.io/v1alpha1
kind: Capability
metadata:
  name: code-generation
  namespace: default
  labels:
    category: code
spec:
  description: Generate code in specified programming languages
  displayName: Code Generation
  category: code
  inputs:
    - name: language
      type: string
      required: true
      description: Target programming language
      enum: ["typescript", "python", "go", "rust", "java"]
    - name: framework
      type: string
      required: false
      description: Framework or library context
    - name: style
      type: string
      required: false
      description: Code style guidelines to follow
      default: "standard"
    - name: files
      type: array
      required: false
      description: Existing files for context
      itemType: string
  outputs:
    - name: code
      type: string
      description: Generated source code
    - name: explanation
      type: string
      description: Explanation of the generated code
---
apiVersion: planspec.io/v1alpha1
kind: Capability
metadata:
  name: database-access
  namespace: default
spec:
  description: Read and write data to SQL databases
  displayName: Database Access
  category: data
  inputs:
    - name: dialect
      type: string
      required: true
      description: SQL dialect (postgres, mysql, sqlite)
      enum: ["postgres", "mysql", "sqlite"]
    - name: readOnly
      type: boolean
      required: false
      default: true
      description: Whether to restrict to read operations
    - name: connectionConfig
      type: object
      required: false
      description: Connection configuration
      objectProperties:
        host:
          name: host
          type: string
        port:
          name: port
          type: number
        database:
          name: database
          type: string
  outputs:
    - name: results
      type: object
      description: Query results
  requirements:
    - name: network-access
---
apiVersion: planspec.io/v1alpha1
kind: Capability
metadata:
  name: test-execution
  namespace: default
spec:
  description: Execute test suites and report results
  displayName: Test Execution
  category: test
  inputs:
    - name: testPattern
      type: string
      required: false
      description: Pattern to filter tests
    - name: coverage
      type: boolean
      required: false
      default: false
      description: Whether to collect coverage data
    - name: parallel
      type: number
      required: false
      description: Number of parallel test runners
  outputs:
    - name: passed
      type: boolean
      description: Whether all tests passed
    - name: summary
      type: object
      description: Test results summary

JSON Schema

The full JSON Schema is available at: Capability Schema

Next Steps

  • Binding - Connect capabilities to providers
  • Plan - Reference capabilities in tasks
  • Execution - See capabilities resolved at runtime