ModGet early access
open source · runs anywhere

An operating system
for agents.

Agents went from one model call, to subagents, to swarms. Computing took the same path, from threads to cores to clusters, and swarms need what clusters needed: shared state, scheduling, identity and access. Plus one thing clusters never had: the people they work with. Mod is that layer. It is open source, and it runs wherever your agents do: your Mac, a VM or any cloud.

Read the docs
the os, mapped

Everything an OS gives a program,
given to an agent.

kernel

The log

Every message, tool call and edit is an event on an append-only log. The window, the CLI, the phone and every agent read the same one.

filesystem

Two realms

Documents merge per character and live everywhere. Code merges per commit and lives in a checkout. A path belongs to exactly one.

processes

Sessions

A session is a thread an agent runs in. Its log is the unit you read, share, pause and join, and the unit of access.

scheduler

Workers

A tool call is written to the log and claimed by a worker, on your Mac, in a VM or in the cloud. Where it runs is never part of the address.

programs

Apps

An app is a view over typed records, installed once in a World. Agents use it by writing its records, the same way people do.

system calls

Tools

read_document, patch_document, create_task, comment, set_view. One set of calls for every agent, whichever model is behind it.

drivers

Harnesses

Claude Code, Codex and Cursor plug in as they are. Mod drives them and writes what they do to the log.

users

Worlds and projects

A World holds a person's projects. Share a project or one session, and the people and agents in it see the same work.

display

Spaces

The panes a person is looking at. An agent can read the view and open what the work needs, so you watch it happen.

the loop

Thinks, acts, remembers,
and gets better.

One task touches a model, tools, files, memory and review in under a minute. In Mod those run on one log, so nothing drops between them, including the people.

01

Thinks

Any model, through the agent you already use. The model is the part you swap most, so nothing is built around one.

harnesses · routing
02

Acts

Tool calls are written to the log, then claimed and run by a worker wherever the work lives.

tools · workers
03

Remembers

Documents, tasks and every session's log. The memory is the same work people read and edit.

the log · documents
04

Improves

Every session is already a trace, and every correction a person makes is on it. That is what an agent learns from.

evals · skills · macros
Every session is already a trace.

There is no tracing to wire up. Read any session off the log, grade it, build a dataset from it and replay a fix before it ships.

People are the signal.

An answered question, a rejected edit, a comment on the line the agent got wrong. Each one is on the log, with who made it and what it was about.

A correction becomes a skill.

Fix the agent once in a thread, save it as a skill, and every session in your World reads it the next time the task comes up.

A habit becomes a tool.soon

A flow your agent repeats every morning is saved as one tool call. It runs in seconds, with no model in it until something needs judgement.

the filesystem

Disk is a projection,
never a peer.

Most agent tools pick one storage model and force everything into it. Mod keeps two, because a document and a codebase merge differently, and says which one every path is on.

docrealm
merges
Per character. You and three agents can type in one file at once.
lives
On the log, synced to every device, the web and your phone.
history
Every change, by who made it, person or agent.
holds
Documents, notes, plans, app records, an app's own source.
coderealm
merges
Per commit, because a build runs against it.
lives
In git worktrees, on the machine that holds them. Several per project, one per branch.
history
Git's, unchanged. A session works in one worktree.
holds
Repositories and plain folders, added as project sources.
# one project, both realms
spring-launch/
├─ launch-plan.md          doc  · on every device
├─ notes/launch-sync.md    doc  · written during the call
├─ apps/launch-plan        doc  · typed records
├─ mod-monorepo @ main     code · worktree on Nassar's Mac
├─ mod-monorepo @ reset    code · worktree in a VM
└─ subduction              code · second source
// one address for both. It never names a host.
type Realm = 'doc' | 'code'

interface ModRef {
  realm: Realm
  path: string   // project-relative, or repo-relative
  at?: string    // code only: a branch or commit
}

Every crossing is a command. Moving files between the realms, checking out, saving to disk: each has a direction, and a save is refused before it overwrites bytes you did not see. Nothing reconciles in the background.

2 realmsA document and a codebase, each merged the way it should be.
1 addressA reference names a realm and a path. Your Mac, a VM or the cloud is never in it.
0 background syncsBetween the realms, only commands you ran. That rule came from losing work to the alternative.
get started

A few commands
and you are on the log.

# start a session in a project and give it work
$ mod-next session create <projectId> "reset expiry"
$ mod-next message send <sessionId> "Links should expire after an hour."

# the agent asks when it needs you; answer from anywhere
$ mod-next session asking <sessionId>
$ mod-next session answer <sessionId> <interactionId> expiry=1h
# documents are on the log: written here, open everywhere
$ mod-next docs create <projectId> notes/launch.md --content "# Launch"
$ mod-next docs list <projectId>

# a typed record is a document an app draws
$ mod-next docs create <projectId> plan/reset-screen \
    --dataType launchplan --data '{"work":"Reset screen v3","owner":"Sam"}'
# give a project its repository; sessions work in its worktrees
$ mod-next code adopt <projectId> --repo . --base main

# open a session's code on this machine, on its own branch
$ mod-next code open <projectId> <sessionId> --fork
# an app is a package: a manifest, a build, one module
$ mod-next app init launch-plan --dataType launchplan

// package.json
"mod": {
  "name": "Launch plan",
  "dataType": "launchplan",
  "reads": ["tasks"], "writes": ["tasks"],
  "entry": "dist/app.js"
}

# build, publish, and install it for every project in your World
$ mod-next app push <projectId> --world
mod-next is the command line. The window, the phone and your agents use the same calls.Read the docs →
bring your agent

Keep the agent you use.
Give it the OS.

Mod drives the harness already on your machine and gives it the same tools, files and people every other agent in the project has.

Claude Code Codex Cursor your own agents as packages

Build on
the log.

Prompt copied. Paste it into Claude Code or Codex.