Skip to content

Spec Format

Command specs are YAML or JSON files validated against a JSON Schema.

command.yaml
schemaVersion: 1
kind: command
metadata:
name: deploy
slug: deploy
description: Deploy application to an environment
tags: [ops, deploy]
aliases: [dep]
dependencies:
- deploy.sh
args:
positional:
- name: environment
description: Target environment
required: true
- name: version
description: Version to deploy
required: false
flags:
- name: dry-run
short: n
type: bool
description: Preview without applying changes
- name: replicas
type: int
default: "3"
description: Number of replicas
defaults:
shell: /bin/bash
timeout: 5m
env:
APP_NAME: myapp
steps:
- name: validate
run:
- echo "Deploying {{.args.environment}}..."
- test -f deploy.sh
- name: deploy
run:
- ./deploy.sh {{.args.environment}}
timeout: 10m
env:
REPLICAS: "{{.args.replicas}}"
policy:
requireConfirmation: true
allowedExecutables: [/bin/bash, /bin/echo]
FieldRequiredTypeDescription
schemaVersionYesintegerMust be 1
kindYesstringMust be "command"
metadataYesobjectCommand metadata
dependenciesNostring[]Required binary dependencies (checked before execution)
argsNoobjectArgument definitions
defaultsNoobjectDefault shell, timeout, and env
stepsYesarraySteps to execute (minimum 1)
policyNoobjectExecution policies
FieldRequiredTypeDescription
nameYesstringHuman-readable name
slugYesstringURL-safe identifier. Must match ^[a-z][a-z0-9-]*$
descriptionNostringShort description
tagsNostring[]Tags for organization
aliasesNostring[]Alternative slugs for the command

An optional array of binary dependencies that must be available on the system. These are checked before execution.

dependencies:
- curl
- jq

Array of positional argument definitions, parsed in order.

FieldRequiredTypeDescription
nameYesstringArgument name (used in templates as {{.args.name}})
descriptionNostringDescription
requiredNobooleanWhether the argument is required (default: false)

Array of named flag definitions.

FieldRequiredTypeDescription
nameYesstringFlag name (used as --name)
shortNostringSingle-character short form (used as -x)
typeNostringOne of string (default), bool, int
defaultNostringDefault value
descriptionNostringDescription
FieldTypeDescription
shellstringDefault shell for all steps (e.g., /bin/bash)
timeoutstringDefault timeout for all steps (e.g., 30s, 5m)
envobjectDefault environment variables for all steps

Array of steps to execute sequentially.

FieldRequiredTypeDescription
nameYesstringStep identifier
runYesstring[]Shell commands to execute
envNoobjectStep-specific environment variables
timeoutNostringOverride default timeout
shellNostringOverride default shell
continueOnErrorNobooleanContinue to next step on failure
FieldTypeDescription
requireConfirmationbooleanPrompt user before running
allowedExecutablesstring[]Restrict which binaries can be invoked

Step run lines and env values are rendered as Go templates:

VariableDescription
{{.args.X}}Argument value by name
{{.env.X}}Environment variable value
{{.cwd}}Current working directory
{{.home}}User’s home directory