Foremerge fanger intensjonskonflikter mellom kodeagenter før koden skrives
Lar Foremerge parallelle kodeagenter erklære hva de skal endre i et delt register over Git, slik at planer som kolliderer fanges opp før noen skriver en linje kode.
«Git sammenligner tekst, ikke intensjon.» Poenget står i README-en til Foremerge, et koordineringslag for kodeagenter som ble lagt ut som Show HN på Hacker News 21. september. Prosjektet er skrevet i Rust, ligger under Apache-2.0 og har rundt 460 stjerner.
Feilen verktøyet er bygget mot, er liten og helt stille. README-en beskriver to agenter i hvert sitt worktree: den ene flytter alle kallere over på en ny StripePaymentService, den andre legger PayPal-støtte inn i den gamle PaymentService. Ingen felles fil, ingen tekstlig konflikt. Git fletter begge grenene rent, og PayPal-arbeidet blir stående og peke på en klasse ingenting kaller lenger.
Mekanikken lar seg forklare på én linje: agenten publiserer hva den skal gjøre, før den gjør det. Hver erklæring peker på et semantisk scope i stedet for en filsti, og vokabularet dekker tolv typer, blant dem symbol, api, schema, migration, contract og domain. Filstier alene bommer på kollisjoner i API, konfigurasjon, skjema og infrastruktur, og på kollisjoner som går på tvers av programmeringsspråk. Fordi operasjonen erklæres i stedet for å leses ut av sammendraget, havner «konsolider betalinger på Stripe» og «erstatt PaymentService med Stripe» på samme vurdering.
Erklærer to agenter samme scope, sammenligner deterministiske regler dem mens begge deler fortsatt bare er planer. I betalingseksempelet sier den ene at den vil erstatte symbol:PaymentService, den andre at den vil utvide det. Foremerge reiser da et funn av typen destructive_vs_additive med alvorlighetsgrad HIGH, og foreslår at agentene først enes om en stabil PaymentProvider-abstraksjon.
«Den låser aldri en fil og blokkerer aldri en agent, fordi én krasjet agent da ville stanset hele flåten.» — README-en for Foremerge
Samme prinsipp styrer dømmingen: ingen modell vurderer konflikter, så like input gir alltid samme svar. Foremerge 0.5.0 kaller seg selv en pre-1.0 MVP som kjører lokalt. CLI, JSON-API, MCP-serveren med sine 18 livssyklus- og leseverktøy, SQLite-lageret under .git-mappa og den deterministiske konfliktdetektoren er implementert. De offentlige skjemaene kan fortsatt endres, publiserte benchmark-resultater finnes ikke, og koordinering mellom maskiner ligger utenfor prosjektets omfang.
«Konfliktdeteksjon er deterministisk og forklarbar, men heuristisk. Den kan overse synonyme begreper og varsle om arbeid som er kompatibelt.» — README-en for Foremerge, i avsnittet om hva MVP-en ikke lover
Den innrømmelsen er verdt å lese to ganger. Et verktøy som skal fange opp det Git ikke ser, må selv gjette, og Foremerge velger å gjette forklarbart framfor å gjette godt.
Hva bør du gjøre?
- Installer det i et repo der du faktisk kjører to agenter samtidig. Installasjonsskriptet legger binærfilen i ~/.local/bin, og du trenger nyere Git og jq. Bygger du fra kilde, kreves Rust 1.85 eller nyere.
- Registrer en ekte verifikasjonskommando med foremerge checks set før du stoler på livssyklusen. Foremerge kjører sjekken selv i stedet for å ta agenten på ordet. Har du ingenting meningsfylt å verifisere, sier du det med foremerge checks policy advisory, og arbeidet føres som UNVERIFIED i stedet for å se godkjent ut.
- Behandle funnene som rådgivende. Erklæringer varsler, de låser aldri filer, symboler eller agenter, og forslaget om en ny abstraksjon er en heuristikk, ikke en arkitekturbeslutning tatt for deg.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.