Documentation

What Oak is

Oak is a purpose-built VCS designed for agent-driven development. It's the thing your coding agent (Claude Code, Codex, Cursor, etc.) can use to store code and assets.

Oak doesn't run agents. Bring your own. What Oak gives you is the storage and collaboration layer underneath: branch-per-session workflows and lazy mounts for large repos.

Today's release ships macOS on Apple Silicon and Linux. Windows builds will come eventually.

Organizations

An organization is the owner of repositories. Every account gets a personal organization (named after your username); you can also create shared organizations for teams and companies.

The organization is also the deduplication boundary for storage. Blobs and chunks are shared across every repo within the same organization, so a binary asset committed to two repos in the same org is stored once. Storage and bandwidth quotas are accounted at the organization level.

Repository URLs are <organization>/<repo> โ€” for example oakspace/oak.

Branches and descriptions

The unit of work in Oak is a branch, not a commit. oak init and oak clone auto-create a personal feature branch off main โ€” you never work directly on main locally. This matches how agents work: one branch per session, merged when the session is done.

Commits on feature branches have no commit message. Instead, the branch description is the source of truth for what a change introduces. Create a branch with oak switch -c <name> and set its description with oak desc "...".

Merging a feature branch into main produces a single squash commit whose message is the branch description. The squash commit retains a pointer to the original branch tip, so the pre-squash history stays reachable for tooling. Direct pushes to main are refused.

Lazy mounts

oak mount lets a working tree live on top of a remote repository without a full local clone. Files materialize lazily through macFUSE as you touch them, so you can work against a multi-gigabyte monorepo with seconds-to-first-edit instead of waiting for a full pull.

Edits go into a virtual branch backed by a local mount cache. The overlay (modified, deleted, and renamed paths) is the active commit โ€” the logical commit you're amending as you edit. oak commit finalizes that active commit onto the virtual branch; oak push sends it upstream.

Inside a mounted directory, top-level commands (oak status, oak commit, oak log, oak diff) automatically route to the mount-aware code path, so mounted and locally-cloned repos feel identical at the command level.

Mount requires the CLI built with --features mount plus macFUSE installed (brew install macfuse).

Git import and export

oak clone <gitrepo> is the import path from git into Oak. When the argument looks like a git remote URL, Oak shells out to git clone, initializes an Oak repository in the destination directory, then replays the cloned git history into Oak on main. By default the destination directory is derived from the git repo name; pass a destination path as the second argument to choose it yourself.

The CLI's oak export <dest> command is the local counterpart: replay your Oak history into a fresh git repo on disk. This is the documented escape hatch โ€” your data is never trapped in Oak's format.

oak clone <gitrepo> replays git history into Oak, while oak export replays Oak history back into git. Push code with oak push.

Data portability

The trust story is the export path above: any Oak repo can be replayed into a fully-functional git repo at any time with oak export.

If you want to leave, you can โ€” with full history intact.