A version control system for the age of AI agents. Patches, not snapshots. Deterministic merges. N agents in parallel — no conflicts, no stash, no branch hell. Un sistema de control de versiones para la era de los agentes IA. Patches, no snapshots. Merges determinísticos. N agentes en paralelo — sin conflictos, sin stash, sin infierno de ramas.
brew install rvielma/tap/gitweave
This isn't an argument about GitFlow. Trunk-based development with two-hour branches removes the ceremony, not the model underneath it: a merge still reconstructs what changed by comparing three snapshots. Everything below follows from that reconstruction — and no branching convention on top of Git can remove it. Esto no es un argumento contra GitFlow. Trunk-based con ramas de dos horas elimina la ceremonia, no el modelo que hay debajo: un merge sigue reconstruyendo qué cambió comparando tres snapshots. Todo lo de abajo se deriva de esa reconstrucción — y ninguna convención de ramas sobre Git puede quitarla.
blake3 identity as it propagates between slotsUn patch conserva su identidad blake3 al propagarse entre slotsdeps: Vec<PatchId> — dependency is declared, not implied by timedeps: Vec<PatchId> — la dependencia es declarada, no implícita en el tiemposrc/auth.rs at the same time. One touches lines 12–18, the other lines 80–95.
Dos agentes editan src/auth.rs a la vez. Uno toca las líneas 12–18, el otro las 80–95.
“Given the base snapshot, my tree and their tree, what text should the file contain?” It has to rebuild both edits from state differences, then guess whether they can coexist. The answer moves if the merge base moves — a rebase, an octopus merge, or a criss-cross history changes the outcome without any line of code changing. «Dado el snapshot base, mi árbol y el suyo, ¿qué texto debe tener el archivo?» Tiene que reconstruir ambas ediciones a partir de diferencias de estado y luego adivinar si pueden coexistir. La respuesta se mueve si se mueve la base — un rebase, un merge de varias ramas o un historial cruzado cambian el resultado sin que cambie una línea de código.
“Do these two hunks intersect?” Same file, overlapping line ranges — a structural test over the patches themselves, never over the resulting file. No base snapshot is consulted, so there is nothing for history shape to perturb. «¿Se intersectan estos dos hunks?» Mismo archivo, rangos de líneas solapados — una prueba estructural sobre los patches, nunca sobre el archivo resultante. No se consulta ningún snapshot base, así que no hay nada que la forma del historial pueda alterar.
The lineage. “Changes, not states” is Darcs (2003), then Pijul. Darcs had the right model and died on merges that blew up exponentially; Pijul rebuilt it on sound patch theory. GitWeave takes the same premise and answers the complexity problem structurally: conflict detection is a line-range intersection over hunks — quadratic in hunks per pair, with no search and no backtracking. And it exports to plain Git commits, so GitHub, your PRs and your CI never learn that anything changed. Read the theory → El linaje. «Cambios, no estados» es la tesis de Darcs (2003) y después Pijul. Darcs tenía el modelo correcto y murió por merges que explotaban exponencialmente; Pijul lo reconstruyó sobre teoría de patches sana. GitWeave parte de la misma premisa y responde al problema de complejidad de forma estructural: detectar un conflicto es intersectar rangos de líneas entre hunks — cuadrático en hunks por par, sin búsqueda ni backtracking. Y exporta a commits Git normales, así que GitHub, tus PRs y tu CI nunca se enteran de que cambió algo. Lee la teoría →
Every change is content-addressed via blake3. Permanent, verifiable, composable. No history rewriting, ever.Cada cambio está identificado por blake3. Permanente, verificable, composable. Sin reescritura de historial.
Two patches conflict only when their hunks intersect — mathematically. No 3-way merge heuristics. No "ours vs theirs".Dos patches conflictúan solo cuando sus hunks se intersectan — matemáticamente. Sin heurísticas de merge.
gRPC endpoints built for Claude, Cursor, or any autonomous process. Open a WorkSlot, write patches, merge — without humans.Endpoints gRPC para Claude, Cursor o cualquier proceso autónomo. WorkSlot, patches, merge — sin humanos.
N developers or agents work in isolated slots simultaneously. No locking, no blocking. Ephemeral workspaces — create, fill, merge, done.N desarrolladores o agentes en slots aislados en paralelo. Sin locks ni bloqueos. Espacios de trabajo efímeros.
Push to GitHub as normal commits. GitWeave is the source of truth; Git is the export format. Zero lock-in.Push a GitHub como commits normales. GitWeave es la fuente de verdad; Git es el formato de exportación.
Built with Tauri — ~14MB for Mac, Windows & Linux. Rust backend, modern web UI. No Electron, no Chrome bundled inside.Construido con Tauri — ~14MB para Mac, Windows y Linux. Backend Rust, UI web moderna. Sin Electron.
A Patch knows its hash, its deps, and its hunks. The ConflictEngine asks one question: do hunks intersect? No heuristics.Un Patch conoce su hash, sus deps y sus hunks. El ConflictEngine hace una pregunta: ¿se intersectan los hunks? Sin heurísticas.
Written in Rust. No unsafe, no unwrap in production code. Built for correctness.Escrito en Rust. Sin unsafe ni unwrap en producción. Construido para ser correcto.
Creates .gw/ with the local PatchStore. Works on existing Git repos too.Crea .gw/ con el PatchStore local. Compatible con repos Git existentes.
Each developer or agent gets an isolated slot. No branch creation, no checkout, no switching.Cada desarrollador o agente obtiene un slot aislado. Sin crear ramas, sin checkout, sin switching.
gw slot create my-feature -o raphaelEdit files normally. GitWeave tracks changes as immutable patches with explicit dependencies.Edita archivos normalmente. GitWeave registra cambios como patches inmutables con dependencias explícitas.
gw record -m "fix auth middleware"No conflicts unless hunks truly intersect. If they don't — instantaneous. If they do — GitWeave tells you exactly which lines collide.Sin conflictos a menos que los hunks se toquen. Si no — instantáneo. Si sí — GitWeave te dice exactamente qué líneas.
gw merge slot-a slot-bFreeze a curated patch set as a release — name a patch and its dependencies come along, because a change can't ship without what it was built on. It leaves your repo as an annotated Git tag, so your CI/CD pipeline sees nothing different.Congela un patch set curado como release — nombra un patch y sus dependencias vienen con él, porque un cambio no puede salir sin aquello sobre lo que se construyó. Sale de tu repo como un tag Git anotado, así que tu CI/CD no nota diferencia.
gw release v1.0.0 --patch 4f2a91 && gw push originApprove, request changes, or comment on any patch — from the desktop app, the CLI, or the gRPC API. Reviews are structural: they live on the patch, not on a PR. Aprueba, solicita cambios o comenta en cualquier patch — desde la app de escritorio, el CLI o la API gRPC. Los reviews son estructurales: viven en el patch, no en un PR.
Approve, request changes, or comment on individual patches. Verdict is computed automatically: approved, changes_requested, or pending.
Aprueba, solicita cambios o comenta en patches individuales. El veredicto se calcula automáticamente: approved, changes_requested o pending.
A unified timeline of patches and review status across all slots. See what happened, who reviewed what, and what still needs attention — at a glance. Timeline unificado de patches y estado de review en todos los slots. Ve qué pasó, quién revisó qué y qué necesita atención — de un vistazo.
Like Graphite's stacked PRs, but native to the patch model. gw stack shows the full dependency chain from root to tip, with review status on each.
Como los stacked PRs de Graphite, pero nativos al modelo de patches. gw stack muestra la cadena completa de dependencias de raíz a tip, con estado de review en cada uno.
Two concerns in one file shouldn't become one patch. gw diff --hunks lists them, gw record --hunk f:1 takes one, -p asks one by one. What you leave behind stays pending.
Dos asuntos en un fichero no deberían ser un solo patch. gw diff --hunks los lista, gw record --hunk f:1 se lleva uno, -p pregunta uno a uno. Lo que dejas sigue pendiente.
gw release v1.2.0 freezes a patch set: an ordered list of ids plus a blake3 digest. Name a patch and its dependencies come along. Ships as an annotated Git tag.
gw release v1.2.0 congela un patch set: lista ordenada de ids más un digest blake3. Nombra un patch y sus dependencias vienen con él. Sale como tag Git anotado.
Exclude files from tracking with glob patterns. Like .gitignore, but for the GitWeave model. Built-in defaults for target/, node_modules/, dist/.
Excluye archivos del tracking con patrones glob. Como .gitignore, pero para el modelo GitWeave. Defaults integrados para target/, node_modules/, dist/.
gw stack · gw review approve · gw review show — manage reviews and visualize stacks from the terminal. Full gRPC client SDK for building custom agents.
gw stack · gw review approve · gw review show — gestiona reviews y visualiza stacks desde la terminal. SDK gRPC completo para construir agentes custom.
Verify that a slot has no conflicts with the rest of the repository. Like Aviator's av sync, but without rebasing — patches are immutable, so sync just checks compatibility.
Verifica que un slot no tiene conflictos con el resto del repositorio. Como av sync de Aviator, pero sin rebase — los patches son inmutables, sync solo verifica compatibilidad.
Mark a slot as ready for review. Runs sync first — if there are conflicts, submit is blocked. Transitions the slot from active to submitted.
Marca un slot como listo para review. Ejecuta sync primero — si hay conflictos, el submit se bloquea. Transiciona el slot de active a submitted.
Create a slot on top of another with gw slot create --on parent. Child slots inherit the parent's context. Sync checks conflicts against the parent too. Like stacked PRs, but for patches.
Crea un slot encima de otro con gw slot create --on parent. Los slots hijos heredan el contexto del padre. Sync verifica conflictos contra el padre también. Como stacked PRs, pero para patches.
Made a bad merge? gw undo-merge restores both slots to their pre-merge state. One command, full rollback — no history rewriting needed because patches are immutable.
Hiciste un merge malo? gw undo-merge restaura ambos slots a su estado pre-merge. Un comando, rollback completo — sin reescritura de historial porque los patches son inmutables.
When patches collide, the desktop app shows exactly which hunks intersect — side by side, file by file. No guessing, no "ours vs theirs" — you see the precise lines that conflict. Cuando los patches colisionan, la app de escritorio muestra exactamente qué hunks se intersectan — lado a lado, archivo por archivo. Sin adivinar, sin "ours vs theirs" — ves las líneas exactas en conflicto.
Native OS file watcher (fsnotify) detects changes instantly — no polling. The UI updates the moment you save a file. 500ms debounce, zero CPU waste. File watcher nativo del OS (fsnotify) detecta cambios al instante — sin polling. La UI se actualiza en el momento que guardas un archivo. Debounce de 500ms, cero desperdicio de CPU.
Push patches directly to GitHub, GitLab, or Bitbucket — no intermediate step. gw remote add origin <url>, then gw push. Pull works the same way. Your CI/CD sees normal Git commits.
Push patches directo a GitHub, GitLab o Bitbucket — sin paso intermedio. gw remote add origin <url>, luego gw push. Pull funciona igual. Tu CI/CD ve commits Git normales.
Manage remotes like Git: gw remote add / remove / list. Stored per-repo in .gw/remotes.json. Push and pull resolve by name — just gw push uses "origin" by default.
Gestiona remotes como Git: gw remote add / remove / list. Almacenados por repo en .gw/remotes.json. Push y pull resuelven por nombre — gw push usa "origin" por defecto.
151 tests across every crate: 76 for the core engine, 22 for the Git bridge, 11 for the desktop command layer, 9 for the interactive hunk picker, 7 for the gRPC agent API, and 26 end-to-end CLI tests running the full workflow (init → record → slot → merge → undo → review → release → export). 151 tests en todos los crates: 76 del motor core, 22 del puente Git, 11 de la capa de comandos del escritorio, 9 del selector interactivo de hunks, 7 de la API gRPC para agentes, y 26 tests E2E del CLI ejecutando el flujo completo (init → record → slot → merge → undo → review → release → export).
The full documentation explains why Git's snapshot model breaks down under concurrent, multi-agent editing, how the hunk-intersection algorithm works, and how WorkSlots replace every piece of GitFlow with something simpler and more correct. La documentación completa explica por qué el modelo de snapshots de Git se rompe bajo edición concurrente multi-agente, cómo funciona el algoritmo de intersección de hunks, y cómo los WorkSlots reemplazan cada pieza de GitFlow con algo más simple y más correcto.
Why snapshot-based VCS breaks down in the age of AI agents and parallel development.Por qué el VCS basado en snapshots se rompe en la era de agentes IA y desarrollo paralelo.
Side-by-side mapping from every GitFlow concept to its GitWeave equivalent — feature branches, stash, cherry-pick, all of it.Mapeo 1 a 1 de cada concepto de GitFlow a su equivalente en GitWeave — feature branches, stash, cherry-pick, todo.
Patches, Hunks, DAG, WorkSlots, ConflictEngine — the five primitives that make everything work.Patches, Hunks, DAG, WorkSlots, ConflictEngine — las cinco primitivas que hacen que todo funcione.
How N autonomous agents work on the same codebase without conflict, lock, or human supervision via the gRPC daemon.Cómo N agentes autónomos trabajan en el mismo codebase sin conflicto, lock, ni supervisión humana vía el daemon gRPC.
How GitWeave exports to regular Git commits so your GitHub, GitLab, and CI/CD pipelines keep working.Cómo GitWeave exporta a commits Git regulares para que tu GitHub, GitLab y CI/CD sigan funcionando.
Every gw command, what it does, and how it maps to the desktop app.Cada comando gw, qué hace, y cómo se mapea a la app de escritorio.
GitWeave is free and built for teams that move fast. One command installs the gw CLI on macOS and Linux, and Windows has a ready-to-run gw.exe; the native desktop app is coming soon. GitWeave es gratis y construido para equipos que se mueven rápido. Un comando instala el CLI gw en macOS y Linux, y Windows tiene un gw.exe listo para usar; la app de escritorio nativa llega pronto.
brew install rvielma/tap/gitweave
Free to use · Rust + Tauri · Built by rvielma for the community Gratis · Rust + Tauri · Desarrollado por rvielma para la comunidad