autofeat docs
Use autofeat

Agents and models

Which agents autofeat runs, and how to pin a model.

Agents run inside the executor. You name them in .autofeat/config.yml on the default branch. A directive cannot pick an agent that policy does not allow.

Recognised agents

NameRole
opencodeDefault agent. The only agent that takes a provider + model pair.
claudeSubscription login on the hosted runner, or api_key.
codexSubscription login on the hosted runner, or api_key.
kimiSubscription login on the hosted runner, or api_key. Not in the default allow list.
grok-buildSubscription login on the hosted runner, or api_key.

agents.allowed defaults to [opencode, claude, codex, grok-build]. Add kimi there before you select it. agents.default must be one of agents.allowed. The default is opencode.

agents.billing maps a name to subscription or api_key. A name you omit is api_key. Keys must be in agents.allowed. Hosted subscription logins for claude, codex, kimi, and grok-build belong to the operator. See Budgets and billing.

agents.models

Each entry is an object. Both fields are optional.

FieldMeaning
modelThe agent CLI's own model id, for example sonnet.
providerA provider name. Requires model. Only opencode accepts this pair.

An empty entry means no --model flag: the agent CLI default applies. opencode with no entry falls back to models.default.

Names in agents.models must be in agents.allowed. Config load errors on any other name.

agents:
  default: opencode
  allowed: [opencode, claude, codex, grok-build, kimi]
  billing:
    claude: subscription
    codex: subscription
    kimi: subscription
    grok-build: subscription
    opencode: api_key
  models:
    claude: { model: sonnet }
    opencode: { provider: openrouter, model: deepseek-v4-pro }

opencode's pair must be models.default or an entry in models.allowed. If you omit models.allowed, the only permitted pair is models.default.

models

models.default is a provider and a model. Defaults: openrouter and deepseek-v4-pro.

models.allowed is a list of the same shape. Omit it and config load sets it to [models.default]. An explicit empty list is invalid, because models.default must be in the list.

API-key USD estimates exist only for the priced ids in Budgets and billing. An unknown id on the api_key path is refused before the run starts.

Methods

methods maps an action to one method. Omit it (methods: {}) and each action uses its default.

ActionDefault methodMethods policy accepts
plansinglesingle, orchestrate
implementorchestratesingle, orchestrate
testsinglesingle, orchestrate
reviewdelegatedelegate
gatenativenative
mergenativenative
haltnativenative

native review is refused. The enum also contains flow. Policy refuses flow. Do not set it.

policy.mode: review_only (the default) permits review, gate, merge, and halt. It forbids plan, implement, and test. policy.mode: full permits write actions. entry_action must be in the permitted set. The default entry is review.

orchestrate.max_workers defaults to 4 (at least 1). It caps workers for the orchestrate method.

policy.reviewer can pin who reviews: provider, model, must_differ_from (producer model ids the reviewer must not share), and severity_threshold (info, low, medium, high, critical; default high). policy.reviewer.model must not appear in must_differ_from.

On this page