Skip to content

[Extension]: Add EARS Requirements Syntax #3395

Description

@v-dhruv

Extension ID

ears

Extension Name

EARS Requirements Syntax

Version

1.0.0

Description

Author, lint, and convert requirements using EARS (Easy Approach to Requirements Syntax) - the five industry-standard sentence patterns for unambiguous, testable requirements.

Author

dhruv-15-03

Repository URL

https://github.com/dhruv-15-03/spec-kit-ears

Download URL

https://github.com/dhruv-15-03/spec-kit-ears/archive/refs/tags/v1.0.0.zip

License

MIT

Homepage (optional)

https://github.com/dhruv-15-03/spec-kit-ears

Documentation URL (optional)

https://github.com/dhruv-15-03/spec-kit-ears/blob/main/README.md

Changelog URL (optional)

https://github.com/dhruv-15-03/spec-kit-ears/blob/main/CHANGELOG.md

Required Spec Kit Version

=0.9.0

Required Tools (optional)

None - this extension only reads/writes Markdown files under .specify/ears/<slug>/ and has no external tool dependencies.

Number of Commands

3

Number of Hooks (optional)

0

Tags

ears, requirements, specification, quality

Key Features

  • speckit.ears.author - drafts requirements for a feature directly in EARS format, classified by pattern with stable requirement IDs.
  • speckit.ears.lint - audits existing requirements for EARS conformance and ambiguity, producing a read-only lint report with suggested rewrites (never modifies source files).
  • speckit.ears.convert - rewrites free-form requirements into EARS patterns and produces a traceability matrix from originals to EARS statements.
  • All commands communicate through Markdown files in a single per-topic directory (.specify/ears/<slug>/), keeping EARS work self-contained and optional relative to the default Spec Kit workflow.

Testing Checklist

  • Extension installs successfully via download URL
  • All commands execute without errors
  • Documentation is complete and accurate
  • No security vulnerabilities identified
  • Tested on at least one real project

Submission Requirements

  • Valid extension.yml manifest included
  • README.md with installation and usage instructions
  • LICENSE file included
  • GitHub release created with version tag
  • All command files exist and are properly formatted
  • Extension ID follows naming conventions (lowercase-with-hyphens)

Testing Details

Tested on: Windows 11 with a local Spec Kit checkout (specify CLI from this repo's main).

Test project: A scratch Spec Kit project initialized with specify init.

Test scenarios:

  1. Downloaded the v1.0.0 release archive and verified its SHA-256 checksum matches the value published in the release.
  2. Confirmed the archive extracts to a directory containing a valid extension.yml, README.md, LICENSE, CHANGELOG.md, and all three command files referenced in the manifest.
  3. Ran specify extension add --dev against a local checkout of the extension and confirmed the three commands (speckit.ears.author, speckit.ears.lint, speckit.ears.convert) install and register correctly.
  4. Exercised all three commands end-to-end against a sample feature (drafting EARS requirements, linting an existing spec, and converting free-form requirements), confirming output files are written only under .specify/ears/<slug>/ as documented.

Example Usage

# Install extension
specify extension add ears --from https://github.com/dhruv-15-03/spec-kit-ears/archive/refs/tags/v1.0.0.zip

# 1. Author EARS requirements from a feature idea
/speckit.ears.author "A kanban task board where users drag tasks between columns" slug=task-board

# 2. Audit an existing spec's requirements for EARS conformance
/speckit.ears.lint .specify/specs/001-task-board/spec.md slug=task-board

# 3. Convert free-form requirements into EARS with traceability
/speckit.ears.convert slug=task-board

Proposed Catalog Entry

{
  "ears": {
    "name": "EARS Requirements Syntax",
    "id": "ears",
    "description": "Author, lint, and convert requirements using EARS - the five industry-standard sentence patterns for unambiguous, testable requirements",
    "author": "dhruv-15-03",
    "version": "1.0.0",
    "download_url": "https://github.com/dhruv-15-03/spec-kit-ears/archive/refs/tags/v1.0.0.zip",
    "sha256": "182e7234f220e11a1b89b919e46d60ecd208d6ecf8a3d012d97f33e2541d3998",
    "repository": "https://github.com/dhruv-15-03/spec-kit-ears",
    "homepage": "https://github.com/dhruv-15-03/spec-kit-ears",
    "documentation": "https://github.com/dhruv-15-03/spec-kit-ears/blob/main/README.md",
    "changelog": "https://github.com/dhruv-15-03/spec-kit-ears/blob/main/CHANGELOG.md",
    "license": "MIT",
    "requires": {
      "speckit_version": ">=0.9.0"
    },
    "provides": {
      "commands": 3,
      "hooks": 0
    },
    "tags": ["ears", "requirements", "specification", "quality"],
    "verified": false,
    "downloads": 0,
    "stars": 0,
    "created_at": "2026-07-07T00:00:00Z",
    "updated_at": "2026-07-07T00:00:00Z"
  }
}

Additional Context

This supersedes PR #3324 ("feat(extensions): add EARS requirements syntax extension"), which originally proposed bundling this extension directly into the core spec-kit repository. Per maintainer feedback on that PR (#3324 (comment)), the same extension is now delivered as a standalone community extension per the Extension Publishing Guide. PR #3324 is being closed in favor of this submission.

Posted by GitHub Copilot on behalf of @dhruv-15-03.

Metadata

Metadata

Assignees

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions