perla Matriz de capabilities · Fase A
21 mayo 2026 v1 borrador
Contrato operativo · Fase A

Qué hace cada superficie, qué falta y quién decide.

Cómo leerla

Una tabla por dominio. Cada fila es una capability.

Las columnas dicen en qué superficie vive, qué tan implementada está, si bloquea el primer beta y qué decisión la destraba.

Estado actual
repo cableado completo
queued falla último cable
parcial solo una superficie
mockup solo diseño
Ø no existe
Beta 1 · recorte
blocker sin esto no hay beta
nice mejora pero no bloquea
post después del primer beta
Audiencia
customer escribe al número
owner dueño · control total
staff empleado · parcial
PrincipioCómo se decide qué entra a la matriz

Una capability entra solo si está anclada en una de tres fuentes: repo real (existe código en src/backend/ o tool cableada), dashboard real (existe ruta en src/routes/) o roadmap v3 (nombrada explícita en el roadmap del agente). Si no está en ninguna, no se agrega. Anti-wishlist.

La columna Audiencia sale de src/backend/agent/audience.ts, que mapea phone → role en cada mensaje entrante.

A0 · queuedPor qué hay un único caso amarillo

El smoke test del 19/05 dejó el envío de respuesta en messages.outbound.status='queued' sin envío real a Meta. La cadena recibe → procesa → encola, pero el último cable no está conectado. Tomi tiene la decisión sobre el approach (reusar el helper existente vs. nueva ruta). Por eso A0 es el único queued en la matriz — desbloquea, junto con otros hitos, todo el resto.

§1

Agenda y turnos

Siete capabilities. Seis funcionan; A0 (responder_mensaje) hoy es la única en queued.

IDCapabilityAudienciaDashboardWATool realEstadoBeta 1Decisión
A0*responder_mensajesistemadispatch + senderqueuedblockerTomi: reusar sendWhatsAppTextMessage vs. nueva ruta
A1listar_servicioscustomer, owner, staff/app/settings/servicesget_servicesrepoblocker
A2listar_staffcustomer, owner, staff/app/settings/teamget_staffrepoblocker
A3ver_agendacustomer, owner, staff/app/schedulelist_appointmentsrepoblockerNegocio: ¿customer ve toda la agenda o solo sus turnos?
A4crear_turnocustomer, owner, staff/app/schedulecreate_appointment mediumrepoblockerNegocio: confirmación siempre o solo en conflicto
A5cancelar_turnocustomer, owner, staff/app/schedulecancel_appointment mediumrepoblockerNegocio: ¿customer cancela solo o requiere staff?
A6mover_turnocustomer, owner, staff/app/schedulereschedule_appointment mediumrepoblockerProducto: ¿confirmar nueva fecha antes de commitear?
NotaA0 es la fila vertebral

Sin A0 cableada, todo el resto de §1 está «listo pero mudo». Las 6 tools de A1-A6 funcionan, pero el agente no le contesta al customer. Por eso A0 va primero y manda el orden del beta. El gap es un solo cable, no una arquitectura.

§2

Conversaciones y handoff

Cuatro capabilities. Listar y tomar ya funcionan; devolver y no-show tienen service layer pero falta exposición como tool.

IDCapabilityAudienciaDashboardWATool realEstadoBeta 1Decisión
C1listar_conversacionesowner, staff/app/messageslist_conversationsrepoblocker
C2tomar_conversacionowner, staff/app/messagestake_conversation mediumrepoblocker
C3devolver_al_agenteowner, staff/app/messagesØ handoff-service existeparcialniceTomi: reactivación auto 12h (PR #89) o explícita
C4marcar_no_showowner, staff/app/scheduleØ service existeparcialnice
NotaC3 y C4 son tools nuevas chicas

Ambas tienen el método correspondiente en el service layer (handoff-service y markAppointmentNoShowForBusiness). Cablearlas como tools del agente es trabajo menor — podrían cerrar en 1 sprint si valen para beta.

§3

Configuración del negocio

Catorce capabilities. Todas con ruta dashboard real y ninguna expuesta como tool. Es el contrato visible de H6: trabajo nuevo, no exposición.

IDCapabilityAudienciaDashboardWATool realEstadoBeta 1Decisión
S1editar_info_generalowner/app/settings/generalØparcialnice
S2editar_datos_comercialesowner/app/settings/businessØparcialpostProducto: ¿editar fiscal por WA tiene sentido?
S3gestionar_cuenta_usuarioowner/app/settings/accountØparcialpost(seguridad)
S4abm_serviciosowner/app/settings/servicesØparcialblockerProducto: ABM completo o solo precio
S5invitar_staffowner/app/settings/teamØparcialniceNegocio: link mágico o code
S6gestionar_localesowner/app/settings/locationsØparcialpostNegocio: ¿multi-locación en el primer piloto?
S7configurar_horariosowner/app/settings/availabilityØparcialblockerProducto: bloqueos puntuales = capability o subcaso
S8configurar_agenteowner/app/settings/assistantØparcialblockerTomi: prompt editable directo o con review
S9gestionar_billingowner/app/settings/billingØparcialpost(MP flujo paralelo)
S10configurar_experiencia_clienteowner/app/settings/experienceØparcialniceDiseño: qué se edita por WA vs. dashboard
S11configurar_operacionesowner/app/settings/operationsØparcialpost
S12configurar_notificacionesowner/app/settings/notificationsØparcialniceProducto: qué eventos notifican al owner
S13configurar_politicasowner/app/settings/policiesØparcialpostNegocio: políticas por WA o dashboard
S14gestionar_recursos_apiowner/app/settings/resourcesØparcialpost(seguridad)
InsightEl gap H6 no es diseño — son 14 dashboards esperando tool

El modelo del negocio ya está construido en el frontend. El owner ya puede configurar todo por dashboard. Falta cablear el agente al backend para que también lo pueda configurar por chat.

Lectura rápida

La foto en números.

Capabilities
25
total mapeadas
Repo
8
end-to-end
Queued
1
A0 send cable
Parcial
16
una superficie
Blockers beta
10
mínimo viable
Mapa visual del estado
RecorteBeta 1 · qué entra y qué queda afuera
  • Blocker (10): A0-A6 + C1-C2 + S4 + S7 + S8. El owner puede configurar lo crítico antes del primer cliente real.
  • Nice (7): C3 + C4 + S1 + S5 + S10 + S12 — mejoran experiencia, no bloquean.
  • Post-beta (8): S2 + S3 + S6 + S9 + S11 + S13 + S14. Lo administrativo/legal/financiero se hace una vez por dashboard.
ToolsEstado de las tools del agente
  • Cableadas: 8 (get_services, get_staff, list_appointments, list_conversations, create_appointment, cancel_appointment, reschedule_appointment, take_conversation).
  • Candidatas (service existe): 2 (devolver_al_agente, marcar_no_show).
  • Nuevas para H6 completo: 14 (una por cada /app/settings/*).
Decisiones pendientes

Quince filas con decisión abierta.

Resolver el bloque de Negocio en una sesión de 20-30 min destraba cuatro capabilities a la vez.

IDDecidePregunta
A0TomiSend cable: reusar sendWhatsAppTextMessage o ruta nueva
A3Negocio¿Customer ve agenda completa o solo sus turnos?
A4NegocioConfirmación turno: siempre o solo en conflicto
A5Negocio¿Customer cancela solo o requiere staff?
A6ProductoConfirmación de nueva fecha al mover
C3TomiReactivación auto a 12h (PR #89) o explícita
S2Producto¿Editar fiscal por WA tiene sentido?
S4ProductoABM servicios completo o solo precio
S5NegocioInvitación staff: link o code
S6NegocioMulti-locación entra al primer piloto
S7ProductoBloqueos puntuales = capability o subcaso
S8TomiPrompt editable directo o con review
S10DiseñoQué experiencia se edita por WA
S12ProductoQué eventos notifican al owner
S13NegocioPolíticas por WA o dashboard
Próximas vueltas

El orden que destraba más con menos.

  • 1 · Resolver A0 con Tomi. Destraba el reporte canónico del 19/05 y el blocker número uno del beta. Sin esto, todo §1 está mudo.
  • 2 · Sesión rápida con Negocio (~20 min). Resolver A3, A4, A5 y S6 de una sentada — son las que más impactan al MVP percibido por el cliente.
  • 3 · Cablear C3 y C4. Service layer existe; son tools nuevas chicas. Pueden cerrar en 1 sprint.
  • 4 · Subset mínimo de §3 para beta. Cuáles 3-4 settings son críticas que el owner pueda tocar por WA.