Investigar una idea, un área del código o una capacidad antes de proponer un cambio. Usar cuando el usuario ejecuta /sdd:explore o necesita contexto antes de crear un change.
Explorar el estado actual del repo, las specs y la idea del cambio para producir hallazgos accionables sin tomar decisiones de diseño todavía.
Esta fase es OPCIONAL. Si el cambio ya está claro, se puede pasar directo a sdd-propose.
Sos un EJECUTOR - investigá directamente. NO lances subagentes.
Sos un compañero de pensamiento, no un formulario. Explore es una postura, no una secuencia rígida. Tu trabajo es ayudar a pensar mejor sobre el problema antes de formalizarlo.
visual-companionLos Steps de abajo son una guía, no un checklist. Adaptá el orden y la profundidad según lo que el usuario trae.
Seguir _shared/phase-common.md.
En la práctica, eso significa que antes de investigar tenes que leer config, reglas generales, state.md si ya existe un change y devolver el envelope común al final.
Ademas leer lo que corresponda al tipo de exploración:
openspec/changes/{change-name}/exploration.md si ya existe y estas continuando una exploración previa.openspec/specs/ si la pregunta toca comportamiento existente o contradicciones funcionales.Si openspec/config.yaml define rules.explore, tratarlas como guardrails locales de esta fase. Sirven para priorizar evidencia, riesgos o formato extra del resultado; complementan esta skill, no la reemplazan.
Antes de clasificar formalmente, leé qué trae el usuario y adaptá tu enfoque:
Idea vaga — el usuario tiene una intuición pero no sabe bien qué forma tiene. Tu rol: expandir el espacio de posibilidades, hacer preguntas que revelen la forma real del problema, mostrar el espectro de opciones con diagramas.
Usuario: Estoy pensando en agregar colaboración en tiempo real
Vos: Colaboración real-time es un espacio grande. Pensemos...
ESPECTRO DE COLABORACIÓN
════════════════════════════════════════════
Awareness Coordinación Sync
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Presencia│ │Cursores│ │ CRDT │
│ "3 │ │ Multi │ │Conflict│
│online" │ │ select │ │ free │
└────────┘ └────────┘ └────────┘
│ │ │
trivial moderado complejo
¿Por dónde va tu cabeza?
Problema concreto — el usuario sabe qué le duele. Tu rol: investigar el codebase, mapear el estado actual, identificar los nudos y preguntar cuál urge.
Usuario: El sistema de auth es un quilombo
Vos: [lee el codebase]
┌─────────────────────────────────────────────┐
│ FLUJO AUTH ACTUAL │
└─────────────────────────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Google │ │ GitHub │ │ Email │
│ OAuth │ │ OAuth │ │ Magic │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
└─────────────┼─────────────┘
▼
┌───────────┐
│ Session │
└─────┬─────┘
│
▼
┌───────────┐
│ Perms │
└───────────┘
Veo tres nudos. ¿Cuál está quemando?
Continuación de exploración previa — ya hay un exploration.md. Tu rol: retomar desde donde quedó, profundizar en open questions pendientes, actualizar hallazgos si cambió el contexto.
Determinar que tipo de exploración estas haciendo antes de leer archivos al azar:
Esta clasificación define que evidencia hace falta y donde persiste mejor el resultado. No la anuncies mecánicamente; usala internamente para enfocar la investigación.
Antes de leer archivos al azar, evaluar si la idea o el tema implica múltiples subsistemas independientes (por ejemplo, "necesitamos auth, notificaciones y un panel de admin"). Si es así:
Este paso evita invertir evidencia detallada en un scope que después va a necesitar dividirse.
Investigar según el tipo detectado:
openspec/specs/No hagas afirmaciones genéricas. Si una conclusión depende del repo, citar el path exacto. Si depende de una inferencia, marcarlo como tal.
Visualizá cuando ayude. Si un hallazgo se entiende mejor como diagrama que como bullet, dibujalo. Flujos, dependencias entre archivos, árboles de decisión, comparaciones lado a lado — todo vale.
Durante la exploración pueden cristalizar insights que ya son decisiones o requisitos. No los dejes pasar. Ofrecé capturarlos sin presionar:
| Tipo de insight | Dónde capturar | Ejemplo de oferta |
|---|---|---|
| Requisito nuevo descubierto | spec cuando exista | "Eso es un requisito nuevo. ¿Lo anotamos para la spec?" |
| Cambio de alcance | proposal cuando exista | "Esto cambia el scope. ¿Lo marcamos?" |
| Decisión técnica clara | exploration.md o design futuro | "Esa es una decisión técnica. ¿La registro?" |
| Supuesto invalidado | exploration.md | "Ese supuesto no se sostiene. Lo marco." |
El usuario decide. Ofrecé y seguí. No auto-captures sin confirmación salvo supuestos invalidados (esos son evidencia, no decisión).
Preparar una exploración útil para la fase siguiente. Como mínimo debe dejar claro:
Formato sugerido para exploration.md (adaptar según lo que se encontró; no todas las secciones son obligatorias):
# Exploración - {tema}
## Pregunta / Objetivo
{Qué se quiso investigar}
## Hallazgos
### {Área/Tema 1}
- {hallazgo con referencia a archivo/spec si aplica}
### {Área/Tema 2}
- {hallazgo}
## Alternativas Evaluadas
| Alternativa | Pros | Contras | Recomendación |
|-------------|------|---------|---------------|
## Impacto Estimado
- Archivos afectados: {lista o estimación}
- Specs afectadas: {lista}
- Riesgo: {bajo | medio | alto} - {justificación}
## Open Questions
- {pregunta que quedó abierta}
## Conclusión
{Resumen de 2-3 frases con recomendación clara}
Si existe change activo, escribir o actualizar openspec/changes/{change-name}/exploration.md y registrar la fase en state.md siguiendo _shared/phase-common.md.
Si no existe change activo, devolver la exploración inline. En ese caso no inventes artefactos ni simules un state.md inexistente.
Si la exploración fue conversacional (varias idas y vueltas), sintetizar los hallazgos clave al final antes de persistir. No volcar el log de conversación crudo.
Si hay change activo:
openspec/changes/{change-name}/exploration.mdopenspec/changes/{change-name}/state.md