Skip to content

operator: default the ambient monitor to a cheap same-provider model#377

Merged
edwin-zvs merged 1 commit into
mainfrom
operator-monitor-cheap-default
Jun 6, 2026
Merged

operator: default the ambient monitor to a cheap same-provider model#377
edwin-zvs merged 1 commit into
mainfrom
operator-monitor-cheap-default

Conversation

@edwin-zvs

Copy link
Copy Markdown
Contributor

Follow-up to #376. The per-tick monitor triage was offloaded off the operator's context, but when AGENTD_OPERATOR_MONITOR_MODEL was unset it still ran on the operator's own frontier model. With the 60s active-fleet cadence (40ec9f6) that's a frontier call every minute.

Change

When AGENTD_OPERATOR_MONITOR_MODEL is unset, default to a cheaper tier on the same provider (auth already present):

operator provider default monitor model
codex-oauth gpt-5.4-mini
openai gpt-5-mini
anthropic claude-sonnet-4-5

Already-small operator models (*mini*/*nano*/*haiku*, or anthropic already on sonnet) and providers without an obvious cheap tier (gemini/ollama/unknown) keep the operator's model.

Why a startup health-check

A wrong model name resolves fine but 400s at call time — which would silently blind the monitor (every triage returns "nothing", operator never gets findings). So the resolved monitor model is health-checked once at startup (orchestrator-only — a tiny "reply ok" completion) and falls back to the operator's own model if it can't be resolved or doesn't answer. This makes the hardcoded defaults safe against drift / per-account differences.

Verified live (this codex-oauth / ChatGPT account)

This is why the health-check exists — guessing was wrong twice:

  • gpt-5-codex-mini, gpt-5-codex, gpt-5-mini, gpt-5.1-codex-mini, … → all 400 ("not supported when using Codex with a ChatGPT account").
  • The account's actual model list (~/.codex/models_cache.json) is gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex-spark. gpt-5.4-mini completes and passes the health-check.

On an identical fleet scan:

  • gpt-5.4-mini flagged the session blocked on › Write tests for @filename (quiet 30m) — the high-value catch.
  • gpt-5.5 flagged that plus a subtler opportunity (❯ restart agents to pick up the fix).

So the small default catches the "blocked/stuck" findings but is less exhaustive than frontier — the expected cost/quality tradeoff; override AGENTD_OPERATOR_MONITOR_MODEL for thoroughness.

Tests

default_monitor_spec mapping unit-tested (cheap tiers + already-small/unknown keep operator's model); 37 interactive tests pass; full build clean. Spec 0022 updated.

When AGENTD_OPERATOR_MONITOR_MODEL is unset, the per-tick triage ran on the
operator's own frontier model. Now it defaults to a cheaper tier on the SAME
provider (so auth is already present):

  codex-oauth -> gpt-5.4-mini
  openai      -> gpt-5-mini
  anthropic   -> claude-sonnet-4-5

Already-small operator models, and providers without an obvious cheap tier
(gemini/ollama/unknown), keep the operator's model.

A wrong model name resolves fine but 400s at call time, which would silently
blind the monitor (every triage returns "nothing"). So the resolved monitor
model is health-checked once at startup (orchestrator-only) and falls back to
the operator's own model if it can't be resolved or doesn't answer.

Verified live against this codex-oauth account: the *-codex-mini names are
rejected; gpt-5.4-mini is the real small tier (from the account's model list)
and passes the health check. On an identical scan it caught the high-value
"blocked on prompt" finding (gpt-5.5 also caught a subtler opportunity) -- the
expected cost/quality tradeoff; override for thoroughness.

Unit-tested default_monitor_spec mapping; spec 0022 updated.
@edwin-zvs
edwin-zvs merged commit 3653c86 into main Jun 6, 2026
1 check passed
@edwin-zvs
edwin-zvs deleted the operator-monitor-cheap-default branch June 6, 2026 17:52
@edwin-zvs edwin-zvs mentioned this pull request Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant