itera.yml Guide
itera.yml and itera.yaml are the root-level config files that tell Itera how to resolve your project root, package manager, install behavior, dev command, and quality commands.
Use this page for practical setup patterns. Use the itera.yml reference for exact defaults and edge cases.
Before you write the file
- Put the file at the repository root. Iteration Service does not search nested folders.
- If both
itera.yamlanditera.ymlexist, Iteration Service loadsitera.yaml. - Keep the file small. Only set fields that remove ambiguity in your repo.
- Prefer
scriptoverrunwhen a normal package script works. - Do not try to override the install command text. Itera manages install commands itself.
Minimal recommended example
For a single-package app, start with the smallest file that makes your runtime obvious:
version: 1
project:
packageManager: npm
commands:
dev:
script: devWhy this is usually enough:
version: 1is required.project.packageManagerremoves guesswork when multiple lockfiles or package-manager hints exist.commands.dev.scripttells Itera to run your real dev script instead of falling back to generic heuristics.installis intentionally omitted because Itera resolves it automatically.
If your app lives in a subdirectory, add project.root.
Monorepo example
For a monorepo, the most important decision is often where install runs. If dependencies are installed from the workspace root, point install there explicitly and keep app commands on the project root.
version: 1
project:
root: apps/web
packageManager: pnpm
commands:
install:
cwd: repo_root
dev:
script: dev
quality:
lint:
script: lint
typecheck:
script: type-checkWhat this does:
project.rootmakesproject_rootresolve toapps/web.commands.install.cwd: repo_rootkeeps the managed install command at the workspace root.dev,lint, andtypecheckrun fromproject_rootby default, so no extracwdis needed.
Use cwd: repo_root on individual commands only when the script itself must execute from the workspace root.
Strict-mode example
Strict mode is useful when you want Itera to fail instead of inferring missing commands.
version: 1
project:
root: apps/iter_web
packageManager: npm
commands:
install:
cwd: repo_root
dev:
script: dev
args:
- --host
- 0.0.0.0
quality:
lint:
script: lint:ci
typecheck:
script: type-check
defaults:
onMissing: strictThis pattern matches real first-party usage closely:
- Install is still managed by Itera, but strict mode requires enough information to resolve it.
devis explicit, so Itera does not need to guess betweendev,start, or a fallback tool.- Quality commands are explicit instead of relying on conventional script-name inference.
How command resolution works
Most command types follow this order:
- Use
commands.<name>.runwhen it is non-empty and notauto. - Otherwise use
commands.<name>.script. - Otherwise look for conventional
package.jsonscripts. - Otherwise use a built-in heuristic if one exists.
- Otherwise fall back to the current Itera profile when strict mode does not block fallback.
Important exceptions:
installis special. Explicitcommands.install.runandcommands.install.scriptare rejected.devcan inherit default args of--port 3000 --host 0.0.0.0when Itera resolves it throughscript,package.json, or the Vite heuristic.- Fast quality commands only cover
quality.format,quality.lint, andquality.typecheck. testdoes not have a current-profile fallback in the current Iteration Service resolver.
cwd constants
Command cwd values accept normal repo-relative paths plus two built-in constants:
repo_root: the repository rootproject_root: the effective project root
project_root comes from project.root when you set it. If you leave project.root at . and Iteration Service is already scoped to a nested app path, that active app path becomes the effective project root.
Unsupported or misleading patterns
Avoid these configurations:
commands.install.run: npm installcommands.install.script: autocommands.install.script: installcommands.install.args: [...]if you expect those args to change the managed install command- Arbitrary shell commands such as
python -c ...incommands.dev.run,commands.test.run, orcommands.quality.*.run
The supported way to influence install behavior is:
- Set
project.packageManagerexplicitly when auto-detection is ambiguous. - Set
commands.install.cwdtorepo_root,project_root, or a repo-relative directory when install must run somewhere specific.
Product Agent scope
The full itera.yml contract is broader than what Product Agent currently consumes directly.
- Iteration Service uses install, dev, readiness, and runtime fallback behavior.
- Product Agent's code-change flow only merges the fast quality command set with request execution-policy fields such as
project_root,strict_mode, andallowed_commands.
If you are troubleshooting Product Agent behavior, do not assume that commands.dev, commands.install, or commands.dev.readyUrl will affect it.