Fallow: La herramienta de inteligencia de código que todo usuario de Claude necesita

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

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,

Key Takeaway

Fallow optimiza el desarrollo asistido por IA en JavaScript y TypeScript al proporcionar un análisis estático basado en grafos que reduce el ruido de código defectuoso enviado a los agentes de programación.

Highlights

  • Fallow integra análisis de código muerto, duplicación y complejidad innecesaria en una sola herramienta basada en Rust que utiliza OXC para el parseo de módulos.

  • La herramienta es compatible con más de 90 plugins para frameworks populares pero se limita exclusivamente al ecosistema de JavaScript y TypeScript.

  • El índice de mantenibilidad se calcula mediante fórmulas de densidad de complejidad ciclomática y cognitiva.

  • La integración con agentes de IA como Claude Code permite automatizar refactorizaciones específicas evitando archivos de test que requieren duplicación intencional.

  • Fallow admite inteligencia en tiempo de ejecución mediante la cobertura de V8 para identificar funciones activas bajo tráfico real en producción.

  • El comando setup hooks genera ganchos automáticos para Claude Code que facilitan auditorías continuas sin comandos manuales repetitivos.

Timeline

Arquitectura y capacidades de análisis estático

  • Fallow centraliza las funciones de múltiples herramientas como NIP, JSC, PD y ESLint para gestionar repositorios de TypeScript.
  • El motor construido en Rust ofrece compatibilidad inmediata con la mayoría de frameworks modernos a través de 90 plugins.
  • La ejecución inicial crea un directorio .fallo para almacenar caché y acelerar análisis posteriores.

Esta herramienta analiza repositorios completos buscando patrones de duplicación y complejidad. El flag de resumen genera una instantánea inmediata del estado de salud del código. Al utilizar Rust y OXC, el rendimiento en el parseo y la resolución de módulos es superior a las herramientas convencionales basadas en JavaScript.

Métricas de salud y gestión de la mantenibilidad

  • La puntuación de salud determina el índice de mantenibilidad mediante la densidad de complejidad ciclomática y cognitiva.
  • El acrónimo CRAP identifica antipatrones de riesgo de cambio para priorizar archivos que necesitan refactorización urgente.
  • Los límites o boundaries permiten declarar reglas estrictas sobre qué directorios tienen permiso para importar desde otros.

El sistema identifica archivos específicos que superan los umbrales de complejidad aceptables. Los informes detallados facilitan la labor de los agentes de IA al señalar números de línea exactos donde reside la duplicación. La configuración personalizada permite ignorar dependencias o patrones específicos según las necesidades del proyecto.

Automatización con Claude Code y agentes de IA

  • La conexión con agentes se realiza mediante servidores MCP, plugins de VS Code o la instalación de skills específicas.
  • Claude Code utiliza el formato de exportación JSON de Fallow para procesar cambios de forma amigable para máquinas.
  • La intervención humana o del agente es preferible al comando de arreglo automático debido a la falta de contexto funcional de la herramienta.

Al integrar la herramienta con Claude, el agente puede discernir entre duplicación problemática y código de test necesario. El proceso de limpieza puede automatizarse para que el agente cree ramas de función, aplique cambios y ejecute tests de regresión. Esto evita la eliminación accidental de exports que Fallow marcaría simplemente como código muerto.

Auditoría de PR e inteligencia en tiempo de ejecución

  • El comando audit compara los problemas de una rama frente a la rama principal para limitar los arreglos a cambios recientes.
  • La inteligencia en tiempo de ejecución utiliza un sidecar para combinar informes estáticos con datos reales de tráfico en producción.
  • Fallow es compatible con GitHub Actions para generar anotaciones automáticas directamente en las solicitudes de extracción.

La función de auditoría permite una adopción gradual en proyectos grandes mediante el uso de líneas base o baselines. La telemetría de ejecución es una característica de pago que revela qué funciones se activan realmente. El proyecto cuenta con el respaldo financiero de VoidZero debido a su dependencia tecnológica del ecosistema OXC.

Community Posts

View all posts