From a6e7f64ef21d5caaff7653a179b58c8054ce57ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Sat, 22 Aug 2026 20:39:26 +0000 Subject: [PATCH] todo: a commander should suggest the cheapest model for each half of itself MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wanted 2026-08-22, for later. Before arming anything, a commander weighs how hard the job actually is and proposes which model each half should run on. TWO models, which is what makes it more than a generic "use something cheaper" note. A commander's own turns are conversation plus one piece of bash; the agent its loop spawns does the real work and its difficulty is set by the job. The deploy commander is the worked example — its own turns were unremarkable on Sonnet while the spawned agent judged six hosts, parsed a plan, decided what to skip and wrote an honest report. Suggested, never imposed: the failure mode of choosing too small is not a slower answer, it is a watcher firing on the wrong condition or an agent half-finishing a deploy. Recorded with the reason it is not urgent: nothing measures whether the choice was right. A spawned agent's cost is not captured at all yet — the column exists and is always null — so a commander suggesting Haiku has no way to learn it was wrong. This wants the cost work first, or at least the knowledge that until then it is a judgement with no feedback loop. Co-Authored-By: Claude Opus 5 --- TODO.md | 66 +++++++++---------- ...nder-picks-the-cheapest-model-that-will.md | 39 +++++++++++ 2 files changed, 72 insertions(+), 33 deletions(-) create mode 100644 todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md diff --git a/TODO.md b/TODO.md index b64ae860..4e623dbb 100644 --- a/TODO.md +++ b/TODO.md @@ -20,39 +20,39 @@ the owner's OS user and can never be granted. Indirection there really is accide ## Themes -**89 open, 25 closed**, across 29 themes. +**90 open, 25 closed**, across 29 themes. -| Theme | Open | Closed | -| ------------------------------------------------------------------------------------------ | ---- | ------ | -| [Affordances](todo/affordances/) | 1 | 0 | -| [Speaking into a session from the backend](todo/agent-delivery/) | 2 | 0 | -| [Backburner](todo/backburner/) | 2 | 0 | -| [Background jobs](todo/background-jobs/) | 2 | 0 | -| [Chat interface](todo/chat/) | 1 | 0 | -| [Code editor](todo/code-editor/) | 1 | 0 | -| [Components — the shared UI layer](todo/components/) | 1 | 0 | -| [File watchers](todo/file-watchers/) | 1 | 0 | -| [Fleet — one command across every server](todo/fleet/) | 5 | 2 | -| [Headscale](todo/headscale/) | 0 | 5 | -| [Infra (alpha)](todo/infra/) | 7 | 0 | -| [Known bugs](todo/known-bugs/) | 3 | 2 | -| [Mobile apps](todo/mobile-apps/) | 3 | 0 | -| [Multi-user](todo/multi-user/) | 16 | 5 | -| [Notifications](todo/notifications/) | 1 | 0 | -| [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 | -| [Plugin infrastructure](todo/plugin-infrastructure/) | 2 | 0 | -| [Plugin repos — what writing their READMEs turned up](todo/plugin-repos/) | 10 | 9 | -| [Plugin system — gaps the email extraction found (2026-08-18)](todo/plugin-system/) | 3 | 0 | -| [Prompt library](todo/prompt-library/) | 1 | 0 | -| [Settings — portable, and readable by an agent](todo/settings/) | 2 | 0 | -| [Shell — spotlight and the dock](todo/shell/) | 4 | 1 | -| [Sub-agents — agents spawning agents](todo/sub-agents/) | 1 | 1 | -| [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 | -| [Tooling — the list about the list](todo/tooling/) | 1 | 0 | -| [Transmission](todo/transmission/) | 6 | 0 | -| [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 | -| [Waiting on the owner to run it](todo/waiting-on-owner/) | 3 | 0 | -| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 | +| Theme | Open | Closed | +| --- | --- | --- | +| [Affordances](todo/affordances/) | 1 | 0 | +| [Speaking into a session from the backend](todo/agent-delivery/) | 2 | 0 | +| [Backburner](todo/backburner/) | 2 | 0 | +| [Background jobs](todo/background-jobs/) | 3 | 0 | +| [Chat interface](todo/chat/) | 1 | 0 | +| [Code editor](todo/code-editor/) | 1 | 0 | +| [Components — the shared UI layer](todo/components/) | 1 | 0 | +| [File watchers](todo/file-watchers/) | 1 | 0 | +| [Fleet — one command across every server](todo/fleet/) | 5 | 2 | +| [Headscale](todo/headscale/) | 0 | 5 | +| [Infra (alpha)](todo/infra/) | 7 | 0 | +| [Known bugs](todo/known-bugs/) | 3 | 2 | +| [Mobile apps](todo/mobile-apps/) | 3 | 0 | +| [Multi-user](todo/multi-user/) | 16 | 5 | +| [Notifications](todo/notifications/) | 1 | 0 | +| [Plugin ecosystem — before it opens to third parties (2026-08-18)](todo/plugin-ecosystem/) | 3 | 0 | +| [Plugin infrastructure](todo/plugin-infrastructure/) | 2 | 0 | +| [Plugin repos — what writing their READMEs turned up](todo/plugin-repos/) | 10 | 9 | +| [Plugin system — gaps the email extraction found (2026-08-18)](todo/plugin-system/) | 3 | 0 | +| [Prompt library](todo/prompt-library/) | 1 | 0 | +| [Settings — portable, and readable by an agent](todo/settings/) | 2 | 0 | +| [Shell — spotlight and the dock](todo/shell/) | 4 | 1 | +| [Sub-agents — agents spawning agents](todo/sub-agents/) | 1 | 1 | +| [Sudo terminal modal](todo/sudo-terminal-modal/) | 1 | 0 | +| [Tooling — the list about the list](todo/tooling/) | 1 | 0 | +| [Transmission](todo/transmission/) | 6 | 0 | +| [URL state — routing, query strings and selection](todo/url-state/) | 4 | 0 | +| [Waiting on the owner to run it](todo/waiting-on-owner/) | 3 | 0 | +| [Workspaces & Panels](todo/workspaces-panels/) | 2 | 0 | ## Records — no items, kept for the reasoning @@ -63,6 +63,7 @@ the owner's OS user and can never be granted. Indirection there really is accide ## Newest ten +- `2026-08-22` **'A commander picks the cheapest model that will do the job — for itself and for what it spawns'** — [background-jobs/a-commander-picks-the-cheapest-model-that-will](todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md) - `2026-08-22` **'Revisit the bun 1.3 pin once 1.4 has been watched for a while'** — [infra/revisit-the-bun-1-3-pin-once-1-4-has-been](todo/infra/revisit-the-bun-1-3-pin-once-1-4-has-been.md) - `2026-08-22` **A plugin's permission should be on for every role by default, off only on request** — [multi-user/a-plugin-s-permission-should-be-on-for-every](todo/multi-user/a-plugin-s-permission-should-be-on-for-every.md) - `2026-08-22` **A user's settings should export and import as a plain file** — [settings/a-user-s-settings-should-export-and-import-as](todo/settings/a-user-s-settings-should-export-and-import-as.md) @@ -72,4 +73,3 @@ the owner's OS user and can never be granted. Indirection there really is accide - `2026-08-22` **Revamp the menus — spotlight, themes — toward an Omarchy-like shape** — [shell/revamp-the-menus-toward-an-omarchy-like-shape](todo/shell/revamp-the-menus-toward-an-omarchy-like-shape.md) - `2026-08-22` **Review officer-secret-store, built overnight and untested by the owner** — [waiting-on-owner/review-the-officer-secret-store-built-last](todo/waiting-on-owner/review-the-officer-secret-store-built-last.md) - `2026-08-21` **No way to see which affordances are reaching your agents, or to turn one off** — [affordances/no-way-to-see-which-affordances-are-reaching](todo/affordances/no-way-to-see-which-affordances-are-reaching.md) -- `2026-08-21` **Generalise it: deliver a turn to a named session, from anywhere in the backend** — [agent-delivery/generalise-it-deliver-a-turn-to-a-named](todo/agent-delivery/generalise-it-deliver-a-turn-to-a-named.md) diff --git a/todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md b/todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md new file mode 100644 index 00000000..4ed2bf80 --- /dev/null +++ b/todo/background-jobs/a-commander-picks-the-cheapest-model-that-will.md @@ -0,0 +1,39 @@ +--- +id: background-jobs/a-commander-picks-the-cheapest-model-that-will +title: 'A commander picks the cheapest model that will do the job — for itself and for what it spawns' +theme: background-jobs +status: open +created: 2026-08-22 +date_source: stated +order: 2 +--- + +**Before it arms anything, a commander should weigh how hard the job actually is and say which model each +half should run on.** Wanted 2026-08-22, for later. + +**Two models, not one**, and this is the part that makes it worth doing rather than a generic "use a cheaper +model" note. A commander has two quite different workloads: + +- **the commander's own turns** — agreeing the job with the owner, writing a shell loop, reporting. Mostly + conversation and one piece of bash. +- **the agent the loop SPAWNS when it fires** — which does the actual work, and whose difficulty is set by + the job rather than by the conversation. + +Those can differ by a lot in the same commander. The deploy commander is the worked example: its own turns +ran on Sonnet and were unremarkable, while the spawned agent judged six hosts, parsed a plan, decided what to +skip and wrote an honest report. A watcher that pings a URL and echoes the status needs neither to be clever. + +**Inferred from the job, and SUGGESTED rather than imposed.** The commander proposes ("this looks like Haiku +for the watch and Sonnet for the action, because…") and the owner overrides. A model chosen silently is one +nobody can argue with, and the failure mode of choosing too small is not a slower answer — it is a watcher +that fires on the wrong condition, or an agent that half-finishes a deploy. + +**Where it goes:** a section in the Commanders skill, beside the four shaping questions, since the moment to +ask it is the same moment — while the job is being agreed and before anything is armed. It is one more thing +to settle in the conversation the skill already describes. + +**What would make it honest rather than a guess**, and the reason this is not urgent: nothing currently +measures whether the choice was right. The cost of a spawned agent is not recorded at all yet +(`command_hq_spawned.total_usd` exists and is always null), so a commander suggesting Haiku has no way to +learn it was wrong. Worth doing after cost accounting, or at least knowing that until then this is a +judgement with no feedback loop.