ears-spec-writing
Write requirement specifications in EARS (Easy Approach to Requirements Syntax) notation.
Skill by MILTONADINA
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/miltonadina-ears-spec-writing
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ears-spec-writing
What's inside
- Skill name
ears-spec-writing- Description
- Write requirement specifications in EARS (Easy Approach to Requirements Syntax) notation. Use whenever authoring or editing files in /specs/, converting prose requirements into structured form, or reviewing existing specs for ambiguity. EARS uses five sentence patterns to produce unambiguous, testable, machine-readable requirements. Used by NASA, Airbus, Rolls-Royce, and Amazon Kiro IDE.
- License
- MIT
- Instructions
- 176 lines in SKILL.md · view on GitHub
Files (3)
- SKILL.md
- SKILL.md.bundle
- SKILL.md.sig
SKILL.md (first lines)
# EARS Spec Writing > Five sentence patterns. Zero ambiguity. Both humans and LLMs read them the same way. **Tradeoff:** EARS feels formal compared to free prose. Worth it: the LLM cannot "interpret" an EARS clause — there's nothing to interpret. Specs become tests. --- ## The five patterns ### 1. Ubiquitous (always-true requirements) ``` THE SYSTEM SHALL <action>. ``` Example: > THE SYSTEM SHALL store all passwords using Argon2id with a work factor of at least 3. ### 2. Event-driven (response to an external trigger) ``` WHEN <trigger>, THE SYSTEM SHALL <action>. ``` Example: > WHEN a user submits a valid email on the password reset form, > THE SYSTEM SHALL send a one-time reset link valid for 30 minutes. ### 3. State-driven (behavior conditional on system state) ``` WHILE <state>, THE SYSTEM SHALL <action>. ``` Example: > WHILE a reset link is unused and unexpired, > THE SYSTEM SHALL allow exactly one password change before invalidating the link. ### 4. Unwanted behavior (handle the bad path explicitly) ``` IF <undesirable condition>, THEN THE SYSTEM SHALL <action>. ``` Example: > IF a password is entered incorrectly 5 times within 15 minutes, > THEN THE SYSTEM SHALL lock the account for 30 minutes and email the owner. ### 5. Optional features (conditional on feature presence) ``` WHERE <feature is present>, THE SYSTEM SHALL <action>. ``` Example: > WHERE 2FA is enabled for the account, > THE SYSTEM SHALL require a valid TOTP code before completing password reset. ### Complex (combinations, used sparingly) ``` WHEN <trigger>, IF <condition>, THEN THE SYSTEM SHALL <action>. ``` Example: > WHEN the user clicks the reset link, IF the link has not been used and has not > expired, THEN THE SYSTEM SHALL render the new-password form. Use complex sparingly — most requirements decompose into 2-3 simple ones. --- ## Rules 1. **Use SHALL, not "must" / "should" / "may"**. SHALL is the requirement keyword. Other words signal preference, not requirement. 2. **One requirement per sentence**. If you say "and," it's probably two requirements. 3. **Quantify everything possible**. "Fast" is not a requirement. "Within 200ms p95 latency" is. 4. **Subject is always THE SYSTEM** (or a named subsystem like THE PAYMENT SERVICE). Not "the user does X." 5. **Number requirements**: REQ-1, REQ-2, … so you can reference them in tests, ADRs, and PRs. --- ## Anti-patterns ### "Should" instead of "shall" > ❌ The system should validate email addresses. > ✓ THE SYSTEM SHALL validate email addresses against RFC 5321 format. ### Implementation in the spec > ❌ The system shall use Redis to cache the reset link with TTL=1800. > ✓ THE SYSTEM SHALL invalidate the reset link 30 minutes after issuance. (How you implement the 30-minute expiry is up to the engineer; the spec says behavior, not technology.) ### Untestable requirement > ❌ The system shall be user-friendly. > ✓ WHEN a user enters an invalid email, > THE SYSTEM SHALL display an inline error message within 200ms identifying the specific format issue. ### Multiple requirements bundled > ❌ The system shall validate emails, hash passwords with Argon2id, and rate-limit logins. > ✓ Three separate REQs. --- ## Acceptance criteria from EARS
From MILTONADINA/DevOPs, MIT.
More from MILTONADINA/DevOPs
- 0.565score
openapi-first
MILTONADINA
Generate API code, types, validators, mock servers, and client SDKs from a single OpenAPI 3.1 specification.
SkillAFreshness: AClaude Code +9 - 0.565score
proof-of-work
MILTONADINA
Produce structured proof artifacts for every completed claim.
SkillAFreshness: AClaude Code +9 - 0.565score
plan-decomposition
MILTONADINA
Break an approved spec into atomic, ordered, verifiable tasks before any code is written.
SkillAFreshness: AClaude Code +9 - 0.565score
multi-tool-failover
MILTONADINA
Manage session continuity when switching between Claude Code, Codex CLI, Cursor, Antigravity, Kiro, or local LLMs (OpenCode, Aider).
SkillAFreshness: AClaude Code +9 - 0.565score
goal-loop
MILTONADINA
Execute the spec-tests-implement-verify cycle for one atomic task at a time.
SkillAFreshness: AClaude Code +9 - 0.565score
baton-handoff
MILTONADINA
Write a complete handoff document at session end so the next agent (Claude Code, Codex, Cursor, Antigravity, Kiro, or local LLM) resumes exactly where this…
SkillAFreshness: AClaude Code +9 - 0.565score
observability-instrument
MILTONADINA
Add OpenTelemetry spans with user_id and tenant_id in baggage to any new code path that handles requests, runs agents, or performs billable operations.
SkillAFreshness: AClaude Code +9 - 0.565score
cost-attribution
MILTONADINA
Track per-client and per-feature LLM and cloud spend with cryptographic audit trail.
SkillAFreshness: AClaude Code +9 - 0.561score
session-summary
MILTONADINA
Generate the end-of-session human-reviewable report.
SkillAFreshness: AClaude Code +9 - 0.561score
coppa-audit
MILTONADINA
Audit code, data flows, and UI for COPPA (Children's Online Privacy Protection Act) compliance.
SkillAFreshness: AClaude Code +9 - 0.560score
supabase-rpc-functions
MILTONADINA
Supabase RPC function security patterns -- SECURITY DEFINER with `SET search_path` discipline, `REVOKE EXECUTE FROM public` for least-privilege exposure…
SkillAFreshness: AClaude Code +9 - 0.560score
rust-error-handling
MILTONADINA
Rust error-handling patterns and anti-patterns -- `unwrap()` in request hot paths, `panic!` instead of returning a `Result`, leaking error internals via…
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 12
- Last commit (this folder)
- Oct 12, 2026 (17 days ago)
- Last release
- Sep 23, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/MILTONADINA/DevOPs
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from MILTONADINA
- 0.565score
openapi-first
MILTONADINA
Generate API code, types, validators, mock servers, and client SDKs from a single OpenAPI 3.1 specification.
SkillAFreshness: AClaude Code +9 - 0.565score
cost-attribution
MILTONADINA
Track per-client and per-feature LLM and cloud spend with cryptographic audit trail.
SkillAFreshness: AClaude Code +9 - 0.565score
observability-instrument
MILTONADINA
Add OpenTelemetry spans with user_id and tenant_id in baggage to any new code path that handles requests, runs agents, or performs billable operations.
SkillAFreshness: AClaude Code +9 - 0.565score
baton-handoff
MILTONADINA
Write a complete handoff document at session end so the next agent (Claude Code, Codex, Cursor, Antigravity, Kiro, or local LLM) resumes exactly where this…
SkillAFreshness: AClaude Code +9 - 0.565score
goal-loop
MILTONADINA
Execute the spec-tests-implement-verify cycle for one atomic task at a time.
SkillAFreshness: AClaude Code +9 - 0.565score
multi-tool-failover
MILTONADINA
Manage session continuity when switching between Claude Code, Codex CLI, Cursor, Antigravity, Kiro, or local LLMs (OpenCode, Aider).
SkillAFreshness: AClaude Code +9
Cite this page
ears-spec-writing skill. Agent Mart. https://agentmart.dev/skills/miltonadina-ears-spec-writing (last updated 2026-10-24)