otto.yml at its root. In it you can:
- Set the review depth for the repository and for individual paths
- Add review instructions for the repository and for individual paths
- Ignore files such as lockfiles, snapshots, and generated code
- Skip automatic reviews by label, title, branch, or author
- Limit when Otto approves
otto.yml, Otto reviews the repository with your workspace settings.
Quick start
Createotto.yml at the repository root and merge it into your default branch:
otto.yml
Full example
otto.yml
Reference
Any field that takes a list also accepts a single string, so
ignore: '**/*.snap' works too.
Limits
List entries past a limit are ignored, and the rest of the list still applies. An
instructions value over 4,000 characters is ignored entirely, not truncated. Each is reported as an error.
Where Otto looks
Otto readsotto.yml from the repository root. It also accepts otto.yaml; if both exist, otto.yml wins. The file must be a regular file, not a symlink.
Which version applies
Otto readsotto.yml from the pull request’s base commit: the merge-base of the PR branch and its target branch. It never reads the PR’s own copy, so a pull request can’t change how it is itself reviewed. A PR that sets enabled: false or lowers depth is still reviewed with the configuration it started from.
After you merge an otto.yml change into the target branch, it applies to:
- New pull requests.
- Existing pull requests once they are rebased onto, or merge in, the updated target branch.
Globs
Globs inpaths, ignore, and the branch skip rules match the file’s full path from the repository root:
* stays inside one path segment; ** crosses segments. For branches, globs match the branch name without refs/heads/, so release/* matches release/1.2 but not release/1.2/hotfix.
YAML notes
Otto parsesotto.yml with strict, JSON-compatible YAML:
- Booleans are only
trueandfalse.yes,no,on, andoffare strings, soenabled: nois an error and the default (true) applies. - Quote globs that start with
*,{, or[, which YAML would otherwise treat as syntax:ignore: ['**/*.snap']. - Use
|for multi-line instructions.
Errors
A brokenotto.yml never stops a review. Otto ignores each invalid or unknown part, keeps the rest, and uses your workspace settings for anything it ignored:
- An invalid value (for example
depth: maximum) is ignored, and that field falls back to its default. - An invalid entry in a list is dropped on its own; the rest of the list still applies.
- A path rule without any valid
matchglob is ignored. - An unknown key is ignored.
- If the file isn’t valid YAML, is larger than 64 KB, or can’t be read, Otto reviews with your workspace settings only.
