Skip to content
Back to skills

Criteria

ASecurity

Draft test-ready acceptance criteria (a recette checklist) from a Requivo session's model, in this Claude session, and save them as a tracked artifact. Use when the user wants Given/When/Then scenarios a QA engineer can run and a client can sign off on.

  • 3 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 20, 2026
ai-agentsrustgobash

Works with

  • cli

Security analysis

A100/100

Scanned October 4, 2026

npx -y skills add jbkkz/requivo --skill criteria --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Criteria?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Criteria
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jbkkz-criteria/badge)](https://www.skillsdirectory.com/skills/jbkkz-criteria)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: criteria
description: Draft test-ready acceptance criteria (a recette checklist) from a Requivo session's model, in this Claude session, and save them as a tracked artifact. Use when the user wants Given/When/Then scenarios a QA engineer can run and a client can sign off on.
allowed-tools: Bash(requivo doctor:*), Bash(requivo model show:*), Bash(requivo status:*), Bash(requivo artifact save:*), Read
---

# /requivo:criteria

Write **acceptance criteria** — a test-ready specification a QA engineer can run against the built
feature and a client can sign off on. **You** write it; Requivo tracks the document. This mirrors
`src/requivo/assets/prompts/criteria.md` and the `AcceptanceCriteria` contract in `core/contracts.py`,
at commit `969cfd9` — the same rules the CLI's `requivo criteria` gives its own reasoning call,
restated here because the plugin cannot import that file at runtime (`decision:
plugin-skills-mirror-a-pinned-cli-commit`). Read `${CLAUDE_PLUGIN_ROOT}/REASONING.md` unless you already hold it from an earlier
`/requivo:*` in this conversation — and read it again whenever you are unsure you still do.

## 0. Preflight
Run the shared **preflight** from REASONING.md before anything else: `requivo doctor --json`, checking
whether the command ran *at all* rather than what it reported. If it could not run, the `requivo` CLI
is not installed — follow REASONING.md's missing-CLI flow. Nothing has been saved at this
point, so there is no half-written checklist to find.

## 1. Load the model
```
requivo model show <slug>
requivo status <slug> --json
```
Note the `revision` — call it `N`. It is the model these criteria will rest on, and you will state it
when you save.

## 2. Reason → write the checklist
- Write scenarios in **Given / When / Then** form: `given` is the starting state, `when` is the single
  triggering action, `then` is the observable outcomes to check — either can hold more than one line
  when the scenario genuinely needs it (a precondition with two parts, an outcome with two effects);
  write the first as **Given**/**Then** and every one after it as **And**, the same convention
  `criteria_markdown` renders with.
- Group scenarios under **features** — one per coherent area of behaviour (a workflow step, a business
  rule set, a permission boundary), named in business terms.
- Each scenario has an id (`AC-1`, `AC-2`, … — unique across the whole document, not per feature), a
  title, and a kind: `happy_path`, `edge_case`, `error`, or `permission`.
- **Cover where it matters, not everything.** Prioritise business rules, permission boundaries, and
  edge cases that would actually break the feature or the client's trust. A happy path plus its
  meaningful failure modes beats twenty trivial checks.
- Use only what the model supports. Where it is thin or uncertain about a behaviour, do **not** invent
  a definitive criterion — put the open point in `open_questions` instead. A criterion QA can't
  objectively pass or fail is worthless, and every `then` must be observable and checkable. A
  behaviour the model holds as a proposal or a domain fact (`proposed:` or `domain:` evidence) gets a
  scenario tagged from REASONING.md's *Source tags*, expected and to confirm; a new proposal of yours
  is an open question carrying your recommendation.
- Honour `confidence` and `impact`: `explicit` → a firm scenario; `inferred` → phrase the `then` as
  *expected, to confirm*, or route it to `open_questions`; `empty` + high impact → `open_questions`,
  never a definitive AC; `empty` + low impact → a non-blocking open question or leave it out.
- **Never collapse an open fork into one AC.** Where two behaviours are both plausible and unconfirmed,
  list the choice in `open_questions` — never assert one side as the criterion.
- Fold in the model's reasoning layer where present: `decisions` become criteria for the decided path
  (note the tradeoff, don't re-open it); an unresolved `challenges` entry is an `open_question`
  presenting the alternative, never a definitive AC that silently picks a side.

**Voice.** Write for QA and a client — no slot ids, completeness percentages, or confidence labels
(explicit/inferred/empty) in the prose. Say the business thing; this calibration is invisible to the
reader, never printed as a label.

**Language.** Criteria anchor English whatever language the request arrived in — they feed dev teams
and trackers, unlike the mirrored conversation (`docs/requirements-model.md`, *The language of the
outputs*).

Write it as Markdown:
```
# <Title>

> Acceptance criteria — generated by Requivo

## <Feature name>

### [ ] AC-1 — <title>  _<Happy path | Edge case | Error | Permission>_

- **Given** <precondition>
- **And** <a second precondition, only if there is one — repeat for a third, and so on>
- **When** <action>
- **Then** <outcome>
- **And** <a second outcome, only if there is one — repeat for a third, and so on>

## Open questions

- <open question>
```

## 3. Save it as a tracked artifact
```
requivo artifact save <slug> --type criteria --file - --revision N --json
```
`--revision N` is the revision you read in step 1. Read `stale` back from the save output: if it is
`true`, the model moved while you were writing — say so plainly and offer to redo it.

## 4. Point at the next step, once
The same model turned into a work breakdown is `/requivo:epic <slug>` — the delivery epic a dev team
tracks and ships. If a scenario surfaced a gap the model should record, `/requivo:run <slug>` is
where that goes back in.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.