Fallow: A Ferramenta de Inteligência de Código que Todo Usuário do Claude Precisa

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00Este é o Fallo, uma ferramenta de inteligência baseada em código para TypeScript e JavaScript que analisa todo o seu código em busca de código morto, duplicação, complexidade desnecessária e muito mais.
00:00:10Isso significa que não há necessidade de usar uma combinação de NIP, JSC, PD e ESLint apenas para evitar que seus agentes enviem código ruim.
00:00:17Ele é construído em Rust e suporta mais de 90 plugins, o que significa que funcionará imediatamente com a maioria dos frameworks e pacotes populares.
00:00:23Mas o fato de suportar apenas JavaScript e TypeScript o torna menos atraente para programadores assistidos por IA.
00:00:29Inscreva-se e vamos descobrir.
00:00:30Aqui está um projeto no qual estou trabalhando que adiciona um visual de filme cinematográfico a vídeos e imagens.
00:00:39Ele foi construído principalmente com Claude Code, então terá algum nível de automação por IA.
00:00:43Também há um PR aqui para um novo recurso nesse projeto, do qual falarei mais tarde, desde que o GitHub não o faça desaparecer por acidente.
00:00:51Para começar, vou rodar o Fallo com a flag de resumo usando o BunX, o que significa que não preciso instalá-lo.
00:00:56E isso fornece um panorama do meu projeto, mostrando o resumo de código morto, duplicação e um resumo da saúde da complexidade.
00:01:02E se verificarmos o status do git, ele adiciona um novo diretório .fallo que contém o cache.
00:01:07Isso significa que as execuções subsequentes deste comando serão mais rápidas e conterão o snapshot e as informações dos plugins.
00:01:12Agora, você deve ter notado aqui que a saúde está 41 acima do limite.
00:01:16E o que isso significa?
00:01:17Bem, a pontuação de saúde do Fallo é calculada analisando a complexidade ciclomática e a complexidade cognitiva.
00:01:24E utiliza algumas fórmulas para calcular a densidade de complexidade.
00:01:27E aqui embaixo, tudo isso é usado para calcular o índice de manutenibilidade, que é a pontuação que vemos aqui.
00:01:33Com base nessa pontuação, detectou-se que 41 dos meus arquivos precisam ser refatorados.
00:01:38A partir daqui, podemos executar qualquer um desses comandos para obter um relatório mais detalhado sobre uma área específica.
00:01:43Então, se eu quisesse focar na saúde, poderíamos executar este comando.
00:01:46E depois de um tempo, ele lista todos os arquivos que têm diferentes problemas de saúde.
00:01:49Note que, se você quiser saber o que CRAP significa, é uma abreviação para "change risk anti-patterns",
00:01:55sobre os quais você pode aprender tudo na documentação.
00:01:57Mas este nível de detalhe é muito fácil para um agente seguir e saber o que consertar.
00:02:00Na verdade, eu diria que a duplicação é muito mais fácil de seguir, pois fornece o arquivo exato e os números das linhas específicas.
00:02:06Então, vamos manter isso por enquanto.
00:02:07E se quiséssemos, poderíamos adicionar um arquivo de configuração do fallo para dar informações sobre certos padrões ou dependências que você deseja ignorar,
00:02:14além de definir algumas configurações personalizadas de duplicação, saúde e adicionar limites,
00:02:18que é uma maneira muito legal de declarar quais diretórios podem importar de quais outros.
00:02:23Mas tudo isso é muito complexo para as minhas necessidades, então, por enquanto, ficaremos com os padrões.
00:02:27Agora, a partir daqui, poderíamos executar o comando fallo fix ou adicionar a flag dry run para ver exatamente o que ele vai fazer,
00:02:32que é tentar resolver todos os tipos de problemas corrigíveis.
00:02:35E você pode ver aqui que ele vai remover um monte de exports.
00:02:38Mas eu não confio no fallo para executar uma correção automática porque ele não tem muito contexto do meu código,
00:02:43o que cada função faz e como tudo funciona em conjunto.
00:02:46Então, em vez de usar a flag fix, vou conectar o fallo ao meu agente,
00:02:49o que você pode fazer usando o servidor MCP ou o plugin do VS Code, que eu suponho que funcionará com o Cursor.
00:02:55Mas vou simplificar as coisas e apenas instalar a skill do fallo, que contém alguns guardrails, regras de agente e armadilhas comuns.
00:03:03Com a skill instalada, vou rodar o Claude Code e dar a ele o prompt: estude este projeto para entender como o código funciona,
00:03:10então execute o fallo para lidar com o código duplicado, garantindo que a remoção não quebre a funcionalidade principal.
00:03:16E quando terminar, coloque as mudanças em uma branch de feature e execute testes para garantir que o app funcione como esperado.
00:03:22Podemos ver aqui que ele carrega a skill do fallo.
00:03:24Em seguida, ele executa o comando fallo dupes e obtém o formato para exportar JSON, que é um formato amigável para máquinas.
00:03:29E após cerca de quatro minutos, o Claude terminou de corrigir três arquivos em vez de todos os arquivos sugeridos pelo fallo,
00:03:34principalmente porque os outros são arquivos de teste, que às vezes devem ter código duplicado.
00:03:39Também pedi para ele criar um PR e, se dermos uma olhada, ele adicionou 54 linhas de código e removeu 43.
00:03:46Mas isso é porque eu pedi para adicionar um arquivo de configuração do fallo, que tem cerca de 20 linhas, para ignorar todos os arquivos de teste em relatórios futuros.
00:03:54E, claro, devemos continuar seguindo essa linha usando o Claude Code ou qualquer outro agente para corrigir problemas de complexidade ou código morto.
00:04:00Mas o fallo também pode revisar PRs.
00:04:02Então, se olharmos para este PR que mostrei anteriormente, executar o comando fallo audit verificará quaisquer problemas nesta branch em relação à main para que possamos corrigir apenas problemas específicos.
00:04:12E se quiséssemos basear em uma branch diferente, poderíamos apenas usar a flag base.
00:04:16Mas se também não quiséssemos pedir ao Claude repetidamente para usar o fallo, poderíamos executar este comando setup hooks, que gerará alguns hooks do Claude Code para o fallo.
00:04:24O Fallo também pode ser executado como uma GitHub action com anotações de PR.
00:04:28Ele suporta workspaces.
00:04:30Ele pode exportar emblemas de saúde e suporta baselines, o que significa que os problemas atuais podem ser corrigidos ao longo do tempo.
00:04:35E o CI apenas detecta novos problemas, o que é ótimo para consertar um projeto grande com muitos problemas.
00:04:41Ele basicamente tem muitos recursos, mas todos eles são análise estática de código, o que significa que ele não executa suas funções de verdade.
00:04:49Se você quiser algo que faça isso, o fallo suporta algo chamado inteligência de runtime para dizer quais funções estão sendo acionadas quando seu app em produção recebe tráfego real.
00:04:59Ele faz isso usando cobertura de runtime do V8, mesclando os resultados em um relatório de saúde existente através de um sidecar que pode rodar localmente ou ser implantado onde você quiser.
00:05:08Mas isso, claro, é um recurso pago, o que faz sentido.
00:05:11No geral, o fallo é uma ótima ferramenta que vou usar muito mais, embora ache que tenha muitos recursos e suporte apenas a stack de JavaScript.
00:05:19Embora outras linguagens tenham suas próprias ferramentas, não tenho certeza se combinam tudo tão bem quanto o fallo faz, e acho que seu criador Bart fez um bom trabalho criando esta ferramenta, que na verdade usa OXC para parsing de análise semântica e resolução de módulos antes de iniciar a análise baseada em grafos.
00:05:36Basicamente, ele nunca deixará o JavaScript, e tenho certeza de que isso deixa o Evan You muito feliz, não pela parte do JavaScript, mas pela parte do OXC, já que é uma ferramenta que ele está financiando com o Void Zero.
00:05:46Falando em Evan You, se você quiser nos ouvir questionando-o sobre o Void Zero, o Vite, se os React Server Components foram uma boa ideia e tudo mais, confira este vídeo, que é um podcast de uma hora, e acho que é um dos meus favoritos entre os que já fizemos.

Key Takeaway

O Fallo otimiza o desenvolvimento em TypeScript e JavaScript ao fornecer uma ferramenta de análise estática em Rust que reduz o ruído para agentes de IA e automatiza a manutenção de grandes bases de código através de métricas de complexidade e auditorias de PR.

Highlights

  • O Fallo elimina a necessidade de integrar ferramentas isoladas como NIP, JSC, PD e ESLint ao consolidar análise de código morto, duplicação e complexidade em uma única solução baseada em Rust.

  • A ferramenta utiliza o OXC para parsing de análise semântica e resolução de módulos antes de realizar uma análise de código baseada em grafos.

  • O índice de manutenibilidade é calculado através da densidade de complexidade, que combina métricas de complexidade ciclomática e cognitiva.

  • A integração com agentes de IA como o Claude Code permite a refatoração automatizada de código duplicado com a criação direta de pull requests no GitHub.

  • O recurso de inteligência de runtime utiliza a cobertura do V8 para identificar quais funções são efetivamente executadas em ambiente de produção com tráfego real.

  • O suporte a baselines no CI permite que projetos legados ignorem problemas existentes e foquem apenas na detecção de novas falhas de qualidade no código.

Timeline

Arquitetura e capacidades iniciais do Fallo

  • A ferramenta analisa exclusivamente projetos TypeScript e JavaScript em busca de redundâncias e código morto.
  • O suporte nativo abrange mais de 90 plugins para garantir compatibilidade imediata com frameworks populares.
  • A construção em Rust assegura alta performance na execução dos processos de auditoria.

O sistema substitui fluxos de trabalho fragmentados que dependem de múltiplas ferramentas de linting e análise. Projetos desenvolvidos com assistência de IA, como o Claude Code, utilizam essa análise para evitar o envio de código de baixa qualidade. O foco em apenas duas linguagens permite uma especialização maior na detecção de problemas estruturais.

Métricas de saúde e diagnóstico de complexidade

  • O comando de resumo gera um panorama imediato de duplicação e saúde da complexidade no projeto.
  • O diretório .fallo armazena caches e snapshots para acelerar execuções subsequentes do comando.
  • O relatório detalhado identifica arquivos que precisam de refatoração com base no índice CRAP (change risk anti-patterns).

O cálculo da saúde do código é derivado de fórmulas de densidade que medem o esforço cognitivo necessário para entender o software. O sistema fornece números de linhas específicos para facilitar a correção manual ou por agentes. Configurações personalizadas permitem definir limites de dependência e ignorar padrões específicos através de um arquivo de configuração dedicado.

Automação e integração com agentes de IA

  • A flag dry run permite visualizar as remoções sugeridas, como exports não utilizados, antes da aplicação real.
  • O servidor MCP e plugins de IDE conectam a inteligência do Fallo a agentes como Claude e Cursor.
  • O Claude Code utiliza o formato JSON do Fallo para identificar e corrigir duplicatas sem quebrar a funcionalidade principal.

Em testes práticos, o Claude corrigiu três arquivos críticos em quatro minutos, gerando um PR com 54 novas linhas e 43 removidas. O uso de skills específicas do Fallo fornece guardrails e regras que impedem a IA de realizar alterações em arquivos de teste onde a duplicação pode ser intencional. Essa abordagem resolve a falta de contexto que uma correção automática puramente estática teria ao agir sozinha.

Fluxo de CI e inteligência de runtime

  • O comando fallo audit verifica problemas específicos em branches de feature comparando-as com a branch principal.
  • Hooks do Claude Code automatizam a execução de verificações sem a necessidade de comandos manuais repetitivos.
  • A inteligência de runtime monitora o tráfego real para mapear o uso de funções em produção.

A ferramenta pode ser integrada como uma GitHub Action que gera anotações diretamente nos pull requests. Para sistemas em produção, o componente sidecar mescla dados de execução real com relatórios de saúde estáticos, revelando quais partes do código são de fato relevantes. O projeto utiliza a infraestrutura OXC, apoiada pela Void Zero, para garantir a precisão no parsing e na resolução de módulos JavaScript.

Community Posts

View all posts