Minato

See every repository you host and every clone on disk in one picture, then close the gap with commands that never improvise.

Minato

A harbour for your repositories.

Repositories accumulate across hosting providers while local clones drift away from them. Some remotes are never cloned, some clones are abandoned, and forks fall behind what they were forked from. Minato shows that whole picture at once, then offers safe, scriptable ways to close the gap.

Get started View on GitHub

What it tells you

Local clones are a backup of what a provider hosts, so a repository with no clone is not backed up, and a clone with nothing behind it is the only copy left. Every repository lands in exactly one state, and the reason travels with it.

in sync behind 12 ahead 2 diverged +4/-1 not backed up

Terminal
minato status --state drifted
Output
PATH                                       REPOSITORY                    GROUP       STATE                         NOTES
/Users/you/Projects/perso/game-night       github:mcanouil/game-night    perso       local only, gone from GitHub
/Users/you/Projects/perso/imdb-ratings     github:mcanouil/imdb-ratings  perso       behind 2
/Users/you/Projects/quarto-dev/quarto-cli  github:mcanouil/quarto-cli    quarto-dev  in sync                       fork, 135 behind upstream

What it does about it

Compares

Reads what the provider reports and what is on disk, then matches the two by remote URL rather than by path, so any directory arrangement works.

Clones what is missing

Bulk clone by owner, group, or state, into a directory you choose. Anything already there is skipped rather than written over.

Updates only what is safe

Fast-forward only, and only when a repository is strictly behind with no modified tracked files. Everything else is reported with the reason it was left alone.

Groups by your own tree

A group is a directory beneath a root, so the folders you already keep become the grouping, with nothing to configure. Groups nest as the tree does, and naming perso takes perso/apps with it.

Follows forks

Reports how far a fork trails the repository it was forked from, so a stale fork is visible before it matters.

Answers to scripts

Every command takes --json, so anything the interface offers can be done by a script or an agent.

Nothing surprising happens

Minato never force-pushes, never rebases, and never discards a change. An update is only ever a fast-forward, so if the situation has been misjudged, git refuses rather than improvising.

Anything that changes your filesystem is explicit, offers a rehearsal with --dry-run first, and reports what it deliberately did not touch.

Read the design note

Back to top