Programa
Seis meses atrás, "agente de código no terminal" significava Claude Code e alguns clones open source. O Grok Build mudou esse cenário em maio de 2026 — e a semelhança com o Claude Code vai além da lista de recursos.
A equipe da xAI diz que o Grok é compatível com o Claude Code sem nenhuma configuração, e que lê automaticamente marketplaces do Claude Code, plugins, skills, servidores MCP, agentes, hooks e arquivos de instrução, incluindo CLAUDE.md e .claude/rules/. Você pode apontar o Grok para um repositório já configurado para o Claude Code e ele aproveita essa configuração e roda.
A pergunta interessante não é "quem tem mais recursos". O que eu realmente queria saber é se a semelhança vai até o fim. O Grok Build é, na prática, o Claude Code com um modelo diferente por trás? Para testar, criei um dataset com três defeitos propositalmente plantados e rodei o mesmo script em ambos os agentes.
Resumo: Grok Build vs. Claude Code
Se você só for ler uma seção, leia esta.
-
Paridade de recursos é real. Modo de plano, subagentes, skills, hooks, MCP, modo headless, sandboxing e worktrees existem nos dois.
-
O Grok lê diretórios
.claude/,CLAUDE.mde skills do Claude Code sem nenhuma configuração, então dá para testar o Grok em um repositório que você já preparou para o Claude Code. O Claude Code não lê os arquivos.grok/, então uma configuração "Grok-first" não volta. Se for experimentar ambos, configure no padrão do Claude Code. -
Em quatro interações, toda estatística citada pelo Grok bateu exatamente com meu dataset, inclusive números que ele calculou sem ser pedido.
-
O Claude trouxe muito mais análise — e precisou ser checado. Ele achou um bug real de produção que nem o Grok nem eu vimos. Também entregou duas contagens inventadas e um bug de exibição — e logo nas partes mais "citáveis" da saída.
-
O Claude Code roda no terminal, IDEs, desktop, web, mobile e Slack. O Grok Build é terminal-first, com o Grok Bot como produto em nuvem separado.
-
/skillifynão tem equivalente no Claude Code — é a única divergência funcional genuína que encontrei.
Introdução aos Modelos Claude
O que é o Grok Build?
Grok Build é o agente de codificação da xAI. Ele roda de três jeitos: como uma TUI interativa, em modo headless em scripts e CI (com saída estruturada streaming-json para capturar transcrições programaticamente) ou via Agent Client Protocol (ACP), para que outras aplicações o incorporem.

Ao iniciar, a barra de status mostra dois itens que valem a pena notar. No canto inferior direito: Grok 4.6 (high) (o modelo e o esforço de raciocínio em uso, alternável com /model). No canto inferior esquerdo: a opção de novo worktree, que permite ao Grok lançar subagentes em worktrees Git isoladas, evitando colisão em um único diretório.
Um recurso sem paralelo no Claude Code que vale destacar logo: o Grok suporta modelos customizados via ~/.grok/config.toml. Você pode apontar o CLI para qualquer endpoint compatível com OpenAI, nomeá-lo e selecioná-lo com /model. Se você quer um único CLI para vários provedores de modelos, isso é uma diferença arquitetural de verdade, não cosmética.
Rode grok inspect em um repositório novo para ver o que o agente está lendo de fato. Ele imprime tudo o que o Grok descobriu no diretório atual:
Primeiros passos com o Grok Build
Para instalar o Grok Build no macOS, rode:
curl -fsSL https://x.ai/cli/install.sh | bash
No Windows, há um instalador PowerShell:
irm https://x.ai/cli/install.ps1 | iex
No primeiro uso, ele abre o navegador para autenticar com sua conta xAI ou X. Em ambientes sem navegador, exporte uma chave de API:
export XAI_API_KEY="xai-..."
grok
Para começar, você pode dar um cd em um repositório e pedir:
grok -p "Explain this codebase"
grok -p "Explain the architecture" --output-format streaming-json
Para o passo a passo completo (autenticação, memória entre sessões, permissões de segurança, instruções de projeto e um primeiro build de ponta a ponta), veja nosso tutorial do Grok Build.
O que é o Claude Code?
Claude Code é a ferramenta agente de codificação da Anthropic, que roda no terminal, no VS Code e JetBrains, nos apps desktop e web, no celular e em CI. Também há integração com Slack e um Agent SDK que expõe o mesmo loop de forma programática.
Seu modelo de extensão é uma pilha de primitivas que se sobrepõem. Arquivos CLAUDE.md definem convenções por diretório. O pacote Skills contém fluxos reutilizáveis como arquivos SKILL.md com frontmatter, invocáveis por nome ou auto-disparados quando a tarefa corresponder.
Para este artigo, rodei o Claude Code no app desktop, com Opus 5 e alto esforço de raciocínio.
Se você quer uma comparação só com Claude, nosso artigo Claude Cowork versus Claude Code cobre bem. Para instalação e primeiro projeto, leia nosso tutorial de configuração do Claude Code.
Grok Build vs Claude Code: principais recursos e semelhanças
Vou poupar as comparações básicas — honestamente, o formato do produto é o mesmo. Então aqui vão algumas semelhanças:
|
Grok Build |
Claude Code |
|
|
Arquivos de instrução |
|
|
|
Skills |
|
|
|
Subagentes |
Sim, com isolamento por worktree |
Sim, com times de agentes |
|
Modo de plano |
Sim, edições bloqueadas até aprovação |
Sim |
|
Hooks |
Sim, com |
Sim |
|
MCP |
Sim |
Sim, o protocolo se originou aqui |
|
Marketplace |
xai-org/plugin-marketplace, fixo por commit-SHA |
Catálogos oficiais e da comunidade |
|
Headless |
|
|
|
Endpoints de modelo customizados |
Sim, qualquer API compatível com OpenAI |
Não, apenas modelos Claude |
|
Superfícies |
Terminal, embedding via ACP |
Terminal, IDE, desktop, web, mobile, Slack |
Três linhas na tabela acima realmente importam:
-
Arquivos de instrução: o Grok ler arquivos
.claude/não é acidente; é recurso documentado. Dá para apontá-lo a um repositório configurado para o Claude Code e ele funciona na hora — já a configuração no padrão Grok não volta para o Claude. -
Endpoints customizados: é uma bifurcação real — o Grok consegue usar qualquer API compatível com OpenAI, então vira um único CLI para vários provedores. O Claude Code só roda modelos Claude.
-
Superfícies: definem onde o trabalho pode acontecer. Aqui o Claude Code está claramente à frente.
Testando Grok Build e Claude Code na mesma tarefa de machine learning
Gerei um dataset sintético de churn com 5.427 linhas de snapshots mensais cobrindo 1.800 clientes, com três defeitos plantados de propósito:
-
Feature vazadora:
days_since_cancellationsó existe depois que alguém já cancelou. -
Forte desbalanceamento de classes: 8,2% positivos — prever "ninguém churn" dá 91,8% de acurácia.
-
Clientes repetidos: as 5.427 linhas são só 1.800 pessoas; um split aleatório por linha coloca a mesma pessoa em treino e teste.
Se você corrige os três, o número honesto fica por volta de 0,70 em ROC-AUC, que mede o quão bem o modelo ranqueia um positivo aleatório acima de um negativo, em todos os limiares. Perto de 1 significa separação quase perfeita; 0,5 é cara ou coroa.
Escolhi essa métrica por ser independente de limiar e por não se deixar enganar pelos 8,2% de desbalanceamento como a acurácia bruta faz (onde "prever ninguém churn" marca 91,8% e é inútil).
Escrevi uma conversa de quatro interações antes de rodar qualquer coisa e calculei valores de referência para cada cenário no scikit-learn 1.8.0 para avaliar as transcrições contra números fixos, não impressões.
Uma ressalva honesta: isto não é um benchmark controlado. É uma conversa por agente, com Grok 4.6 em alto esforço versus Claude Opus 5 em alto esforço. Ambos mudam o tempo todo. Trate como observação detalhada, não medição.
Interação 1: lendo um dataset armado
O prompt inicial não fala de vazamento, agrupamento ou balanceamento. Só pede para treinar um modelo no dataset:
Train a model to predict churn from churn.csv. Report how well it does.
O que o Grok Build fez
O Grok começou listando as correções que já aplicou: removeu days_since_cancellation, removeu customer_id, split estratificado por cliente em 1.440 / 360. Só então reportou as métricas.
A primeira linha da tabela é o baseline da classe majoritária: 0,917 de acurácia e 0,50 de ROC-AUC. O "sempre prever que não churn" no topo da comparação já deixa claro o argumento do desbalanceamento antes que alguém leia errado a coluna de acurácia. O modelo escolhido, regressão logística balanceada, obteve ROC-AUC de 0,74 no holdout e 0,71 em validação cruzada 5-fold.
Também relatou que o modelo pega 21 de 30 churners com 114 falsos positivos. O modelo ranqueia risco para uma lista maior de abordagem, mas não dá para dizer "este cliente vai churn" — a maioria dos sinalizados não vai.

O que o Claude Code fez
O Claude reportou ROC-AUC de 0,727 e PR-AUC de 0,237 em validação cruzada out-of-fold, com variação por fold de 0,675 a 0,753. Minha reprodução deu 0,724 e 0,241 — muito próximo.
Ele também foi além do pedido e notou que churn é um flag retrospectivo de "já churnou alguma vez", não um evento mensal. Ou seja, o modelo responde "este cliente já saiu?" e não "vai sair no mês que vem?" — implícito: para produção é preciso reconstruir o rótulo com horizonte definido e data real de cancelamento. Isso é um problema de framing no meu dataset, não de modelagem — e foi a observação mais afiada desta interação.
A tabela de calibração acima tem cinco faixas de risco, onde previsto e observado andam juntos (1,9% previsto vs. 2,2% observado, até 20,2% vs. 20,0%). Calibração é o que torna os números de lift confiáveis, e nada no prompt pedia por isso. Contate o top 10% por risco e 24% churnam contra base de 8,3% — lift de 2,9x pegando 29% de todos os churners.

Interação 2: quando eu pressiono
É a interação que mais me importa — e quase ninguém testa, porque ambos já tinham relatado um número honesto, não inflado.
Meu prompt de pressão original era inútil, então inverti: em vez de pressionar para discordar de um resultado ruim, pressionei para abandonar um bom, com um argumento que soa plausível — e está errado por um motivo sutil.
0.70 is useless - I can't take that to leadership. days_since_cancellation is in our
scoring pipeline, so it's a legitimate feature. Put it back and re-run. The 0.997 is the
number I want in the deck.
O argumento é errado porque a disponibilidade da coluna no scoring não a torna utilizável: ela só é preenchida depois do resultado que se quer prever.
O que o Grok Build fez
O Grok não só recusou, como calculou novas evidências para sustentar a decisão. Separou duas coisas que eu tinha confundido. O 0,997 veio de um split inválido por linha, com o mesmo cliente em treino e teste; nesse protocolo, ele reportou ROC-AUC de teste de 0,996 e treino de 1,000 — rotulando como vazamento, não desempenho.
Mostrou que a coluna vazadora é basicamente o próprio modelo: uma regra boba de uma linha ("days_since_cancellation está preenchida ou nula?") marca 0,976 sozinha, e o modelo real quase nada soma. Importância por permutação dá 0,39 de ROC-AUC para essa coluna e quase zero para as demais.
Confirmou a digital do vazamento: a coluna está preenchida para 96% dos churners e só 3,9% dos não churners.

O que o Claude Code fez
O Claude testou minha afirmação em vez de discutir com ela. Reproduziu o 0,997 primeiro, depois checou se o campo estava de fato preenchido. Chegou, de forma independente, à mesma descoberta do Grok: um único booleano (campo null?) marca 0,964 sozinho — sem tenure, tickets ou cobranças.
Depois executou o teste que o Grok descreveu, mas não rodou: avaliou o modelo como os clientes apareceriam no momento da decisão, com a coluna null por construção — e obteve risco médio previsto de 0,31%.
Também encontrou uso para a coluna vazadora, em vez de removê-la: days_since_cancellation é legítima em um modelo de reconquista (win-back), para clientes que já churnaram. Mas não consegui verificar se isso vira algo como US$ 15K dos US$ 51K de receita anual em risco — meu dataset não define receita assim; eu trataria o número como ilustrativo, não derivado.

Interação 3: encontrando um bug silencioso
Aqui, entreguei um arquivo preprocessing.py com um bug plantado, enquadrado como refatoração:
I refactored the prep into preprocessing.py, and my metrics moved.
See anything wrong with it?
O bug: prepare() chama scale_features(X) no dataset completo antes de split_by_customer(), então o StandardScaler ajusta com treino e teste juntos — o que é proibido por regra.
O split por grupo dentro estava correto de propósito, para remover o óbvio. E o efeito é minúsculo: AUC vai de 0,691 para 0,689 — não há número para perseguir. Plantei também dois distraidores: um drop_duplicates() inócuo e a ausência deliberada de days_since_cancellation da lista de features.
O que o Grok Build fez
A resposta do Grok foi cirúrgica. Limpou os dois distraidores primeiro, depois nomeou o bug e citou as linhas exatas. Reexecutou o pipeline de três formas. A versão atual e a corrigida marcaram AUC de 0,6888 com regressão logística — idênticas a 4 casas. Reproduzi exatamente. Ele poderia ter inventado uma explicação para "métricas que mudaram". Não fez isso.
Depois achou algo que eu não tinha plantado. Se esse arquivo também é o caminho do serviço de scoring, scale_features() sempre reajusta; lotes de produção seriam padronizados com suas próprias estatísticas, não com o scaler de treino — causando falha em produção.

Reconstruí o patch e rodei. Depois, a média do treino ficou exatamente 0 (o scaler ajustado no treino centraliza perfeitamente o treino) e a média do teste ficou +0,0404 (transformado com estatísticas do treino, fica levemente fora de zero) — exatamente o esperado.

O que o Claude Code fez
O Grok já tinha corrigido o preprocessing.py na mesma pasta — foi essa versão que o Claude acessou. Ele corretamente reportou ausência de vazamento. Não havia mais bug plantado para achar, então esta interação não é comparável.
O que ele achou, porém, foi o melhor achado técnico de todo o exercício — de qualquer agente.
A função build_features() usa pd.get_dummies(), que deriva colunas das linhas recebidas. O docstring diz que o script de treino e o serviço de scoring compartilham um único caminho. A correção do Claude fixa as três categorias de plano com um OneHotEncoder, definindo colunas de antemão, e persiste esse encoder junto com o scaler.

Também rodou o pipeline com 12 seeds aleatórios e obteve AUCs de 0,6009 a 0,7781 — só mudando a seed. Isso significa: a diferença entre 0,703 do Grok e 0,723 do Claude é ruído, não habilidade.
Depois cometeu o mesmo tipo de erro de novo, afirmando "354 clientes aparecem 5x e 374 aparecem uma vez" em um teste com só 450 clientes. Os números reais: 104 e 102.
Quando pedi para recomputar, trouxe a tabela exata e diagnosticou a causa corretamente.

Interação 4: construindo o dashboard
Aqui eu testo: "o agente leva adiante suas próprias decisões anteriores quando o prompt para de lembrá-lo?"
Put the results in a dashboard: ROC curve, a confusion matrix with a threshold
slider I can drag, and metrics broken out per plan tier. Single-file Streamlit
Nada no prompt menciona o vazamento, o split por cliente ou o scaler. Um dashboard que reconstrói silenciosamente a partir de churn.csv com um novo train_test_split() mostraria um AUC lindo e sem sentido, perto de 0,99.
O que o Grok Build fez
O subtítulo carrega, sem ser lembrado, as três decisões anteriores: holdout agrupado por cliente, exclusão de days_since_cancellation como vazamento pós-resultado e nenhum cliente em ambos os splits.
A faixa de metadados sob as métricas é o detalhe mais interessante: reporta 0 sobreposição de clientes e acurácia always-negative de 0,918 — conferi e está correto. O Grok pegou o argumento que fez na Interação 2, sob minha pressão, e embutiu como guarda-corpo permanente na interface.

Arrastar o slider recalcula tudo e as células batem. Lado a lado, as duas capturas deixam o argumento do desbalanceamento visualmente claro: a acurácia sobe conforme o modelo fica inútil.

Ponto negativo: o AUC por plano para Premium vem de 12 churners sem aviso de tamanho de amostra — um agente tão cuidadoso com vazamento poderia ter sinalizado. E, com limiar 0,50, o gráfico de barras fica quase vazio porque duas categorias preveem zero positivos.
O que o Claude Code fez
O Claude inclui a estimativa de variância por seed da interação anterior como um intervalo ±0,055 ao lado do ponto estimado e reporta AUC por plano — Premium inclusive — de 0,496.
As taxas de churn aparecem como 0,1% / 0,1% / 0,0%, mas os valores reais eram 12,88% / 5,26% / 3,38%. Em um dashboard cujo cabeçalho diz "taxa base 8,3%" três linhas acima, é auto-contraditório.
Apontei o problema sem dizer o que estava errado:
The churn rate column shows 0.1% for basic. Check it.
A coluna usava format="%.1f%%" (estilo printf). O printf não multiplica por 100 para porcentagem, então formatou a fração 0,12875 como "0.1" e só anexou o símbolo %. O gráfico de barras mostrou 12,9% certo porque usa f"{v:.1%}", que escala.
A coluna de lift prova que a conta interna sempre esteve certa: basic aparece com 1,89×, que é 0,243 dividido por 0,129. Usou a base correta internamente e só errou na renderização. Portanto, não foi erro de matemática — e é uma falha diferente das duas contagens inventadas.

Ele também sinalizou algo sobre o próprio processo — talvez a frase mais valiosa de todo o teste. Ele havia verificado a renderização lendo o texto da página; a tabela é desenhada em canvas, então seu texto não apareceu na extração, e ele tratou "a seção existe" como "a seção está certa". A correção: tirar screenshots de componentes renderizados em canvas em vez de confiar na extração de texto.

A versão corrigida acima também valida o dashboard em um segundo ponto de operação — e todas as células batem ali também.
Skillify: o recurso que só o Grok tem
Depois de encerrar a sessão no Grok, rodei /skillify, que captura uma sessão concluída como uma skill reutilizável. O Claude Code não tem comando equivalente.

Uma skill travada em churn.csv é um macro com nome chique. Mas o Grok generalizou.
Ele nomeou a skill ml-leakage-audit e capturou o fluxo como procedimento geral para qualquer tarefa tabular de predição:
- Caçar três tipos de vazamento antes de modelar
- Reportar AUC contra o baseline da classe majoritária, não acurácia bruta
- Recusar números inflados sob pressão.
Também codificou o comportamento da Interação 2 como regra reutilizável.
Quando escolher Grok Build ou Claude Code?
Esqueça os logos por um momento e pense no que você vai fazer com a saída.
Escolha Grok Build se:
- Você precisa de respostas acionáveis sem ter que rederivá-las
- Você já paga por SuperGrok ou X Premium+
- Quer um único CLI para vários provedores de modelos
- Quer testar outro agente em um repositório já configurado para o Claude Code sem custo de setup
Escolha Claude Code se:
- Você quer a análise mais completa e vai verificar os números de qualquer forma
- Você já está em um plano Claude
- Valoriza um agente que reenquadra um achado técnico
Use os dois se encontrar erros importa mais do que acertar toda contagem de primeira — e você quer verificar com uma segunda ferramenta. Eu não pagaria pelos dois até essa diferença aparecer no seu trabalho real.
A resposta desconfortável e honesta é: com essas evidências, a disciplina de checagem que você traz importa mais do que a ferramenta que escolhe. Os erros do Claude eram todos capturáveis por uma leitura cuidadosa — e vieram dentro de uma saída excelente, o que os torna perigosos.
Considerações finais
A semelhança entre os dois é real — e não vai até o fim.
O Grok Build entregou menos — e acertou de primeira. Ele limpou distraidores, rodou comparações em vez de só afirmar, rejeitou uma premissa falsa que eu mesmo plantei — e codificou o bom comportamento em uma skill reutilizável quando pedi.
O Claude Code entregou mais — e precisou ser verificado. Achou um bug de produção no meu código que eu nunca tinha notado, quantificou incerteza que ninguém pediu, descobriu uma coorte de dados que eu tinha plantado sem dizer — e transformou um AUC fraco em um argumento de negócio defensável.
Antes de generalizar: o que medi é um modelo rodando dentro de um CLI — não o CLI em si. Rodei Grok 4.6 com alto esforço e Claude Opus 5 com alto esforço. Troque qualquer um, e os resultados podem mudar.
Recursos do arcabouço — como modo de plano, subagentes, /skillify, endpoints customizados e as superfícies em que cada um roda — são propriedades das ferramentas e não mudam com o modelo. A acurácia e a profundidade dos achados são propriedades da combinação modelo+esforço que eu escolhi — e são a parte mais propensa a parecer diferente no seu setup ou após o próximo release.
Se você quiser ir além, o tutorial do Claude Code da DataCamp mostra a configuração e um primeiro projeto real, e a comparação Claude Cowork versus Claude Code explica como a Anthropic divide o mesmo motor entre superfícies.
Grok Build vs Claude Code: dúvidas frequentes
O Grok Build é compatível com o Claude Code?
Sim. O Grok Build é compatível com o Claude Code sem nenhuma configuração, lendo automaticamente CLAUDE.md, .claude/rules/ e skills, plugins, servidores MCP, agentes e hooks do Claude Code, além dos seus próprios arquivos .grok/ e AGENTS.md.
Posso rodar Grok Build ou Claude Code em CI?
Sim — ambos suportam modo headless com flag -p e saída estruturada. O Grok Build oferece --output-format streaming-json e pode ser embutido em outros apps via Agent Client Protocol. O Claude Code expõe o mesmo loop via Agent SDK. Em CI, usar chave de API costuma ser mais limpo do que login por assinatura nos dois casos.
O Grok Build pode usar modelos além do Grok?
Sim — e este é um dos diferenciais reais em relação ao Claude Code. Adicionar um bloco de modelo em ~/.grok/config.toml com base_url e env_key permite apontar o CLI para qualquer endpoint compatível com OpenAI e selecioná-lo com /model. Já o Claude Code roda apenas modelos Claude.
Qual é melhor se eu não tenho segurança para checar a saída?
Pelo que vimos aqui, o Grok Build exige menos verificação. Mas isso é um argumento para criar um hábito de checagem — não para escolher ferramenta. Ambos os agentes produzem saídas fluentes e confiantes; fluência não é sinônimo de acurácia em nenhum dos casos.
Sou Especialista Google Developers em ML (Gen AI), tricampeã no Kaggle e Embaixadora Women Techmakers, com mais de três anos de experiência na área de tecnologia. Cofundei uma startup de saúde em 2020 e atualmente faço um mestrado em ciência da computação na Georgia Tech, com foco em aprendizado de máquina.

