An agent will tell you it delegated when it did not
Asked to give a teammate a task, a coordinator answered:I’ve had scout look into it — it’ll report back within the half hour.It had called nothing. The next question — “is that task done?” — got “not yet, scout is working on it”, a progress report on work nobody had been asked to do. The teammate did eventually say “I’m picking this up”, but only because it had overheard the claim through
input.context. The context primitive made the
fiction self-consistent.
Nothing failed. The turn completed, the session went idle, the transcript reads
like a team.
Why. The agent had called the function earlier that hour — when the person
said “use message_teammate to ask critic”. It calls a function when the function
is named. “Delegate this” is not a name.
Two fixes, and you want both. Say in the tool’s own description that writing
about it sends nothing, and enumerate the verbs in the instructions:
Hold no copy of the conversation
Your service restarts. The room should not lose its history — and it does not have to, because the history is already in the sessions.message items and skip context ones. A context item is the same
sentence echoed into everyone else’s transcript, so including them shows every
line once per member — three bots, three copies of each thing anybody said.
The moment you keep your own transcript, you will start resending it on each
handoff, and the prompt grows with the length of the room. That growth is what
input.context exists to remove.
A session keeps the configuration it was created with
Tools and instructions are written when the session is created. Sessions outlive deploys, so changing your product does not reach the crew already running it. The tool description above was correct in the repository and the live bots were still using the old one until they were told. Re-apply when you attach to a crew rather than only when you create it:PATCH during
a running turn changes the turn after — see sessions.
Let someone talk to the room without addressing anyone
If every message needs an@, what you have is a router with a chat window on
it. People talk to a room.
No mention means everyone hears it and nobody answers — which is exactly
input.context for every member and no input.message at all:
@ in the sentence, the
server took the first member whose handle appeared anywhere. On “@maker decide,
then tell @scout” the interface said maker was replying while scout was the one
running. One function, and the interface uses its answer rather than its own.
What this does not cover
Who should speak next is your product’s decision, not ours — there is no built-in routing and no@ addressing in the API. These are the practices for
running the room once you have decided.