Vibestrate
Vibestrate
docs
Documentation

project.yml schema

The Zod-derived schema for .vibestrate/project.yml. Defaults are the values Vibestrate fills in when the key is missing.

Source: src/project/config-schema.ts 27 top-level keys

Every field on this page is derived from the runtime Zod schemas that validate project.yml on every load. When you edit the YAML by hand, Vibestrate runs these schemas against it; broken configs fail at load time, not mid-run.

To edit safely, use vibe config get and vibe config set - both go through the same schema.

project
object
project.name
string
project.type
string (optional)
default: "generic"
git
object (optional)
default: {"mainBranch":"main","branchPrefix":"vibestrate/","worktreeDir":"../.vibestrate-worktrees","requireCleanMain":false,"allowAutoMerge":false,"allowAutoPush":false}
git.mainBranch
string (optional)
default: "main"
git.branchPrefix
string (optional)
default: "vibestrate/"
git.worktreeDir
string (optional)
default: "../.vibestrate-worktrees"
git.requireCleanMain
boolean (optional)
default: false
git.allowAutoMerge
boolean (optional)
default: false
git.allowAutoPush
boolean (optional)
default: false
git.linkEnvironment
enum (optional)
values: auto | off
default: "auto"
git.snapshotRetentionRuns
number (optional)
default: 0
workflow
object (optional)
default: {"id":"default-plan-build-review","maxReviewLoops":null,"requireHumanMerge":true}
workflow.id
string (optional)
default: "default-plan-build-review"
workflow.maxReviewLoops
number | null (optional)
default: null
workflow.requireHumanMerge
boolean (optional)
default: true
execution
object (optional)
default: {"backend":"local-worktree"}
execution.backend
enum (optional)
values: local-worktree | docker | remote-sandbox | cloud-runner
default: "local-worktree"
execution.isolation
enum (optional)
values: off | sandboxed
default: "off"
execution.container
object (optional)
default: {}
execution.container.image
string (optional)
default: "node:22-bookworm-slim"
execution.container.onUnavailable
enum (optional)
values: fail | degrade
default: "fail"
execution.container.readonlyRoot
boolean (optional)
default: true
execution.container.pidsLimit
number (optional)
default: 512
providers
record<string, unknown>
profiles
record<string, unknown> (optional)
default: {}
crews
record<string, object> (optional)
default: {}
defaultCrew
string (optional)
default: "default"
defaultFlow
string | null (optional)
default: null
personas
record<string, object> (optional)
default: {}
defaultPersona
string (optional)
default: "staff-engineer"
projectPolicies
array<unknown> (optional)
default: []
flowSizing
enum (optional)
values: off | deterministic | assisted
default: "deterministic"
adaptiveSpecUp
enum (optional)
values: off | auto
default: "auto"
ponytail
boolean (optional)
default: true
budget
object (optional)
default: {"spendCapDailyUsd":null,"capAction":"stop","warnThresholdPct":0.8}
budget.spendCapDailyUsd
number | null (optional)
default: null
budget.capAction
enum (optional)
values: stop | downgrade-model | reduce-effort
default: "stop"
budget.warnThresholdPct
number (optional)
default: 0.8
budget.fallbackProfile
string (optional)
budget.maxTurnsPerRun
number | null (optional)
default: null
budget.maxWallClockMinPerRun
number | null (optional)
default: null
budget.maxTurnsPerDay
number | null (optional)
default: null
budget.maxWallClockMinPerDay
number | null (optional)
default: null
budget.onLimit
enum (optional)
values: stop | pause
default: "stop"
supervised
object (optional)
default: {}
supervised.maxSpendUsd
number | null (optional)
default: null
supervised.maxSteps
number | null (optional)
default: 20
supervised.supervisor
object (optional)
default: {}
supervised.supervisor.enabled
boolean (optional)
default: true
supervised.supervisor.profile
string | null (optional)
default: null
supervised.supervisor.roleId
string (optional)
default: "reviewer"
resilience
object (optional)
default: {}
resilience.enabled
boolean (optional)
default: true
resilience.onExhausted
enum (optional)
values: fail | pause
default: "fail"
resilience.autoFallback
enum (optional)
values: off | crew | any
default: "crew"
resilience.rateLimit
object (optional)
default: {"maxRetries":5,"baseDelayMs":2000,"maxDelayMs":120000,"respectRetryAfter":true,"patterns":[]}
resilience.rateLimit.maxRetries
number
resilience.rateLimit.baseDelayMs
number
resilience.rateLimit.maxDelayMs
number
resilience.rateLimit.patterns
array<string> (optional)
default: []
resilience.rateLimit.fallbackProfile
string | null (optional)
default: null
resilience.rateLimit.respectRetryAfter
boolean (optional)
default: true
resilience.transient
object (optional)
default: {"maxRetries":4,"baseDelayMs":1000,"maxDelayMs":60000,"patterns":[]}
resilience.transient.maxRetries
number
resilience.transient.baseDelayMs
number
resilience.transient.maxDelayMs
number
resilience.transient.patterns
array<string> (optional)
default: []
resilience.transient.fallbackProfile
string | null (optional)
default: null
resilience.usageLimit
object (optional)
default: {}
resilience.usageLimit.action
enum (optional)
values: stop | wait | fallback
default: "stop"
resilience.usageLimit.maxWaitMin
number (optional)
default: 60
resilience.usageLimit.maxWaits
number (optional)
default: 2
resilience.usageLimit.fallbackProfile
string | null (optional)
default: null
resilience.usageLimit.patterns
array<string> (optional)
default: []
session
object (optional)
default: {}
session.maxReuseTurns
number (optional)
default: 0
commands
object (optional)
default: {"validate":[]}
commands.validate
array<string> (optional)
default: []
commands.scopeValidationByChange
boolean (optional)
default: true
commands.validationProfiles
record<string, object> (optional)
default: {}
permissions
object (optional)
default: {"profiles":{}}
permissions.profiles
record<string, object> (optional)
default: {}
policies
object (optional)
default: {"forbidMainBranchWrites":true,"forbidSecretsAccess":true,"forbidAutoPush":true,"forbidAutoMerge":true,"preserveArtifacts":true,"requireApprovalAtStages":[],"allowInteractiveTerminal":false}
policies.defaultPermissionMode
enum (optional)
values: read-only | ask | accept-edits | auto
default: "auto"
policies.forbidMainBranchWrites
boolean (optional)
default: true
policies.forbidSecretsAccess
boolean (optional)
default: true
policies.forbidAutoPush
boolean (optional)
default: true
policies.forbidAutoMerge
boolean (optional)
default: true
policies.preserveArtifacts
boolean (optional)
default: true
policies.requireApprovalAtStages
array<enum> (optional)
default: []
policies.allowInteractiveTerminal
boolean (optional)
default: false
policies.strictApplyOnly
boolean (optional)
default: false
policies.hardenReadOnlySeats
boolean (optional)
default: false
policies.unattendedApprovalTimeoutMs
number (optional)
default: 0
policies.protectedPaths
array<string> (optional)
default: []
policies.unprotectedPaths
array<string> (optional)
default: []
posture
object (optional)
default: {"autoApplySandbox":false,"autoApplyApproval":false}
posture.autoApplySandbox
boolean (optional)
default: false
posture.autoApplyApproval
boolean (optional)
default: false
scheduler
object (optional)
default: {"maxConcurrentRuns":1,"maxConcurrentWriteRoles":1,"conflictPolicy":"warn","queuePolicy":"fifo","sourceQuotas":{}}
scheduler.maxConcurrentRuns
number (optional)
default: 1
scheduler.maxConcurrentWriteRoles
number (optional)
default: 1
scheduler.conflictPolicy
enum (optional)
values: warn | block
default: "warn"
scheduler.queuePolicy
enum (optional)
values: fifo | priority | fair
default: "fifo"
scheduler.sourceQuotas
record<string, number> (optional)
default: {}
scheduler.defaultSourceConcurrency
number (optional)
editor
object (optional)
default: {"enabled":false,"command":"code","args":["--goto","{file}:{line}:{column}"]}
editor.enabled
boolean (optional)
default: false
editor.command
string (optional)
default: "code"
editor.args
array<string> (optional)
default: ["--goto","{file}:{line}:{column}"]
commits
object (optional)
default: {"coAuthor":true,"coAuthorName":"Vibestrate","coAuthorEmail":"[email protected]"}
commits.coAuthor
boolean (optional)
default: true
commits.coAuthorName
string (optional)
default: "Vibestrate"
commits.coAuthorEmail
string (optional)
default: "[email protected]"
merge
object (optional)
default: {}
merge.advisor
object (optional)
default: {}
merge.advisor.suggestIntegrationBranchWhen
object (optional)
default: {"filesTouched":25,"protectedPaths":true,"behindMain":50}
merge.advisor.suggestIntegrationBranchWhen.filesTouched
number (optional)
default: 25
merge.advisor.suggestIntegrationBranchWhen.protectedPaths
boolean (optional)
default: true
merge.advisor.suggestIntegrationBranchWhen.behindMain
number (optional)
default: 50
© 2026 Vibestrate · v0.68.0 Shonshon - Evolving Technologies