Find, clone and keep your repos in sync across GitHub, GitLab and Gitea/Forgejo, with the right account per repo. Launch coding agents in separate workspace copies and back up their uncommitted work.
Runs on macOS and Linux. Requires git on PATH.
- Discovery across accounts and hosts. Find repos by owner, organization, search, name, language or topic; saved rules pick up new matches.
- The right identity. Apply each account's SSH key, commit identity and signing settings to the repos it covers.
- Scheduled sync and backups. Fetch repos and snapshot uncommitted work, with optional offsite copies and upstream mirrors.
- Parallel coding agents. Give each agent its own branch and worktree or clone, then open them side by side with tmux, iTerm or Muxy.
- Portable setup. Share configuration and a manifest across machines;
preview configuration changes with
planbefore applying them.
Backups leave the working tree, index and branches untouched. Branch fast-forwarding, offsite pushes and cleanup follow explicit configuration; see scope and the backup and recovery guarantees.
brew install --cask ashtonian/tap/gitten # macOS
go install github.com/ashtonian/gitten@latest # Go version: see go.mod
docker pull ghcr.io/ashtonian/gitten # linux/amd64, linux/arm64The releases have archives
for macOS and Linux on amd64 and arm64, with checksums. Name the cask in full,
ashtonian/tap/gitten: Homebrew asks you to trust a third-party tap, and
naming its cask does.
gitten shells out to git, so git must be on PATH.
gitten setup # a few questions, a review, then it writes the config, clones and installs the background sync
gitten status # what it tracks
gitten cd api # jump to a repo (a new terminal picks up the shell integration)setup detects accounts, existing clones and tools, previews the proposed
configuration, and asks before writing it. It can configure your shell and
install background sync. Re-run it to change your setup; see the
full setup guide.
Already have clones? Track one and sync it without writing a config:
gitten adopt ~/code/myrepo
gitten sync
gitten statusPreview a selection, then clone it and choose whether to save it as a rule:
gitten clone --org acme --name billing --dry-run
gitten clone --org acme --name billingSaved discovery rules keep finding new matches on later syncs. See finding your repos for accounts, filters and searches.
For a tracked repo, create four copies and open an agent in each:
gitten ws create app --repo github.com/me/app --agents 4
gitten ws open app --agent claude
gitten topThis example needs Claude and a launcher such as tmux installed. Agent profiles also support Codex and custom commands. See workspaces, launchers, and live status.
| Task | Guide |
|---|---|
| Set up or move to another machine | Setup, shared manifests |
| Find and clone repos | Discovery and filters |
| Configure layout, clone shapes, hooks and sets | Configuration, example configs |
| Manage accounts, SSH keys and signing | Authentication and accounts |
| Understand configuration changes | Plan and apply |
| Protect and recover work | Backups, offsite copies and mirrors, archives |
| Run agents across one or more repos | Workspaces, fleets and launchers |
| Schedule sync and diagnose failures | Scheduling, operations |
| Find a command, flag or exit code | Command reference, shell integration |
| Contribute | Contributing, architecture, detailed spec |
See the documentation index, the fully annotated config.example.yaml, and SECURITY.md.
MIT — see LICENSE.