← All features

Run the agentsAvailable in v0.3.0

Difficulty, model and effort

Each task gets a tier — low, medium, high or max — and the tier picks the model and reasoning effort for each engine. Readable rules score four axes: kind, intensity, reasoning and risk. Effort is verified and never lowered silently, optional tier pools list models you have checked, and every run records where its tier came from.

When you need it

Running every task on the same model and effort either spends the strongest model on trivial edits or sends risky work to a weak one, and afterwards you cannot tell why a model was used.

How it works

  1. Rules score kind (for example docs, implementation, migration), intensity, reasoning and risk; oah recommend shows the score. Risk critical means max, and a migration or security task is at least high.
  2. oah packet new writes the stage routes into the packet's ## Plan. It has no --tier option; edit the generated plan to change a packet's tier.
  3. oah call uses the packet's stage tier, otherwise the rules; a call-time --tier overrides that choice for the run without rewriting the packet.
  4. A tier's effort is a level the engine lists for the model, and highest means the top level Codex lists. A lower launch effort fails with OAH_EFFORT_DOWNGRADED; an effort that cannot be observed, such as Claude Code's, is recorded as unverified.
  5. Optional [engines.<engine>.tier_pools] list the models you have checked for each tier; that tier runs the first one the CLI lists. oah never edits your pools.
  6. Each run record keeps the axes, the tier and its source (rules, packet, flag or jev), and the requested and effective model and effort.

Example

The plan line `oah packet new` printed in the worked example: engine and tier per stage.

OAH_PACKET_CREATED .oah/tasks/hello-name/PACKET.md
plan: initial → claude → medium; review → codex → medium; correction → codex → medium

Requirements

  • Claude Code and Codex CLI that report their models. oah models shows, and with --refresh rereads, the model each tier uses.
  • Optional: a pinned model per tier, tier pools and effort_caps in .oah/config.toml; the upgrade notes say these keep their meaning.

Limits and recovery

  • Without a Jev key, difficulty stays a count of files and paths, so a one-line concurrency fix can score low and a 20-file rename high.
  • When Codex has not reported reasoning levels, a highest tier refuses with OAH_EFFORT_METADATA_MISSING instead of guessing; an effort the model does not list gives OAH_EFFORT_UNSUPPORTED.
  • A pool that names no model the CLI lists gives OAH_MODEL_UNRESOLVED.
  • v0.3.0 uses benchmark scores for automatic model choice and optional Jev judgement for difficulty.

Original documents

Related