Repo wrangler for macOS - track, organize, and sync every git repository locally (and remotely).
brew install ansilithic/tap/saddleOr from source:
git clone https://github.com/ansilithic/saddle.git
cd saddle
make build && make installRequires macOS 14+ (Sonoma), Swift 6.0, and the gh CLI for GitHub integration.
Add repos to the manifest:
saddle equip https://github.com/user/dotfiles
saddle equip https://github.com/user/scripts
saddle equip https://github.com/user/cool-cliOr create the manifest directly:
# ~/Library/Application Support/com.ansilithic.saddle/manifest.toml
mount = "~/Developer"
[repos]
"github.com/user/dotfiles"
"github.com/user/scripts"
"github.com/user/cool-cli"Then sync everything with saddle up
Check file-presence health across all repos — README, .gitignore, Makefile, and LICENSE. Repos with a health() hook function get a pass/fail check too.
saddle health # all repos
saddle health --equipped # only manifest repos
saddle health --unhealthy # only repos missing files
saddle health --owner <name> # filter by org/ownerOptional per-repo scripts that run during sync. Each hook is a single hook.sh file with functions for different lifecycle phases. The script's working directory is the repo itself.
~/Library/Application Support/com.ansilithic.saddle/hooks/user-dotfiles/hook.sh
#!/usr/bin/env bash
install() {
make build && make install
}
uninstall() {
make uninstall
}
health() {
make health
}install— runs on first clone and subsequent syncs (falls back fromupdateif noupdatefunction is defined)uninstall— runs onsaddle unequiphealth— checks if the tool is properly installed
Hook names are derived from the repo URL: github.com/user/dotfiles becomes user-dotfiles. Scripts must be executable. Output is logged via macOS unified logging (subsystem com.ansilithic.saddle, category hooks).
Security note: Hook scripts run with full user privileges. Only install hooks from sources that are trusted — a malicious hook script has the same access as the current user. Review hook scripts before marking them executable.
Saddle delegates authentication to the gh and glab CLIs. If the user is authenticated to these tools, saddle will show repo visibility, list all remote repos, and display any starred repos too.
Where gh and glab are windows into the remote, saddle is the local layer — what's cloned, what's dirty, what's out of sync. Beautiful ANSI for humans checking what agents are up to, structured JSON for agents that need a centralized dashboard. Together they give full repo visibility across both sides. See SKILL.md for agent-specific instructions.
MIT


