Workflow file
workflow.yaml is the orchestration envelope for one workflow.
Use it to define:
- workflow identity
- phases
- allowed relation subset
- agents
- artifact references
- connector subscriptions
- workflow shell UI defaults
workflow.yaml for artifact-local meaning such as:
- markdown document sections
- artifact-specific required fields
- bolt-specific execution output rules
- artifact detail metadata
Example
Top-level reference
| Key | Required | Purpose |
|---|---|---|
workflow | Yes | Metadata for the workflow |
phases | Yes | Ordered execution phases and their default agents |
relations | No | Built-in Fabriqa relation subset allowed in this workflow |
agents | Yes | Agent IDs mapped to SAF file paths |
artifacts | Yes | Artifact IDs mapped to schema file paths |
connectors | No | Workflow-subscribed connector kinds and their config-file refs |
ui | No | Workflow-specific sidebar defaults |
workflow
workflow contains the workflow’s identity and display metadata.
id,name, andversionare required.idmust be stable. Treat it like an API identifier.descriptionandiconare optional display metadata.
phases
Phases define the broad lanes of work in the workflow.
id,name, andagentare required.agentmust reference an entry inagents.
- high-level planning stages
- execution stages
- operations stages
- every fine-grained internal step in an agent prompt
- artifact-specific review states
relations
relations.allowed tells Fabriqa which built-in relation labels are valid in this workflow.
depends_onimplementsvalidatessupersedesrelated_to
relationsis optional.- If
relations.allowedis omitted, Fabriqa uses the full built-in vocabulary by default. - If
relations.allowedis present, it must be a subset of the built-in Fabriqa list. - Parent-child structure is not declared here. It is derived from
parentin artifact schema files. - Relation vocabulary is defined per workflow, not per artifact.
- Agents choose which allowed relation to use for each artifact instance.
- dependency links via
depends_on - execution or outcome links via
implements - evidence links via
validates - replacement links via
supersedes - loose cross-reference links via
related_to
- the relation language should be shared across the whole workflow instance
- the UI can attach stable meaning to the built-in relations
- agents can inspect one workflow-level contract instead of inferring relation meaning per artifact
agents
agents maps workflow agent IDs to SAF files.
workflow.yaml concise while letting each agent own its own generic kind, tool policy, and prompt file.
Each referenced SAF file declares:
agent.idagent.nameagent.kindsystem_prompttools
artifacts
artifacts maps artifact type IDs to schema files.
- Artifact IDs must match
artifact.idin each schema file. - Artifact parent-child relationships are derived from the schema files, not declared here.
connectors
connectors subscribes the workflow to built-in Fabriqa connector kinds.
filelinearjira
connectorsis optional.- Each entry points to a connector-specific config file.
- The workflow definition describes static mapping only.
- Workspace-level enable or disable state is not stored in the workflow definition.
- Connection selection, target workspace project selection, and other runtime settings live in Fabriqa after the workflow is activated on a workspace.
- Adding a new connector kind requires product implementation in Fabriqa.
- project artifacts into files
- map workflow artifacts into external systems
- keep workflow-specific field mapping close to the workflow definition
Definition vs runtime settings
Keep these concerns separate:- Workflow DSL:
- which connector kinds this workflow supports
- how artifact types map into a connector
- which templates or field mappings the connector uses
- Fabriqa workspace runtime:
- whether a connector is enabled for this workspace instance
- which account or connection is used
- which workspace project or target location is selected
- sync state and operational settings
File connector example
Future platform connector example
ui
ui controls workflow-specific sidebar defaults.
Use it to define:
- sidebar tab labels
- sidebar grouping options and default
- a workflow dashboard
- root artifact viewer tabs
- contextual artifact tree navigation
Product-defined surfaces
Fabriqa renders three workflow surfaces in V1:- a global sidebar
- a workflow dashboard
- root artifact viewer tabs
- the sidebar is the global entry point across the active workflow instance
- the dashboard is the status-oriented overview across workflow artifacts
- the artifact viewer is the contextual deep-work surface for one root context at a time
Artifact viewer UX contract
Fabriqa owns the artifact viewer layout in V1. The workflow author does not configure this in DSL, but should understand the product behavior:- the document stays on the left as the primary reading surface
- markdown sections render through Fabriqa’s markdown renderer in read-only mode
- metadata appears as a compact row under the title rather than large cards or chips
- child artifacts do not repeat inside the document body because hierarchy already lives in the tree
- the right rail holds contextual information for the selected artifact:
- root tree
- relations
- linked chats
- activity, collapsed by default
- the right rail is collapsible and resizable using Fabriqa’s shared separator styling
Root artifact viewer behavior
The root artifact viewer is not authored inworkflow.yaml. Fabriqa derives it from artifact hierarchy and phases.
When the user opens an artifact from the sidebar or dashboard:
- Fabriqa starts at the selected artifact.
- It walks up the parent chain.
- It stops at the first ancestor whose parent is in a different phase, or at the top root if there is no phase boundary.
- That ancestor becomes the viewer root.
- Fabriqa opens or focuses the viewer tab for that root artifact instance and auto-selects the originally clicked artifact in the tree.
- planning trees usually resolve to the top planning root such as an
intentorprd - execution outputs usually resolve to their execution anchor such as a
boltorrun - the product can show one coherent context tab instead of opening a new tab for every child artifact
- click a planning
storyunder anintenttree: Fabriqa opens theintentviewer and selects thestory - click a
walkthroughunder a constructionbolt: Fabriqa opens theboltviewer and selects thewalkthrough
ui.sidebar.allowed_group_by
allowed_group_by selects which built-in Fabriqa sidebar grouping modes are available in this workflow.
- these values are selected from a predefined Fabriqa list
allowed_group_byis optional; if you omit it, Fabriqa shows all built-in grouping modesdefaultselects the initial grouping from that predefined list or allowed subset- workflow authors cannot invent new grouping keys here
typephasestatus
allowed_group_byis optional. If omitted, Fabriqa can expose the full built-in list.defaultshould be one of theallowed_group_byvalues when you provide the subset.- the workflow definition chooses which built-in grouping modes are available
- the user can later switch between those allowed modes in the UI
allowed_group_bymakes it clear this is a subset of product-defined options- it matches the same subset language used by
relations.allowed - it avoids noisy per-option booleans such as
type_grouping_visible: true
How Fabriqa loads workflow.yaml
Load workflow envelope
Fabriqa reads
workflow.yaml first to establish the workflow ID, phases, allowed relations, connector subscriptions, and sidebar UI metadata.Load referenced files
Fabriqa resolves every referenced agent file, artifact schema file, and connector config file.
Build the artifact graph
Parent-child relationships are derived from each artifact schema file and indexed into the workflow definition.
Continue reading
Workflow DSL overview
Go back to the Workflow DSL overview.
Artifact schemas
Continue into the artifact model, document sections, and lifecycles.
Agents and connectors
See how SAF files, prompts, and templates complete the workflow definition.
Workflow glossary
Review core workflow terms while authoring.
