Start

Overview

What Weave is, how it differs from git, and the core concepts — workstream, draft, stitch, weave, owner, suggestion — with a glossary.

View as Markdown

Weave is a version-control system built for many people and AI agents editing one codebase at the same time. It tracks code by symbol — a function, method, class, constant or JSON key — not by line. Instead of merging, it keeps everyone in real-time sync and gives every symbol an owner. Clashes never block anyone, and nobody's work is lost.

There are two parts:

PartAddressWhat it does
The platformhttps://weave.directoryAccounts, organizations, repositories, people, tokens, agents, webhooks and the web UI.
The Weave serverhttps://api.weave.directoryWorkstreams, heads, the weave check, ownership, suggestions, change requests, resolution points, messages, search and the operation log.
The CLIweave (and weave-watcher)Runs on your machine or in an agent's sandbox. Install it with curl -fsSL https://weave-cli.com/install.sh | sh.

New here? Go to the Quickstart. Building with AI agents? Read For AI agents. Agents can fetch these docs as plain text: /docs/llms.txt (an index) or /docs/llms-full.txt (every page in one file). Every page is also available as Markdown at /docs/<page>.md.

How Weave works in one minute#

  1. You work in a workstream (main, dev, feature/auth). Everyone on a workstream sees the same head.
  2. You edit files on disk as usual. weave add records your edits, by symbol, in your private draft. Nobody sees a draft.
  3. weave stitch -i "<intent>" -w "<why>" seals the draft into one stitch with what it is for and why.
  4. The server runs the weave check. If it passes, the stitch is weaved: the head moves forward and everyone receives it.
  5. If you changed a symbol someone else owns, that part goes to them as a suggestion. The rest weaves at once.
  6. If your change clashes with newer work, it also goes to that person as a suggestion. Nothing fails. If they reject it, a resolution point keeps both versions.
bash
weave clone acme/shop && cd shop
weave claim src/cart.ts::addToCart --feature "quantity support"
# ... edit src/cart.ts ...
weave add
weave stitch -i "Add quantity to addToCart" -w "the mobile app sends a quantity"

How Weave differs from git#

Weave is not git with a different name. Git lets everyone change anything on a private copy and reconciles the copies later, line by line. Weave keeps everyone on the same head in real time and decides, per symbol, who changes what.

GitWeave
Unit of changeLines in filesSymbols: functions, classes, constants, JSON keys
Who may change codeAnyone, on their own copyAnyone; changes to an owned symbol become a suggestion to its owner
Staying in stepFetch and merge when you chooseReal-time sync; weave sync or weave watcher follow the head
Two people change the same thingMerge conflict; someone resolves markers before continuingNever blocks: the newer version stays, the other goes to its author as a suggestion; a rejected one becomes a resolution point with both versions
Two people change different functions in one fileUsually merges, sometimes conflictsNever clashes: symbols are independent
A unit of workCommit messageStitch with an intent and a why, plus optional decision records
Lines of workBranches merged in one stepWorkstreams in a chain; stitches promoted up one at a time and inherited down automatically
Rewriting historyRebase, reset, force-pushNever: heads only move forward; revert and undo add new entries
AI agentsShare a person's identityFirst-class authors with their own sessions, tokens, drafts and path limits

Coming from git: what to use instead#

If you would…In Weave
git cloneweave clone <org>/<repo>
git checkout -b featureweave workstream new feature --from main
git checkout mainweave checkout main
git add / git commitweave add, then weave stitch -i "…" -w "…"
git pushNothing: a stitch is sent when you stitch (weave push only sends stitches sealed while offline)
git pullweave sync (or let weave watcher do it)
Open a pull request and mergeweave promote <stitch> --to <parent>
Resolve a merge conflictUsually nothing. For a change request: weave cr resolve <id> this|other|edit. For a resolution point: weave resolve <tag> head|copy|edit
git log / git blameweave timeline, weave log, weave log --symbol <file::symbol>
git revertweave revert <stitch> --why "…" or weave undo
git stashweave hibernate / weave resume
git tagTags on the server API (POST /api/weave/{repoId}/tags)

Weave can still talk to git when you need it: the server can import a git repository and mirror a workstream to a git remote (see the API reference).

Core concepts#

Symbols#

Weave parses every file into symbols, losslessly. Two people changing different functions in the same file never clash. Parsed languages: Rust, TypeScript/JavaScript (TSX/JSX), Python, Go, Java, C#, Swift, PHP, CSS and SCSS/Sass. A JSON file whose top level is an object is split per key (dependencies.react, scripts.build), so two agents adding different keys to package.json never clash. Other files are one whole-file symbol. Files on disk stay ordinary files, so editors, compilers and builds keep working.

A symbol is named file::qualified::name, for example src/auth.rs::Auth::login or package.json::scripts.dev.

Draft → stitch → weave#

StageWhere it livesWho sees it
DraftOn your device, per person or agent (.weave/drafts/)Only you. Never sent anywhere.
StitchSealed and sent to the server with an intent and a whyThe server checks it
WeavedPart of the workstream; the head movedEveryone on the workstream

Weaved means deployable for that workstream. Heads only move forward.

Owners, claims and suggestions#

Anyone can change an unclaimed symbol. To own something, claim it: weave claim src/auth.rs::login. A claim lasts for a lease (10 minutes by default) that weave watcher renews. When someone else changes a symbol you own, their change does not overwrite yours: it arrives as a suggestion you accept or reject. Ownership routes work; it never blocks it.

Clashes never block#

  • A stale copy (text exactly as Weave last wrote it) loses quietly to the newer head.
  • A real edit that clashes with newer work by someone else goes to that person as a suggestion. The rest of your stitch weaves. Both of you get a message.
  • If they reject it, a resolution point keeps both versions, side by side, until someone picks one.

Workstreams and the chain#

Workstreams form a chain, for example main ← preprod ← dev. Stitches move up one at a time by promotion and come down by inheritance. When the same symbol changed differently on both sides, Weave opens a change request showing both versions with their intent and why. See Workstreams.

Decisions#

A decision record says why code is the way it is: a title, the why, rejected alternatives and constraints, anchored to symbols. Records travel with the code through drafts, stitches, promotion and inheritance. See Decisions & history.

Agents#

An AI agent is a first-class author. Each agent has its own session (its own draft and active workstream, even in a shared checkout), ideally its own agent token, and optionally a path scope that limits what it may change. See For AI agents.

Glossary#

TermMeaning
workstreamA line of work (main, preprod, dev, feature/x). Has a parent (except main) and settings for ownership and inheritance.
headThe current weaved state of a workstream (a 64-hex state id).
draftYour private, in-progress changes on this device, by symbol. Never sent.
stitchA sealed change with an intent (what) and an optional why.
weave / weavedThe weave check accepted a stitch; the workstream head moved.
weave checkThe server's check of a stitch: base, ownership, clashes with newer work, that every operation applies and every file still parses.
symbolA named definition: function, method, class, variable, import, JSON key. Named file::qualified::name.
claimTaking ownership of files or symbols for a while.
ownerThe holder of the most specific live claim on a symbol. Only the owner changes it directly.
leaseHow long a claim lasts unless renewed (server default 10 minutes).
part labelA claim's feature text of the form part:<id>, shown by weave owners. Builders use it to say which part of a build owns a file.
suggestionA change to a symbol someone else owns, or one that clashes with their newer work; it goes to them to accept or reject.
clashA change based on a version someone else has replaced since (lost_update), or one that puts back what they replaced (reverts_newer_work). Routed as a suggestion, never refused.
resolution pointBoth versions kept after the owner rejects a clash suggestion: a renamed copy <name>__rp_<tag> in the code, or the author's text kept on the point. Resolved with weave resolve.
change requestTwo versions of one symbol side by side (from two workstreams, a promotion or a revert), each with author, intent and why, for someone to choose.
promoteSubmit a weaved stitch to another workstream, usually the parent, through its weave check.
inheritA child workstream receiving its parent's weaves (auto at once, manual on weave refresh).
integrateBuild a private integration draft to resolve change requests, then stitch the result.
carry forwardMove your draft onto a newer head. Automatic, because changes are by symbol.
held editAn edit on disk you have not added that clashes with a newer version; weave sync leaves it on disk and lists it.
sessionOne person's or agent's identity in a checkout: its own draft, active workstream and lock (--agent <name>).
decision record.weave/decisions/D-xxxx.toml: a decision (title, why, constraints, rejected alternatives) anchored to symbols.
noticeA dependency notice: a signature changed, a name now exists or was removed, in code you use.
operation logThe append-only, hash-chained record of every action (weave log).
agent tokenA short-lived (wva_…, ≤ 24 h) token for a registered agent, acting for the person who issued it.
path scopeGlob patterns an agent may write to; writes outside get 403 path_out_of_scope.
lawful purgeRemoving content (a leaked secret, personal data) from all history without breaking any hash. Needs two admins.