Start Here
Follow this path when you want Shoal installed quickly and you want the next branching docs choices to stay obvious.
Getting Started¶
This path is optimized for a developer who wants Shoal working quickly. It defines the core terms you need to know, guides you through installation, and gets your first sessions running.
Core Concepts¶
Before you start, understand the pieces Shoal connects:
- Worktree: A Git worktree. Shoal gives each agent its own isolated branch and filesystem so they can work in parallel without overwriting your current checked-out state.
- Pane/Session: A tmux construct. Shoal uses tmux to persist agent shells. You can attach, detach, and survive network drops.
- MCP (Model Context Protocol): The standard that lets Shoal expose context and tools to agents. The
shoal-orchestratorMCP server lets one agent inspect or control others. - Template: A declarative configuration for a session (which shell to use, which tools to attach, what to run on startup).
- Fin: A lightweight protocol for passing initialization data or contracts to an agent when it starts.
Confirm uv, tmux, and git are available before you start layering templates and shells.
Run pipx install shoal-cli or uv tool install shoal-cli. With MCP support: uv tool install "shoal-cli[mcp]".
Run shoal init and shoal setup fish to scaffold state, config, and the intended shell ergonomics.
Create the first worktrees, then use shoal status, shoal popup, and shoal attach to operate them.
MCP support
The [mcp] extra activates the shoal-orchestrator MCP server, which lets other AI agents create, inspect, and kill sessions directly — no shell access required.
Prerequisites¶
Shoal assumes a terminal-centric workflow and relies on a small set of system tools.
| Tool | Why it matters |
|---|---|
uv |
Installs Shoal and manages the Python environment |
tmux |
Runs each agent in an isolated session or pane |
git |
Creates worktrees and branches safely |
fish |
Recommended reference shell for completions, key bindings, and helper functions |
fzf |
Enables interactive selection in commands like shoal attach |
Optional tools
ghforshoal wt finish --prnvrfor Neovim integration
Install¶
From PyPI (recommended)¶
pipx install shoal-cli
# or with uv
uv tool install shoal-cli
# With MCP support (enables shoal-orchestrator MCP server)
uv tool install "shoal-cli[mcp]"
Via Homebrew (macOS)¶
This installs a self-contained binary — no Python environment required.
Direct binary download¶
Download a self-contained binary from the latest release:
| Platform | Asset |
|---|---|
| macOS arm64 (Apple Silicon) | shoal-darwin-arm64 |
| macOS x86_64 (Intel) | shoal-darwin-x86_64 |
| Linux x86_64 | shoal-linux-x86_64 |
# Example: macOS Apple Silicon
curl -Lo shoal https://github.com/TheShoal/shoal-cli/releases/latest/download/shoal-darwin-arm64
chmod +x shoal
sudo mv shoal /usr/local/bin/
From source for development¶
git clone https://github.com/TheShoal/shoal-cli.git
cd shoal-cli
uv tool install -e ".[dev,mcp]"
uv tool install pre-commit
just setup
Initialize Shoal¶
First run
If shoal init reports missing tools, fix them before running shoal setup fish. The fish integration assumes the state directories exist.
shoal init creates the XDG config, state, and runtime directories, scaffolds bundled
tool and template files, and checks the local environment. shoal setup fish installs the
interactive shell integration on top of that baseline.
Launch your first sessions¶
shoal new -t claude -w auth -b
shoal new -t omp -w api-refactor -b
shoal new -t omp -w docs-refresh -b
What those flags do:
-tselects the tool profile.-wnames the worktree and session.-bcreates a dedicated branch automatically. When the template specifies[template.git] branch_prefix, that prefix replaces the defaultfeat/category (e.g.branch_prefix = "fix"→fix/<worktree>). See Local Templates — Per-Session Git Identity.
Check the fleet¶
Use shoal status for a fast summary, shoal popup for the interactive dashboard, and
shoal attach when you need to drop into a specific session directly.
The supervision loop¶
Read it left to right: sessions run in the background, and you stay in flow through status and popup instead of manually watching each pane.
flowchart LR
Create["shoal new"] --> Sessions["tmux sessions\nworktrees + state"]
Sessions --> Status["shoal status"]
Status --> Popup["shoal popup"]
Popup -->|"approve / redirect"| Sessions
Popup -->|"attach"| Sessions
Common next steps¶
- Git identity per session: Use
[template.git]in your template to scopeuser.name,user.email, and commit template to each worktree. Setbranch_prefixto control the default branch category forshoal new -b. See Local Templates — Per-Session Git Identity.