El Problema
La otra tarde, Alberto nos planteó una necesidad clara y sencilla sobre el directorio de empleados de la compañía (un desarrollo que habíamos actualizado recientemente):
«Estaría bien poder buscar los contactos del directorio por email»
En nuestro Directorio, los usuarios podían buscar empleados por apellidos (además de por centro de trabajo y/o departamento), pero no por su correo electrónico. Una funcionalidad que, aunque simple y muy acotada, requería cambios coordinados entre el frontend y el backend.
La Solución: Cursor 2.0 en Modo Agente
Decidimos abordar el problema utilizando el modo Agente de Cursor 2.0, dividiéndolo en dos fases distintas con prompts específicos.
AGENTE 1: Planificación e Implementación
El primer agente recibió la primera instrucción con el Modo Thinking de Sonnet 4.5:
Planifica un cambio en Front, y si es necesario en Back, para que el campo de búsqueda por emails busque también alternativamente por el correo electrónico del usuario
A continuación se acotó la búsqueda por el campo de email correcto:
Incorpora solamente la búsqueda por el campo de email que se muestra en el front asociado al usuario
Finalmente, una vez realizados los cambios se le indicó que los incorporase a una rama aparte del repositorio:
Crea una rama en ambos proyectos (front y back) con los cambios, llamada feature/busqueda-mail
Resultado: Planificación Detallada
El agente analizó el código y planificó los cambios necesarios:
Cambios en Backend (SQL Query):
- Modificación del filtro en
SpringJdbcDirectorioDao.java - Nueva búsqueda adicional en ambas fuentes de email
- Uso del operador OR para que coincida con cualquiera de los tres campos
- Mantenimiento del parámetro
:apellidoscon formato LIKE para búsqueda parcial
Cambios en Frontend (UI):
- Actualización del label del campo en
home.component.html - Nueva descripción: «Filtrar Apellidos o Email» y placeholder
- Texto más descriptivo para el usuario
Review de Cambios
El agente implementó los cambios de forma limpia, manteniendo la estructura existente y agregando la funcionalidad de manera no invasiva.
AGENTE 2: Integración
Para el segundo agente, usamos un prompt más directo con menos contexto:
cambia en ambos proyectos a la rama demo-vitaly y haz un merge de las ramas de cada proyecto llamadas feature/busqueda-mail sobre demo-vitaly
Nota sobre buenas prácticas: Como comentamos después, para este caso hubiera funcionado mejor usar
cherry-picken lugar demerge, especialmente si queremos mantener un historial más limpio de commits específicos y no mergear cambios no deseados.
El Resultado
Los cambios quedaron desplegados y funcionando correctamente:
Búsqueda por Email (nueva funcionalidad) manteniendo la funcionalidad original
Como podemos ver en las capturas, ahora es posible:
- Buscar empleados por sus apellidos (funcionalidad original)
- Buscar empleados por su correo electrónico completo o parcial
- El sistema busca combinando los distintos campos: centro, departamento y/o apellidos o email
Aprendizajes
Lo que Funcionó Bien
- División en agentes: Separar la implementación del merge nos permitió tener contextos más limpios
- Modo Thinking: Permitió al agente analizar el código existente antes de proponer cambios
- Especificidad en los prompts: Indicar exactamente qué ramas crear y cómo nombrarlas
Áreas de Mejora
- Estrategia de integración: Para casos como este,
cherry-pickhabría sido más apropiado quemerge - Testing: Podríamos haber incluido en el prompt la creación de tests automáticos
- Documentación: Agregar actualización automática de la documentación técnica (ups!)
Conclusión
De una petición informal de Alberto a una funcionalidad desplegada y funcionando en minutos. El modo Agente de Cursor 2.0 demostró ser una herramienta poderosa para:
- Analizar código existente
- Planificar cambios coordinados entre frontend y backend
- Implementar modificaciones siguiendo las mejores prácticas
- Gestionar el control de versiones
¿Resultado? Una mejora significativa en la experiencia de usuario del Directorio Vitaly, implementada de forma rápida, limpia y efectiva.

