01Steering the agentDeep dive ①

A vague command isn't short — it's open

Three parts that leave the agent only one correct reading: goal, boundaries, result shape

Published2026-05-31
Read3 min read
TypeField notes
TL;DR

A command isn't vague because it's short; it's vague because it leaves open three things the agent must know: where it's aiming (a measurable goal), what it may touch (boundaries), and what you want back to check (result shape). Answer those three up front and you leave it no room to guess.

"Optimize this function for me." Three words, sounds clear. Ten minutes later the agent is back, pleased: it rewrote the whole module, changed the return type, added a new cache library "to keep it clean." The function is faster. And three other places in the codebase just broke.

It didn't disobey you. It missed what you meant — and both readings fit the three words you typed. The problem wasn't that you said too little. It's that you said it open.

01Vagueness is missing decisions, not missing words

A long, rambling instruction is just as vague if it leaves the same load-bearing spots open. "Optimize this function" leaves three questions the agent must answer to act at all: optimize along which axis? how far may it reach? what does done look like? You don't say, so it acts anyway — filling those three with whatever it sees most often. Command structure, boiled down, is you answering those three first, for it.

02Three parts that seal a command

1
Goal

Measurable, not an adjective. "Faster" is a feeling; "cut the runtime on the same input" is something you can check.

2
Boundaries

What's fair game, what's off-limits. One line — "do NOT change the signature or shared code" — heads off half the accidents.

3
Result shape

What do you want back to verify? "Show me before/after" forces it to hand over evidence, not a story.

Back to that function. Same intent, rewritten to close: "Cut the runtime of the order-processing function. Do NOT change the signature or the shared cache. When done, show me before/after on the same input." Still one sentence — shorter than the rambling you were about to write. But the three open branches are shut: it knows where to aim, which line not to cross, what to hand back.

These three aren't a rigid template you recite like a robot. They're a mental checklist: before you hit send, glance over it — did I say where it aims, what it may touch, what I want back? Whatever's missing is exactly the spot it's about to fill in.

03Describe what it needs, not what you're thinking

The subtlest trap is writing down your own train of thought instead of the information it needs. You type "this feels slow, probably the loop" — that's you thinking out loud, not handing off a task. The agent will latch onto "the loop" and skip the part that's actually slow.

A trick to catch yourself: reread the command and ask "if I were a newcomer who can't read the thoughts in my head, would I get this right?" If they'd have to guess — you under-wrote it. Every spot they'd guess is a branch you just handed it the keys to.

Structure doesn't make a command longer. Usually it's shorter — a command with a clear goal, boundaries, and result shape needs no three paragraphs of hedging. It just has to close the branches that, left open, the agent fills with the most common thing it's seen — not the specific thing you need.

End of pieceCluster 01 · 2/4
The author

craftagent is the notebook of someone still building — told over coffee, each story wrapped around a lesson paid for in full.