Skip to main content
When Otto implements a ticket, it verifies the code (lint, build, and test commands) before opening a pull request. Customize this with a .otto/verify.yml file in your repository.
verify.yml applies to code Otto writes during ticket automation. It doesn’t affect pull request reviews; those are configured with otto.yml.

Quick start

Most repositories don’t need a verify.yml. Otto detects your project type and runs the usual commands. Add one only to change the defaults:
.otto/verify.yml

Reference

Full example

.otto/verify.yml

Auto-detection

When install and verify are omitted, Otto detects your project type: For Node.js, only scripts that exist in package.json are run. For Makefiles, only targets that exist are run.

Runtime versions

When runtime is omitted, Otto detects versions:
  • Node.js, checked in order: .node-version, .nvmrc, the nodejs entry in .tool-versions, then the major version in package.json engines.node.
  • .NET: sdk.version in global.json.
  • Go, Python, Rust: latest.
Runtimes are installed with mise, so any tool mise supports works in runtime, for example java: "21" or ruby: "3.3".

Partial configuration

Set only what you need; Otto auto-detects the rest:

How verification works

1

Install runtimes

Each version in runtime is installed with mise.
2

Install dependencies

install commands run in order and stop at the first failure.
3

Verify

verify commands run in order. Every result is collected; a failure doesn’t stop the rest.
4

Fix and retry

If any command fails, a fix agent gets the errors, corrects the code, and verification runs again, up to max_retries times.
5

Report

The results are included in the pull request description.

Best practices

  • Start with auto-detection. Add a verify.yml only when the defaults don’t fit.
  • Keep verify commands fast. Run lint, build, and unit tests; leave slow integration suites to CI.
  • Use enabled: false sparingly. Otto’s code won’t be checked before the PR opens.
  • Raise timeouts for large monorepos and max_retries for strict lint or build setups.