# marsh > marsh is a Bash-compatible Linux shell for Apple Silicon Macs. Agent commands run in fresh containers inside Docker Sandbox VMs. Use `split { } | join` for private project copies, or `fanout { } | collect` for shared files. Inside jobs, use the `marsh split` and `marsh fanout` CLI forms; registered agent calls start child jobs. marsh is a shell for composing agents on Apple Silicon Macs. It opens a Linux shell at the project's Mac path. Registered commands such as `claude`, `codex`, and `pi` each run in a fresh nonroot container inside a warm VM for that Kit. `msh` is the same program. ## Install You need an Apple Silicon Mac (`uname -m` prints `arm64`), Homebrew, and Docker Sandboxes (`sbx`) signed in. See https://runmar.sh/docs/install.md for the supported `sbx` version and other installation methods. Docker Desktop is not required to run marsh. Intel Macs, Linux, and Windows are not supported hosts. ```sh brew install docker/tap/sbx mcavage/tap/marsh sbx login # interactive sign-in sbx secret set anthropic # interactive key entry; claude and pi sbx secret set openai # interactive key entry; codex marsh --version ``` The `sbx` sign-in and key-entry steps need an interactive terminal. `sbx secret ls` lists stored credentials; marsh has no login of its own. Provider keys managed by the `sbx` proxy stay outside jobs. An agent's own login flow can save credentials in the shared guest home, where other jobs can read them. ## Run Use `marsh` for an interactive shell or `marsh -c 'COMMAND'` when your tool cannot drive a terminal. The default shell is Brush, with Bash-compatible syntax and the gaps listed at https://runmar.sh/docs/shell.md#bash-compatibility. `--shell bash` and `--shell zsh` select those shells inside the VM instead. ```sh cd ~/src/project marsh -c 'pwd; uname -sm' marsh -c 'claude -p "summarize README.md"