Top
Best
New

Posted by zdgeier 1 day ago

Show HN: Oak – Git alternative designed for agents(oak.space)
Oak is a version control system I've been working on designed for agents (https://oak.space). It improves the speed and context your agents need when working on serious projects. With virtual mounts, agents locally and in the cloud no longer need a full copy of a repo to get working. You can work on many tasks in parallel without needing to download everything or fight worktrees. Version control shouldn't waste you or your agents time. It should be fast, creative and fun to make things with agents.

Oak is still early in development. There's no Windows build and missing plenty of features (no CI, no issues, no comments). We still use GitHub Actions for building Oak now, but we've been fully bootstrapped on Oak with no Git backup for several months: https://oak.space/oak/oak.

Blog post: https://oak.space/blog#git-is-forever

Docs: https://oak.space/docs

210 points | 183 commentspage 3
bwhiting2356 1 day ago|
> without needing to download everything

how does your agent run tests or click around the UI to verify changes if it doesn't have the full code?

zdgeier 1 day ago|
Good question, the files are grabbed on demand from the server so the agent can fetch everything it needs to run tests, a dev server, or anything it does normally. Now this might be slightly slower in some cases where the history is short, but the bigger the repo and files the more this makes sense. So the full code is available and buildable, just over the network instead of locally.

Another thing, inside these mounts build artifacts and directories like node_modules can act kinda weird, so we just have some extra context in the AGENTS.md to host these in a different location from the mount. or agents usually figure this out on their own in my experience.

achandlerwhite 1 day ago||
Grammar nitpick: "anyways" should almost awlays be "anyway"
isodude 1 day ago||
"awlays" should almost always be "always"
applfanboysbgon 1 day ago||
https://www.merriam-webster.com/dictionary/anyways
weinzierl 1 day ago||
"Git is forever"

Many things were forever until they suddenly died, but I think this is especially true for git.

I'm not saying this as a git hater, quite to the contrary. I think git is great. I also think git is an ill-fit for the majority of modern commercial software projects and there will be a breaking point where companies realize that and move on.

Banditoz 1 day ago||
What is git not suited for in modern development? I haven't found any reasons.
jayd16 1 day ago|||
Git is great but if you really haven't found any reasons then you haven't looked at all. From large files to sub modules to hook permissions and file permissions... The list goes on and on about what where git falls short.

There's plenty of workarounds too, but that's what they are. Workarounds.

gchamonlive 1 day ago||
Do you know if Jujutsu addresses these issues?
hn92726819 1 day ago|||
jj does not have large file or submodule support, but it does intend to in the future (you can read their design docs). Right now it's git compatible, so I'm not sure how 'permissions' would be stored compatibly, or what that means. I'm guessing ownership and xattrs
steveklabnik 1 day ago||||
With the git backend, jj inherits git's problems. So right now, it does not, at least directly.

With other backends, it inherits their problems. But also their solutions :) So with those backends, it could!

dgellow 1 day ago||||
Game development, with very large assets. Also, git is pretty terrible with non-text files.
driggs 1 day ago|||
Seconding this for geospatial dev projects, which may have absolutely massive binary data files.
Exoristos 1 day ago|||
You're diffing very large assets?
dgellow 1 day ago||
Is that surprising? It’s pretty common in anything game dev related, that’s why perforce is still in use, despite its horrible UX
fusslo 1 day ago||||
1. rewriting history

2. rebase based merge strategies - our team has 50+ devs across three continents merging into monorepo with teams maintaining submodules. By the time your merge request passes CI it has to be rebased. People are literally holding off on reviewing merge requests to make sure their own changes get in first

3. permissions for subdirectories/assets. some necessary code/modules are highly regulated and company secrets. Git cant lock certain directories based on who clones the repo

4. Agentic coding - if you don't commit then your changeset after each request is lost. JJ solves this. You could just say to commit after every request then squash the commits. But, I think this is an ergonomic argument

5. Maybe it's just my experience, but git-lfs is pretty annoying to manage on large teams and changing files to/from lfs. often easier to just delete and clone again

6. git blame on non-meaninful changes. Running a code linter to add/remove whitespace makes git blame return who ran the linter rather than who wrote the code

7. self-reported identity. every time we get new laptops (because they buy the cheapest POS) devs forget what they set for 'username'. so it ends up being 3-4 different identities with the same email

Those are just my complaints lately

ef2k 1 day ago|||
to be fair, #2 exists because monorepos and submodules are somewhat antithetical concepts. A monorepo is supposed tobe the single source of truth for the codebase, while submodules are pointers to external repos with their own history. That alone will increase the source of churn for teams that are constantly merging.
skydhash 1 day ago|||
1. git rebase and last commit amending.

2. That has the smells of a wrong code architecture. If change request leads to unneeded code conflicts, you need to rework your code architecture.

3. That’s valid, but why not create libraries out of those modules?

4. Valid. But I think the issue is on the agent side. Git has already all the features to make those happen, it’s the agent that is not integrated with git.

5…

6. Either than sweeping changes (adding a formatter, changing config,…) There’s no need for formatting changes to be its own commit in the main repo. I usually add a check to prevent inconsistent formatting.

7. The git history has the previous username and email recorded alongside each commit.

WolfeReader 1 day ago||||
1. Ease of use. Other VCS have more consistent command line interfaces; Git's interface has to be studied. In practice, people end up using GUIs with missing functionality and then end up searching for help, and a lot of real experts come to rely on powerful wrappers like Magit, LazyGit, or JJ.

(Compare to Mercurial, Fossil or Git; those systems have consistent and usable interfaces. There's much less demand for wrappers or LLM tooling since they're easy to use already.)

2. Preservation of history. Two common commands - git rebate and git push -f - cause commit history to be lost, sometimes permanently. ("Just be careful" and "Just don't use those commands" are useful pieces of advice for an individual, and virtually impossible to enforce over groups.)

3. Conflict resolution. Git forces the user to resolve conflicts ASAP so we often lose information about A. What the conflict exactly was, and B. How the individual resolved it. Most VCS have this issue; JJ allows you to commit the conflict and solve it in a separate commit, which is nice.

skydhash 1 day ago||
1. Usually people have no mental model about versioning other than “draft-1, draft-final, final, final2, final-final,…’. Because they don’t care about requirements and design decisions documentation, auditing changes, and release management. Git provides a set of tools for solving those. Wrappers are for when you have your own workflow for those needs and have a good understanding of git.

2. https://git-scm.com/docs/git-reflog

It’s very hard to loose data in git.

3. The goal of writing code is to have working software. Conflict messages are like compiler warnings, better have them than getting errors slipping by unnoticed. If A conflict with B, the root cause is often a design conflict, which means that the design of the software is inconsistent.

The conflict only matters as long as it’s not been solved. For each commit, the design of the software need to be consistent, and the succession of commit describe the evolution of the design. A is not lost, B is not lost in the case of a merge and may stay for a long time when rebasing. C which solves the difference between A and B (and may replace B) is also consistent. I don’t care about inconsistency.

z3ugma 1 day ago|||
Armin and Ben did a nice deepdive on Mercurial vs Git and why hg should have won in a recent episode of their "nerds-chatting" style podcast: https://www.youtube.com/watch?v=JM1sIVIZYRg&t=3813s
rogerrogerr 1 day ago|||
How’s it an ill fit? Outside of large monorepo things, which are not the majority of modern commercial software projects, the main complaint I hear is the learning curve. But LLMs should be addressing that fairly well.
PunchyHamster 1 day ago||
"Majority" is massive stretch. There are 2 main pain points:

* monorepo megarepos - but you kinda need system built from scratch that sacrifices a lot in other places to handle that in the first place * media asset heavy repositories - again, different paradigm. Stuff that make Git great like full local history just become impossible to do sensibly when amount of changes per day is hundreds of megabytes.

Most projects don't git that. And for majority git + LFS is enough.

GardenLetter27 15 hours ago||
How is downloading stuff remotely the bottleneck here?
zdgeier 5 hours ago|
Agents in the cloud (and locally) need to have a full repo, even if they only need a small percentage of a repo to make a change. You can also imagine if changes are being made in the cloud by multiple agents, each one of these agents need a shallow clone at the very least. If you're spinning up many agents in the cloud this becomes a bottleneck. So not really that downloading things is a bottleneck, it's that agents need to download way less to make the same decisions and changes.
harshreality 1 day ago||
From the github repo readme:

> This repo was written almost entirely using AI with human oversight. If you see anything that needs fixed or would like to contribute, please email ... or reach out on Discord

Why not just provide an email address that's delivered directly to the agents you have developing Oak?

I didn't delve into the benchmark repo to understand what your loop is measuring. Why would an agent (without fine tuning or oak-specific context) be faster with oak than it is with git or jj?

fellowmartian 1 day ago||
“Why not just provide an email address that's delivered directly to the agents you have developing Oak?” Genuinely can’t tell if you’re joking or not.
zdgeier 1 day ago||
> Why would an agent (without fine tuning or oak-specific context) be faster with oak than it is with git or jj?

A large part comes from mounts. Being able to use FSKit/FUSE to make a change to a repo rather than doing a partial/full clone. A smaller part comes from having optimized context (json output) that agents are able to parse better with less tokens.

vova_hn2 1 day ago||
I cannot imagine git being a performance bottleneck in agentic workflow.

> You can work on many tasks in parallel without needing to download everything or fight worktrees.

What does "download everything" even mean? Why would you "fight worktrees"?

zdgeier 1 day ago||
"download everything" means that you don't have to do a full or partial clone of the repo to make a change. You can imagine agents running in the cloud need to spin up and access the repo for every task, this can be slow for large repos (also small repos with large files). Also locally, worktrees can be a pain to manage with conflicts, confusing branching, and you can't check out the same branch multiple times. But I do agree that we're probably still pretty early on in the agentic adoption that many users using agents in git-like ways will not see much performance improvement.
ilc 1 day ago||
I could, I hit it in some situations. But I'm running some fair size repos where I do multi-worktree work.

That said, it hasn't been enough of an issue for me to want to fix.

stealthy_ 12 hours ago||
is it like re-gent.dev ? would love to understand the difference
hanneshdc 1 day ago||
I actually like this.

I thought I wouldn’t because it’s just another git - but git worktrees are a PITA.

Can I suggest though to focus the readme on the lighting fast checkout for multi agent loads? That seems to be the big selling point and is the real win over git.

I think other commenters here are missing the point - it’s not “for agents” in that the API is somehow agent friendly. Of course git being omnipresent in the training data gives it a one-up. It’s “for agents” in that it aligns with a multi-checkout workflow better than git does.

zdgeier 1 day ago|
Great point, the readme for this repo is not great right now and we have a bunch to improve on that people have pointed out. Thanks!
blurbleblurble 1 day ago||
For concurrency reasons Pijul is an excellent git replacement for agents in my experience.
robby1110 1 day ago|
Certainly an interesting project although I am wondering what makes the benefits mentioned agent specific? You have mentioned performance improvements which is great but in that case would it not just be a better vc than git in general? what perks only work with agents that wouldn't work with individuals?
zdgeier 1 day ago|
Thank you! The bet we're making is that agents will need to work on tasks much faster and with more parallelism than humans do with Git right now so these performance metrics will matter more. Git is awesome for human work so I'm not sure these metrics really matter than much to people. But also for agents, worktrees are not the best (can't work on the same branch in multiple places) and also the speed at which branches/PRs are created, need to be merged, etc. will need to be way faster and simpler since keeping up-to-date with how fast things are being modified is really important.
More comments...