Everything everywhere all at once
A git platform for monorepos, built on Cloudflare, where many agents work at once.
The picture below the headline is an example monorepo drawn as one root system. Each knot is a part of it: a meta-layer folder such as decisions/ or research/plans/, a project such as projects/workspaces, or a worktree such as worktrees/main. It shows three changes in turn, in decisions/, in worktrees/decision-chips and in worktrees/main, and lights the parts each one reaches. Each label is a button that makes a change there.
Fig. 2The shape of Pando
-
Built on Cloudflare
Every part runs on Cloudflare's developer platform.
- Workers®
- the git door, the API, merges and webhooks
- Artifacts
- every repo, its branches and its history
- Durable Objects™
- the meta layer's live saves, and each monorepo's state
- R2
- large files and images
The mount engine is ArtifactFS (Cloudflare, Apache 2.0). The Mac mount, Pando.app, starts from Oak's open-source FSKit extension and follows its approach of an extension in front of a daemon (Oakspace Inc., Apache 2.0). People review in Plannotator.
-
One monorepo per project, shared live
It is just your folders. The one rule: each code repo lives under
projects/. Everything else is yours.$ pando clone acme~/acme/AGENTS.mdartifacts/decisions/0007-merge-commits.mddocs/research/wiki/projects/api/projects/web/worktrees/main/worktrees/agent-1/Claude Codeworktrees/agent-2/Codex
- Your artifacts, docs, wiki, and decision recordsPlain files, live on every machine. This is the meta layer: whatever you keep outside
projects/. - Your codeEach folder in
projects/is its own repo, with a protected main. - Your agentsOne worktree per agent, mounted next to the storage. It appears at once.
Pando adapts to any monorepo layout.
projects/is only the default; one line in.pando/pando.tomlpoints it at yours. - Your artifacts, docs, wiki, and decision recordsPlain files, live on every machine. This is the meta layer: whatever you keep outside
-
Many (remote) agents at once
Everyone works in the same filesystem: the same folders at the same paths on your laptop, a teammate's, and every agent's cloud sandbox.
-
Review built for agents and people
A review is the branch diff (the three-dot diff, as on GitHub) and the branch's commits, with their messages and who made them. Agents read it as JSON; people read it in Plannotator.
$ pando diff decision-chips --json { "branch": "decision-chips", "base": "c03d41e", "head": "9f1c2ab", "files": [ { "path": "apps/web/src/DecisionChip.tsx", "status": "added", "additions": 84, "deletions": 0 }, { "path": "apps/web/src/Card.tsx", "status": "modified", "additions": 12, "deletions": 3 } ], "commits": [ { "id": "9f1c2ab", "message": "Show the linked decision on each card", "trailers": { "Pando-Agent": "agent-1", "Pando-Worktree": "projects/workspaces/worktrees/decision-chips", "Pando-Machine": "sandbox-1" } } ] } $ pando review decision-chips # opens it in Plannotator
-
A person merges
A person's Merge is the approval, and the branch's review page is the pull request. Agents comment but never merge. Merge commits keep every commit and message on main, and main never takes a direct push.
# agent-1, in its worktree $ git push origin HEAD:main refused: main is protected; push a branch # you, after the review $ pando merge decision-chips main is now 3e7a91c: a merge commit by you, with all 4 commits
-
Checks run elsewhere
Every push sends a signed webhook. Buildkite, or any CI, runs the checks and posts the status back. Merge waits for green; anyone who may merge can force it.
# each push: a signed POST to your CI X-Pando-Event: push X-Pando-Signature-256: sha256=<HMAC of the body> # the CI posts its status back POST /v1/repos/{repo}/commits/4be0c17/statuses { "context": "ci", "state": "failure" } $ pando merge search-index refused: required check "ci" is failing on 4be0c17 $ pando merge search-index --force
-
Nothing is lost
Two saves of one file keep both versions. Every save to the meta layer is history. Large files and images go to R2.
# two machines saved decisions/HISTORY.md at once $ ls decisions/ HISTORY.md HISTORY.conflict-local-<timestamp>.md $ pando resolve decisions/HISTORY.md $ pando history decisions/HISTORY.md $ pando restore decisions/HISTORY.md --to 10:42
Bring your monorepo.
curl -fsSL https://gitpando.com/install | sh
pando init
The first line installs pando on a Mac or Linux, and pando login signs you in. Run pando init in the folder you have. With no config file, every folder under projects/ becomes a repo with worktrees/ inside, and everything else is the meta layer.
The app is at app.gitpando.com, and the docs at docs.gitpando.com.
A worktree is a git clone on a Mac and on Linux; Cloudflare-run agents mount theirs next to the storage. Later: Windows, a laptop mount that fetches in bulk, and Git LFS for code repos.