The embarrassing truth about agent products is that users do not first ask whether the
model is brilliant. They ask whether the first side effect is safe. The primary sources
now say this more directly than most demos do. MCP defines
readOnlyHint, destructiveHint, and
openWorldHint. OpenAI's tool-planning docs tell builders to separate read
and write behavior. Developer mode treats tools without readOnlyHint as
write actions, and the approvals guide keeps sensitive actions behind a pause. My
inference from those sources, not their wording itself, is simple: dependable agents
earn the second tool call by making the first one cheap to trust.
Serious builders start with read-only tools because adoption depends less on peak model intelligence than on the first side effect someone is willing to delegate.
The official tool stack already encodes this instinct
The
MCP schema reference
explicitly defines readOnlyHint, destructiveHint, and
openWorldHint. The semantics are blunt: read-only means the tool does not
modify its environment; destructive marks harder-to-reverse changes; open-world means
the tool can touch external entities.
The MCP tools specification adds the interaction model around those hints. It says there should be a human in the loop with the ability to deny tool invocations, and it recommends clear indicators and confirmation prompts for operations. The same schema also warns that annotations are only hints and should not be trusted blindly from untrusted servers. In other words: capability labeling matters, but it does not replace actual boundaries.
OpenAI's current tool-planning guide reaches the same conclusion from a product-design angle. It tells builders to split operations when they have different permissions, safety risks, or confirmation requirements, and to separate read and write behavior so the model and the user can tell the difference.
Read-only first changes the adoption math
OpenAI's
developer mode guide
says write actions require confirmation by default and that tools without
readOnlyHint are treated as write actions. That is not a philosophical
essay. It is a product behavior. The host assumes the first question is whether the
action changes state.
The guardrails and approvals guide makes the human-review path even more explicit: the model can decide a sensitive action is needed, but the run pauses until someone approves or rejects it.
This is why dependable agents so often begin with verbs like list,
show, health, doctor, search, or
diff. A read-only first step buys the operator context without forcing a
high-drama trust decision too early.
Isolation is the filesystem version of the same principle
The official Git worktree docs frame the mechanic plainly: one repository can support multiple working trees at the same time, and a linked or detached worktree is useful when you want experimental changes without disturbing current development.
That is the repo-shaped version of read-only first. Before the agent mutates the main surface, give the risky write path its own bounded lane. Inspect the current state, create the isolated worktree, run the build, and only then widen to push or deploy.
If the first tool is read-only but the second tool writes straight into a shared root, the system still has a trust problem. Isolation is how the write step earns its own proof surface.
What this means in Chopshopr's world
Local-first agent stacks are especially tempted to overreach because they feel private,
fast, and close to the machine. That is exactly when serious builders should get more
literal, not less literal. A local stack should surface the boring verbs first:
doctor, health, list_models,
search, grep, diff, screenshot.
The higher-consequence verbs can still exist. But they should be narrower and more
explicit: deploy, send, delete,
apply, archive, publish. Chopshopr's own
worktree-first ship path
is a good example of the idea. It does not claim the workflow is safe because an agent
is smart. It narrows authority, adds a build gate, and forces the final proof step.
This is the real gap between demo magic and dependable tools. A demo wants the agent to act early so the audience feels the power. A dependable tool wants the operator to stay calm long enough to keep using it next Tuesday.
The practical build pattern
- Split inspection verbs from mutation verbs at tool-design time.
- Mark
readOnlyHint,destructiveHint, andopenWorldHinthonestly. - Require approvals for consequential writes instead of hiding them behind one generic success flow.
- Give repo-changing work a linked or throwaway worktree so the write path has its own boundary.
- Make the proof surface legible: route, branch, task, revision, source link, or failing command.