Manifest Schema — V1
The .claude/project.yml file tells the control plane how to run
a project. Source file: spec/v1/manifest.schema.json.
Download raw schema:
manifest.schema.json
(generated from packages/schema/ via pnpm spec:generate).
ProjectManifest
| Field | Type | Required | Default |
|---|---|---|---|
name | string | yes | — |
type | string | yes | — |
spec_version | string | no | 1.x |
linear_team | string | yes | — |
discord_channel | string | yes | — |
git | object | yes | — |
agents | object | yes | — |
skills | array | yes | — |
template | object | no | — |
deploy | object | no | — |
ci | object | no | — |
budgets | object | no | {"iteration_cap":3} |
cheap_mode | object | no | {"enabled":false} |
watchdog | object | no | {"silence_threshold_ms":300000} |
Field details
name
Lowercase slug for the project. Pattern: ^[a-z][a-z0-9-]*$.
Must match the project's slug in the control plane DB.
type
Project template type. One of: mobile-web, salesforce-demo, web-only, custom.
agents
Per-task agent config. dev_task is required; all others are
optional and fall back to the control plane's default routing.
budgets
Cost guardrails. iteration_cap limits how many times the
executor retries a task before marking it failed (default: 3).
daily_minutes / monthly_minutes are wall-clock
caps.
cheap_mode
When enabled: true, the control plane substitutes a cheaper
model for all tasks. Used to conserve quota when not actively developing.
watchdog
The watchdog monitors executor silence. If no event is emitted for silence_threshold_ms milliseconds (default: 300 000 = 5 min),
the run is killed and marked failed.
Example
name: sample-app
type: web-only
spec_version: "1.x"
linear_team: SAM
discord_channel: "1234567890"
git:
remote: "https://github.com/tmart2322/sample-app.git"
default_branch: main
agents:
dev_task:
provider: claude-code
model: claude-sonnet-4-5
skills:
- core:dev-task
- core:write-feature
budgets:
iteration_cap: 3
daily_minutes: 60