What a Capability defines
A Capability manifest contains exactly three things:- Identity — a machine-readable name, a semantic version, and a human-readable display name.
- Inputs — the typed parameters a caller must supply before the Capability can run.
- Outputs — the typed values or artifacts the Capability guarantees to return on success.
A Capability without a Recipe
A Capability can exist before any Recipe is written for it. When you rundoppels run capability/<name> against a Capability that has no Recipe, the CLI treats the run as a manual fulfillment — a human delivers the declared outputs. This is intentional: you can publish the contract first, agree on inputs and outputs with your team, and implement the automation later.
Example
version) and two outputs: a gzip artifact (archive) and a string (checksum). Any Recipe that provides: [release-build] must satisfy both outputs.
Field reference
string
required
Always
doppels.so/v1alpha1. Identifies the schema version used to validate this manifest.string
required
Always
Capability. Tells the CLI and validator which schema to apply.string
required
The machine-readable identifier for this Capability. Used in
doppels run capability/<name>, in Recipe provides lists, and in expressions. Use lowercase kebab-case (e.g. release-build).string
required
A semantic version string (e.g.
1.0.0). Capability versions are immutable once published — changing inputs or outputs requires a new version.string
A human-readable label shown in
doppels describe output and any UI surfaces. Spaces and mixed case are allowed.string
The type of this input parameter. Accepted values:
string, integer, number, boolean, artifact.boolean
When
true, the CLI rejects a run attempt if this input is not supplied. Defaults to false when omitted.string
The type of this output value. Accepted values mirror input types:
string, integer, number, boolean, artifact.string
The MIME type of an
artifact output (e.g. application/gzip, text/csv). Only meaningful when type is artifact.All declared outputs are required
Every output you declare in a Capability must be present in the result when the Capability runs. If a Recipe’sreturns block omits a declared output, doppels validate reports an error. This contract is enforced at validation time so you catch gaps before they reach a production run.
Where to store Capability manifests
Place Capability manifests in thecapabilities/ directory at the root of your project:
metadata.name, but keeping them consistent makes the project easier to navigate.
Listing your Capabilities
Run the following command from any directory within your project to see all locally discovered Capabilities:Recipes
Learn how Recipes implement Capabilities with shell steps and output mappings.
How It Works
See how Capabilities fit into the full Doppels execution model.