What should the coordinator be blocked from doing, even when the specialists are allowed?

Casey Holt

Casey Holt

October 7, 2026

What should the coordinator be blocked from doing, even when the specialists are allowed?

Block the coordinator from every tool the specialists are allowed to use, and from declaring the job done. It may output a specialist’s name from a roster you wrote, or none. It may not browse, edit, send, pay, invite, open a vault, run a shell, rewrite your sentence into a new task, or hand one specialist’s raw output to another. The specialists can be allowed those tools inside their own lanes. The coordinator is not a spare pair of hands for when a specialist is slow. If it can do the work, it is not coordinating. It is the least supervised agent you have.

I learned the list by watching a coordinator send mail the mail specialist was deliberately not allowed to send.

The send that did not come from the mail agent

The mail specialist could only write a file. I was proud of that limit. The reader could browse and could not mail. The coordinator sat above them and, because the framework attached “shared tools” at the top, it could call send. A task said “tell Sam the status page is clear.” The coordinator decided the mail specialist would be pedantic about a draft, so it sent a two-line note itself and marked the task complete. The note used a sentence from the reader’s page. Sam replied to a promise I had not reviewed.

The specialist limits were real. They were also irrelevant, because the coordinator was allowed to be impatient. Shared tools at the parent are how a careful design leaks. I removed every tool from the coordinator that afternoon. It can now fail by picking the wrong name. It cannot fail by acting.

A hand stopped at a rope barrier in an office hallway

The block list

These stay off the coordinator even when a specialist has them:

  • Send, draft-in-the-mailbox, or anything that addresses a person. The mail specialist can write a file. The coordinator cannot “just send this once.”
  • Browse, fetch a URL, or read a page. The reader does that. If the coordinator can open the page, it will answer from the page and skip the reader.
  • File write, shell, and git push. The file specialist works on a branch. The coordinator does not “apply a tiny fix” while routing.
  • Calendar create, invite, pay, or admin changes. Those are specialist tools with a person in front, or they are human-only. They are never the router’s shortcut.
  • The password manager, saved browser logins, and any token that is not the coordinator’s own empty identity.
  • Marking done. A specialist returning text is not completion. Done is a person, or a check that the named artifact changed, and the coordinator does not get to say either.

What it may do is small. Emit one roster name, or none, and a short reason that quotes the user’s words. If the format can hold a plan, a tool call, or a message body, the format is too big. I parse the name and drop the rest.

Rewriting the request is a tool, even without a tool

The coordinator will narrow “the staging link is wrong” into “edit the fallback URL” if you let it pass a rewritten brief. That rewrite is an action. It chooses the artifact. I block it by passing the original sentence through unchanged and refusing any coordinator text that replaces it. The specialist sees your words plus the route name. If the specialist cannot act, it returns cannot. The coordinator does not get a second turn to rephrase until the specialist agrees.

I also block it from splitting one sentence into a sequence it invented. Two verbs can mean two routes, and a person should see both. A coordinator that emits a hidden list of follow-ups will run the second one after you thought the first was the whole job. One name or none. If I want two specialists, I send two requests.

Passing raw output is the other rewrite. The reader’s page dump should not be forwarded into the mail specialist by the coordinator. I copy the sentences I mean. Automatic forward is the coordinator doing the specialist’s judgment with extra steps. Block the forward. If the product has a single memory both agents read, that memory is a tool the coordinator is using. Separate the sessions.

A blank index card with one empty line on a wooden desk

Retries and new specialists

A coordinator that can retry will send the same job back to the same specialist because the error still contains the keywords. I block more than one attempt per name per request. The next step after a failure is a person, not a loop that looks like effort.

It also may not invent a specialist. “I’ll handle it as a general agent” is the coordinator granting itself the union of every tool. The roster is closed. None is a successful output. Products that auto-create an agent when nothing matches have rebuilt the over-privileged parent and named it something new. I turn that off. An empty route comes to me.

Watch the case where the coordinator calls a specialist and also does a little itself “in parallel.” Parallel is how my send happened beside a draft file. One dispatch. No side tool calls in the same turn. If the log shows the coordinator and a specialist both acting, the block list is not enforced, whatever the config file says.

How I check

I read the coordinator’s tool list in the config, not the diagram. It should be empty, or limited to a single function that records a name. I send a compound request and a request that matches nothing. I expect one name or none, no files changed, no mail in Sent, no browser history from the coordinator’s identity. Then I send a request the file specialist can do, and I confirm the diff comes from that specialist’s branch, not from a commit the parent made.

I repeat the check when I add a specialist. New tools tend to get attached “at the top so everyone can use them.” Everyone includes the coordinator. The day you add a calendar tool is the day the router invites someone unless you kept the parent empty on purpose.

Messages it must not send downward

Even with an empty tool list, the coordinator can do damage in the text it passes down. I block three kinds of messages. It may not include secrets it saw in an earlier turn: a token a specialist echoed, a password from a page, a customer address. If those strings are in the coordinator’s context, the route text is how they spread. I would rather the specialist ask me than receive a blob. It may not include instructions it claims I gave if I did not type them. “The user also wants this CC’d” is the coordinator authoring policy. Quote me or say none. It may not apologize, plan, or coach the specialist. Coaching is a second task. The specialist prompt is the original sentence and the name of the lane. Anything longer is the coordinator working.

I block it from talking to people at all. No Slack message from the router that says “on it.” That message is a side effect, and it trains you to think the job started. Status belongs in a log you open, not in a channel the coordinator can post to. If the only way your framework reports progress is a chat tool on the parent, turn progress off. Silence from the coordinator is a feature. The specialist’s artifact is the progress.

When a specialist should refuse the coordinator

The other half of the block sits on the specialists. A file agent should reject a task whose prompt does not contain the user’s original sentence, because a coordinator-only brief is the rewrite. A mail file writer should reject a prompt that arrived with a URL it is supposed to open. It cannot open it, and it should not trust a summary the coordinator wrote of a page. I would rather get “cannot” than a draft based on the router’s paraphrase. This feels like the specialists are being stubborn. They are protecting the limit you set on the parent, which the parent will test.

If your framework does not let a specialist see whether the caller was the coordinator or you, treat every automated dispatch as untrusted and keep the tools narrower than you would for a prompt you typed. You can always run the file edit yourself from a sentence you trust. You cannot unsend what a parent did with a tool you thought only the child had.

The parent is the one to starve

Specialists can be allowed narrow tools because their lane is the review surface: a diff, a draft file, a page note. The coordinator has no lane. It only points. Block it from doing what they do, from rewriting you, from chaining them, and from saying finished. A coordinator that can act will act on the turn you are not watching, and it will use whichever specialist limit you were most proud of as a reason to skip that specialist and do the job itself.

More articles for you