From 667e704cd47b4d7c926c9125e939088c0a343b4b Mon Sep 17 00:00:00 2001 From: Gavin Staniforth Date: Thu, 17 Sep 2026 11:21:32 +0100 Subject: [PATCH] feat(models): name delegated agents by model tier Subagents launched without a name all render under their type label, so a batch of parallel workers appears as several identical `general-purpose` rows with nothing to distinguish them, and none can be reached with SendMessage. Require a name on every Agent call, carrying the model tier and numbered monotonically across the session. Co-Authored-By: Claude Opus 5 (1M context) --- models.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/models.md b/models.md index 44acf5f..26774e2 100644 --- a/models.md +++ b/models.md @@ -33,12 +33,33 @@ cheapest model that does the job well. - **Implementation** — for any multi-file change, spawn general-purpose agents (opus) with exact file paths, the relevant doctrine from this file, and a definition of done (tests to run). Independent changes get parallel agents in - one message. + one message, each under its own name (see [Agent names](#agent-names)). - **Verification/review** — adversarial review and blast-radius checks go to opus agents; plain test runs and lint passes go to sonnet agents. - **Fable edits directly** only when the change is small — one or two files, in already-known locations. +## Agent names + +Every `Agent` call takes a `name` alongside `subagent_type`. Without one, a +batch of workers all report under the same type label — `general-purpose`, +`general-purpose`, `general-purpose` — with nothing to tell them apart, and +none of them can be addressed with `SendMessage`. + +Always pass a name, and put the model tier in it: + +- opus workers — `opus-agent-1`, `opus-agent-2`, … +- sonnet workers — `sonnet-agent-1`, `sonnet-agent-2`, … + +Number monotonically across the session rather than restarting per batch: a +number is never reused, so the second batch picks up where the first left off. +Names must start with a letter or digit and may contain only letters, digits, +underscores, and hyphens. + +The `description` argument is separate — it supplies the activity line shown +beside the name, so the name carries identity and `description` carries the +task. + ## Token rules - Don't echo file contents or long diffs back to the user; report conclusions.