返回 Skill 列表
extension
分类: 开发与工程无需 API Key

ears-translator

将用户故事和非正式需求转换为EARS(需求语法简易方法)格式。在Claude需要(1)将用户故事转换为正式需求,(2)将非正式需求转换为结构化的EARS格式,(3)使用EARS模式审查并改进现有需求,(4)创建可测试、无歧义的系统需求时使用。触发条件如“转换为EARS”,“编写需求”,“使这些用户故事正式化”,“EARS格式”。

person作者: jakexiaohubgithub

EARS Requirements Translator

Translate user stories and informal requirements into precise, testable EARS format requirements.

Workflow

Step 1: Gather Requirements

Read all stories and requirements provided by user. Identify:

  • The system/component being specified
  • Functional behaviors described
  • Conditions, triggers, and states mentioned
  • Error scenarios and edge cases

Step 2: Ask Clarification Questions

Use AskUserQuestion to clarify ambiguities. Common questions:

  • What is the exact system/component name?
  • What are the specific thresholds or timing requirements?
  • Are there error conditions to handle?
  • Is this an optional feature or always present?

Continue until at least 90% confident about requirements.

Step 3: Select Output Format

Ask user preference:

  • Individual REQs: Each requirement listed separately with IDs (REQ-001, REQ-002...)
  • Grouped by feature: Requirements organized under feature headings

Step 4: Transform to EARS

Apply the appropriate EARS pattern for each requirement. See references/ears-patterns.md for pattern details.

Requirement Splitting: Always attempt to split compound requirements into individual atomic requirements:

  • If a requirement mentions multiple tools (e.g., "RSpec and Rubocop"), create separate requirements for each
  • If a requirement mentions multiple services or components, create separate requirements for each
  • If a requirement mentions multiple actions, create separate requirements for each
  • Use sub-numbering (1a, 1b, 1c) to indicate requirements derived from the same source

Pattern Selection:

  • Always active property → Ubiquitous (no keyword)
  • Continuous state dependency → State-Driven (While)
  • Discrete event trigger → Event-Driven (When)
  • Error/fault handling → Unwanted Behavior (If...Then)
  • Optional feature → Optional Feature (Where)
  • Multiple conditions → Complex (combine)

Testing & Linting Requirements: Requirements about testing (RSpec, Jest, pytest, etc.) and linting (Rubocop, ESLint, etc.) should use the Ubiquitous pattern because they describe always-active quality properties of the system:

  • "Tests shall pass" = always-active property
  • "Linter shall report no errors" = always-active property

Example transformations:

  • Input: "When claude runs rspec it passes"

  • Output: "The admin/ test suite shall pass all RSpec tests without errors."

  • Input: "When rubocop runs it has no errors"

  • Output: "The admin/ codebase shall pass Rubocop linting without errors."

Step 5: Validate with Checklist

For each requirement, verify:

Structure:

  • [ ] Correct EARS pattern
  • [ ] Explicit system name
  • [ ] One "shall" per requirement
  • [ ] Temporal ordering (precondition → trigger → system → response)

Content:

  • [ ] Verifiable/testable
  • [ ] Measurable criteria (no vague terms)
  • [ ] Units for numerical values
  • [ ] No escape clauses

Language:

  • [ ] Active voice
  • [ ] Consistent terminology

Step 6: Present Results

Show the EARS requirements to user with:

  • Requirement IDs
  • Pattern type used
  • Original source reference (which user story/requirement it came from)

Step7: Writing Results

Write the EARS requirements with concise format

Quick Pattern Reference

| Pattern | Keyword | Template | |---------|---------|----------| | Ubiquitous | (none) | The <system> shall <response> | | State-Driven | While | While <condition>, the <system> shall <response> | | Event-Driven | When | When <trigger>, the <system> shall <response> | | Unwanted Behavior | If...Then | If <error>, then the <system> shall <response> | | Optional Feature | Where | Where <feature>, the <system> shall <response> |

Example Transformations

Example 1: Splitting Compound Requirements

Input:

When CI sees changes in admin/ it runs rspec and rubocop

Output (Split + Pattern Selection):

REQ-001a [Event-Driven]
When CI detects changes in admin/, the CI pipeline shall execute RSpec for admin/.

REQ-001b [Event-Driven]
When CI detects changes in admin/, the CI pipeline shall execute Rubocop for admin/.

Output (Concise version):

When CI detects changes in admin/, the CI pipeline shall execute RSpec for admin/.
When CI detects changes in admin/, the CI pipeline shall execute Rubocop for admin/.

Example 2: Testing/Linting as Ubiquitous

Input:

When claude runs rspec in admin/ it passes without errors When claude runs rubocop in admin/ it passes without errors

Output (Ubiquitous Pattern):

REQ-001 [Ubiquitous]
The admin/ test suite shall pass all RSpec tests without errors.

REQ-002 [Ubiquitous]
The admin/ codebase shall pass Rubocop linting without errors.

Output (Concise version):

The admin/ test suite shall pass all RSpec tests without errors.
The admin/ codebase shall pass Rubocop linting without errors.

Example 3: User Story Transformation

Input (User Story):

As a user, I want to receive a notification when my file upload completes, so I know it's done.

Output (EARS):

REQ-001 [Event-Driven]
When a file upload completes successfully, the application shall display a success notification within 2 seconds.

REQ-002 [Unwanted Behavior]
If a file upload fails, then the application shall display an error message indicating the failure reason.

Output (Concise version):

When a file upload completes successfully, the application shall display a success notification within 2 seconds.
If a file upload fails, then the application shall display an error message indicating the failure reason.

Resources

  • references/ears-patterns.md - Complete EARS pattern reference with examples and quality checklist