PromptMake
2026-08-14·14 min read

How to Improve AI Prompts Checklist

How to improve AI prompts with a practical checklist: goal, constraints, examples, and eval. Iterate weak drafts without a generic prompt-engineering essay.

prompt-engineeringprompt checklistchatgptclaudegeminieval

Generate optimized prompts for ChatGPT, Claude & more

Free prompt generator — no account needed.

Try Prompt Generator →

A weak prompt fails for a reason you can name: the goal is fuzzy, the constraints are missing, the examples do not match the task, or you have no eval so you guess. This article is a practical checklist for how to improve AI prompts by iterating those four parts, one change at a time. You will leave with a diagnose-then-rewrite loop, copy-paste fragments for GPT-5.6 Sol, Claude Fable 5 / Opus 5 / Sonnet 5, and Gemini 3.5 Flash / 3.1 Pro, plus a short eval sheet you can rerun after a model swap. Skip the history of prompt engineering. Open the last bad output, mark the miss, then edit the matching block.

The four-part checklist for how to improve AI prompts

Treat the prompt as four labeled blocks, not one blob of English. GOAL names the outcome, the audience, and the success check. CONSTRAINTS name length, tone, banned content, sources, and output shape. EXAMPLES show one good case and one near-miss if format or edge cases matter. EVAL is a small set of inputs plus a pass/fail rule you score by hand or with a rubric. You improve the prompt by changing the block that failed, then you rerun the same eval. Mixing all four into a paragraph hides the cause of the next miss.

Write the blocks in that order on paper or in a gist. Put volatile fields (today's date, user id, ticket text) in the user message so the system text stays frozen. Frozen system text lets you cache prompts and compare scores when you swap GPT-5.6 Sol for Claude Fable 5. If the first draft of GOAL is a mess, run that paragraph through PromptMake /text once, pick the model you will call in production, then paste the enhanced GOAL back into the gist. Do not keep chatting the production prompt into a new shape each session.

A usable GOAL line: "Draft a 120-word status update for a product manager. Success: names the decision, the risk, and the next date. If the notes lack a date, write Unknown date and stop." A usable CONSTRAINTS line: "Plain paragraphs. No markdown tables. Cite only the notes. If a number is missing, write Unknown." Keep EXAMPLES off the first pass if the task is a one-off rewrite. Add them the moment the model misses format twice on the same eval set.

Diagnose the miss before you rewrite

Most people rewrite the whole prompt after one ugly reply. That burns the signal in the failure. The reply already tells you which block broke. A fluent but off-topic answer is a GOAL miss. A on-topic answer that leaks a price or ignores the word cap is a CONSTRAINTS miss. A JSON shape that drifts field names is an EXAMPLES miss (or an API schema miss if you begged for JSON in prose). A prompt that "feels better" with no score is an EVAL miss; you cannot tell if the next edit helped. Sit with the last three outputs and tag each one before you type a new instruction.

Keep a one-line log: input id, fail tag, quote from the output that proves the fail, block you will edit. Three rows beat a long chat. If two tags fight (GOAL and CONSTRAINTS both look wrong), edit GOAL first. Constraints cannot save a fuzzy outcome. If the model invents facts, tag CONSTRAINTS plus a source rule, then add an eval case that has a hole in the notes so you can score "Unknown" on purpose.

Chat models (Gemini 3.5 Flash, Claude Sonnet 5, Haiku 4.5, ChatGPT on GPT-5.5 Instant) follow labeled blocks and few-shot format well. Reasoning-class models (GPT-5.6 Sol, Claude Fable 5, Claude Opus 5, Gemini 3.1 Pro) already run hidden search; extra "think in steps" text wastes tokens. Diagnosis stays the same across both classes. The rewrite you apply after the tag is what changes.

Goal gaps versus constraint gaps

A GOAL gap shows up as the wrong artifact. You asked for a status update and got a pep talk. You asked for a support reply and got a legal memo. Fix GOAL with an outcome noun, an audience noun, and a success check a stranger could score. "Be helpful" is not a check. "Lists the refund window from the policy notes or says Not in notes" is a check. Role fluff ("you are a world-class PM") does little on reasoning models and can fight the task on chat models if the role wants length while the check wants 120 words.

A CONSTRAINTS gap shows up as the right artifact with the wrong fences. Length overshoots. Tone slips into slang. The model cites training-memory prices. The output uses a table when you need paste-ready paragraphs. Fix CONSTRAINTS with positive rules: "Keep the body under 120 words. Use the notes as the only source. Write Unknown for missing numbers." Negation leaks attention ("do not mention pricing" still loads pricing). Repeat the output shape at the bottom of the prompt; models weight the start and end of context more than the middle, so a format line buried in paragraph three gets dropped.

Example gaps versus eval gaps

An EXAMPLES gap shows up as format drift after GOAL and CONSTRAINTS look tight. Field names wander. The greeting style flips. Edge cases (empty notes, two products, a refusal) collapse into a generic apology. Add two shots: one happy path that matches the success check, one near-miss that shows the refusal or Unknown path. Contradictory shots cost more than they help. On reasoning models, skip chain-of-thought inside the shots; show the final artifact only so you do not lock the model into narrating steps.

An EVAL gap shows up as vibes. You like Tuesday's reply more than Monday's and you ship it. Build a sheet with five to eight inputs: two happy paths, one missing-field case, one out-of-scope ask, one hostile or slang user. Write a pass/fail line per input before you run the model. Score 1 or 0. Change one block. Rerun the sheet. If the score did not move, revert. If you cannot name a pass/fail line, you are still in GOAL work. PromptMake /text can tighten a messy GOAL paragraph; it cannot invent your pass/fail lines. Those come from the job the prompt must do in your product or workflow.

Rewrite the goal and the constraints

After you tag the miss, rewrite one block in a gist, not in a 40-turn chat. Chat history hides which sentence you added. A gist with GOAL / CONSTRAINTS / EXAMPLES / EVAL versions (v3, v4) lets a teammate replay the fail. Put the user-facing task in the user message. Keep the contract in the system (or Custom Instructions / a Claude Project / a Gemini Gem) so you do not paste the same fences every time.

GOAL rewrite recipe: outcome + audience + success check + missing-data behavior. Example: "Write a customer email that states the shipping status. Audience: the buyer. Success: carrier and eta from the notes, or Insufficient data plus one question. Do not invent a carrier." CONSTRAINTS rewrite recipe: length, source, output shape, banned inventions. Example: "Max 90 words. Source: NOTES only. Output: greeting, one status paragraph, one next-step sentence. Invented tracking numbers are a fail." Paste both blocks. Run the eval sheet. Stop if GOAL still fails; constraints will not rescue it.

For JSON or other strict shapes on APIs, put the schema in the API call (OpenAI json_schema, Anthropic structured outputs / tools, Gemini response schema) and keep field meaning in the prompt. Prompt pleading ("ONLY JSON") is a weak constraint in 2026. For ChatGPT / Claude / Gemini chat UIs with no schema knob, one clean example plus a labeled OUTPUT block is the next-best fence.

Add examples and run an eval

Examples and eval belong together because an example without a score is decoration. You add a shot to fix a tagged miss, then you prove the fix on the sheet. If you cannot point at the row the new shot should save, skip the shot. Extra tokens in the prompt compete with the user notes; long few-shot blocks also push your CONSTRAINTS line toward the middle of the context, where models drop it. Keep shots short. Match the output shape you want in production, including the Unknown path.

Pick the model class before you write shots. Fast chat models gain format adherence from two tight examples. Reasoning models often win with zero shots plus a sharp GOAL and CONSTRAINTS pair; a CoT-style example can drag visible step lists into the answer. If you still need a shot on GPT-5.6 Sol or Claude Fable 5, show the final artifact with labels, not an inner monologue. Gemini 3.5 Flash likes explicit OUTPUT labels. Gemini 3.1 Pro wants the success check more than a persona.

Score on a timer. Ten minutes for five rows beats an afternoon of cherry-picked screenshots. Store the sheet next to the prompt version in git. After a vendor model bump, rerun the sheet before you rewrite anything; many "prompt regressions" are model-default changes. If scores drop on one row class (refusals, for example), edit CONSTRAINTS or add one refusal shot. Leave GOAL alone unless the artifact type changed.

Few-shot that matches the failure

Write shots from real fails, not from an ideal you invented. Take the input that broke v3. Write the output you would have accepted. That pair is shot A. For shot B, take the missing-field input and write the Unknown / Insufficient data reply you want. Two shots cover most format work. Classification tasks can take one shot per class if you cap the count; more than that starts to contradict. Strip names and secrets from production logs before you paste them into the prompt.

Label the shots. "EXAMPLE_OK" and "EXAMPLE_UNKNOWN" beat a wall of dialogue. Claude models follow XML-style tags well (<example>, <notes>, <email>). ChatGPT and Gemini follow markdown headers. Stay consistent inside one prompt. If a shot includes a tool result or a policy snippet, mark it as data, not as a new system rule, so the model does not treat the example's refund window as global policy.

Score, change one thing, freeze

Run the sheet. Write the total (for example 6/8). Edit one block. Rerun. Write the new total. If the total rose and no old pass flipped to fail, freeze that version. If a pass flipped, you traded one bug for another; revert and try a smaller edit. Freeze means prompt text, model id, and temperature / reasoning settings together. Changing GPT-5.5 Instant to GPT-5.6 Sol in the same gist without a new version number will confuse the next debug session.

A freeze also needs an owner. Name who may edit the gist. Drive-by chat tweaks in production Custom Instructions undo the sheet. For a personal workflow, freeze is a dated note: "v7, 2026-08-14, Sol, 7/8." For a product, freeze is a git tag plus the eval command. Either way, the loop is the same: tag the miss, edit one block, score, freeze or revert.

Chat models versus reasoning models in 2026

The checklist stays stable. The knobs you turn after a tag depend on the model. On Gemini 3.5 Flash, Claude Sonnet 5, Haiku 4.5, and ChatGPT's fast default (GPT-5.5 Instant as of mid-2026), labeled RTF-style blocks (role if it sets vocabulary, task, format) plus two shots still lift format tasks. Chain-of-thought in the user prompt can help multi-hop logic on those models if you measured a gain on your sheet. Do not add it by habit.

On GPT-5.6 Sol, Claude Fable 5, Claude Opus 5, and Gemini 3.1 Pro, state GOAL, CONSTRAINTS, and the success check, then stop coaching the inner search. Provider docs for this class tell you to skip "think step by step" in the visible prompt. Your eval still needs the Unknown path and the out-of-scope path; reasoning models can be fluent while they invent a date. CONSTRAINTS that demand a source or an Unknown token matter more here than a persona.

If you switch classes, rerun the sheet before you rewrite GOAL. A prompt that scored 7/8 on Sonnet 5 can drop on Fable 5 because the shots taught visible reasoning you no longer want. Delete the shots, keep GOAL and CONSTRAINTS, score again. The reverse also happens: a sparse Sol prompt can miss JSON field names on Flash until you add one example. Match the rewrite to the class, not to a 2023 blog post.

Mistakes that keep weak prompts weak

The common trap is a full rewrite after one reply. You add a persona, a new format, and three shots in one paste. The next reply looks different and you cannot say which line caused it. Change one block. The second trap is a constraint written as a vibe: "keep it professional." Replace that with a length cap, a greeting rule, and a banned-invention list. The third trap is an eval made of your favorite inputs. Include the hole in the notes. Include the user who asks for a discount you must not invent.

Another trap is stacking roles. "Senior lawyer who is also a friendly coach who is also brief" fights itself. Pick the audience in GOAL and drop the costume if the success check already sets tone. Prompt length is a trap of its own. A 2,000-token contract with the real rule in the middle will drop that rule. Put non-negotiables at the top and repeat OUTPUT at the bottom. Split a mega-prompt into a chain if the job has phases (extract, then draft); each step gets its own tiny checklist and its own three-row log.

Soft tool or source language belongs on this list too. "Use the notes if helpful" invites the model to skip the notes. "Cite NOTES or write Unknown" is a constraint you can score. The same pattern shows up in agent loops: "call tools when needed" versus "call lookup_order before any shipping claim." If your task has tools, tag a tool miss as CONSTRAINTS (or a TOOLS block) and add an eval row where memory would lie.

First pass with PromptMake /text

The checklist assumes you can name GOAL. Many first drafts cannot. You have a messy brief, a Slack thread, and a hope that the model "gets it." Paste that mess into PromptMake /text, choose the model family you will use (ChatGPT, Claude, Gemini), and take the enhanced prompt as a GOAL plus CONSTRAINTS draft. Then you still add EXAMPLES and EVAL yourself. The enhancer is a first pass, not a substitute for the sheet.

Guest use is a handful of runs per day; a registered account raises that cap. Stay inside the free tier while you learn the loop. After you like v1 from /text, copy it into your gist, strip anything you did not ask for, and run the five-row sheet. If /text added a persona you do not need on Sol or Fable 5, delete it and score again. Soft sell, one job: turn a blurry brief into labeled blocks you can iterate.

Image prompts are a different loop (reference photo, style, lighting). This post stays on text. If you later need a photo-to-prompt path, PromptMake /image is the matching tool. For text work, keep /text as the optional start, then live in GOAL, CONSTRAINTS, EXAMPLES, and EVAL.

FAQ

These questions match how people search once a prompt has already failed in ChatGPT, Claude, or Gemini. Answers assume you will tag the miss (goal, constraints, examples, eval) and change one block. Free-tier PromptMake /text is a first pass for a messy GOAL, not a substitute for a five-row sheet. Model names below match the mid-2026 snapshot in this post; confirm the picker in your product before you freeze a score. If two answers seem to conflict (shots on Flash versus no shots on Sol), follow the model class you will ship, then rerun the sheet.

How to improve AI prompts if I only have a chat UI?

Pin a system-style block in Custom Instructions, a Claude Project, or a Gemini Gem: GOAL, CONSTRAINTS, OUTPUT. Keep the daily task in the user message. After a bad reply, tag the miss and edit one pinned block. Save two example turns in project knowledge, then score five saved inputs in a note so you are not trusting vibes from the last thread.

Do I need few-shot examples every time?

Add shots when format or an edge case fails twice on the same eval. Zero-shot plus a sharp GOAL works for many reasoning-model tasks. Chat models doing strict JSON or a house style gain from two short shots. Drop shots that contradict each other, then measure on the sheet after you add or remove a shot.

Which model should I use while I iterate?

Iterate on the model you will ship. A prompt tuned on Gemini 3.5 Flash can miss on GPT-5.6 Sol once you strip the shots. If cost matters, draft GOAL on a fast model, then freeze and score on the flagship (Sol, Fable 5, Opus 5, Gemini 3.1 Pro). Record the model id next to the version, and check the vendor picker before you publish a score because mid-2026 names still move.

How do I know the prompt got better?

You know from the eval total, not from a nicer paragraph. Five to eight inputs with a written pass/fail line give you a number. A rise with no old pass lost is an improvement; a prettier fail is still a fail. Keep the sheet when you swap models so you can see a vendor change versus a prompt change.

Can PromptMake /text replace my checklist?

It can draft GOAL and CONSTRAINTS from a rough brief. You still own EXAMPLES, the Unknown path, and the score sheet. Use the free tier for a first pass, paste the result into a gist, then iterate by hand. The product does not run your eval rows for you.

Should I add "think step by step" to improve answers?

On fast chat models, try it only if your sheet gains on multi-hop items. On GPT-5.6 Sol, Claude Fable 5, Claude Opus 5, and Gemini 3.1 Pro, skip that phrase; those models already spend a hidden reasoning budget, and extra coaching can waste tokens. Put the success check in GOAL instead. If you need visible working, ask for a short labeled outline as part of OUTPUT and score that outline on the sheet.

What if the model still invents facts after I add constraints?

Add an eval row with a hole in the source and require Unknown. Tighten CONSTRAINTS to "NOTES only" and name the invented field as a fail. If you are on an API, ground the call with retrieval or a tool and require a citation. In chat, paste the notes in a labeled block each turn so they sit near OUTPUT, and treat fluency without a source as a fail on that row until the Unknown token appears.

Ready to generate your own prompts?

Free. No sign-up required. Works with all major AI models.

Related articles