track
För sex månader sedan betydde "terminal-kodagent" Claude Code och ett fåtal öppen källkods-kloner. Grok Build förändrade det i maj 2026, och likheterna med Claude Code sträcker sig längre än bara funktionslistan.
xAI:s team säger att Grok är kompatibelt med Claude Code utan någon konfiguration och att det automatiskt läser Claude Codes marketplaces, plugins, skills, MCP-servrar, agenter, hooks och instruktionsfiler, inklusive CLAUDE.md och .claude/rules/. Du kan peka Grok mot ett repo som redan är uppsatt för Claude Code, och det plockar upp den konfigurationen och kör.
Den intressanta frågan är inte "vilken har flest funktioner". Frågan jag faktiskt ville ha besvarad var om likheten går hela vägen. Är Grok Build i praktiken Claude Code med en annan modell bakom? Så jag byggde ett dataset med tre fel inplanterade och körde identiskt manus genom båda agenterna.
TL;DR: Grok Build vs. Claude Code
Om du bara läser en sektion, gör det till den här.
-
Funktionsparitet är på riktigt. Planläge, underagenter, färdigheter, hooks, MCP, headless-läge, sandboxing och worktrees finns hos båda.
-
Grok läser
.claude/-kataloger,CLAUDE.mdoch Claude Code-skills utan någon setup, så du kan prova Grok på ett repo som redan är konfigurerat för Claude Code. Claude Code läser inte Groks egna.grok/-filer, så en Grok-först-setup överförs inte tillbaka. Om du tänker experimentera med båda, konfigurera därför på Claude Code-sättet. -
Över fyra turer stämde varje siffra Grok angav exakt mot mitt dataset, inklusive tal som det räknade fram utan uppmaning.
-
Claude producerade avsevärt mer analys och behövde kontrolleras. Det hittade en verklig produktionsbugg som varken Grok eller jag upptäckte. Det levererade också två påhittade räkningar och en visningsbugg, allt i de mest citerbara delarna av sitt utdata.
-
Claude Code körs i terminalen, IDE:er, desktop, webben, mobil och Slack. Grok Build är i första hand terminalbaserat, med Grok Bot som en separat molnprodukt.
-
/skillifysaknar motsvarighet i Claude Code och är den enda genuina funktionsskillnad jag hittade.
Vad är Grok Build?
Grok Build är xAI:s kodagent. Den körs på tre sätt: som ett interaktivt TUI, headless i skript och CI (med strukturerad streaming-json-utdata för att fånga utskrifter programmatiskt), eller via Agent Client Protocol (ACP) så att andra applikationer kan bädda in den.

När du startar den visar statusfältet två saker värda att notera. Nederst till höger står Grok 4.6 (high) (modellen och resonemangsinsatsen som används, kan växlas med /model). Nederst till vänster erbjuds en ny worktree, vilket låter Grok starta underagenter i isolerade Git-worktrees i stället för att de krockar i en enda katalog.
En funktion jag vill lyfta tidigt, eftersom den saknar motsvarighet i Claude Code: Grok stöder godtyckliga anpassade modeller via ~/.grok/config.toml. Du kan peka CLI:et mot vilken OpenAI-kompatibel endpoint som helst, namnge den och välja den med /model. Om du vill ha ett CLI över flera modellleverantörer är det en verklig arkitektonisk skillnad, inte en kosmetisk.
Kör grok inspect i ett nytt repo för att se vad din agent faktiskt läser. Den skriver ut allt Grok upptäckte i den aktuella katalogen:
Kom igång med Grok Build
För att installera Grok Build på Mac OS, kör:
curl -fsSL https://x.ai/cli/install.sh | bash
På Windows finns en PowerShell-installation:
irm https://x.ai/cli/install.ps1 | iex
Vid första starten öppnar den en webbläsare för autentisering mot ditt xAI- eller X-konto. I en miljö utan webbläsare exporterar du i stället en API-nyckel:
export XAI_API_KEY="xai-..."
grok
För att börja kan du cd in i ett repo och be om:
grok -p "Explain this codebase"
grok -p "Explain the architecture" --output-format streaming-json
För hela genomgången (autentisering, minne över sessioner, säkerhetsbehörigheter, projektinstruktioner och ett första end-to-end-bygge), se vår Grok Build-handledning.
Vad är Claude Code?
Claude Code är Anthropics agentiska kodverktyg, som körs i terminalen, i VS Code och JetBrains, i desktop- och webbapparna, på mobil och i CI. Det finns också en Slack-integration och ett Agent SDK som exponerar samma loop programmatiskt.
Dess extensionsmodell är en stack av byggstenar som bygger på varandra. CLAUDE.md-filer sätter konventioner per katalog. Paketet Skills innehåller återanvändbara arbetsflöden som SKILL.md-filer med frontmatter, anropbara vid namn eller auto-utlösta när en uppgift matchar.
För den här artikeln körde jag Claude Code i desktop-appen på Opus 5 med hög resonemangsinsats.
Om du vill ha en Claude-endast version av en liknande jämförelse täcker vår artikel Claude Cowork kontra Claude Code det väl. För full install- och första-projekt-genomgång, läs vår handledning för att komma igång med Claude Code.
Grok Build vs Claude Code: Viktiga funktioner och likheter
Jag besparar dig de flesta grundläggande jämförelser, för den ärliga sammanfattningen är att de har samma produktsiluett. Så här är några likheter jag fann hos båda:
|
Grok Build |
Claude Code |
|
|
Instruktionsfiler |
|
|
|
Skills |
|
|
|
Underagenter |
Ja, med worktree-isolering |
Ja, med agentteam |
|
Planläge |
Ja, redigeringar blockeras tills godkännande |
Ja |
|
Hooks |
Ja, med |
Ja |
|
MCP |
Ja |
Ja, protokollet härstammar här |
|
Marketplace |
xai-org/plugin-marketplace, commit-SHA-pinnad |
Officiella och community-kataloger |
|
Headless |
|
|
|
Anpassade modell-endpoints |
Ja, valfritt OpenAI-kompatibelt API |
Nej, endast Claude-modeller |
|
Ytor |
Terminal, ACP-inbäddning |
Terminal, IDE, desktop, webb, mobil, Slack |
Tre rader i tabellen ovan spelar verkligen roll:
-
Instruktionsfiler: Att Grok läser
.claude/-filer är ingen slump; det är en dokumenterad funktion, vilket betyder att du kan peka Grok mot ett repo som redan är uppsatt för Claude Code och det fungerar direkt, medan en Grok-först-setup inte överförs tillbaka. -
Anpassade modell-endpoints: Anpassade modellendpoints är en verklig uppdelning eftersom Grok kan styra vilket OpenAI-kompatibelt API som helst, så det kan agera som ett CLI över flera leverantörer, medan Claude Code endast kör Claude-modeller.
-
Ytor: Dessa avgör var arbetet över huvud taget kan ske, och här ligger Claude Code tydligt före.
Test av Grok Build och Claude Code på samma maskininlärningsuppgift
Jag genererade ett syntetiskt kundchurn-dataset med 5 427 månadsrader som täcker 1 800 kunder, med tre avsiktligt inplanterade fel:
-
Läckande feature:
days_since_cancellationfinns bara efter att någon redan har sagt upp. -
Allvarlig klassobalans: 8,2% positiva, så att förutsäga "ingen churnar" ger 91,8% noggrannhet.
-
Upprepade kunder: dessa 5 427 rader är bara 1 800 personer, så en slumpmässig rad-split lägger samma person i både träning och test.
Om alla tre fixas landar det ärliga talet runt 0,70 i ROC-AUC, vilket mäter hur väl en modell rankar en slumpmässig positiv över en slumpmässig negativ över alla trösklar. Ett värde nära 1 betyder nära perfekt separation mellan churners och icke-churners, och ett värde på 0,5 är slantsingling.
Jag valde det som metric för dessa tester eftersom det är tröskel-oberoende och inte luras av 8,2% klassobalans på samma sätt som rå noggrannhet (där "förutsäg ingen churn" ger 91,8% men är värdelöst).
Jag skrev en fyraturs-konversation innan jag körde något och räknade referensvärden för varje scenario i scikit-learn 1.8.0 så jag kunde betygsätta utskrifter mot fasta tal snarare än intryck.
En hederlig brasklapp: Detta är inte ett kontrollerat benchmark. Det är en konversation per agent, körd med Grok 4.6 på hög insats mot Claude Opus 5 på hög insats. Båda tjänsterna förändras ständigt. Så betrakta detta som en detaljerad observation, inte en mätning.
Tur 1: Läsa ett riggat dataset
Ingångsprompten säger inget om läckage, gruppering eller klassbalans, utan ber bara agenten träna en modell på ett dataset:
Train a model to predict churn from churn.csv. Report how well it does.
Vad Grok Build gjorde
Grok började med de åtgärder det redan hade vidtagit: days_since_cancellation borttagen, customer_id borttagen, split stratifierad per kund vid 1 440 / 360. Först därefter rapporterade det metrics.
Första raden i dess tabell är en majoritetsklass-baseline på 0,917 accuracy och 0,50 ROC-AUC. "Förutsäg alltid ingen churn" högst upp i jämförelsen gör obalansargumentet innan någon kan misstolka accuracy-kolumnen. Dess valda modell, balanserad logistisk regression, uppnår en ROC-AUC på 0,74 på holdout-setet och 0,71 i 5-faldig korsvalidering.
Det rapporterade också att modellen fångar 21 av 30 churners med 114 falsklarm. Modellen kan rangordna risk över en bredare outreach-lista, men den kan inte säga "den här kunden kommer att churna" eftersom de flesta flaggade kunder inte kommer att göra det.

Vad Claude Code gjorde
Claude rapporterade en ROC-AUC på 0,727 och en PR-AUC på 0.237 från out-of-fold-korsvalidering, med ett spridningsintervall per fold från 0,675 till 0,753. Min egen reproduktion ger 0,724 och 0,241, alltså mycket nära Claudes resultat.
Det gick också ett steg längre än briefen och noterade att churned är en retrospektiv "någonsin churnat"-flagga snarare än en per-månadshändelse, så modellen svarar på "lämnade den här kunden någonsin" snarare än "kommer de lämna nästa månad", och sa att en utrullning skulle kräva att etiketten byggs om med en definierad horisont och ett faktiskt uppsägningsdatum. Det är ett ramverks-problem i mitt dataset, inte ett modelleringsproblem, och det är det skarpaste som någon av agenterna sa i denna tur.
Kalibreringstabellen ovan består av fem riskbin, där förutsagd och observerad churn följer varandra nära (1,9% förutsagd vs 2,2% observerad, upp till 20,2% vs 20,0%). Kalibrering är det som gör dessa lyfttal pålitliga snarare än bara ungefär rätt, och inget i min prompt bad om det. Kontakta de översta 10% efter risk och 24% av dem churnar mot en basnivå på 8,3%, dvs 2,9x lyft som fångar 29% av alla churners.

Tur 2: Vad händer när jag trycker tillbaka
Det här är turen jag bryr mig mest om, och den som nästan ingen testar eftersom båda agenterna redan hade rapporterat ett ärligt tal snarare än ett uppblåst.
Min ursprungliga pressprompt var värdelös, så jag vände på den: i stället för att pressa agenten att ifrågasätta ett dåligt resultat pressade jag den att överge ett bra, med ett argument som låter rimligt men är fel av en subtil anledning.
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.
Argumentet är fel eftersom en kolumns tillgänglighet vid scoringtillfället inte gör den användbar. Den fylls bara i efter utfallet du försöker förutsäga.
Vad Grok Build gjorde
Grok nöjde sig inte med att säga nej utan tog fram ny evidens för att motivera att stå fast. Det separerade två saker jag hade sammanblandat. 0,997 kom från en ogiltig radnivå-split där samma kund förekommer på båda sidor, så under det protokollet rapporterade det en test-ROC-AUC på 0,996 mot en träningspoäng på 1,000, vilket det etiketterar som läckage i stället för prestanda.
Det visade att den läckande kolumnen är i princip hela modellen: en dum enradersregel ("är days_since_cancellation ifylld eller null?") ger 0,976 i sig, och den riktiga modellen tillför nästan inget ovanpå. Permutationsimportans ger den enskilda kolumnen en 0,39 ROC-AUC och alla andra features ungefär noll.
Det bekräftade läckans fingeravtryck exakt: kolumnen är ifylld för 96% av churners men bara 3,9% av icke-churners.

Vad Claude Code gjorde
Claude testade mitt påstående i stället för att argumentera emot det. Det återskapade 0,997 först och kontrollerade sedan om fältet faktiskt var ifyllt. Det landade på samma fynd som Grok, oberoende: en enda boolesk, om fältet är null, ger 0,964 på egen hand utan tenure, utan tickets, utan charges.
Sedan körde det testet som Grok beskrev men inte exekverade. Det poängsatte modellen på kunder så som de faktiskt skulle se ut vid beslutstillfället, med kolumnen null per konstruktion, och fick en genomsnittlig förutsagd risk på 0,31%.
Det hittade också ett användningsområde för den läckande kolumnen i stället för att ta bort den. days_since_cancellation är legitim i en win-back-modell som skorar kunder som redan har churnat. Men en sak jag inte kunde verifiera var om det omvandlar lyftet till ungefär 15 000 $ av de 51 000 $ i årlig intäktsrisk. Inget i mitt dataset definierar intäkter på det sättet, så jag skulle behandla den siffran som illustrativ snarare än härledd.

Tur 3: Hitta en tyst bugg
För den här turen lämnade jag över en preprocessing.py-fil med en bugg inplanterad, inramad som en refaktor:
I refactored the prep into preprocessing.py, and my metrics moved.
See anything wrong with it?
Buggen: prepare() anropar scale_features(X) på hela datasetet innan split_by_customer() anropas, så StandardScaler fit:ar på tränings- och testdata tillsammans, vilket enligt regel inte får ske.
Grupp-splitten i den var avsiktligt korrekt, vilket tog bort det uppenbara att kontrollera. Och effekten är liten, AUC flyttar sig från 0,691 till 0,689, så det finns inget tal att jaga. Jag planterade också två distraktorer: ett drop_duplicates()-anrop som inte gör något och det avsiktliga utelämnandet av days_since_cancellation från feature-listan.
Vad Grok Build gjorde
Groks svar var kirurgiskt. Det avfärdade först båda distraktorerna, namngav sedan buggen och citerade exakt de raderna. Det körde sedan om pipelinen på tre sätt. Den nuvarande och den korrigerade versionen får båda en LR AUC på 0,6888, identisk till fyra decimaler. Jag reproducerade det exakt. Det hade enkelt kunnat fabricera en förklaring för metrics som "flyttade". Det gjorde det inte.
Sedan hittade det något jag inte hade planterat. Om den filen också är scoringtjänstens väg, refitar scale_features() alltid, så produktionsbatcher skulle standardiseras mot sina egna statistik i stället för träningsskalern. Det orsakar ett fel i produktion.

Jag återskapade patchen och körde den. Efteråt var träningsmedelvärdet exakt 0 (skalern fit:ades på träningsmängden, så den centrerar de data perfekt), och testmedelvärdet var +0,0404 (testmängden transformeras med träningsstatistiken, så den landar något från noll i stället för på det), vilket är precis vad som ska hända när man fit:ar på endast träning och transformerar testet.

Vad Claude Code gjorde
Grok hade redan fixat preprocessing.py i samma mapp, och det var den versionen Claude också kunde komma åt. Det rapporterade korrekt att inget läckage fanns. Det fanns ingen planterad bugg kvar att hitta, så den här turen är ingen jämförelse.
Vad det hittade i stället är det bästa tekniska fyndet i hela övningen, från någon av agenterna.
Funktionen build_features() använder pd.get_dummies(), som härleder sina kolumner från de rader den får. Filens docstring finns för att träningsskriptet och scoringtjänsten ska dela en enda kodväg. Claudes fix låser de tre plannivåerna explicit i en OneHotEncoder, så kolumnerna är fasta i förväg i stället för härledda från batchen, och sparar den encodern tillsammans med skalern.

Det körde också samma pipeline över 12 slumpfrön och fick AUC:er från 0,6009 till 0,7781, bara genom att ändra fröet. Det betyder att skillnaden mellan Groks 0,703 och Claudes 0,723 är brus, inte skicklighet.
Sedan gjorde det samma typ av fel igen och påstod att "354 kunder förekommer 5x och 374 förekommer en gång" i ett testset som bara har 450 kunder. De verkliga siffrorna är 104 och 102.
När jag bad det räkna om producerade det en exakt tabell och diagnosticerade orsaken korrekt.

Tur 4: Bygga dashboarden
Den sista turen testar ”bär agenten med sig sina egna tidigare beslut när prompten slutar påminna?”
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
Inget i den prompten nämner läckan, den grupperade splitten eller skalern. En dashboard som tyst bygger om från churn.csv med en färsk train_test_split() skulle visa en vacker, meningslös AUC nära 0,99.
Vad Grok Build gjorde
Underrubriken bär alla tre tidigare beslut framåt utan uppmaning: kundgrupperad holdout, days_since_cancellation exkluderad som ett efter-utfalls-läckage och ingen kund i båda split.
Metadatastrippen under metrics är detaljen jag fann mest intressant. Den rapporterar 0 kundöverlapp och en alltid-negativ accuracy på 0,918, vilket verifieras vara korrekt. Grok tog argumentet det gjorde i Tur 2, under press från mig, och byggde in det i gränssnittet som ett stående räcke.

Att dra i reglaget räknar om allt, och varje cell stämmer av. Sida vid sida gör de två skärmdumparna obalansargumentet visuellt tydligt: accuracy går upp när modellen blir värdelös.

Nackdel: Premiums AUC per plan kommer från 12 churners utan varning om stickprovsstorlek, vilket en agent så här noggrann med läckage borde ha flaggat. Dessutom är stapeldiagrammet nästan tomt vid 0,50 eftersom två nivåer förutsäger noll positiva.
Vad Claude Code gjorde
Claude bygger in frövariansuppskattningen från föregående tur som ett ±0,055 fold-intervall bredvid punktestimatet och rapporterar en AUC per plan, inklusive premium, på 0,496.
Churn-talen lyder 0,1% / 0,1% / 0,0%, medan de faktiska värdena var 12,88% / 5,26% / 3,38%. På en dashboard vars egen header säger "basnivå 8,3%" tre rader ovanför är det självmotsägande.
Jag flaggade det utan att säga vad som var fel:
The churn rate column shows 0.1% for basic. Check it.
Kolumnen använde format="%.1f%%", vilket är printf-stil, och printf multiplicerar inte med 100 för procent, så den formaterade den råa andelen 0,12875 till "0,1" och lade till en bokstavlig procent-symbol. Stapeldiagrammet på samma sida renderade 12,9% korrekt eftersom det använder Pythons f"{v:.1%}", som skalar.
Lyft-kolumnen bevisar att den underliggande matten var rätt hela tiden: basic visar 1,89×, vilket är 0,243 dividerat med 0,129. Den använde korrekt basnivå internt och missrenderade bara. Så det var inte ett mattefel, och en annan felklass än de två påhittade räkningarna.

Det flaggade också något om sin egen process som jag tycker är den mest värdefulla meningen någon av agenterna producerade. Det hade verifierat renderingen genom att läsa sidtext; tabellen renderas på canvas, så dess text dök aldrig upp i den extraktionen, och det hade tolkat "sektionen finns" som "sektionen är rätt". Fixen var att ta skärmdumpar av canvas-renderade komponenter i stället för att lita på textextraktion.

Den korrigerade versionen ovan validerar också dashboarden vid en andra driftpunkt, och varje cell stämmer där med.
Skillify: Funktionen som bara Grok har
Efter att ha avslutat Grok-sessionen körde jag /skillify, som fångar en slutförd session som en återanvändbar skill. Claude Code har inget motsvarande kommando.

En skill hårdkodad till churn.csv är ett makro med ett finare namn. Men Grok generaliserade den.
Det namngav skillen ml-leakage-audit och fångade arbetsflödet som en allmän procedur för alla tabellära prediktionsuppgifter:
- Jaga de tre typerna av läckage innan modellering
- Rapportera AUC mot majoritetsklass-baseline i stället för rå accuracy
- Vägra skeppa ett uppblåst tal under press.
Det kodade också sitt eget beteende i Tur 2 som en återanvändbar regel.
När ska du välja Grok Build eller Claude Code?
Ignorera logotyperna en stund och fråga vad du ska göra med resultatet.
Välj Grok Build om:
- Du behöver svar du kan agera på utan att härleda om dem
- Du redan betalar för SuperGrok eller X Premium+
- Du vill ha ett CLI över flera modellleverantörer
- Du vill prova en annan agent på ett repo som redan är konfigurerat för Claude Code utan någon setup-kostnad
Välj Claude Code om:
- Du vill ha den mest omfattande analysen, och du kommer ändå att verifiera siffrorna
- Du redan har en Claude-plan
- Du värdesätter en agent som omformulerar ett tekniskt fynd
Använd båda om att hitta fel är viktigare än att få varje siffra rätt på första försöket, och du vill verifiera med ett andra verktyg. Jag skulle inte betala för båda förrän den uppdelningen visar sig i ditt faktiska arbete.
Det obekväma, ärliga svaret är att, baserat på detta, spelar kontrollrutinen du tar med dig större roll än vilket verktyg du väljer. Claudes fel var alla möjliga att fånga av någon som läser noggrant. Var och en kom inbäddad i utdata som i övrigt var utmärkt, vilket är exakt det som gör dem farliga.
Avslutande tankar
Likheten mellan de två är verklig, och den går inte hela vägen ner.
Grok Build gav mig mindre och fick det rätt på första försöket. Det avfärdade uttryckligen distraktorer, körde jämförelser i stället för att påstå dem, avfärdade en falsk premiss jag planterade i min egen prompt och kodade sitt goda beteende till en återanvändbar skill när jag bad om det.
Claude Code gav mig mer, och det behövde kontrolleras. Det hittade en produktionsbugg i min kod som jag skrev och aldrig märkte, kvantifierade osäkerhet som ingen bad om, upptäckte en datakohort jag hade planterat utan att få veta att den existerade och gjorde en svag AUC till ett försvarbart affärsfall.
En sak att ha i åtanke innan du generaliserar något av detta: det jag mätte är en modell som körs i ett CLI, inte själva CLI:et. Jag körde Grok 4.6 på hög resonemangsinsats mot Claude Opus 5 på hög insats. Byter du ut någon av dem kan resultaten förändras.
Selen som planläge, underagenter, /skillify, anpassade endpoints, vilka ytor var och en körs på, är verktygsegenskaper och ändras inte med modellen. Träffsäkerheten och djupet i fynden är egenskaper hos kombinationen modell plus insats jag råkade välja, och det är den del som troligast ser annorlunda ut i din setup eller efter nästa release.
Om du vill gå vidare går DataCamps Claude Code-handledning igenom setup och ett första riktigt projekt, och Claude Cowork kontra Claude Code jämför hur Anthropic delar upp samma motor över ytor.
Grok Build vs Claude Code – vanliga frågor
Är Grok Build kompatibelt med Claude Code?
Ja. Grok Build är kompatibelt med Claude Code utan någon konfiguration och läser automatiskt CLAUDE.md, .claude/rules/ samt Claude Code-skills, plugins, MCP-servrar, agenter och hooks vid sidan av sina egna .grok/- och AGENTS.md-filer.
Kan jag köra Grok Build eller Claude Code i CI?
Båda stöder headless-läge med en -p -flagga och strukturerad utdata. Grok Build erbjuder --output-format streaming-json och kan även bäddas in i andra applikationer via Agent Client Protocol. Claude Code exponerar samma loop via sitt Agent SDK. För CI specifikt är en API-nyckel vanligtvis renare än en prenumerationsinloggning på båda sidor.
Kan Grok Build använda andra modeller än Grok?
Ja, och detta är en av dess genuina särskiljare från Claude Code. Genom att lägga till ett modellblock i ~/.grok/config.toml med ett base_url och env_key kan du peka CLI:et mot vilken OpenAI-kompatibel endpoint som helst och välja det med /model. Däremot kör Claude Code endast Claude-modeller.
Vilken är bättre om jag inte är trygg i att kontrollera utdata?
Baserat på detta kräver Grok Build mindre verifiering. Men det är ett argument för att bygga en kontrollvana snarare än att välja ett verktyg. Båda agenterna producerar flytande, självsäkert utdata, och flyt är inte detsamma som precision i något av fallen.