Machine-readable YAML definitions for workflow commands and the workflow manifest.
Each command has a co-located .yaml file describing its interface.
# Unique command identifier: {phase}:{action}
command : " discovery:create "
# Workflow phase this command belongs to
# Relative path to the command's .md implementation file
path : commands/project/discovery/create-epic-discovery.md
# Relative path to the human-readable overview in docs/workflow/
description : docs/workflow/discovery-create.md
# Ordered list of inputs the command accepts
description : Jira epic key (e.g., CC-60)
# Ordered list of outputs the command produces
- name : discovery-document
path : " /epics/Discovery/{epic-key}/ "
description : Published Confluence discovery document
# Backend capabilities this command depends on
# Valid values: ticketing, documentation, or empty list
# Command lifecycle status (default: existing)
# CLI syntax hint shown in help text
argument-hint : " <epic-key> "
# Whether this command is invoked multiple times per epic (default: false)
Field
Type
Required
Default
Constraints
command
string
yes
—
Format {phase}:{action} or bare name for utilities. Unique across all definitions.
phase
string
yes
—
One of: intake, discovery, planning, execution, retrospectives. Required for phase commands. Omit for utility commands.
path
string
yes
—
Relative path from repo root to the .md command file. Must resolve to an existing file when status: existing. When status: planned, the path is not required to resolve to an existing file.
description
string
yes
—
Relative path from repo root to the overview .md in docs/workflow/. Must resolve to an existing file.
inputs
list
yes
—
Ordered list of input objects. May be empty ([]).
inputs[].name
string
yes
—
Kebab-case identifier.
inputs[].type
string
yes
—
One of: string, url, list[url], list[string], flag.
inputs[].required
boolean
yes
—
Whether the input must be provided.
inputs[].description
string
yes
—
Human-readable description of the input.
outputs
list
yes
—
Ordered list of output objects. May be empty ([]).
outputs[].name
string
yes
—
Kebab-case identifier.
outputs[].type
string
yes
—
One of: url, document, tickets, report, file.
outputs[].path
string
no
—
Template path for the output location. Supports {input-name} interpolation.
outputs[].description
string
no
—
Human-readable description of the output.
requires
list
yes
—
Backend capabilities needed. Valid values: ticketing, documentation. Empty list ([]) if no backends needed.
status
string
no
existing
One of: existing, planned, deprecated.
argument-hint
string
no
—
CLI syntax hint (e.g., <epic-key>).
repeat
boolean
no
false
true if the command is invoked multiple times per epic (e.g., per-ticket commands).
Type
Description
Example
string
Single string value
CC-60
url
Single URL
https://confluence/doc
list[url]
Space-separated URLs
url1 url2 url3
list[string]
Space-separated strings
--decision=D1:B --decision=D2:Y
flag
Boolean flag
--list, --check, --graph
Type
Description
url
A URL to a published document or page
document
A generated document (Confluence page, local markdown)
tickets
Jira tickets created in the ticketing system
report
A generated report (completion report, retrospective)
file
A local file produced on disk
The manifest at commands/workflow-manifest.yaml defines the phase DAG and command ordering.
# Manifest schema version
# Ordered phases forming the workflow DAG
# Relative path to the phase overview markdown
description : docs/workflow/intake-phase.md
# Phase dependencies (empty = entry point)
# Whether this phase runs once per project (vs. per-epic)
# Ordered list of commands in this phase
- command : " intake:document-codebase "
definition : commands/intake/document-codebase.yaml
- command : " intake:capture-behavior "
definition : commands/intake/capture-behavior.yaml
- command : " intake:create-system-description "
definition : commands/intake/create-system-description.yaml
description : docs/workflow/discovery-phase.md
strength : recommended # Not strictly required, but recommended
optional : true # Phase can be skipped entirely
role : prerequisite # Feature-forge identifies unknowns that trigger discovery
- command : " discovery:create "
definition : commands/project/discovery/create.yaml
- command : " discovery:synthesize "
definition : commands/project/discovery/synthesize.yaml
- command : " discovery:approve "
definition : commands/project/discovery/approve.yaml
# Utility commands not tied to a specific phase
definition : commands/common-ground.yaml
invocation : on-demand # Can be invoked at any point
Field
Type
Required
Description
version
string
yes
Manifest schema version. Currently "1.0".
phases
map
yes
Ordered map of phase name → phase definition.
phases.<name>.description
string
yes
Path to the phase overview markdown.
phases.<name>.depends_on
list
yes
Phase dependencies. Empty list for entry points.
phases.<name>.depends_on[].phase
string
yes
Name of the dependency phase.
phases.<name>.depends_on[].strength
string
yes
required or recommended.
phases.<name>.run_once
boolean
no
true if the phase runs once per project. Default false.
phases.<name>.optional
boolean
no
true if the phase can be skipped. Default false.
phases.<name>.external_skills
list
no
Skills from outside the workflow that feed into this phase.
phases.<name>.external_skills[].skill
string
yes
Skill name.
phases.<name>.external_skills[].role
string
yes
Relationship: prerequisite, companion, output-consumer.
phases.<name>.commands
list
yes
Ordered list of commands in this phase.
phases.<name>.commands[].command
string
yes
Command identifier matching the YAML definition’s command field.
phases.<name>.commands[].definition
string
yes
Relative path to the command’s .yaml definition file.
utilities
list
no
Commands not tied to a phase.
utilities[].command
string
yes
Command identifier.
utilities[].definition
string
yes
Path to the command’s .yaml definition file.
utilities[].invocation
string
yes
Invocation pattern: on-demand, scheduled, triggered.
No cycles: The depends_on graph must be a DAG. A phase cannot transitively depend on itself.
Command uniqueness: Every command value across all phases and utilities must be unique.
Path resolution: All definition and description paths must resolve to existing files.
Phase reference validity: Every depends_on[].phase must reference a phase defined in the manifest.
Definition consistency: Each commands[].command must match the command field inside the referenced YAML definition file.
Status gating: Commands with status: planned should be flagged as unavailable when the manifest is consumed at runtime.