
The Unwired Specialist: When Delegation Fails Because the Model Was Never There
Five recon specialists died in under a second with the same missing-route error. No active credentials for provider: anthropic. That is a missing model role, not a rate limit.
View companion repoFive agents, five 404s, zero tokens
I spawned five recon specialists on 2026-07-25 and every one of them was dead before the second ticked over. The dispatch layer reported them as agents. The JSONL reported them as 404s. The usage block on each corpse was zeros: input 0, output 0, cache 0, cost 0. Nothing had been thought. Nothing had been billed. The model was never there.
The parent session lived at ~/.omp/agent/sessions/-Desktop-anthropic-apply/2026-07-25T06-11-45-458Z_019f97e6-aeb2-7000-852a-020557fdcbc7/. I had split a job-board harvest across five named workers: ReconFrontierLabs, OpenAIAshbyDecode, ReconAINativePlatforms, ReconMediaAndReply, ReconAppliedAIProducts. Each child opened with a model_change to anthropic/claude-haiku-4-5. Each child then wrote one assistant message and exited.
The assistant message was empty. The stop reason was error. The status was 404. The error string was identical on all five:
404 {"error":{"message":"No active credentials for provider: anthropic","type":"invalid_request_error","code":"model_not_found"}}
ReconFrontierLabs changed model at 06:18:25.496Z and died at 06:18:26.210Z. Seven hundred fourteen milliseconds. The other four landed in a 682–706ms band. An advisor note in the same parent session summarized it in one line: all five sub-agents failed in about 860ms, no credentials for the subagent provider, so the fan-out was unavailable this session.
That last clause is the trap. "Unavailable this session" sounds like weather. It is not weather. It is a missing wire.
The error is a map, not a weather report
A 404 with code: "model_not_found" and message: "No active credentials for provider: anthropic" is a routing document. It names the provider the spawn tried to reach. It names the reason that provider refused. It does not name an outage, a quota, or a retry policy.
The spawn succeeded as a process. The child session was created. The model field was set. The first API call left the harness, hit the gateway, and came back with a map of where the request had gone. Anthropic was not in the credential store. Haiku 4.5 was not a live route. The child had no tokens because the gateway never accepted the request.
I keep wanting to treat that as a transient. The instinct is inherited from HTTP. 404s on the public web are often "try again later, the CDN is confused." This 404 is the opposite. It is stable. Replaying the same alias against the same config produces the same JSON, in the same sub-second window, with the same zero-token usage. That stability is the diagnosis. Transient errors jitter. Missing wires do not.
The specialist aliases are the other half of the map. scout, researcher, and Explore look like roles in the orchestrator catalog. They are shorthands. Each shorthand carries a backing model. If that backing model is a bare Anthropic id, and this environment's live traffic rides 9router, the shorthand is a dead letter. The catalog still lists it. The spawn still accepts it. The first completion still 404s.
Adjacent to the 529 cascade
Post 32 is about a different HTTP code and a different failure class. Anthropic 529 means the upstream is overloaded. Naive retries themselves consume the bucket and storm the API. The fix is jitter, a circuit breaker, a fallback model, and the willingness to abandon a congested path. Retries are the subject because the route is real. The provider is wired. The credentials exist. The API is asking for cooperation.
This 404 is the case where retries are malpractice. There is no bucket to wait for. There is no overload to disperse. The gateway is telling you, in one JSON object, that the provider you named has no active credentials. A second spawn of scout is not a probe of recovery. It is a second copy of the same map. A third spawn of Explore is a third copy. Full jitter does not create an Anthropic key. A circuit breaker that opens after five consecutive 404s is a slow way to notice the wire was never there.
The two posts sit next to each other because they are easy to confuse at the dispatch layer. Both look like "the subagent died immediately." Both produce an HTTP error in the child transcript. Both tempt the same next move: spawn again, maybe with a different specialist, maybe with a longer timeout. The discriminator is the code and the message. 529 plus overload is a live route under stress. 404 plus model_not_found plus No active credentials for provider: anthropic is an unconfigured alias. Treat them as one problem and you will retry the wrong one, and block the right one.
What .omp/config.yml actually wires
The forge session on 2026-08-04, 122ab33d-55cb-4558-b60e-b8e0cafeef69, ran a /shannon:cook against withagents-forge under a non-standard provider. The SessionStart hook on that run said so in plain text: this environment uses a proxy, not a first-party Anthropic login, and Task/Agent calls should prefer a tier alias or a fully qualified route. I am citing that session for the routing context, not for the 404 JSON. The 404 JSON is the 2026-07-25 recon fan-out. The config that makes the 404 inevitable is the same shape of file the forge run was already bound to.
.omp/config.yml on the forge checkout names four roles:
modelRoles:
default: 9router/gcli/grok-4.6
task: 9router/gcli/grok-4.6
smol: 9router/gcli/grok-4.6
advisor: 9router/thinking
That is the whole live set. Default, task, and smol share 9router/gcli/grok-4.6. Advisor is 9router/thinking. There is no scout role. There is no researcher role. There is no Explore role. There is no anthropic/ prefix anywhere in the file.
A spawn that asks for scout does not consult this list and fail closed with "role not defined." It resolves the catalog shorthand to its hardcoded backing model, which in this harness is still an Anthropic Haiku id, and then the gateway 404s. The config file is the allowlist. The catalog is the temptation. The 404 is what happens when temptation wins.
The prefix is the load-bearing part. 9router/<vendor>/<model> is a route this machine can actually call. A bare claude-haiku-4-5 on provider anthropic is a route this machine has not been given credentials to call. The specialist aliases are convenient in a stock Claude Code install. They are not convenient here. Convenience that 404s in 700ms is not convenience. It is a footgun with a short barrel.
Three probes of the same misconfiguration
I wrote the rule down after watching this pattern eat turns. It lives at ~/.omp/agent/rules/spawn-only-configured-9router-models.md. The condition matches a task or hub spawn whose agent is one of scout, Explore, docs-manager, and a handful of other catalog names, and whose model is not already a 9router/ route. The rule's example error is the same JSON the five recon children produced:
404 {"error":{"message":"No active credentials for provider: anthropic",...}}
The failure, the rule says, is not a transient outage and not a reason to declare a workflow blocked. It means the requested agent was never wired to a real model.
The anti-pattern the rule names is the one I had already performed in spirit: spawn scout, then Explore, then docs-manager, collect three identical No active credentials 404s, and report the workflow as blocked. Three probes of the same misconfiguration are not three pieces of evidence. They are one, repeated.
That sentence is the whole method. Evidence has a denominator. Five identical 404s from five recon children in the same 700ms window are one finding with five witnesses, not five independent outages. The second spawn does not increase confidence that Anthropic is down. It increases confidence that you have not read the first error. The third spawn is theater. The blocked-workflow writeup that follows is a category error: you have not lost the ability to delegate. You have lost one alias. The other aliases, and the main agent's own tools, are still on the machine.
Hub revival does not get a pass. Waking a parked peer with hub send does not create credentials. A revived agent whose role is unconfigured will accept the message and silently no-op. If that peer goes idle without replying, the correct read is the same 404 in a quieter costume: unconfigured, not undelivered. Retrying the ping is another copy of the map.
Do the work inline or pick a wired role
The repair is not a new Anthropic key. The repair is to stop asking for a model this environment does not serve.
Before any task spawn, read the model-role file. If the agent type is not in that file as a 9router/<vendor>/<model> role, do not spawn it. A 404 spawn burns a turn and teaches nothing the first 404 did not already teach. Route to default, task, smol, or advisor — the four names that actually resolve — or skip the subagent.
Read-only research is the case that makes the skip obvious. The five recon children were asked to fetch careers pages, parse Ashby JSON, and inventory roles. The parent already had read, grep, glob, and HTTP. Splitting the work across specialists is a throughput play, and it only pays if the specialists can call a model. When they cannot, the parent doing the five fetches itself is not a demotion. It is the path that still exists.
The 2026-07-25 parent session eventually said this out loud. The advisor path, which was on 9router, kept running. The five Anthropic children did not. The harvest did not have to stop because Haiku 404'd. It had to stop pretending that a 404 on an unwired alias was a closed gate on the whole job.
The durable read, copied from the rule because I do not want a second phrasing of it: never conclude "delegation is unavailable, therefore the task is blocked" on the strength of a credentials 404. The correct read is "this agent alias has no configured model." Pick one that does, or proceed directly.
The durable lesson
A dispatch catalog is not a capability list. It is a list of names. Some of those names are wired to live routes. Some of those names still point at a provider this machine has no credentials for. The 404 is how the gateway tells you which is which, in under a second, for zero tokens.
I already had a post about retry storms on a live Anthropic route. I already had a post about probing before a fan-out. This one is narrower. When the child dies with No active credentials for provider: anthropic, do not wait, do not retry, do not spawn the next specialist in the catalog to "confirm." You have confirmed. The alias was never wired. The work is still yours, on a role that is, or on the tools that were in the parent the whole time.
Continue the series
- 52SeriesThe Wrong Posts Directory: Why the Hub Tree Never Reaches withagents.devI wrote the next field-journal entry into the hub posts/ tree and the live Next.js site never saw it. The build reads only site/posts/. The parent tree is not a build input.
- 54SeriesDrive Don't Sweep: A Green HTTP Status Is Not Proof a Screen WorksA cookie-less HTTP sweep called every Forge route clean. Every response was the same login page. Status OK measured the server. It never measured the screen.
- 51SeriesZero Behavior Change: A Structure-Only Refactor Is a Claim Until Someone Can Falsify ItIndependent reviewers on yt-transition-shorts-detector were told ZERO behavior change for deepen phases. Iron rule: cite evidence or FAIL. A refactor is not proven by the author saying it is structure-only.
- 55SeriesThe Piped Exit: Why TSC_EXIT=0 Sat Next to Real Type Errorsbunx tsc --noEmit piped through tail; echo TSC_EXIT=$? reports tail's status, not the compiler's. A forge functional audit declared typechecks clean while the instrument was lying.