Metamindz Logo
EngineeringFree, no signup

Acceptance Criteria Generator

Turn a rough feature idea into Given/When/Then criteria, edge cases, non-functional requirements and a definition of done, plus a version written for an AI coding agent.

Flat illustration of a rough feature sketch resolving into an ordered stack of precise checklist cards

Acceptance criteria are the conditions a feature has to satisfy before anyone can call it done, written precisely enough that two people reading them would build and test the same thing. The usual format is Given/When/Then: given some starting state, when the user does one specific thing, then this observable outcome happens. Good criteria cover the unhappy paths as well as the happy one, put numbers on the non-functional constraints, and name the decisions the brief left open instead of quietly guessing them. Paste a feature description above and this tool writes all of that, plus a version aimed at an AI coding agent.

Describe the feature. No need to paste code.A sentence or two (at least 30 characters)
Who is this for?

How to use the Acceptance Criteria Generator

  1. Describe the feature

    A user story, a paragraph from a brief, or rough notes from a conversation. Two sentences is enough to start. More detail gives sharper criteria.

  2. Set the context

    Choose the work type and who the criteria are for: a development team, an AI coding agent, or both. The output changes shape accordingly.

  3. Read the open questions first

    These are the decisions your description left open. Answering them before anyone writes code is the whole point of the exercise.

  4. Take the criteria into your tracker

    Copy the Given/When/Then scenarios and the non-functional requirements into the ticket. Keep the definition of done stable across tickets rather than regenerating it each time.

  5. Hand the agent spec to your coding agent

    If you work with Claude Code, Cursor or Copilot, the agent-ready block is written to paste straight in, with the constraints and unknowns stated rather than assumed.

What separates useful acceptance criteria from ceremony

Most acceptance criteria fail the same way. They restate the title of the ticket in the passive voice and stop. "The user can reset their password" gives you nothing to test, and two developers will build two different things from it.

A criterion earns its place when it is observable, binary and specific. Observable means someone outside the code can see whether it happened. Binary means no partial credit. Specific means the numbers are in it: how many characters, how many seconds, how many attempts before lockout.

The other common failure is scope. Criteria that cover only the happy path get signed off and then reopened, because the interesting half of any feature is what happens when something is missing, duplicated, expired, too large, offline or concurrent.

  • Observable. A tester can see the outcome without reading the implementation.
  • Binary. It happened or it did not. "Works well" is not a criterion.
  • Specific. Thresholds, limits, timeouts and formats are written down, not implied.
  • Independent. Each criterion can fail on its own, so a failure tells you where the bug is.
  • Complete on the unhappy paths: empty, invalid, duplicate, expired, unauthorised, too large, concurrent, offline.
  • Honest about the unknowns. Anything the brief did not decide goes in writing as an open question instead of getting guessed at in code.

Given / When / Then, and when to use something else

Given/When/Then comes from behaviour-driven development. Given establishes the starting state, When is the single action under test, Then is the observable result. Its value is that it forces you to state the state, which is where most ambiguity hides.

One action per scenario. The moment a scenario has two Whens it is two scenarios, and a failure will not tell you which half broke.

It is the wrong shape for some things. Latency, throughput, accessibility and data retention read better as plain constraints with numbers than as a contrived scenario. This tool produces both and puts each requirement in whichever form suits it.

  • Given: the world before the action. Who is logged in, what exists, what state the record is in.
  • When: exactly one action, described from the outside.
  • Then: the observable outcome, including what the user sees and what the system records.
  • And: more setup or more assertions. Never another action.

Writing acceptance criteria for AI coding agents

A ticket written for a person leans on shared context. The developer knows the codebase, knows which conventions apply, and knows who to ask when something is unclear. Hand the same ticket to Claude Code, Cursor or Copilot and none of that holds. An agent that hits a gap does not ask. It picks something plausible and carries on.

So a spec for an agent has to say what a person would have inferred. Where the code goes. Which patterns to follow. What must not change. What done looks like as a command that either passes or fails. And an explicit instruction to stop and ask rather than invent when a decision is missing.

The agent-ready output from this tool is that spec: the same criteria with the implicit context made explicit, and the open questions moved to the top where they cannot get skipped.

  • State the observable contract, not the implementation. An agent will happily rewrite your architecture if the ticket reads like a design document.
  • Name the verification command. Done should mean a specific test command exits zero.
  • List the constraints: files and modules that must not change, patterns to follow, dependencies not to add.
  • Put the unknowns at the top with an explicit instruction to ask rather than assume.
  • Keep the scope narrow. A broad ticket produces a broad diff, and a broad diff is one nobody reviews properly.

Acceptance criteria are not a definition of done

They answer different questions. Acceptance criteria belong to one piece of work and describe what it must do. A definition of done is the same for every piece of work and describes the standard it has to meet: tested, reviewed, documented, observable, accessible, deployed.

Teams that run the two together end up relitigating whether something needs tests on every single ticket. Teams that keep them apart argue about the standard once and then stop.

This tool writes a definition of done alongside the criteria, tuned to the kind of work you described. Take the parts that fit and keep them stable across tickets. The value is in the consistency rather than in any one line.

What this tool cannot do

It has never seen your codebase, your users or your compliance obligations. It works from the description you paste, and a thin description produces thin criteria. The quality of the output tracks the quality of the input more closely here than in most AI tools.

It will invent plausible detail if you let it. That is exactly why the open questions section exists. Read it first, because those are the places it would otherwise have guessed on your behalf.

Run the tool and nothing you paste is stored: it goes to the model, the result comes back, neither is written to a database. Submit the form to unlock more runs or to download the report and what you typed comes to us with your address, which is what the tick box on that form says. Either way, describe the feature rather than pasting proprietary code or customer data. It does not need either to do the job.

Frequently asked questions

Acceptance criteria are the specific, testable conditions a feature must meet to be accepted as complete. You write them before the work starts, agree them between whoever asked for the feature and whoever builds it, and use them afterwards to decide whether it is done. If a criterion cannot be checked by someone who has not read the code, it is not a criterion.

Vague tickets are the most expensive thing in your backlog.

We run engineering teams as fractional CTOs and build software with them. The first thing we usually have to fix is the gap between what someone asked for and what actually got written down.

Talk to us about your delivery process

Related from Metamindz

Published