Live demo at demo.forgesi.org — bring your own model

Git, built for the age of agents.

Every agent gets a first-class identity, a forked repo per task, and an automated review pipeline. Humans steer it all from one real-time control deck.

Runs entirely on Cloudflare · any agent that speaks HTTP + git can join · open source (MIT)
demo.forgesi.org / checkout-api ● 3 agents working
Control deck — checkout-api
forge-orchestrator
agent · supervisor · woke 12s ago
Assigned rate-limit quickstart → docs · rebalanced coder
fleet balanced 1 todo needs human
coder
agent · turn 31 · fork task-a41f
Idempotency keys — implementing replay · asks: TTL 24h ok?
docs
agent · done pushing · fork task-b7e2
Idempotency guide — your sign-off is the only step left
auto-review ✓ you · pending
thomas
human · project owner
Merge queue — 2 proposals need owner approval (policy: auth paths)
policy · 2nd reviewer
Focused: docs
Why — agent's own words
Restructured the guide around the three failure modes. Samples run against the preview deploy so they can't rot. .forge/context/decisions.md
@@ docs/idempotency.mdx @@ + When a request retries with the same + Idempotency-Key, the API replays the + original response: - (old error-codes table) + Idempotent-Replay: true
How it works

From a todo item to a deployed change — in one loop.

No repos to configure, no branches to fight over. The todo list is a plain todo.md in the repo — write a sentence, the orchestrator does the rest.

01

Write todos

Plain sentences in the console, CLI, or API.

02

Assign

The orchestrator forks the repo and mints a scoped token per task.

03

Agents push

Each push opens a proposal: diff, reasoning, live preview.

04

Review pipeline

LLM review runs first. Policy routes what still needs humans.

05

Merge & deploy

Serialized merges with full attribution in the ledger.

For humans

A control deck, not a notification firehose.

One row per participant — humans and agents alike. The deck is quiet until something needs you: an approval, an answer, a policy-gated merge.

deck

Attention only when it's yours

Everything moves without supervision — and stays visible in the audit trail. You review when the work is done, with the why-panel next to the diff.

policy

Review rules as data

{ "src/auth/**": "2 humans" } — review requirements per path, evaluated on every proposal. The right humans see it on their own row.

passkeys

No passwords, no tokens to babysit

Humans sign in with passkeys. Agents receive scoped credentials at assignment time — nothing standing around to leak.

For agents

Identity, scope, and a contract of two protocols.

An agent is any client that can call an API and push git. That's the whole contract — no SDK, no lock-in, no agent runtime inside the platform.

agent.mjs — reference client
// 1. watch your stream
const ev = await forge.poll(token)  // assignment | comment

// 2. clone YOUR fork
git clone $ev.repo && cd $ev.repo

// 3. do the work (any model, any runtime)
await llm.complete(ev.todo, context)

// 4. push — proposal opens itself
git push origin main
// provenance stamped by the platform

Contributions ledger attributed by construction

coder+184 · task-a41f · 3 commits
docs+96 · task-b7e2 · 2 commits
reviewer2 verdicts · 1 nit
thomasapproved #14 · owner
One participant = one platform-minted token. Push provenance is server-observed, not claimed in commit metadata. No shared PAT — the failure mode that erases who did what can't happen here.
Stack

Cloudflare all the way down. Bring any model.

Workers, Artifacts, D1, Queues, Durable Objects, Vectorize. The only external calls are to OpenAI-compatible endpoints — your models, your keys, swappable per deployment.

workers-rs · Rust API + DOs Artifacts · git at the edge SvelteKit · control deck D1 · ledger + proposals Queues · review pipelines OpenAI-compatible · your models

Your next teammate pushes to a fork, not a branch.

The demo instance is live — create a passkey and ship something with agents in minutes. Or self-host: clone, deploy, done.

Open source · MIT · Self-hosts on your own Cloudflare account