Syntax
Variables, targets, dependencies, and recipes — the building blocks of a Vibefile.
File name
The file must be named exactly Vibefile with no extension, placed at the repository root.
my-project/
└── Vibefile
Variables
Variables use KEY = value syntax. Substitute them anywhere with $(KEY):
ENV = production
deploy:
"deploy to $(ENV) on fly.io"
Targets
A target has this structure:
target-name [: dep1 dep2 ...]:
recipe
[directives]
- target-name — lowercase, hyphens allowed, must be unique within the file
- dependencies — space-separated list of other target names that must complete first
- recipe — double-quoted plain English string
- directives — optional modifiers prefixed with
@
Dependencies
Dependencies are declared after the target name, separated by a colon:
deploy: test build
"deploy to production"
deploy will not run until test and build have both completed successfully. Identical to Makefile behaviour.
Recipe
The recipe is a double-quoted plain English string. It is sent to the LLM along with repo context to generate the implementation at runtime:
seed:
"populate the database with realistic fake data for 10 users"
Multi-line recipes use continuation indentation:
release: test build
"bump the version, update the changelog,
tag the commit, and push to origin"
Model configuration
The model is declared at the top of the Vibefile. It is not a secret and belongs in the file:
model = claude-sonnet-4-6
deploy:
"deploy to production"
Individual targets can override the top-level model:
model = claude-haiku-4-5
release: test build
model = claude-opus-4-6
"bump version, update changelog, tag, push, open release PR"
Complete example
# Vibefile
model = claude-sonnet-4-6
project = my-saas-app
env = production
# ── tasks ────────────────────────────────────────────────
build:
"compile and bundle the project for $(env)"
test:
@skill python-test
seed: build
"populate the database with realistic fake data for 10 users"
migrate: build
"run any pending database migrations safely"
deploy: test build
"deploy to $(env) on fly.io and verify the app came up healthy"
@require clean git status
@mcp fly-mcp
review:
"open a PR, write a summary of changes, request review from the team"
@mcp github-mcp
release: test build
@skill python-publish
"also update the changelog and tag the commit"
@require clean git status