Skip to content

Local 27B dispatch lanes

ARGUS-1616 adds a dispatch-time lane for small Argus board tasks that are safe to try on the local 27B runner before spending Claude subscription budget. The lane is intentionally narrow: it is for Argus tasks whose declared file_scope is docs-only or docs plus *_lint_test.go files.

Classification rule

Dispatch does not infer this lane from task prose. A task is classified into hub-build-local only when all of these are true:

  • project=argus, owner=hub-agent, type=task, and kind is empty or build.
  • file_scope is nonempty.
  • Every declared path matches the same docs-plus-lint shape used by cmd/ci-fast-path: docs/**, root/project Markdown outside internal/ and cmd/, .env.example, .gitignore, or a Go file whose basename ends _lint_test.go.

Anything else, including an undeclared scope, internal/** Markdown embedded into the hub binary, a non-lint Go file, go.mod, go.sum, workflows, or a migration, stays on the normal hub-build lane. This chooses false negatives over false positives: a missed local opportunity costs money, while a false local classification can spend a small model on production-code work it is not meant to plan.

Backend policy

The lane key is the skill name, hub-build-local. That keeps three data surfaces aligned:

  • lane_policies.lane, read by ResolveLaneBackend.
  • agent_runs.skill, stamped on the dispatched run.
  • /sitrep.json lane_models[].lane, used for the baseline.

Migration 0278_lane_policy_hub_build_local.sql seeds:

Lane Backend Model Fallback
hub-build-local opencode local-30b claude after 3 consecutive local failures

The passive hub dispatcher resolves this lane before enqueueing. A classified task therefore gets an agent_runs row with skill=hub-build-local, backend=opencode, and model=local-30b without using POST /projects/argus/dispatch {"backend":"opencode"}.

Baseline snapshot

Source: live GET /sitrep.json lane_models, queried at 2026-08-23T16:56:03Z. The rollup window is the hub's current sitrepLaneModelWindow.

Lane Backend Model Runs Pass rate Median wall time
hub-build claude claude-sonnet-5 197 91.9% 17.4 min
hub-build codex 6 50.0% 5.8 min
hub-build opencode local-30b 1 100.0% 3.6 sec
tdarr-monitor codex 87 96.6% 4.9 min
hub-build-local opencode local-30b 0 n/a n/a
tdarr-monitor opencode local-30b 0 n/a n/a

This is not yet a statistically useful local-27B baseline. The acceptance bar for calling the baseline ready is at least 12 completed tdarr-monitor ticks and 5 completed hub-build-local docs/lint tasks on backend=opencode, model=local-30b, with gauntlet results and wall times recorded in agent_runs. Until those rows exist in /sitrep.json, compare local results against the current Claude hub-build median of about 16-19 minutes, not against the one existing opencode outlier.