Tier 1
Tier 1 — Professional Prompting: Write prompts the agent can act on, to get the right result the first time
Reach for this tier when the agent keeps doing almost the right thing — vague asks get literal, wrong results. The single request is your cheapest lever: say what you want so it can't guess wrong.
📐 The prompt triad — every prompt is three things: intent · context · constraint.
- Intent — the outcome, not the steps. You own the destination; the agent owns the route.
- Context — the world the agent reasons inside. Without it, the model fills the gaps with its priors — it guesses. Context is how you replace guessing with knowing.
- Constraint — the boundary: what not to do, how far, how much. What keeps a powerful generator small, safe, and reviewable.
You give the ends and the edges; the agent works out the means — grounded in the context you supply. Land all three in one message and it runs far on its own.
The 14 tips below are how you fill each slot well. Learn the triad here — you'll use it the whole way up: Tier 2 turns it into a spec, Tier 3 scales the context into tools, Tier 5 hardens the constraints.
1.1 Hand over the outcome, not a file list. — intent
Instead of: "Add a dark-mode stylesheet, a toggle in the header, and save the choice in the browser."
Prefer: "Let users switch to dark mode and remember their choice — match the styling already in the app."
You give the destination and the guardrails; the agent chooses the parts.
1.2 Be specific — vagueness is now taken literally. — intent
Instead of: "Clean up the auth code."
Prefer: "Extract the token-refresh logic in @src/auth/session.ts into the existing retry helper."
1.3 Say what to do, not what to avoid. — intent
Instead of: "Don't be verbose."
Prefer: "Write for senior engineers — lead with the technical specifics."
1.4 Give the reason; motivation makes it generalize. — context
Instead of: "Use tabs."
Prefer: "Use tabs — our linter rejects spaces in this repo."
1.5 Specify the output shape, not just the goal. — intent
Instead of: "Add a search endpoint."
Prefer: "Add search:
GET /search?q=, returns JSON — an array of{title, url, date}, newest first, max 20."
1.6 Show examples instead of describing style. — context
Instead of: "Make the tone professional."
Prefer: "Match these 3 examples:
<example>…</example>" (3–5 work best).
1.7 Follow the house style, don't invent one. — context
Instead of: "Write a date parser."
Prefer: "Parse dates using the pattern already in @utils/date.ts."
1.8 Show, don't tell — use the input channels. — context
Instead of: describing a layout bug in prose.
Prefer: paste the screenshot +
@Component.tsx; pipe the raw logs straight in.
1.9 Invite uncertainty instead of forcing an answer. — fourth move: the gaps in any slot
Instead of: "Implement the caching layer."
Prefer: "Implement caching. List your assumptions first; if a choice is genuinely ambiguous, stop and ask."
1.10 Paste raw errors, don't paraphrase them. — context
Instead of: "It throws some null error."
Prefer: paste the full stack trace → "diagnose the root cause before changing anything."
1.11 Constrain scope — modern models over-engineer unless you stop them. — constraint
Instead of: "Fix this bug and improve the code."
Prefer: "Fix only this bug — smallest change that works. No refactoring, no comments on untouched code, no handling for cases that can't happen."
1.12 Narrow the edit surface — a small diff is a reviewable diff. — constraint
Instead of: "Refactor the whole checkout flow."
Prefer: "Change only
@src/checkout/total.ts— don't touch anything else."
1.13 Dial effort; don't beg for thoroughness. — constraint
Instead of: "Think really hard and be exhaustive."
Prefer: leave it at high (the current default); add
ultrathinkfor one gnarly turn;/effort ultracodefor big async jobs.
1.14 Say it all in your first message. — all three at once
Instead of: "Add a way to export reports." — then ten messages fixing what it guessed wrong.
Prefer: "Add report export: a button on the reports page that downloads the current rows as a
.csv. No new libraries. Work on your own; only stop if you hit a real decision."
One complete brief beats ten corrections — the agent runs further on its own, and you stop babysitting.
If you forget the rest, keep these five:
- Hand over the goal, not the steps. Say what you want and the limits; let the agent pick the how. (not a file list or a play-by-play)
- Be specific and concrete. Vague asks get taken literally now. (not "clean it up", "make it better")
- Do one thing at a time. A single goal, a small focused diff — not "fix this and improve that." (not "fix this and improve the code")
- Show, don't describe. Paste the real error, the screenshot, an example. (not retyping or paraphrasing them)
- Say it all in the first message. One full brief beats ten corrections.