MonoGit v0.2.6 · JoaoOliveira889/monogit
Multi-repo Git dashboard for your terminal. A TUI tool that scans a root directory for Git repositories and gives you a panoramic view of branches, ahead/behind status, and dirty state - with one-key actions for Git workflows and confirmation guards for every mutating command.

Built with Bubble Tea, Lip Gloss, and Bubbles.
For detailed guides, configuration options, and troubleshooting, visit our Wiki Documentation.
fetch, pull, and push either for the selected repository or for all of them concurrently. Bulk checkout and stash actions work across all filtered repositories with confirmation safeguards.t).WT badge, and delete them along with their worktrees directly from the TUI.exec.Command with individual arguments to ensure zero shell injection vectors, no telemetry, and restrictive local config permissions.brew tap JoaoOliveira889/tap
brew install monogit
Download the latest release for your platform from the Releases page.
# macOS (Apple Silicon)
curl -LO https://github.com/JoaoOliveira889/monogit/releases/latest/download/monogit_Darwin_arm64.tar.gz
tar -xzf monogit_Darwin_arm64.tar.gz
sudo mv monogit /usr/local/bin/
# macOS (Intel)
curl -LO https://github.com/JoaoOliveira889/monogit/releases/latest/download/monogit_Darwin_x86_64.tar.gz
tar -xzf monogit_Darwin_x86_64.tar.gz
sudo mv monogit /usr/local/bin/
# Linux (amd64)
curl -LO https://github.com/JoaoOliveira889/monogit/releases/latest/download/monogit_Linux_x86_64.tar.gz
tar -xzf monogit_Linux_x86_64.tar.gz
sudo mv monogit /usr/local/bin/
go installgo install github.com/JoaoOliveira889/monogit/cmd/monogit@latest
Requires Go 1.26.3 or later.
git clone https://github.com/JoaoOliveira889/monogit.git
cd monogit
go build -o monogit ./cmd/monogit
# Scan current directory
monogit
# Scan a specific directory
monogit --path ~/projects
# Set auto-fetch interval to 10 minutes
monogit --interval 10m
| Flag | Default | Description |
|---|---|---|
--path |
. |
Root directory to scan for Git repositories |
--interval |
5m |
Auto-fetch interval (e.g. 1m, 10m, 1h) |
--version |
- | Show version, commit, and build date |
Every mutating command opens a confirmation modal before it runs. Fetch stays direct, while pull, push, stash, undo, branch changes, tag creation, and the final commit confirmation follow that rule.
| Key | Action |
|---|---|
↑ | k |
Move cursor up |
↓ | j |
Move cursor down |
← | h |
Switch to Left Panel (Repositories) |
→ | l |
Switch to Right Panel (Details/Log) |
1 | 2 | 3 |
Jump directly to specific panel |
tab |
Cycle between visible panels |
ctrl+p | ? |
Toggle Help Menu |
esc |
Back / Cancel / Close |
q |
Quit |
| Key | Action |
|---|---|
f |
Fetch selected repository |
F |
Fetch all repositories |
p |
Pull selected repository |
P |
Pull all repositories |
u |
Push selected repository |
U |
Push all repositories |
c |
Commit Wizard (a add all, v select files → message → confirm → optional push) |
b |
List local & remote branches |
M |
Merge branch into HEAD (inside branch panel) |
t |
Deploy Tag (create → message → confirm → push) |
s |
Stash changes |
S |
Open Stash Panel (pop, apply, drop) |
Z |
Stash All (stash dirty filtered repos) |
B |
Checkout All (switch branch in all filtered repos) |
z |
Quick Undo (soft reset last commit) |
e |
Open in Editor (auto-detects VS Code, Vim, etc.) |
w |
Open in Browser (GitHub, GitLab, etc.) |
g |
Toggle Graph / Simple log view |
o |
Open Command Log |
v |
Start a selection range |
y |
Copy the current selection |
ctrl+v |
Paste clipboard text into prompts |
Mutating actions prompt for confirmation before they run, with fetch as the explicit exception.
Inside branch, file, stash, and commit panels, destructive actions continue to require confirmation before execution. Commit wizard file selection remains a local choice until the commit is confirmed.
The footer always keeps ? help visible and shows the running MonoGit version on the right edge so global shortcuts and build context stay available in every screen.
┌─────────────────────────┬──────────────────────────────┐
│ Repositories │ ◈ api-gateway │
│ │ │
│ ▸ api-gateway main ↑2 │ Branch: main │
│ auth-svc dev ↓1 │ Ahead: ↑ 2 commits │
│ payment main ✓ │ Behind: 0 │
│ user-svc feat ● │ Status: Modified ● │
│ │ │
│ │ Recent Commits: │
│ │ ───────────────── │
│ │ a1b2c3d Fix auth │
│ │ d4e5f6a Add rate limit │
│ │ g7h8i9j Update deps │
└─────────────────────────┴──────────────────────────────┘
f fetch │ p pull │ u push │ c commit │ t tag │ B checkout-all │ Z stash-all │ e editor │ q quit
The project follows Clean Architecture principles, keeping business logic decoupled from implementation details:
monogit/
├── cmd/monogit/ # Entry point
├── internal/
│ ├── domain/ # Core entities: Repository, FileStatus, interfaces
│ ├── usecase/ # Business logic: Git operations orchestrator
│ ├── adapters/
│ │ ├── git/ # CLI Git provider (exec-based, no shell injection)
│ │ └── tui/ # Bubble Tea UI: model, update, view, keys
│ └── pkg/
│ ├── scanner/ # Directory traversal and repo detection
│ ├── config/ # Local config and startup cache
│ ├── editor/ # Editor auto-detection and launcher
│ └── ui/ # Shared styles (Lip Gloss tokens)
└── .goreleaser.yaml # Multi-platform release config
Security note: All Git commands are built using exec.Command with individual string arguments - no shell interpolation, no injection vectors, no telemetry, and no hidden data collection.
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request.
git checkout -b feat/my-featureIf monogit helps you manage repositories more efficiently, consider supporting its development.
MIT © João Oliveira
$ claude mcp add monogit \
-- python -m otcore.mcp_server <graph>