Arashi is a Git worktree manager for meta-repositories.
It keeps related repositories aligned while you work on a feature branch across a shared workspace.
Prerequisites:
curlbash- A SHA-256 tool (
shasum,sha256sum, oropenssl)
curl -fsSL https://arashi.haphazard.dev/install | bashInstall a specific release:
curl -fsSL https://arashi.haphazard.dev/install | ARASHI_VERSION=1.4.0 bashVerify install:
arashi --versionBy default, the installer places arashi in ~/.arashi/bin and adds that path to your shell config.
If curl installation fails, use npm installation below or the manual release instructions in docs/INSTALLATION.md.
npm install -g arashiVerify install:
arashi --versionIf npm is unavailable or fails, use the curl installer command above or the manual release instructions in docs/INSTALLATION.md.
If you prefer not to use npm, download a platform binary from GitHub Releases and place it on your PATH.
macOS (Apple Silicon):
curl -L https://github.com/corwinm/arashi/releases/latest/download/arashi-macos-arm64 -o arashi
chmod +x arashi
sudo mv arashi /usr/local/bin/arashiLinux (x64):
curl -L https://github.com/corwinm/arashi/releases/latest/download/arashi-linux-x64 -o arashi
chmod +x arashi
sudo mv arashi /usr/local/bin/arashiWindows (PowerShell):
Invoke-WebRequest -Uri "https://github.com/corwinm/arashi/releases/latest/download/arashi-windows-x64.exe" -OutFile "arashi.exe"
# Move arashi.exe to a folder on your PATHYou can also build from source for local development:
bun install
bun run buildArashi currently provides these commands:
arashi initarashi add <git-url>arashi clone [--all]arashi create <branch>arashi listarashi statusarashi remove <branch|path>arashi switch [filter] [--repos|--all] [--sesh] [--no-default-launch]arashi pullarashi syncarashi setup [--only <repo>] [--verbose]
arashi init
arashi add git@github.com:your-org/frontend.git
arashi add git@github.com:your-org/backend.git
arashi create feature-auth-refresh
arashi create feature-auth-refresh --launch
arashi create feature-auth-refresh --no-launch
arashi status
arashi switch feature-auth-refresh # parent repo worktrees
arashi switch --repos feature-auth-refresh # child repo worktrees in current workspace
arashi switch --all feature-auth-refresh # all repos
arashi switch --repos docs # repo-name matching in child repos
arashi switch --no-default-launch # bypass configured launch mode defaults onceArashi can run lifecycle hooks during arashi create and arashi remove.
- Global hooks in
.arashi/hooks/:pre-create.shpost-create.shpre-remove.shpost-remove.sh
- Repository-specific hooks:
pre-create.<repo>.shpost-create.<repo>.sh
- Scoped remove hooks:
- repository scope:
repos/<repo>/.arashi/hooks/pre-remove.shandpost-remove.sh - global shared:
~/.arashi/hooks/pre-remove.shandpost-remove.sh - global targeted:
~/.arashi/hooks/<repo>/pre-remove.shandpost-remove.sh
- repository scope:
For arashi remove, hook execution order is: repository scope -> workspace-root scope -> global targeted scope -> global shared scope.
pre-remove.sh is useful for teardown before deletion (for example, stopping tmux sessions), and post-remove.sh can run final cleanup after remove operations complete.
See docs/hooks.md for hook behavior, environment variables, and examples.
Use arashi list with fzf and optional keybinds to speed up daily navigation.
# One-off jump
cd "$(arashi list | fzf)"# Bash keybind (Ctrl+G)
bind '"\C-g":"cd \$(arashi list | fzf)\n"'# Zsh keybind (Ctrl+G)
bindkey -s '^g' 'cd $(arashi list | fzf)\n'# One-off session connect
sesh connect "$(arashi list | fzf)"# Bash keybind (Ctrl+S)
bind '"\C-s":"sesh connect \$(arashi list | fzf)\n"'# Zsh keybind (Ctrl+S)
bindkey -s '^s' 'sesh connect $(arashi list | fzf)\n'You can also use arashi switch --sesh directly inside tmux to open the selected worktree in a new tmux window.
arashi switch also detects tmux, Kitty, Ghostty, WezTerm, and iTerm2 contexts and prefers terminal-native launch behavior when available.
# Select and remove a worktree quickly
arashi remove -f "$(arashi list | fzf)"If you prefer the term delete, create a shell alias:
alias arashi-delete='arashi remove -f'Arashi publishes a JSON Schema for .arashi/config.json so editors can validate and autocomplete your config.
- Stable URL:
https://unpkg.com/arashi/schema/config.schema.json - Version-pinned URL:
https://unpkg.com/arashi@1.7.0/schema/config.schema.json
Example config header:
{
"$schema": "https://unpkg.com/arashi/schema/config.schema.json",
"version": "1.0.0",
"reposDir": "./repos",
"defaults": {
"create": {
"switch": true,
"launch": true,
"launchMode": "sesh"
},
"switch": {
"launchMode": "sesh"
}
},
"repos": {}
}Defaults precedence for create/switch behavior: explicit CLI flag > opt-out flag > config default > built-in default.
Arashi also ships a dedicated skills.sh integration package for guided installation, workflow examples, and troubleshooting.
- Skill repository:
repos/arashi-skills - Canonical skill manifest:
repos/arashi-skills/skills/arashi/SKILL.md - Workflow catalog:
repos/arashi-skills/skills/arashi/references/workflows.md - Session shortcuts:
repos/arashi-skills/skills/arashi/references/session-shortcuts.md
- Installation details:
docs/INSTALLATION.md - Configuration details:
docs/configuration.md - Clone command details:
docs/commands/clone.md - Hook behavior:
docs/hooks.md - Setup command details:
docs/commands/setup.md - Switch command details:
docs/commands/switch.md - Remove command details:
docs/commands/remove.md - FZF integration:
docs/FZF_COMPATIBILITY.md
Use the canonical guide: CONTRIBUTING.md.
For specs and planning workflow, see the specs repository: github.com/corwinm/arashi-arashi.
MIT