config.yaml
config.yaml at the project root holds workspace defaults; CLI flags win.
It travels with the project — in the desktop app, editing a Project setting
edits this file, and it ships to the team via Publish.
flows: [flows/] # where tests liveincludeTags: [smoke] # default tag filterexcludeTags: [wip]
env: # available as ${VAR} inside flows STAGING_URL: https://staging.example.com
ai: # enables assertWithAI / --analyze endpoint: https://ai.internal:8000/v1 model: qwen3-coder.env and environments
Section titled “.env and environments”Real values — credentials, anything that must not be committed — live in a
.env file (plain KEY=VALUE lines, kept in .gitignore) next to the flow or
project root. Flows and config.yaml are shared, so they carry placeholders;
.env stays local. An environments: block names alternative value sets:
environments: staging: { URL: https://staging.example.com } prod: { URL: https://example.com }Values resolve weakest to strongest: params: defaults < flow env: <
config env: < .env < --env-set NAME < --env-file FILE < -e KEY=VAL.
The nearest config.yaml and .env are found by walking up from the flow, and
the same chain applies in test, run, and the MCP run_flow.
env.STAGING_URL is the address the desktop’s Record uses as the project’s
Staging target: recorded flows start with openLink: ${STAGING_URL}, so
repointing staging is a one-line change for every test at once.