Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Write well-structured user stories with acceptance criteria and edge cases. Use when asked to write user stories, create tickets from a feature brief, convert a PRD into stories, or write acceptance criteria. Produces ready-to-estimate stories in the standard format with clear acceptance criteria, edge cases, and definition of done.
.claude/skills/mohitagw15856-user-story-writer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 151% | 0% |
| case-05 | ✓→✗ | ▼ Worse | 131% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 93% | 0% |
Esta habilidad produce historias de usuario listas para producción a partir de un resumen de características, una sección de PRD o una descripción verbal. Cada historia sigue el formato estándar con un claro quién/qué/por qué, criterios de aceptación conductuales en formato Given/When/Then, casos extremos y definición de hecho. El resultado está listo para copiar y pegar en Jira, Linear o tu herramienta de planificación.
Pide al usuario estos datos si no están proporcionados:
Para cada historia:
Épica: Nombre de la épica principal — p. ej. "Búsqueda Avanzada"] ID de Historia: ID de Jira/Linear — deja en blanco si aún no se ha creado] Prioridad: P1 / P2 / P3] Puntos de historia: Deja en blanco — para que el equipo de ingeniería estime]
> Como tipo de usuario específico — no "usuario"], > Quiero acción concreta que desean realizar], > Para el resultado que logran — valor de negocio, no descripción de la característica].
Ejemplo: > Como gerente de cuenta, > Quiero filtrar mi lista de clientes por fecha de último contacto, > Para poder identificar rápidamente los clientes con los que no he hablado en más de 30 días y priorizar el seguimiento.
1–3 oraciones de contexto que no están en la historia de usuario: cuándo importa esta historia, qué la desencadena, cómo se ajusta en un flujo más amplio. Esto ayuda a los ingenieros a entender el por qué antes de que pregunten.]
Formato: Given / When / Then
Cada criterio prueba un comportamiento específico. Escribe un GWT por resultado observable — no un GWT para toda la característica.
CA1: Nombre corto para este criterio]
Given [estado inicial o contexto]
When [acción del usuario]
Then [comportamiento observable del sistema]CA2: Nombre corto]
Given [...]
When [...]
Then [...]CA3: Nombre corto]
Given [...]
When [...]
Then [...]Lista escenarios que no son obvios pero que deben manejarse. Estos se convierten en ACs adicionales o notas para ingeniería.]
Indica explícitamente qué NO cubre esta historia — previene el aumento de alcance y clarifica dónde comienza la siguiente historia.]
Si el usuario proporciona una épica o resumen de características, desglózala en un conjunto completo de historias antes de escribirlas:
Épica: Nombre] Objetivo: ¿Qué resultado logra completar esta épica?] Historias:
| # | Historia | Notas | Dependencias | |---|---|---|---| | 1 | Historia del camino feliz principal — la versión más simple de la característica que entrega valor] | | | | 2 | Historia de validación / manejo de errores] | | Depende de #1 | | 3 | Historia de caso extremo o usuario avanzado] | | Depende de #1 | | 4 | Historia de administrador o configuración] | | | | 5 | Historia de rendimiento o escala — si aplica] | | Depende de #1 |
Orden sugerido de sprint: ¿Qué historias son P1 para MVP? ¿Cuáles pueden seguir en un sprint posterior?]
Usa estos para revisar historias antes de entregarlas a ingeniería:
| Anti-patrón | Ejemplo | Solución | |---|---|---| | Solución en la historia | "Como usuario quiero un filtro desplegable" | Elimina la decisión de UI — "Como usuario quiero filtrar por rango de fechas" | | "Para qué" vago | "para que sea más fácil de usar" | Hazlo específico — "para que pueda priorizar el seguimiento sin abrir cada registro manualmente" | | Demasiado grande | La historia cubre 5 flujos de usuario distintos | Divide en historias separadas por flujo | | Sin criterios de aceptación | La historia solo tiene descripción | Agrega al menos 3 criterios GWT antes de que ingeniería empiece | | ACs que prueban la solución, no el comportamiento | "Given el desplegable está abierto, When selecciono una opción" | Prueba el resultado — "Given he aplicado un filtro de fecha, When veo mis resultados, Then solo aparecen clientes contactados en ese rango de fechas" | | Falta estado vacío | Sin CA para qué sucede con 0 resultados | Agrégalo — los estados vacíos son parte de la característica | | Falta estado de error | Sin CA para fallo de red o entrada inválida | Agrega explícitamente ACs de manejo de errores |
Resumen de característica: "Permitir a los usuarios exportar su historial de facturas como PDF o CSV"
> Como administrador de finanzas, > Quiero exportar mi historial de facturas como archivo CSV, > Para poder importarlo en nuestro software de contabilidad sin entrada manual de datos.
CA1: Exportación exitosa
Given estoy en la página de Facturas con al menos una factura
When hago clic en "Exportar" y selecciono "CSV"
Then se descarga un archivo CSV que contiene todas las facturas visibles con columnas: ID de Factura, Fecha, Monto, Estado, Nombre del ClienteCA2: Estado vacío
Given estoy en la página de Facturas sin facturas
When hago clic en "Exportar"
Then el botón de exportar está deshabilitado y un tooltip dice "No hay facturas para exportar"CA3: Exportación filtrada
Given he aplicado un filtro de fecha mostrando facturas de enero 2026 solo
When hago clic en "Exportar" y selecciono "CSV"
Then la exportación contiene solo facturas de enero 2026 — no todas las facturasCasos extremos:
Fuera de alcance: Exportación a PDF (Historia 2), exportaciones programadas (épica futura)
> Como administrador de finanzas, > Quiero exportar mi historial de facturas como PDF formateado, > Para poder compartir un resumen profesional con nuestro contador.
... los ACs siguen el mismo patrón ...]
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 42,971 | 39,722 | -8% | 1 | 1 | 0% | 6,858 | 8,772 | +28% | 0 | 0 | — |
case-01 | fail→pass | 22,939 | 22,812 | -1% | 1 | 1 | 0% | 3,194 | 5,519 | +73% | 0 | 0 | — |
case-03 | fail→fail | 21,240 | 21,270 | +0% | 1 | 1 | 0% | 3,107 | 5,378 | +73% | 0 | 0 | — |
case-04 | pass→pass | 18,522 | 26,434 | +43% | 1 | 1 | 0% | 3,090 | 5,965 | +93% | 0 | 0 | — |
case-05 | pass→fail | 18,263 | 29,812 | +63% | 1 | 1 | 0% | 2,747 | 6,354 | +131% | 0 | 0 | — |
case-06 | pass→pass | 20,682 | 21,663 | +5% | 1 | 1 | 0% | 2,489 | 5,173 | +108% | 0 | 0 | — |
case-07 | fail→fail | 17,788 | 21,651 | +22% | 1 | 1 | 0% | 2,109 | 5,343 | +153% | 0 | 0 | — |
case-08 | fail→fail | 18,901 | 14,523 | -23% | 1 | 1 | 0% | 2,595 | 5,215 | +101% | 0 | 0 | — |
case-09 | fail→fail | 16,730 | 13,958 | -17% | 1 | 1 | 0% | 2,165 | 5,045 | +133% | 0 | 0 | — |
case-10 | fail→fail | 15,141 | 15,577 | +3% | 1 | 1 | 0% | 1,682 | 5,003 | +197% | 0 | 0 | — |
case-11 | fail→fail | 12,506 | 18,542 | +48% | 1 | 1 | 0% | 1,864 | 4,676 | +151% | 0 | 0 | — |
case-12 | fail→fail | 13,098 | 24,841 | +90% | 1 | 1 | 0% | 2,112 | 5,352 | +153% | 0 | 0 | — |
case-13 | fail→fail | 12,963 | 24,922 | +92% | 1 | 1 | 0% | 2,124 | 6,032 | +184% | 0 | 0 | — |
case-14 | fail→fail | 17,820 | 22,739 | +28% | 1 | 1 | 0% | 2,011 | 6,558 | +226% | 0 | 0 | — |
case-15 | fail→fail | 12,867 | 21,053 | +64% | 1 | 1 | 0% | 1,349 | 5,078 | +276% | 0 | 0 | — |
case-16 | fail→fail | 10,299 | 21,635 | +110% | 1 | 1 | 0% | 1,682 | 4,228 | +151% | 0 | 0 | — |
case-17 | fail→fail | 23,005 | 13,089 | -43% | 1 | 1 | 0% | 2,187 | 4,774 | +118% | 0 | 0 | — |
case-18 | fail→fail | 13,402 | 13,860 | +3% | 1 | 1 | 0% | 2,152 | 4,930 | +129% | 0 | 0 | — |
case-19 | fail→pass | 18,450 | 41,635 | +126% | 1 | 1 | 0% | 3,064 | 7,701 | +151% | 0 | 0 | — |
case-20 | fail→fail | 7,269 | 11,807 | +62% | 1 | 1 | 0% | 1,212 | 4,632 | +282% | 0 | 0 | — |
case-21 | fail→fail | 8,475 | 11,367 | +34% | 1 | 1 | 0% | 1,371 | 4,477 | +227% | 0 | 0 | — |
case-22 | fail→fail | 8,874 | 17,765 | +100% | 1 | 1 | 0% | 1,457 | 5,417 | +272% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.