Red squiggles for teams of coding agents.
Weft checks every agent edit against what the other agents just changed, and tells the agent before the conflict exists.
Hooks into
- Claude Code
- Codex
- OpenCode
- Hermes
- Cursor CLI and Gemini CLI, tested offline
Merge time is too late.
Git coordinates people when they open a pull request. Agents in parallel worktrees break each other's assumptions every few minutes. By the time the PR shows a conflict, an agent has spent an hour building on a function signature that no longer exists.
One ordered log per repo. The verdict goes back to the agent.
-
Hook
An adapter catches each Edit, Write or apply_patch call before it touches disk, and records the symbols it reads and writes.
-
Sequence
One Durable Object per repo orders every edit and checks it against everything that landed since the agent's base, down to the symbol.
-
Answer
Allow, advise or deny. A denied agent gets a compiler-style diagnostic in its tool result, and exactly one side is told to adapt.
The agent reads the diagnostic. You don't have to.
A real tool result from Codex, mid-run. The edit never reached disk. Codex read the diff, passed the new option, retried, and was accepted.
[weft] Edit to src/api/account.ts, test/signup.test.ts blocked: it conflicts with another agent's change
(Weft edit-time coordination, log #9).
[weft error] stale_assumption src/api/account.ts:17:25: You use src/auth/session.ts#createSession, whose
signature changed in #3 by claude-a after your base #1. (caused by claude-a, task T-1, event #3).
Suggestion: Read the new src/auth/session.ts#createSession (event #3) and update this call site, or
negotiate with claude-a.
↳ event #3 by claude-a changed src/auth/session.ts (their change is not in your checkout yet):
@@ -1,19 +1,32 @@
-export function createSession(userId: string): Session {
+export function createSession(userId: string, opts: SessionOptions): Session {
Humans get a feed, not a merge queue.
Built by agents, under Weft.
Weft coordinated the agents that wrote it. In its first eleven hours, its own log recorded:
- events in the log
- 627
- edits from three agent profiles
- 460
- landings, zero reverts
- 18
- "wait for the other agent" warnings
- 59
Repo weft, 2026-10-04, 03:24 to 14:40 UTC. Source: dogfood-stats.json.
An open protocol, not a walled garden.
Every agent runtime has hooks, and none of them are interoperable. Weft runs on two small specs anyone can implement: Agent Hooks Core for the hook semantics, and WCP for coordination on top.
WCP v0.1 is a draft and Weft is a research prototype. The analyzer understands TypeScript today.
- Agent Hooks Core v0.1Capability levels L0 to L3, lifecycle events, the allow/advise/deny envelope.
- Weft Coordination ProtocolThe ordered log, symbol claims, diagnostics and landings.
- Conformance suiteRun any hook command through the fixtures and see which level it verifies.
- Integration guideWire Weft into the agent setup you already run.
Runs on Cloudflare, end to end.
Durable Objects
One authoritative, ordered log and submit queue per repo.
Artifacts
The trunk, plus an isolated fork for every candidate change.
Queues and Workflows
Durable, retryable processing, selection, landing and auto-revert.
Containers
Git, builds and tests in a sandbox, with credentials kept outside.
D1 and R2
An index of tasks and changes, and the evidence behind each one.
Two agents, one repo, five minutes.
Clone, start the local gateway, and watch two Claude Code worktrees coordinate. No Cloudflare account, API token or model key needed.
pnpm install --frozen-lockfile
node scripts/local-quickstart.mjs --demo