Instalei essa ferramenta de busca de deformação de forma esta manhã e depois meio que me esqueci dela. Fiquei pensando se meus agentes a estavam usando e se estava sendo útil para eles de alguma forma. Então perguntei a eles e todos admitiram, para um homem (ou melhor, um robô), que não o tinham usado de jeito nenhum e que, em vez disso, continuavam usando o grep, como de costume. Já pareciam desenvolvedores veteranos e inflexíveis. Enfim, pedi para eles darem uma olhada, experimentarem e me dizerem o que achavam. Então eles fizeram um teste e me deram um feedback. Então, pedi a eles que descobrissem quando, por que e como poderiam usar isso da melhor forma, e depois pedi a um deles que criasse a explicação mais concisa e intuitiva (pelo menos intuitiva para o cérebro robótico deles) para explicar tudo isso, para uso em um arquivo AGENTS.md. Eis o resultado; sinta-se à vontade para usar em seu próprio AGENTS dot md (e, aliás, meu veredicto por enquanto é que vale a pena manter por um tempo para ver o quanto eles acabam usando, mas acho que provavelmente é bem útil — se eles puderem ser convencidos a usá-lo, que é por isso que esses pequenos textos são tão importantes, e por isso que eles devem se concentrar em convencer em vez de dar ordens aos agentes! Persuasão moral não é só para humanos…): --- ### Morfagem de distorção Grep vs Grep padrão Warp Grep = Agente de IA que busca, lê, segue conexões e retorna contexto sintetizado com números de linha. Grep padrão = Correspondência rápida de expressões regulares, você interpreta os resultados. Decisão: Você consegue escrever o padrão grep? - Sim → Grep - Não, você tem uma pergunta → mcp__morph-mcp__warp_grep #### Consultas Grep Warp (linguagem natural, localização desconhecida) "Como funciona o fluxo de apelações de moderação?" "Onde são gerenciadas as conexões WebSocket?" "O que acontece quando um usuário envia uma postagem?" "Onde é implementado o controle de taxa?" "Como a sessão de autenticação é validada nas rotas da API?" "Quais serviços interagem com a mesa de decisões de moderação?" #### Consultas Grep padrão (padrão conhecido, alvo específico) padrão="fileAppeal" # nome de função conhecido padrão="classe.*Serviço" # padrão estrutural pattern="TODO|FIXME|HACK" # marcadores padrão="processenv" caminho="apps/web" # string específica padrão="import.*from [']@/lib/db" # rastreamento de importação #### O que o Warp Grep faz internamente Uma consulta → 15-30 operações: busca por múltiplos padrões → lê as seções relevantes → segue as importações/referências → retorna intervalos de linhas específicos (ex: l3-guardian.ts:269-440), não arquivos inteiros. #### Antipadrões | Não use Warp Grep para | Por quê? | Use em vez disso | |------------------------|-----|-------------| | "Localizar função handleSubmit" | Nome conhecido | Padrão Grep="handleSubmit" | | "Ler a configuração de autenticação" | Arquivo conhecido | Ler caminho_do_arquivo="lib/auth/..." | | "Verificar se X existe" | Resposta booleana | Resultados do Grep + verificação | | Consultas rápidas durante a tarefa | Latência de 5 a 10 segundos | Grep leva 100 ms | #### Quando Warp Grep Vence - Rastreamento do fluxo de dados entre arquivos (API → serviço → esquema → tipos) - Compreender subsistemas desconhecidos antes de modificá-los - Responder a perguntas do tipo "como" que abrangem mais de 3 arquivos. - Identificar todos os pontos de contato para uma preocupação transversal — Você pode ver toda a breve interação neste resumo: https://t.co/Z6jvFXDxub
Na verdade, eu também gostei da primeira que apareceu, vou incluir as duas no meu AGENTS dot md: --- ### Morph Warp Grep — Busca de código com inteligência artificial **Use `mcp__morph-mcp__warp_grep` para perguntas exploratórias do tipo "como X funciona?".** Um agente de busca com IA expande automaticamente sua consulta em múltiplos padrões de busca, examina o código-fonte, lê arquivos relevantes e retorna intervalos de linhas precisos com contexto completo — tudo em uma única chamada. **Use o `ripgrep` (através da ferramenta Grep) para pesquisas direcionadas.** Quando você sabe exatamente o que está procurando — um nome de função específico, uma mensagem de erro ou uma chave de configuração — o ripgrep é mais rápido e direto. **Use `ast-grep` para padrões de código estrutural.** Quando você precisar encontrar/reescrever nós da AST ignorando comentários/strings, ou aplicar regras em toda a base de código. **Quando usar cada item** | Cenário | Ferramenta | Porquê | |----------|------|-----| | "Como a autenticação é implementada?" | `warp_grep` | Exploratório; não sei por onde começar | | "Onde está o sistema de apelações do L3 Guardian?" | `warp_grep` | Preciso entender a arquitetura, encontrar vários arquivos relacionados | | "Encontrar todos os usos de `useQuery(`" | `ripgrep` | Busca literal direcionada | | "Encontre arquivos com `console.log`" | `ripgrep` | Padrão simples, alvo conhecido | | "Renomear `getUserById` → `fetchUser`" | `ast-grep` | Refatoração estrutural, evitar comentários/strings | | "Substituir todos os `var` por `let`" | `ast-grep` | Modificação de código em toda a base de código | **forças do warp_grep** * **Reduz a poluição contextual**: Retorna apenas intervalos de linhas relevantes, não arquivos inteiros. * **Expansão inteligente**: Transforma "sistema de apelações" em buscas por `apelação`, `Apelações`, `tutor`, `L3`, etc. * **Respostas instantâneas**: Encontra de 3 a 5 arquivos mais relevantes com localizações precisas, em vez de ciclos manuais de grep → leitura. * **Linguagem natural**: Funciona bem com perguntas do tipo "como", "onde" e "o quê". **Uso do warp_grep** ``` mcp__morph-mcp__warp_grep( repoPath: "/data/projects/communitai", Pergunta: "Como é implementado o sistema de apelações do L3 Guardian?" ) ``` Retorna resultados estruturados com caminhos de arquivos, intervalos de linhas e trechos de código extraídos. **Regra geral** * **Não sabe onde procurar** → `warp_grep` (deixe a IA encontrar) * **Conheça o padrão** → `ripgrep` (mais rápido) * **Necessita de precisão da AST** → `ast-grep` (mais seguro para reescritas) **Antipadrões** * ❌ Usando `warp_grep` para encontrar um nome de função específico que você já conhece → use `ripgrep` * ❌ Usar `ripgrep` para entender "como X funciona" → desperdiça tempo com leituras manuais de arquivos * ❌ Usar `ripgrep` para modificações de código → ignora comentários/strings, aumentando o risco de edições colaterais