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-branch

Notes

  • Every key is optional. The defaults match the example above.
  • domains drives which domain architects pipemason invokes during plan. Removing one means that domain won't be planned for or implemented.
  • Wildcards in allowed_commands are shell-glob, not regex.
  • Setting gates.X.block: false doesn'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).