Harness
Configuration

Five kinds of project, and why a preset leaves your config file short.

View raw Markdown · llms.txt · For agents

loop init writes loop.config.yaml from a preset, and a preset is a set of defaults, not a template to fill in. Everything the preset already says is left out of the file it writes, so the config diff a reviewer reads shows what this project decided differently — and nothing else.

npx ak-harness loop init --preset monorepo
npx ak-harness loop init --dry-run          # print what it would write
PresetShapes it assumes
web-appAn app with a build and a test suite, a base branch, CI as the gate
libraryA package with a strict suite and a changelog; documentation matters more than deploys
monorepoMany packages: layers are worth drawing, and a layer's own test closes an issue
data-pipelineLong-running jobs, fixtures, verification that is not "run the tests"
mobileA build that is slow enough that the cheap check before the expensive review matters most

The preset sits below every layer as extends:: anything the project, team or machine states wins over it.

What loop init asks

Only what a preset cannot answer:

  • the repository (owner/name) and the project name;
  • the tracker team key and workspace;
  • whose queue this machine drains.

Everything else has a default that is right often enough to be a default. --global also creates ~/.agentskit/harness.yaml when it does not exist — the providers, binaries and channels that belong to the machine rather than to any one project.

Growing out of a preset

The two knobs worth turning first both raise the bar rather than the spend:

dod:
  items:
    - { id: tests, description: the suite is green, kind: command, command: [pnpm, test] }

delivery:
  review:
    minSeverity: med        # nit < med < high < blocker

And the one worth turning when a monorepo starts to hurt:

layers:
  - id: L2-runtime
    label: 'layer:L2'
    paths: ['packages/runtime/**']
    verify: pnpm test packages/runtime

After that, read the configuration reference: it is generated from the schema, so it is never ahead of or behind the code.

On this page