Blueprints
YAML state machines that define agent workflows.
What Is a Blueprint?
A blueprint is a YAML file that defines a workflow — a sequence of steps that Tack executes to turn an objective into merged code. You do not need to write blueprints to use Tack (it ships working defaults), but understanding them helps you customize the workflow.
The key idea: blueprints make the workflow explicit and inspectable. Every step is declared in YAML. You can see exactly what will happen, in what order, and what happens when things fail.
Blueprint Identity
Every blueprint has an id. This is the public identity used when selecting a blueprint — filenames are organizational only.
id: build-review
name: Build and reviewTwo blueprints with the same id are the same blueprint, regardless of their filenames. This is how overrides work.
Step Types
| Type | What It Does | Example |
|---|---|---|
agent | Spawns an AI agent with a specific role | planner, builder, reviewer, scout |
deterministic | Runs infrastructure logic | quality gates, merge queue, PR creation |
human | Pauses for human approval | plan approval gate |
blueprint_ref | Invokes another blueprint by id | per-work-item fanout |
Default Blueprints
Tack ships two blueprints that work together:
standard — The Top-Level Workflow
This is what runs when you submit an objective. It handles the full lifecycle:
id: standard
default: true
steps:
- id: plan
type: agent
role: planner
next: approve
- id: approve
type: human
next: execute
- id: execute
type: blueprint_ref
ref: build-review
foreach: work_item
on_work_item_failure: escalate
- id: merge
type: deterministic
action: merge_queue
- id: pr
type: deterministic
action: create_pr
- id: complete
type: deterministic
action: mark_completeThe foreach: work_item on the execute step is what makes streams run in parallel — each work item (stream) gets its own execution of the build-review blueprint.
build-review — The Per-Stream Workflow
This runs for each stream independently:
id: build-review
name: Build and review
retry:
profile: self_healing
steps:
- id: build
type: agent
role: builder
commit: auto
messages:
commit: true
next: lint
- id: lint
type: deterministic
action: run_quality_gates
retry:
max_attempts: 2
on_fail: build
max_fix_iterations: 3
next: review
- id: review
type: agent
role: reviewer
commit: none
on_fail: build
max_fix_iterations: 3
next: merge_ready
- id: merge_ready
type: deterministic
action: signal_merge_readyWalkthrough of the steps:
- build — the builder agent implements the stream's task and commits
- lint — quality gates run; on failure, jump back to
buildwith the gate output (up to 3 fix iterations) - review — the reviewer agent checks the implementation; on rejection, jump back to
buildwith feedback (up to 3 fix iterations) - merge_ready — signals that this stream is ready to merge
Customizing Blueprints
You can override shipped blueprints or add new ones. Place files in .tack/blueprints/ (per-project) or ~/.config/tack/blueprints/ (per-user).
Blueprints override by id, not filename. To replace the shipped build-review, create a file with id: build-review:
# .tack/blueprints/review-lite.yaml
id: build-review
name: Review lite — skip review for faster iteration
retry:
profile: balanced
steps:
- id: build
type: agent
role: builder
commit: auto
next: lint
- id: lint
type: deterministic
action: run_quality_gates
retry:
max_attempts: 3
on_fail: build
max_fix_iterations: 5
next: merge_ready
- id: merge_ready
type: deterministic
action: signal_merge_readyThis version drops the review step entirely. The blueprint id is still build-review, so it replaces the shipped workflow for this project.
See Custom Blueprints for more examples.
Default Resolution
When an objective starts, Tack resolves which blueprint to use:
- If the objective explicitly requested
--blueprint <id>, use that - Otherwise, if exactly one blueprint is loaded, use it
- Otherwise, exactly one loaded blueprint must set
default: true
If no default exists or multiple blueprints claim default, Tack returns an error. Fix this by either passing --blueprint explicitly or ensuring exactly one blueprint has default: true.
Step Options Reference
Agent Steps
| Field | Description |
|---|---|
role | Agent role: planner, builder, reviewer, scout |
commit | Commit mode: auto (default), agent, or none |
model | Optional model override for this step |
messages | Structured outputs to request: commit: true for commit messages |
message_source | Where to derive structured messages from |
on_fail | Step to jump to on failure (enables fix loops) |
max_fix_iterations | Cap on fix-loop cycles |
tools | Tool include/exclude lists for this step |
optional | Allow the step to be skipped without failing |
Deterministic Steps
| Field | Description |
|---|---|
action | What to run: dispatch_streams, run_quality_gates, signal_merge_ready, merge_queue, create_pr, mark_complete |
retry.max_attempts | Retry budget for this step |
retry.on_exhausted | What to do when retries run out: ask_human, escalate, fail |
retry.human_guidance_mode | How guidance is attached on resume |
on_fail | Step to jump to on failure |
max_fix_iterations | Cap on fix-loop cycles |
Blueprint Reference Steps
| Field | Description |
|---|---|
ref | Nested blueprint id to invoke |
foreach | Currently work_item — runs the blueprint once per stream |
on_work_item_failure | escalate (continue other streams) or fail (fail the run) |
escalation.context | How much context to include: full, minimal, or error_only |
escalation.include_agent_history | Include worker history in escalation payload |
Retry Profiles
Blueprints can set a retry profile that controls the recovery posture:
| Profile | Max Attempts | Use For |
|---|---|---|
strict | 2 | Critical paths where failures are serious |
balanced | 4 | Default for top-level workflows |
self_healing | 6 | Per-stream loops where failures are expected and fixable |
retry:
profile: self_healing
default_max_attempts: 4
default_on_exhausted: ask_humanSee Recovery & Retries for how retry profiles map to failure kinds and recovery actions.