config
.pipeline/config.yml
Per-repo configuration written by pipemason init and intended to be checked into git. Every key has a sensible default; only override what your project genuinely needs.
Annotated example
# Domain detection — what pipemason will plan and implement for.
# 'pipemason init' pre-fills based on what it finds in your repo.
domains:
- web # package.json + Next/React
- api # package.json + a server framework
- mobile # Podfile + package.json (React Native) or .xcodeproj
- db # schema.sql / drizzle / prisma
- cloud # wrangler.toml / serverless.yml / terraform
# Default branch the runner targets for PRs.
default_branch: main
# How much retry headroom each phase gets before it escalates.
limits:
retry_budget_per_phase: 3
cost_ceiling_usd: 25.00 # per-program ceiling
story_timeout_seconds: 3600 # per-story wall clock
# Model tiering. Cheaper models for grunt work, smarter ones for
# decisions and reviews.
models:
default: claude-haiku-4-5
by_phase:
analyze: claude-sonnet-4-6
plan: claude-sonnet-4-6
contracts: claude-sonnet-4-6
review: claude-sonnet-4-6
security: claude-sonnet-4-6
by_risk:
high: claude-opus-4-7
# Commands the runner is allowed to execute during 'impl' / 'review' /
# 'verify' phases. Anything not in this allowlist requires escalation.
allowed_commands:
- "bun *"
- "npm *"
- "npx *"
- "git *"
- "gh *"
- "tsc *"
- "eslint *"
- "prettier *"
- "jest *"
- "vitest *"
- "playwright *"
- "maestro *"
# Gates: which checks must pass before each phase can advance.
# Setting a gate to 'block: false' demotes it from advance-blocker to
# warning-only.
gates:
typecheck: { block: true }
lint: { block: true }
tests_unit: { block: true }
tests_e2e: { block: false } # warn but don't block
security_high: { block: true }
license_block: { block: true }
pii_high: { block: true }
# Program-mode knobs.
program:
parallelism: 1 # max concurrent stories
branch_strategy: stacked # stacked | program-branchNotes
- Every key is optional. The defaults match the example above.
domainsdrives which domain architects pipemason invokes duringplan. Removing one means that domain won't be planned for or implemented.- Wildcards in
allowed_commandsare shell-glob, not regex. - Setting
gates.X.block: falsedoesn't skip the check — it still runs and writes to the verify report; it just doesn't hold the phase.
Heads-up
Do not commit secrets or absolute paths to
config.yml. Anything user-specific goes in shell env vars or a local override file (.pipeline/config.local.yml, gitignored).