Fallow: La herramienta de inteligencia de código que todo usuario de Claude necesita
BBetter Stack
컴퓨터/소프트웨어창업/스타트업AI/미래기술
Transcript
00:00:00Este es Fallo, una herramienta de inteligencia basada en código para TypeScript y JavaScript que analiza todo tu repositorio en busca de código muerto,
00:00:10duplicación, complejidad innecesaria y mucho más. Esto significa que no hace falta usar una combinación de NIP, JSC, PD y ESLint
00:00:17solo para evitar que tus agentes envíen código defectuoso. Está construido en Rust y admite más de 90 plugins,
00:00:23lo que significa que funcionará de inmediato con la mayoría de los frameworks y paquetes populares. Pero el hecho de que solo sea compatible
00:00:29con JavaScript y TypeScript lo hace menos atractivo para los programadores asistidos por IA. Suscríbete y vamos a descubrirlo.
00:00:30Aquí tengo un proyecto en el que estoy trabajando que añade un aspecto cinematográfico de película a vídeos e imágenes.
00:00:39Se ha construido principalmente con Claude Code, así que tendrá cierto nivel de rastro de IA.
00:00:43También hay un PR aquí para una nueva función en ese proyecto, de la que hablaré más adelante, siempre que GitHub no la haga desaparecer por accidente.
00:00:51Para empezar, voy a ejecutar Fallo con el flag de resumen usando BunX, lo que significa que no tengo que instalarlo.
00:00:56Esto ofrece una instantánea de mi proyecto, mostrando el resumen de código muerto, la duplicación y un resumen de salud de la complejidad.
00:01:02Y si comprobamos el estado de git, añade un nuevo directorio .fallo que contiene la caché.
00:01:07Eso significa que las ejecuciones posteriores de este comando serán más rápidas y contendrán la instantánea y cualquier información de los plugins.
00:01:12Ahora, habréis notado aquí que la salud está 41 puntos por encima del umbral. ¿Qué significa eso?
00:01:16Bueno, la puntuación de salud de Fallo se calcula determinando la complejidad ciclomática y la complejidad cognitiva.
00:01:17Utiliza algunas fórmulas para calcular la densidad de complejidad. Y aquí abajo, todo esto se usa
00:01:24para calcular el índice de mantenibilidad, que es la puntuación que vemos por aquí.
00:01:27Basándose en esta puntuación, ha detectado que 41 de mis archivos necesitan ser refactorizados.
00:01:33Desde aquí, podemos ejecutar cualquiera de estos comandos para obtener un informe más detallado sobre un área específica.
00:01:38Si quisiera centrarme en la salud, podríamos ejecutar este comando.
00:01:43Y después de un momento, enumera todos los archivos que tienen diferentes problemas de salud.
00:01:46Nota: si quieres saber qué significa CRAP, es la abreviatura de "change risk anti-patterns",
00:01:49sobre lo cual puedes aprenderlo todo en la documentación. Pero este nivel de detalle es muy fácil de seguir
00:01:55para un agente y así saber qué arreglar. De hecho, diría que la duplicación es mucho más fácil de seguir,
00:01:57ya que indica el archivo exacto y los números de línea específicos. Así que nos quedaremos con eso por ahora.
00:02:00Y si quisiéramos, podríamos añadir un archivo de configuración de fallo para dar información sobre ciertos patrones o dependencias que quieras ignorar,
00:02:06así como establecer algunos ajustes de duplicación personalizados, ajustes de salud y añadir límites (boundaries),
00:02:07que es una forma genial de declarar qué directorios pueden importar de qué otros.
00:02:14Pero todo esto es demasiado complejo para mis necesidades, así que por ahora nos quedaremos con los valores predeterminados.
00:02:18Ahora, desde aquí, podríamos ejecutar el comando fallo fix o añadir el flag dry-run para ver exactamente qué va a hacer,
00:02:23que es intentar abordar todos los tipos de problemas corregibles. Y podéis ver aquí que va a eliminar un montón de exports.
00:02:27Pero la verdad es que no confío en que fallo ejecute un arreglo automático porque no tiene mucho contexto de mi código,
00:02:32de qué hace cada función y cómo funciona todo en conjunto. Así que en lugar de usar el flag de fix,
00:02:35voy a conectar fallo a mi agente, lo cual puedes hacer usando el servidor MCP o mediante el plugin de VS Code,
00:02:38que supongo que funcionará con Cursor. Pero voy a mantener las cosas simples e instalaré la skill de fallo,
00:02:43que contiene algunas reglas de control (guardrails), reglas para el agente y algunos errores comunes.
00:02:46Con la skill instalada, voy a ejecutar Claude Code y le daré el comando de: estudia este proyecto para entender cómo funciona el código,
00:02:49luego ejecuta fallo para lidiar con el código duplicado, asegurándote de que eliminarlo no rompa la funcionalidad principal.
00:02:55Y cuando termines, pon los cambios en una rama de función (feature branch) y ejecuta los tests para asegurar que la app funcione como se espera.
00:03:03Podemos ver aquí que carga la skill de fallo. Luego ejecuta el comando fallo dupes y obtiene el formato export JSON,
00:03:10que es un formato amigable para máquinas. Tras unos cuatro minutos, Claude ha terminado de arreglar tres archivos
00:03:16en lugar de todos los que fallo sugería, principalmente porque los otros son archivos de test,
00:03:22que a veces deben tener código duplicado. También le pedí que creara un PR y, si lo miramos,
00:03:24ha añadido 54 líneas de código y eliminado 43. Pero esto es porque le he pedido que añada un archivo de configuración de fallo,
00:03:29que son unas 20 líneas para ignorar todos los archivos de test en futuros informes. Y, por supuesto,
00:03:34deberíamos seguir por este camino usando Claude Code o cualquier otro agente para solucionar problemas de complejidad o código muerto.
00:03:39Pero fallo también puede revisar PRs. Así que si echamos un vistazo a este PR que os mostré antes,
00:03:46ejecutar el comando fallo audit comprobará cualquier problema en esta rama frente a la principal para que solo arreglemos problemas específicos.
00:03:54Y si quisiéramos basarlo en una rama diferente, solo tendríamos que usar el flag base. Pero si además
00:04:00no quisiéramos pedirle a Claude una y otra vez que use fallo, podríamos ejecutar este comando setup hooks,
00:04:02que generará algunos hooks de Claude Code para fallo. Fallo también puede ejecutarse como una GitHub Action con anotaciones en el PR.
00:04:12Es compatible con workspaces, puede exportar insignias de salud y admite líneas base (baselines),
00:04:16lo que significa que los problemas actuales pueden arreglarse con el tiempo. El CI solo detecta problemas nuevos,
00:04:24lo cual es genial para arreglar un proyecto grande con muchos problemas. Básicamente tiene muchas funciones,
00:04:28pero casi todas son análisis estático de código, lo que significa que en realidad no ejecuta tus funciones.
00:04:30Si quisieras algo que hiciera eso, fallo admite algo llamado "inteligencia en tiempo de ejecución" para decirte qué funciones se activan
00:04:35cuando tu aplicación en producción recibe tráfico real. Lo hace mediante la cobertura de tiempo de ejecución de V8,
00:04:41y combina los resultados con un informe de salud existente a través de un sidecar que puede ejecutarse localmente o desplegarse donde quieras.
00:04:49Pero esto, por supuesto, es una función de pago, lo cual tiene sentido. En general, fallo es una herramienta excelente
00:04:59que voy a usar mucho más, aunque creo que tiene muchas funciones y solo es compatible con el ecosistema de JavaScript.
00:05:08Aunque otros lenguajes tienen sus propias herramientas, no estoy seguro de que combinen todo tan bien como fallo,
00:05:11y creo que su creador, Bart, ha hecho un buen trabajo creando esta herramienta, que en realidad utiliza OXC para el parseo,
00:05:19el análisis semántico y la resolución de módulos antes de que comience el análisis basado en grafos. Así que, básicamente,
00:05:36nunca va a dejar JavaScript, y estoy seguro de que esto hace muy feliz a Evan You; no la parte de JavaScript, sino la de OXC,
00:05:46ya que es una herramienta que está financiando con VoidZero. Hablando de Evan You, si quieres oírnos interrogarle sobre VoidZero,