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, adds that path to your shell config, and in interactive installs offers to enable shell integration for arashi switch --cd.
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] [--cd|--no-cd] [--sesh] [--no-default-launch]arashi shell init <bash|zsh|fish>arashi shell installarashi 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 shell install
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 --cd feature-auth-refresh # parent-shell cd when shell integration is active
arashi switch --no-default-launch # bypass configured launch mode defaults onceUse the docs site workflow guides when you want setup guidance by outcome instead of by individual command.
For contributors working on Arashi itself, the project planning workflow in the arashi-arashi meta-repo now uses OpenSpec. Older SpecKit-oriented references in legacy planning artifacts are historical context only.
- Hooks and configuration defaults: arashi.haphazard.dev/workflows/hooks-and-config
- Integrations for VSCode, tmux, and
tmuxplussesh: arashi.haphazard.dev/workflows/integrations - Agent-assisted and spec-driven change flow: arashi.haphazard.dev/workflows/agents-and-specs
Use shell integration when you want arashi switch to change the current shell directory instead of only opening a new terminal or editor context.
The official curl installer can offer this automatically. If you skip it or use npm, install it for the active shell with:
arashi shell installOr print wrapper code for manual setup:
arashi shell init bash
arashi shell init zsh
arashi shell init fishOnce installed, you can use arashi switch --cd <filter> for one-off parent-shell switching or set .arashi/config.json defaults.switch.mode to "cd" or "auto".
If shell integration is inactive, arashi switch --cd warns and skips launch fallback for that invocation.
For automated installs, set ARASHI_SHELL_INTEGRATION=yes to enable it without prompting or ARASHI_SHELL_INTEGRATION=no to skip it.
Arashi 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": {
"mode": "auto",
"launchMode": "sesh"
}
},
"repos": {}
}defaults.switch.mode accepts "launch", "cd", or "auto". "auto" prefers parent-shell switching only when shell integration is active.
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 - Workflow guides: https://arashi.haphazard.dev/workflows/
- Shell integration details:
docs/commands/shell.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