Por qué se estanca una sesión de depuración con Cursor
Depurar es un ciclo: observar, formular una hipótesis, cambiar y volver a observar. Un agente que trabaja a partir de tus archivos puede dar tres de esos cuatro pasos. No puede observar. Cada vez que pegas un stack trace o describes lo que viste en pantalla, estás ejecutando a mano el único paso que él no puede dar, y la calidad de todo el ciclo queda limitada por lo bien que describas las cosas.
Por eso la tercera ronda suele ser peor que la primera: el cansancio hace mella, tu descripción se acorta y el agente ya razona sobre el resumen de un resumen.
Las tres descripciones que despistan a un agente
«No funciona»
El agente tiene que adivinar a cuál de cinco fallos posibles te refieres.
Suele elegir el más fácil de corregir, que casi nunca es el tuyo.
«Lanza este error»
Un error es un síntoma que aparece después del problema real, a menudo varias capas más allá.
Corregir el punto donde se lanza hace desaparecer el síntoma y deja intacto el defecto.
«Ya probé X»
Sin saber qué le hizo X realmente a la aplicación, el agente no puede descartar nada.
Así que vuelve a proponer X, con otra forma.
Qué cierra el ciclo
Dale al agente el paso de observación en lugar de darlo tú. Eso significa que algo maneje la aplicación desplegada como lo haría una persona y reporte lo ocurrido como evidencia, no como prosa.
La forma de esa evidencia importa más que su volumen. Qué se intentó, qué hizo realmente la aplicación y en qué punto se separaron ambas cosas. Sobre eso un agente puede actuar directamente. Una captura de pantalla y un stack trace siguen necesitando que alguien los interprete, lo que te devuelve al ciclo del que intentabas salir.
La instalación añade una skill de verificación dentro del propio Cursor, para que sepa crear un caso, ejecutarlo y leer el resultado sin que tengas que explicar el flujo cada vez.
Terminal
npm install -g @testsprite/testsprite-cli
testsprite setup
Puedes hacer lo mismo desde el panel de TestSprite. Todo lo demás que hace la CLI está en el repositorio de la CLI.
Una reproducción que puedes entregar vale más que una descripción
El hábito con más impacto es dejar de describir el error y empezar a reproducirlo. Un caso escrito indica qué página abrir, qué hacer y qué debería cumplirse después. Tres líneas así rinden más que tres párrafos de explicación, porque no son ambiguas y porque se pueden volver a ejecutar.
También cambia la conversación con el agente. En lugar de «el desplegable está roto», la entrada pasa a ser una ejecución que llegó al paso cuatro y encontró seleccionada la opción equivocada. Ya no queda nada que interpretar.
Escribe el caso antes del primer intento de corrección, no después del tercero. En ese momento todavía recuerdas exactamente qué hiciste para provocarlo, y ese conocimiento se evapora más rápido de lo que nadie espera.
Un ejemplo práctico de cómo se cierra el ciclo
Piensa en un caso concreto. Un usuario reporta que, al editar un filtro guardado, a veces se revierte. Lo describes, el agente encuentra una condición de carrera entre dos actualizaciones de estado y propone una guarda. La aplicas, lo pruebas una vez, funciona y sigues adelante. Dos días después vuelve el reporte.
Lo que falló no es la corrección. Es que un único intento manual es una muestra de uno frente a un error intermitente, y los errores intermitentes pasan una sola prueba más o menos con la misma frecuencia con la que la fallan. El ciclo que sí converge tiene otra forma: anota la secuencia como un caso, ejecútalo varias veces y lee la tasa. Cuatro fallos de diez es una instrucción completamente distinta para el agente que «está roto», porque descarta toda una clase de causas deterministas y apunta a los tiempos.
Lo segundo que cambia es lo que ocurre después de la corrección. El mismo caso se vuelve a ejecutar, diez veces, y o la tasa baja a cero o no. Ahora tienes evidencia en lugar de una impresión, y el caso se queda en la suite para que el tercer reporte no llegue nunca.
La afirmación de la que conviene desconfiar
«Ya he corregido el problema» es la frase más cara de la depuración asistida por agentes. Sale del mismo razonamiento que produjo el cambio, así que no aporta ninguna información independiente. Una corrección se confirma cuando se observa que el comportamiento es correcto y, por definición, el agente que la escribió no puede ser quien lo confirme.
Esto no es una crítica al modelo. Una persona que escribe un parche y luego lo declara correcto sin ejecutar nada recibiría la misma respuesta en una revisión.
Haz que la comprobación sobreviva a la sesión
El caso que escribiste para reproducir el error vale más después de la corrección que durante ella. Consérvalo y ejecútalo en cada cambio, para que el mismo defecto no pueda volver sin hacer ruido tres semanas después.
La GitHub App es un webhook que configuras en el panel de TestSprite. Escucha el evento de despliegue que tu pipeline ya genera, así que nada cambia en tu repositorio.
GitHub Actions coloca el paso dentro de tu propio workflow, configurado desde la terminal.
Qué cambia al meter un paso de verificación en el ciclo
TestSprite aporta la observación que le falta al ciclo. La instalación añade una skill de verificación dentro del propio Cursor, para que el agente pueda crear un caso, ejecutarlo contra tu aplicación desplegada y leer el resultado sin que tengas que transmitir nada.
El efecto práctico en una sesión de depuración es que las rondas dejan de repetirse. El agente ya no razona sobre tu recuerdo de lo que viste: tiene un registro de qué se intentó, qué hizo la aplicación y en qué punto se separaron ambas cosas. La corrección que propone queda confirmada por algo distinto del razonamiento que la produjo, que es la única manera de que «ya lo he corregido» se convierta en información.
La reproducción también sobrevive a la sesión. El caso que encontró el error se queda en la suite y se ejecuta en cada cambio, para que el mismo defecto no pueda volver sin hacer ruido dentro de seis semanas.
¿Puede Cursor depurar sin ejecutar la aplicación?
Puede razonar sobre el código y, a menudo, encontrar así el defecto, sobre todo en errores de lógica con una traza clara. No puede confirmar una corrección, ni ver problemas de estado, de tiempos o de integración que solo aparecen cuando la aplicación se ejecuta.
¿Por qué vuelve el mismo error?
Porque la reproducción suele vivir en el chat y no en una prueba. Cuando termina la conversación, ya no queda nada comprobando ese comportamiento.
¿Esto sustituye al flujo de depuración de Cursor?
No. Aporta el paso de observación que falta. Cursor sigue proponiendo el cambio, tú sigues decidiendo si es razonable y la verificación indica a ambos si funcionó.
¿Cuánto código mío ve?
La verificación se ejecuta contra la aplicación desplegada a través de su interfaz, así que reporta el comportamiento en lugar de leer tu repositorio.
¿Y si el error solo aparece en producción?
Apunta una ejecución a un entorno que lo reproduzca. Si el comportamiento cambia entre entornos, esa diferencia suele ser el verdadero error y conviene perseguirla antes de tocar el código.
Dale ojos al agente, no prompts más largos.
Cursor como herramienta de depuración se estanca porque nada en el ciclo observa la aplicación en ejecución. Aporta ese paso, exige evidencia en lugar de una declaración de éxito y conserva la reproducción como prueba para que la corrección se mantenga.