All posts

Version control for the files that don't fit

If you've worked in a studio, you've used Perforce. One depot with the code and the art in it, changelists that land as a single unit, locks so two people can't both burn a day inside a file that was never going to merge. It took game production seriously in a way nothing else did, which is why studios still run it decades later.

Indies mostly make do with git and Git LFS instead. That holds up nicely until the art shows up: pointer files, a second store with its own quota and its own bad days, and every revision of a 200 MB PSD kept whole.

Grixel keeps the first shape and fixes the second problem. One server with the whole project on it: code, art, audio, CAD models, training data. Every version of every file kept, and only the parts that changed stored.

Files get split into chunks by their content rather than by position, so re-submitting a 64 MB PSD after repainting one layer stores under three megabytes instead of another sixty-four. Neither of the other two does that. Git LFS keeps every version whole, and Perforce deltas text but stores each binary revision whole as well, compressed but whole.

Locking works the way you'd hope if Perforce is your muscle memory. grixel edit claims a file, the next person to try gets told who's holding it, and you can mark whole file types as lockable so nobody has to remember to do it.

You don't have to take all of it, either. There's no clone step. You check out the paths you want and leave the rest on the server.

grixel checkout -exclude 'art/**' companies/acme/games/seasonal ws

That ref holds a 64 MB key-art file. The working copy is twenty kilobytes. Submits are always deltas, so the files you didn't sync get carried forward untouched, and sync -add-path widens the view later when you do want the art.

The AI side is where it stops resembling either of them.

Permissions are per path, and a path you can't read isn't refused, it's absent. Not in listings, not in search, not echoed back at you in an error. Asking for it by name looks exactly like asking for something that never existed. Git can't offer that at all: a clone hands over the whole repository and its history, so once it's on a contractor's laptop the permissions conversation is over.

Assistants read the depot through seventeen read-only tools over MCP, filtered by the same rules as the person they're working for. Writes don't go through that path at all. They go through the CLI, where locks, permissions and review gates still apply. We wrote that down as an invariant rather than a default, so nobody quietly adds a write tool later.

Every change records who or what made it, down to which files:

grixel submit -m "tune spawn rates" --tool claude-code --model opus-4.8 --role authored

grixel blame will then show you which lines an agent wrote and which a person did. You can capture the assistant's session alongside the commit as well, which answers the question a review asks second, once it knows which tool made a change: what was that tool actually looking at when it did?

Grixel is pre-release and early access is open. Run it on hardware you own, or we'll host it and you can take the whole depot back whenever you fancy. More at grixel.dev.