We made our coding agents very thorough. Then I stopped reading them.
A finished run in hilos could explain the outcome in a message, repeat it in a report card, list the checks, show the changed files, add a caveat, and keep the complete tool history nearby. Every part had a reason to exist. Together, they made one small product change feel like a tax form.
The useful sentence was usually simple. Something like: "The invite form is ready on the preview. Which inbox should receive it?"
I was skimming past that sentence because the agent had surrounded it with proof that it had been busy.
So we changed how agents report their work.
The answer got buried
Coding agents do a lot between a request and a result. They search the repository, inspect old decisions, edit files, run checks, recover from failures, and sometimes discover that the first approach was wrong.
People need access to that history. A reviewer may want to see why the agent touched auth, which check failed, or whether it quietly skipped the mobile version. Hiding the trace would make review worse.
Still, putting the whole trace in the reply makes the ordinary reader do the compression themselves. The designer who asked for a simpler empty state should not have to translate the tool log into "the preview is ready."
GitHub keeps Copilot's session log available, then lets a person ask what changed, what was validated, and why. That separation feels right to me. The session log can preserve the evidence without making the teammate-facing answer carry all of it.
In hilos, the result now appears once as ordinary text. A preview or pull request stays beside it when useful. Checks, files, diffs, transcripts, cost, and the rest of the run sit inside one quiet disclosure.
The history is still there. It just stopped introducing itself before the answer.
The trace has a different job
The Vercel AI SDK describes traces as a way to inspect model and tool calls alongside lifecycle events. That is useful when an agent fails strangely, loops, burns money, or returns a confident answer after reading the wrong thing.
A team room has another job. It has to help people decide what happens next.
Those two jobs want different amounts of information. Debugging asks for the complete sequence. A decision usually needs the outcome and only the evidence that changes it, including one clear blocker when the work cannot move.
We used to make the report card satisfy both readers at once. It became a dashboard squeezed into a chat message.
Now the room gets the short version first. The trace waits for the person who needs it. This is the same attention lesson we learned after our agent dashboard became a second inbox: detail earns its place when it helps somebody act.
Short still has to be honest
"Be concise" is a dangerous instruction by itself.
An agent can obey it by dropping the awkward part. The deployment failed, but the summary says the code is done. The desktop change shipped, but the native app still needs work. The agent needs an email destination, so it ends with "Let me know how you want to proceed" and quietly hands the whole task back.
That reply saved words by dropping the only fact that mattered.
Our shared rule tells the agent to lead with the answer or action, keep real failures and uncertainty visible, and ask for the one missing decision when a person is blocking the work. It removes routine checks and file counts because they rarely change what the reader should do.
The default stays short for chat. A requested plan, document, or explanation gets room to breathe.
Capability and voice are separate controls
The coding tools are starting to expose this choice directly. Codex offers terse and conversational personalities without changing what the agent can do. Claude Code output styles change how it responds and can preserve the coding instructions underneath.
We needed the same separation across hilos.
A hosted agent, a local Codex or Claude Code session, Cursor, and an agent connected over MCP can all return work to the room. If each runtime writes its own version of "done," the team has to learn a new reporting style every time the engine changes.
We moved the reply rules into one shared contract. The agent starts with the result and includes each useful link once. Process narration drops away, but a blocker cannot disappear just to save a line.
The room's own voice can still shape the tone. Careful teams can write in paragraphs and weird rooms can stay weird. That voice belongs to the people there, while the answer keeps its job.
Prompts only got us part of the way
We sampled 32 replies across two models while making this change. The prompt helped with repeated file counts and vague endings. Some replies stayed the same length. A few got longer.
That was a useful little embarrassment. You cannot prompt your way out of an interface that keeps asking for more prose.
The renderer had to change too. Repeated headings and default screenshots went away. When a failed check already says what happened, the agent does not add another generated warning below it. The result, preview, and human review controls stay visible while the machinery waits inside the disclosure.
We build hilos in hilos, so when an agent does something strange we still open the trace. Most days, the room only needs the answer.