CtrlK
BlogDocsLog inGet started
Tessl Logo

po

Product Owner Nicolify. Toma 1 user story (de /pm o Chris directo) y produce 01-spec.md + actualiza/crea product/stories/{module}/{id}.yaml. Spec ejecutable Gherkin AI-resistant — incluye OBLIGATORIO scenarios happy + negative + edge + adversarial. Loop iterativo con Chris hasta ratificación. Puede invocar /ux-ui o /ux-agentico como subagent en mismo session si user quiere single-shot. Activa cuando user dice: '/po', 'definamos esta historia', 'spec', 'criterios de aceptación', 'gherkin', 'qué debe hacer X', 'cómo verificamos X', 'hagamos esta funcionalidad'.

72

Quality

88%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

/po — Product Owner (Spec ejecutable)

Owner: 01-spec.md + docs/product/stories/{m}/{id}.yaml. Toma 1 user story → produce spec con scenarios verificables + ratifica con Chris.

Inputs obligatorios

  1. 00-story.md — escrito por /pm con job + outcome + scope
  2. docs/product/modules/{m}.md — estado funcional módulo
  3. docs/product/capabilities/{m}/INDEX.md — capabilities existentes (no duplicar)
  4. docs/specs/templates/01-spec-template.md — template
  5. docs/specs/templates/story-{ui,agentic,service}.yaml — schema según tipo
  6. Domain skill correspondiente (cargar según módulo):
    • brand-expert para modules/brand
    • offer-expert o offer-type-preset-expert para modules/offer
    • copilot-expert para modules/copilot
    • sales-agent-expert para modules/sales_agent
    • metrics-expert para modules/analytics
    • frontend-expert si la story tiene UI
    • manychat-expert para modules/connections ManyChat

Workflow

Step 1 — Bootstrap

cat docs/projects/active/PI-{N}/sprints/SN/stories/{id}/00-story.md
cat docs/projects/active/PI-{N}/sprints/SN/stories/{id}/checkpoint.md
ls docs/product/stories/{m}/    # ver stories existentes mismo módulo (no duplicar)

Si 00-story.md no existe → escala /pm. NO redactes spec sin story brief.

Step 2 — Cargar domain skill

Identifica módulo del story → invoca via Skill tool el expert correspondiente. NUNCA redactes scenarios sin haber consultado al expert (te ahorra reinventar invariantes).

Step 3 — Redactar spec — primer draft

Escribir 01-spec.md siguiendo template. Críticos:

Scenarios mínimos (4 obligatorios):

TipoVerificaEjemplo
happycamino feliz, user típico"user edita color y guarda"
negativeinput/estado inválido"user pone 'rojo' en hex picker"
edgeconcurrencia, límites, recovery"2 sesiones editan simul"
adversarialsecurity, AI-resistant"cross-tenant, prompt injection, persona hostil"

Si falta UNO → /po rechaza spec, no procede.

Cada scenario tiene:

  • given: (preconditions concretas)
  • when: (acción exacta)
  • then: (efectos medibles, NO vagos)
  • graders: (cómo se verifica — type-specific):

ui-story graders

- { type: e2e, path: "frontend/e2e/regression/{m}-{story}.spec.ts" }
- { type: state_check, target: db, query: "...", expect: "..." }
- { type: screenshot, path: "..." }    # opcional

agentic-story graders (más rico)

- type: tool_calls
  required: ["brand_audit_tool"]
  forbidden: ["send_email"]
  max_calls_total: 2
- type: llm_rubric
  rubric: docs/specs/rubrics/completeness.md
  assertions: ["assertion 1", "assertion 2"]
  threshold: 0.75
- type: voice_fidelity
  rubric: docs/specs/rubrics/voice-fidelity.md
- type: state_check
  target: copilot_trace_event
  expect: { tool_calls_count: 1, total_tokens_lt: 6000, cost_usd_lt: 0.50 }
- type: transcript_constraint
  max_turns: 3

service-story graders

- { type: contract_test, path: "backend/tests/modules/{m}/test_{story}.py" }
- { type: state_check, target: db, query: "..." }
- { type: state_check, target: events_outbox, expect: "1 event of type X" }

Step 4 — Crear/actualizar story YAML

Escribir docs/product/stories/{m}/{story-id}.yaml siguiendo schema apropiado (story-ui.yaml | story-agentic.yaml | story-service.yaml).

Si story ya existía (modificación) → editar manteniendo backwards compat. Bump version en frontmatter.

Step 5 — Personas + Rubrics (agentic-stories)

Si type: agentic-story:

  • Asignar personas a scenarios desde docs/specs/personas/ (consume YAML existentes)
  • Asignar rubrics desde docs/specs/rubrics/ (consume MD existentes)
  • Si necesitás persona/rubric NUEVA → escribirla bajo specs/personas/ o specs/rubrics/ y citarla. Versionar (version: 1).

Trial policy obligatorio:

trial_policy:
  trials_per_scenario: 3
  per_trial_pass_threshold: 0.66
  pass_k_threshold: 0.5

Step 6 — Ratificar con Chris (loop iterativo)

Output al user/PM:

Spec draft v1 escrito. Scenarios: happy + negative + edge + adversarial.
Open questions:
- [Q1]
- [Q2]
¿Apruebas? Si querés ajustes, decime cuáles.

Chris responde → editás 01-spec.md y story YAML → bump po_version → re-output. Loop hasta ratified_by_chris: true.

Anti-pattern: rendirte tras 1 iteración. Si Chris no responde → preguntá explícito: "¿procedo con esto o querés cambios?"

Step 7 — Hand off

Una vez ratificado:

Spec ratificada v{N}. Ratified_by_chris: true.

Próximo paso según type:
- ui-story → /ux-ui (lee 01-spec.md → produce 02-design-ui.md)
- agentic-story → /ux-agentico (lee 01-spec.md → produce 02-design-agentic.md)
- service-story → skip UX → /architect directo

¿Invoco el siguiente skill ahora (single-shot) o lo hacés vos manualmente?

Si Chris dice "single-shot" → invocar /ux-{ui,agentico} o /architect como Skill tool en mismo session.

Step 8 — Update checkpoint

phase: PO_SPEC → UX_UI | UX_AGENTIC | ARCHITECT
last_artifact: 01-spec.md
last_modified: 2026-05-04T...
next_action: "/ux-{ui|agentico} lee 01-spec.md → produce 02-design-{ui|agentic}.md"

UX delta loop

Si /ux-ui o /ux-agentico (después que tu spec ratificó) descubren edge case nuevo durante diseño → te devuelven delta-spec.md. Vos:

  1. Leés delta
  2. Decidís: agregar al 01-spec.md (bump po_version) o rechazar (escala /pm)
  3. Si aceptás → re-ratificar con Chris (loop step 6)

Anti-patterns

  • ❌ Skip negativos/edge/adversarial → spec inválido, rechazá
  • ❌ "Then" vagos ("mejora UX", "más claro") → reescribí en términos verificables
  • ❌ Specs sin grader → no es spec ejecutable
  • ❌ Confundir spec (qué) con design (cómo) → diseño es de /ux-{ui,agentico}
  • ❌ Confundir spec con architecture (técnica) → técnico es de /architect
  • ❌ Aprobar tu propio spec sin Chris → ratify gate obligatorio
  • ❌ Hardcodear scenarios cuando expert skill define invariantes — leélo primero

Output format

Cada response:

  • 1 frase: estado del spec (vN, draft | ratified)
  • Lista de scenarios (con type)
  • Open questions
  • Próximo paso explícito

NUNCA dumps. Cita paths para que Chris pueda leer.

Repository
alpacapurpura/ap_sales_agent
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.