cow create [OPTIONS] [NAME]

Create a new workspace from a repository using APFS copy-on-write. When a name is given it is also used as the branch name (created if it does not exist). Omit the name and cow auto-generates agent-1, agent-2, and so on.

OptionDescription
--source <PATH>Source repository to clone (default: current directory)
--branch <BRANCH>Override the branch name (default: same as workspace name)
--no-branchDo not switch or create a branch after cloning
--change <CHANGE>jj change ID to edit in the new workspace (jj repos only)
--dir <PATH>Parent directory for workspaces (default: ~/.cow/workspaces/)
--no-cleanSkip post-clone cleanup of runtime artefacts (.pid, .sock, etc.)
Uses clonefile(2) directly — the same kernel syscall Time Machine uses. A 2 GB repository clones in around 130 ms wall time, with near-zero extra disk until files are modified.

cow list [OPTIONS]

List all active workspaces managed by cow, showing their name, source repository, branch, VCS, and creation time.

OptionDescription
--source <PATH>Filter to workspaces created from this source repository
--jsonMachine-readable JSON output for scripting and MCP tools

cow status [NAME]

Show detailed status of a workspace, including its path, source repository, branch, dirty/clean state, and a short diff summary. Defaults to the current directory if it is a cow workspace.

cow diff [NAME]

Show uncommitted changes in a workspace relative to its last commit. Passes through to git diff or jj diff as appropriate. Defaults to the current directory if inside a workspace.

cow extract [OPTIONS] <NAME>

Extract committed changes from a workspace back into the source repository. Use --patch to produce a patch file for review, or --branch to land the branch directly in the source repo so you can push a PR normally.

OptionDescription
--patch <FILE>Write a unified diff patch to this file
--branch <NAME>Create (or update) this branch in the source repo at workspace HEAD
Direction: cow extract goes from workspace to source. cow sync goes the other way.

cow remove [OPTIONS] <NAME...>

Remove one or more workspaces. Warns before removing workspaces with uncommitted changes, and offers to push unpushed commits first. Pass multiple names to remove several workspaces at once.

OptionDescription
--forceSkip dirty-state warnings and remove without prompting
--allRemove all workspaces (can be scoped with --source)
--source <PATH>Scope --all to workspaces from this source repository

cow sync [SOURCE_BRANCH]

Fetch the latest commits from the source repository and rebase (or merge) the workspace onto them. Defaults to syncing with the workspace's own branch; pass a branch name to sync against a different one (e.g. cow sync main).

OptionDescription
--mergeMerge instead of rebase
--name <NAME>Target a named workspace instead of auto-detecting from the current directory
Not yet supported for jj workspaces.

cow cd <NAME>

Print the absolute path of a named workspace. Designed for shell integration rather than direct use.

Add to ~/.zshrc or ~/.bashrc:

function cowcd() { cd "$(cow cd "$1")"; }

Then use cowcd feature-x to jump straight into a workspace.

cow mcp

Run cow as a Model Context Protocol stdio server, exposing cow_create, cow_list, cow_remove, cow_status, and cow_diff as MCP tools so agents can manage workspaces without any human intervention.

Configure in ~/.claude.json (global) or a project-local .mcp.json. See the MCP section on the homepage for the config snippet.

.cow.json — project config

Add a .cow.json to the root of your repository to define project-specific post-clone behaviour. Runs automatically after every cow create.

{ "post_clone": { // Paths to remove (glob patterns ok) "remove": [".next/server", "*.pid", "*.sock"], // Commands to run inside the new workspace "run": ["npm run codegen"] } }