v0.1.5 2026-03-05 improvements

Isolated run environment, worktree mode, and smarter dep dirs.

Five new commands, per-package dependency symlinks, git linked worktree support, and full MCP coverage for agent-driven workflows.

New commands
  • new cow run <name> <cmd> — runs a command inside a pasture's working directory. Auto-detects the package manager from lockfiles and injects shims so install subcommands write to the pasture-local node_modules rather than the shared source. Sets COW_PASTURE, COW_SOURCE, and COW_PASTURE_PATH env vars for the subprocess.
  • new cow materialise <name> — replaces symlinked dependency directories in a pasture with real APFS clonefiles, making the pasture fully independent of the source.
  • new cow fetch-from <from> — fetches all refs from another pasture into this one, enabling cross-pasture rebase without touching any remote.
  • new cow recreate <name> — removes a pasture and re-creates it from the same source, optionally on a different branch.
  • new cow install — sets up the cowcd shell function and tab completion in ~/.zshrc (zsh) or ~/.bashrc (bash) automatically. Detects your shell from $SHELL. Idempotent.
cow create
  • new --worktree flag — creates a git linked worktree instead of an APFS clone. All worktree pastures share the same .git/objects/ pack store, so cross-pasture rebase works without any remote dance.
  • improved Dependency directories (node_modules, vendor, .venv, Pods, etc.) are now handled with per-package symlinks: each top-level entry is symlinked individually so existing packages are instantly available and new installs write locally to the pasture. Previously the whole directory was symlinked.
  • new --no-symlink flag — skips large-directory detection and always performs a full clone.
jj
  • improved cow status and cow list now show changed instead of dirty for jj pastures, reflecting jj semantics where the working copy is always materialised as a commit.
MCP
  • new cow_migrate, cow_materialise, cow_fetch_from, and cow_run tools added to the MCP server, completing full command coverage for agent-driven workflows.
v0.1.4 2026-03-04 quality of life

Scoped pasture names and better automation.

Pasture names are now scoped by source repository — feature-x becomes brightblur/feature-x automatically. cow list drops the SOURCE column (it's encoded in the name) and gets a cleaner layout. Adds flags for scripting and non-TTY use: --print-path on create, -y/--yes on remove, and -m/--message for jj.

Pasture naming
  • new Names are automatically scoped by source repository basename: cow create feature-x --source ~/repos/brightblur stores the pasture as brightblur/feature-x. Supply an explicit scope/name to override.
  • new Auto-generated names follow the same pattern: brightblur/agent-1, brightblur/agent-2, etc.
  • feat cow list redesigned — SOURCE column removed (source is now encoded in the scoped name). Branch column only appears when the branch differs from the pasture name suffix.
New flags
  • new cow create --print-path — suppress all output except the final pasture path, making it easy to capture in scripts: WS=$(cow create my-feature --print-path).
  • new cow create -m/--message <MSG> — set the initial jj change description immediately after pasture creation. Removes the separate jj describe step (jj repos only).
  • new cow remove -y/--yes — skip confirmation prompts without implying a safety override. Unlike --force (which bypasses dirty checks), --yes still shows dirty warnings — it just doesn't wait for input. Idiomatic for scripts and non-TTY contexts.
Improvements
  • feat cow list now shows a file count next to dirty pastures (e.g. dirty (3)), giving a quick sense of change scope without running cow status.
v0.1.3 2026-03-03 fixes + improvements

Safer creates and tidier output.

cow create now rolls back atomically on failure and gains a --from flag for branching from an arbitrary revision. cow list contracts home to ~, and stale worktree refs left behind by a failed clone are cleaned up automatically.

Improvements
  • feat cow create --from <rev> — branch the new pasture from an arbitrary revision rather than always using the source HEAD.
  • fix cow create now performs atomic rollback on failure: any partially written pasture directory and git worktree entry are cleaned up before returning an error.
  • fix Stale git worktree refs left behind by a previous failed clone are pruned automatically on the next cow create.
  • fix cow list now contracts the home directory to ~ in path output, keeping lines short on typical setups.
v0.1.2 2026-03-03 new command

Migrate existing worktrees into cow.

Adds cow migrate, which discovers git linked worktrees, jj secondary workspaces, and orphaned cow pasture directories and migrates them into proper cow-managed APFS clone pastures — so you can adopt cow without starting your in-progress branches from scratch.

Commands
  • new cow migrate [--source] [--all] [--force] [--dry-run] — discover and migrate git worktrees, jj workspaces, and orphaned directories into cow-managed pastures. Git worktrees are replaced with an APFS clone and the old worktree removed; jj workspaces are re-created with jj workspace add and the old one forgotten; orphaned directories are registered in-place without cloning. Dirty candidates are skipped unless --force is passed. --dry-run prints the plan without making any changes.
Documentation
  • docs README: added cow migrate command reference and a Development section documenting the three root causes of the test coverage gap in migrate.rs (jj paths, subprocess integration tests, defensive error paths).
  • docs Homepage: updated CLI demo to include a migrate tab.
v0.1.1 2026-03-02 performance + fixes

Faster cloning and better jj support.

Switches from a cp -Rc subprocess to a direct clonefile(2) syscall for a measurable speed improvement on large repos, and fixes several issues with Jujutsu pasture creation.

Performance
  • perf Replace cp -Rc subprocess with a direct clonefile(2) syscall. This is the same kernel call Time Machine uses: one atomic operation regardless of directory depth, with no per-file process spawning. A 2 GB repository now clones in around 130 ms wall time.
jj (Jujutsu) fixes
  • fix Run jj workspace add before copying untracked files from the source. Previously the copy ran first, causing jj workspace add to reject the non-empty destination directory.
  • fix Pass signing.behavior="drop" to jj workspace add so SSH passphrase prompts are suppressed during pasture creation. jj signs the initial workspace commit immediately; this flag suppresses that without touching the user's global jj config.
  • fix Write cow metadata to .jj/cow-context instead of .cow-context at the pasture root. jj auto-tracks every new file in the working copy, so a file at the root appeared as an addition in jj diff and jj status. Content inside .jj/ is invisible to jj's working-copy tracking.
v0.1.0 2026-03-02 initial release

First public release.

cow ships as a Homebrew formula and a Cargo crate (cow-cli), covering the full pasture lifecycle with an MCP server for agent orchestration.

Commands
  • new cow create — clone a repo into an isolated APFS pasture
  • new cow list — list all active pastures, with optional JSON output
  • new cow status — detailed pasture status including diff summary
  • new cow diff — passthrough to git diff or jj diff
  • new cow extract — extract changes back to source as patch or branch
  • new cow remove — remove pastures, with dirty-state warnings
  • new cow sync — fetch and rebase pasture onto source repo changes
  • new cow cd — print pasture path for shell integration
  • new cow mcp — run as an MCP stdio server for AI orchestrators