The Log Is Part of the Agent's Interface
Suneet Malhotra
Aug 26, 2026
An agent that can act but cannot leave a useful decision record is not autonomous. It is an opaque process with write access.
The distinction became concrete while looking at scheduled systems. A job can finish with exit code zero, create the expected file, and still leave the operator unable to answer the important question: why did it do that?
That is not a documentation problem. It is an interface problem. The next process that consumes the agent's output is not the only consumer. A human debugging an incident is also a consumer, and the human usually arrives after the context that produced the decision has disappeared.
Output is not a decision record
Most automation logs describe mechanics: started, fetched, wrote, finished. Those lines establish that a process moved. They do not establish what the process believed, what it rejected, or which boundary it applied.
Consider a trading scheduler that sends no order. The output might say no action. That phrase collapses several materially different states: no signal existed, the market was closed, the calendar was unavailable, risk rejected the signal, or the order path failed before submission. A retry policy cannot distinguish those cases from one line.
An agentic workflow has the same shape. A coding agent may report that it edited a file. The useful record is more specific: which files were in scope, which invariant justified the edit, what it intentionally did not touch, and what verification ran afterward. Without that record, a clean diff is only evidence of the final state. It is not evidence that the path to the final state was controlled.
The log should expose the boundary
I now think about an operational log as a narrow interface between an agent and its future reviewer. The interface should answer four questions:
- What was the agent asked to change?
- What state did it observe before acting?
- Which decision did it make, including explicit refusals?
- What postcondition did it verify?
The fourth question is where many systems become misleading. A build passing proves that the code reached the build tool's accepted state. It does not prove that the generated page contains the new content, that a notification reached its recipient, or that the remote branch contains the commit the local process believes it pushed.
Those are different postconditions and should have different evidence. A useful record might include the staged path, commit hash, remote hash, rendered route, and a compact verification result. It does not need to be verbose. It needs to be shaped around the failure modes that matter.
Refusals are first-class output
The most valuable line in an automated system is often a refusal. No order because the session calendar was unresolved. No file edit because the target was outside the allowlist. No deployment because the artifact checksum changed between generation and publish.
If the system records only successful actions, the absence of an action becomes indistinguishable from a broken process. That creates pressure to add retries, broaden permissions, or rerun the agent until something happens. Each response can hide the original boundary failure.
A refusal should carry a reason code, the relevant state, and whether retrying is safe. market_closed, calendar_unavailable, out_of_scope, and verification_failed are not interchangeable strings. They tell the next operator whether to wait, repair input data, narrow the request, or stop the pipeline.
Make the record survive the context window
Agent context is temporary. The log is where the decision has to survive.
That means storing the record beside the artifact or in a durable run store, using stable identifiers rather than prose alone, and linking claims to evidence. It also means recording what was not done. An allowlisted edit with an explicit untouched-files list is easier to audit than a broad statement that the agent behaved correctly.
This is not an argument for logging every token or every internal thought. Those details are expensive and rarely answer the operational question. The useful abstraction is decision provenance: inputs, boundary, action or refusal, and verification.
The practical test is simple. Give the log to someone who did not run the job. Can they explain the final state, identify the governing rule, and choose the next safe action without opening the agent's old context?
If not, the system has automated the action but not the handoff. For production agents, that handoff is part of the interface. A process that can write without explaining its boundary is not autonomous enough to trust with more access.
Share this post
You Might Also Like
The Agent Did Not Need More Context
When an agent edits a shared checkout, the dangerous variable is not context length. It is the boundary around what the run is allowed to write.
Agentic AII Wrote the Postmortem Twelve Days Early
I published an essay about a broken line in this routine and declined to fix it. Twelve days later the line broke the routine. What two rungs of escalation bought.
Quantitative TradingA Retry Is Not a Trading Decision
A rejected order is a decision. Retrying it without preserving the reason can turn a risk control into a duplicate trade.
Quantitative TradingThe Market Is Closed Is Not a Trading Rule
A backtest can know the exchange hours and still schedule a trade into a holiday, an early close, or a stale session. Calendar state is market data.
Latest Blog Posts
A Retry Is Not a Trading Decision
A rejected order is a decision. Retrying it without preserving the reason can turn a risk control into a duplicate trade.
The Market Is Closed Is Not a Trading Rule
A backtest can know the exchange hours and still schedule a trade into a holiday, an early close, or a stale session. Calendar state is market data.
The Agent Did Not Need More Context
When an agent edits a shared checkout, the dangerous variable is not context length. It is the boundary around what the run is allowed to write.
Related Tools & Demos
The QA Field Manual to Language Models
A free 24-chapter book. Start at βwhat is AI, really?β and finish with a small language model you built yourself β one that reads a failing Playwright test and proposes a fix you can run. Read it in your browser, or download the PDF or the Mac app.
View Source Code βMulti-Model LLM Harness
One interface to call any AI model β capability routing, fallback chains, budgets, circuit breakers, and a quality feedback loop. A practical architecture pattern write-up.
Automated Trading System
Multi-engine trading platform with real-time risk management, regime-based strategy selection, and automated order execution.
View Source Code β
Stay in the Loop
Get weekly insights on AI-driven QA, engineering leadership, and automation strategies.
No spam, ever. Unsubscribe anytime.