Skip to main content

Managed Unified Tree — version management for AI agents

Project description

Mut Logo

Mut

Mut is version control for context - built for multi-agent collaboration.

  • Centralized context — the server holds the single source of truth. All agents push to and pull from one place. No diverging copies, no conflicts.
  • Per-agent scopes — each agent has its own scope (e.g. Agent A on /src/, Agent B on /docs/). Agents collaborate on the same project, but each one only sees and writes the context it's permitted to access.

Old World vs New World

Old World (Git) New World (Mut)
For whom Humans AI Agents
Branches Decentralized — every branch is equal, no single truth Centralized — one source-of-truth branch, agents sync from it
Conflicts Surface on merge / push — require human resolution Auto-resolved by the server — push never fails
Access All developers see the full repo Each agent only sees the files within its scope

1. One Source of Truth, Not Scattered Branches

Old World (Git)

Two agents update the same customers.json — one collects from calls, the other from emails. Each works on its own branch. Which branch has the full list? Neither. The data splits, conflicts follow.

New World (Mut)

There's one context on the server. Both agents push to the same place. The server merges automatically. No branches to choose from, no data drift.

2. Per-Agent Scopes, Not Full Access

Old World (Git)

A company runs two agents on the same project: a customer-facing chatbot that reads product docs, and an internal BI agent that reads financial reports. Both get full repo access — the chatbot can see revenue numbers, the BI agent can overwrite customer content. Sensitive data leaks across boundaries that should never be crossed.

New World (Mut)

Each agent gets a scope. The chatbot reads /docs/, the BI agent reads /reports/. Same project, naturally isolated.

Quick Start

Architecture Overview

Mut has two components that run separately:

  • Server (mut-server) — the centralized source of truth. Hosts the project context and handles merges. Typically runs on a dedicated machine or cloud instance so all agents can reach it. Creates a .mut-server/ directory to store objects, scopes, and history.
  • Client (mut) — runs wherever your agent runs. Clones the context, commits changes locally, and pushes/pulls to/from the server. Creates a .mut/ directory inside your workspace to track local state.
┌─────────────┐           ┌─────────────────┐
│  Agent A    │  push →   │                 │
│  (client)   │  ← pull   │     Server      │
└─────────────┘           │  (source of     │
                          │   truth)        │
┌─────────────┐           │                 │
│  Agent B    │  push →   │                 │
│  (client)   │  ← pull   │                 │
└─────────────┘           └─────────────────┘

Example: Two OpenClaw Agents Sharing Context

You have two OpenClaw agents. Agent A handles customer conversations via WhatsApp. Agent B runs BI analysis on internal data. Each has its own workspace folder — that folder is its context.

Without Mut: Each OpenClaw workspace is a plain folder — no version history, no rollback. If an agent corrupts a file, it's gone. You can't see what all your agents are working on in one place. There's no way to govern or audit agent context across machines.

With Mut: You run mut-server on a VPS (or one of the machines) as the single source of truth. Every change is versioned — you can roll back anytime. All agent context is visible in one place. With scopes, Agent A can only write to /conversations/, Agent B can only write to /reports/. Version control, visibility, and governance — built in.

┌─────────────────┐           ┌─────────────────────┐
│  OpenClaw #1    │  push →   │  Server             │
│  workspace-1/   │  ← pull   │  ├── workspace-1/   │
│  ├── convos/    │           │  │   ├── convos/    │
│  └── reports/   │           │  │   └── reports/   │
│  └── .mut/      │           │  ├── workspace-2/   │
└─────────────────┘           │  │   ├── tasks/     │
                              │  │   └── logs/      │
┌─────────────────┐           │  └── .mut-server/   │
│  OpenClaw #2    │  push →   │                     │
│  workspace-2/   │  ← pull   │                     │
│  ├── tasks/     │           │                     │
│  └── logs/      │           │                     │
│  └── .mut/      │           │                     │
└─────────────────┘           └─────────────────────┘

Tip: For local development or testing, you can run both mut-server and mut on the same machine — the server just uses a local folder as its store.

1. Install

pip install mutai

This installs both mut (client) and mut-server (server) commands.

2. Setup (One-Time)

Server — on the machine that hosts the source of truth:

mut-server init ./my-project --name my-project
mut-server add-scope ./my-project --id scope-src --scope-path "/src/"
mut-server issue-credential ./my-project --scope scope-src --agent agent-1 --mode rw
# → prints a credential key, save it for the agent
mut-server serve ./my-project --port 9742

Client — on the machine where your agent runs:

There are two onboarding flows depending on where the content already lives.

A. The server already has the content — clone a fresh copy:

mut clone http://<server-host>:9742 --credential <CREDENTIAL>

B. The folder already exists locally — connect it to the server and upload:

cd /path/to/existing/folder
mut connect http://<server-host>:9742 --credential <CREDENTIAL>

mut connect is the local-first counterpart of mut clone: it runs init + link + commit + push in one shot, so an existing folder can be attached to an Access Point without manually wiring up the four steps. The server runs its standard three-way merge — nothing is overwritten silently.

Done. The agent now has a local copy of the context in my-project/.

3. Daily Usage

Sync local changes to server:

mut commit -m "update customer records"
mut push

Pull latest context from server (other agents' changes):

mut pull

Check what changed locally:

mut status

View history:

mut log

Roll back to a previous version:

mut checkout <snapshot-id>

Core concepts:

  • Content-addressable storage — files are stored by SHA-256 hash, identical content stored once
  • Merkle tree — directory structure is a hash tree; changing one file recomputes hashes up to the root
  • Scopes — each agent gets a path prefix (e.g. /src/) with read/write permissions
  • Server-side merge — when two agents modify the same scope, the server runs three-way merge (line-level, JSON key-level, then LWW fallback)
  • Grafting — after a push, the server replaces the agent's subtree in the full project tree and recomputes the root hash

Commands

Agent CLI (mut)

Command Description
mut clone <url> Clone from server (supports invite URLs)
mut connect <url> Attach an existing local folder to an Access Point (init + link + commit + push, in one step)
mut register <invite-url> Register with a server using an invite
mut status Show uncommitted changes
mut commit -m "msg" Snapshot the working directory
mut push Push commits to server
mut pull Pull changes from server
mut log Show commit history
mut diff <id1> <id2> Compare two snapshots
mut checkout <id> Restore to a previous snapshot
mut show <id>:<path> Show a file at a specific snapshot
mut tree <id> Show Merkle tree structure
mut stats Repository statistics

Server CLI (mut-server)

Command Description
mut-server init <path> Initialize a server repository
mut-server create-invite <path> Generate an invite URL for agents
mut-server add-scope <path> Manually add a scope + assign agents
mut-server issue-token <path> Manually issue an API key
mut-server serve <path> Start the HTTP server

Requirements

  • Python 3.9+
  • No external dependencies (stdlib only)

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mutai-0.1.7.tar.gz (123.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mutai-0.1.7-py3-none-any.whl (92.8 kB view details)

Uploaded Python 3

File details

Details for the file mutai-0.1.7.tar.gz.

File metadata

  • Download URL: mutai-0.1.7.tar.gz
  • Upload date:
  • Size: 123.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mutai-0.1.7.tar.gz
Algorithm Hash digest
SHA256 e836dbb306f3372fad77271ce8c43dbb278453c03b34d491a9dd4a491c18834f
MD5 61196c8cbdec4ffeb09546eafe39c984
BLAKE2b-256 7b15225437b15399bd044dea100c4f78ca6f5538aa8f8daa347c6ac626a63944

See more details on using hashes here.

Provenance

The following attestation bundles were made for mutai-0.1.7.tar.gz:

Publisher: publish.yml on puppyone-ai/mut

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mutai-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: mutai-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 92.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mutai-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 44fc42c21b2f16e61f2f2cd6f85929ca91443c9b284fb4bf6629d9ec14882bac
MD5 d1e7c2a23726a364b95f019cf549abd4
BLAKE2b-256 bf71c9b6f7f25341b0dd5d8b9131386863fea30cc1b6c0881a68d0d676d59bb0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mutai-0.1.7-py3-none-any.whl:

Publisher: publish.yml on puppyone-ai/mut

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page