Hace un año tenía más de veinte extensiones instaladas en el editor. Hoy tengo menos de diez. No las desinstalé por capricho: cada una cayó cuando confirmé que un agente de código, con el prompt adecuado, hacía lo mismo igual de bien o mejor, sin que yo tuviera que aprender la sintaxis específica de esa extensión.
Las que cayeron primero: generadores de código repetitivo
Snippets, generadores de boilerplate, plantillas de componentes. Todo lo que existía para escribir código mecánico más rápido perdió sentido en cuanto un agente puede generar ese mismo código a partir de una descripción en lenguaje natural, adaptado al contexto real del proyecto en vez de a una plantilla genérica.
Las que cayeron después: linters de estilo muy específicos
No los linters de errores reales, esos se quedan. Pero los que solo imponían un estilo de formato muy particular perdieron valor: puedo pedirle al agente que siga las convenciones del proyecto directamente, y de paso me explica por qué un cambio rompe una convención en vez de solo marcarlo en rojo sin contexto.
Me pasó con un plugin de autocompletado de imports: semanas después de migrar un proyecto a módulos ES seguía sugiriendo el patrón de importación antiguo, porque su configuración vivía en un archivo que nadie había vuelto a tocar. El agente, en cambio, lee el código real del proyecto en cada sesión y no arrastra ese tipo de configuración obsoleta.
Las que sustituí con más cautela: los de refactorización automática
Aquí tardé más en confiar. Una extensión de refactorización tradicional aplica una transformación mecánica y determinista: renombrar una variable en todos sus usos, por ejemplo, no tiene ambigüedad. Un agente puede hacer lo mismo, pero también puede "entender mal" el alcance y tocar algo que no debía. Para refactors puramente mecánicos y deterministas, sigo prefiriendo la herramienta tradicional cuando existe, porque no tiene margen de error donde un agente sí lo tiene.
Las dos que sobrevivieron intactas
Un linter de errores reales de tipado, porque detecta problemas antes de que lleguen siquiera al agente, y un visor de diffs que uso para revisar cambios grandes, porque ninguna interacción conversacional sustituye ver con claridad qué líneas cambiaron exactamente. Estas dos no compiten con lo que hace un agente: complementan la parte de verificación, que sigue siendo mía.
El criterio que uso ahora antes de instalar una extensión nueva
Me pregunto si lo que hace esa extensión es algo que podría pedirle a un agente con un prompt razonable. Si la respuesta es sí, no la instalo: prefiero mantener menos herramientas activas y resolver ese caso por conversación. Si la respuesta es no —porque necesito determinismo total, o porque la tarea es puramente mecánica sin ambigüedad— la extensión se queda.
La recomendación
No sustituyas cada extensión por un agente solo porque puedes. Sustituye las que hacían un trabajo que en realidad era "generar algo razonable a partir de contexto", y conserva las que dan determinismo total o verificación real, que es justo lo que un agente no garantiza por sí solo.
Relacionado: Claude Code vs Cursor: cómo elijo entre los dos según el proyecto
