Automatically clone and organise GitHub repositories by visibility and language.
- ✓Open-source license (GPL-3.0)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
git clone https://github.com/sebastienrousseau/corral{
"mcpServers": {
"corral": {
"command": "corral"
}
}
}MCP Servers overview
<!-- SPDX-License-Identifier: GPL-3.0-only -->
<p align="center">
<img src=".github/logo.svg" alt="Corral logo" width="128" />
</p>
<h1 align="center">Corral</h1>
<p align="center">
Automatically clone and organise GitHub repositories using Finder-friendly collections, ecosystems, and metadata.
</p>
<p align="center">
<a href="https://github.com/sebastienrousseau/corral/actions"><img src="https://img.shields.io/github/actions/workflow/status/sebastienrousseau/corral/ci.yml?style=for-the-badge&logo=github" alt="Build Status" /></a>
<a href="https://pkg.go.dev/github.com/sebastienrousseau/corral"><img src="https://img.shields.io/badge/go.dev-reference-007d9c?style=for-the-badge&logo=go&logoColor=white" alt="Go Reference" /></a>
<a href="https://goreportcard.com/report/github.com/sebastienrousseau/corral"><img src="https://img.shields.io/goreportcard/report/github.com/sebastienrousseau/corral?style=for-the-badge" alt="Go Report Card" /></a>
<a href="https://codecov.io/gh/sebastienrousseau/corral"><img src="https://img.shields.io/codecov/c/github/sebastienrousseau/corral?style=for-the-badge&logo=codecov" alt="Code Coverage" /></a>
<a href="https://scorecard.dev/viewer/?uri=github.com/sebastienrousseau/corral"><img src="https://img.shields.io/ossf-scorecard/github.com/sebastienrousseau/corral?style=for-the-badge&label=OpenSSF%20Scorecard&logo=openssf" alt="OpenSSF Scorecard" /></a>
<a href="https://www.bestpractices.dev/projects/13455"><img src="https://img.shields.io/cii/level/13455?style=for-the-badge&label=OpenSSF%20Best%20Practices&logo=openssf" alt="OpenSSF Best Practices" /></a>
<a href="https://doc.corrallib.com"><img src="https://img.shields.io/badge/docs-doc.corrallib.com-brightgreen?style=for-the-badge&logo=github" alt="Documentation" /></a>
<a href="https://github.com/sebastienrousseau/corral/releases/latest"><img src="https://img.shields.io/github/v/release/sebastienrousseau/corral?style=for-the-badge" alt="Release Version" /></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-GPL--3.0-blue?style=for-the-badge" alt="License" /></a>
</p>
<p align="center">
<img src=".github/demo.gif" alt="Corral Demo" width="100%" />
</p>
---
## Contents
**Getting started**
- [Install](#install) — Homebrew, Arch, source, or Docker
- [Quick Start](#quick-start) — clone and organise in one command
**Features & Capabilities**
- [Features](#features) — structured layout, concurrency, and security
- [Architecture](#architecture) — end-to-end flow from API fetch to per-repo dispatch
- [Interactive TUI Mode](#interactive-tui-mode) — keybindings, commands, and autocomplete
- [Layout Customization](#layout-customization) — Apple-style collections, ecosystems, and custom templates
- [Smart Syncing](#smart-syncing) — network-optimised incremental updates
- [Exec Mode](#exec-mode) — concurrent batch execution of Git commands
- [MCP Server](#mcp-server-for-ai-agents) — expose your local workspace to AI coding agents
**Reference & Operational**
- [Usage & Flags](#usage--flags) — complete CLI parameter reference
- [Examples](#examples) — index of runnable programmatic examples
- [Troubleshooting](#troubleshooting) — quick solutions to common errors
- [Frequently Asked Questions](#frequently-asked-questions) — design decisions and Windows/WSL support
- [License](#license)
---
## Install
### mise (macOS / Linux)
```bash
mise use -g github:sebastienrousseau/corral
```
This installs the latest released `corralctl` binary and keeps it managed with
the rest of your mise tools.
### Homebrew (macOS)
```bash
brew install sebastienrousseau/tap/corralctl
```
Homebrew here is a cask, which is a macOS-only mechanism — `brew install` on
Linux will refuse it. On Linux use the `.deb`/`.rpm` packages or the tarballs
attached to each [release](https://github.com/sebastienrousseau/corral/releases/latest),
or `mise`/`go install` above.
### Arch Linux (AUR)
```bash
yay -S corralctl-bin # or: paru -S corralctl-bin
```
### Build from source
Requires Go 1.26+ and Git:
```bash
git clone https://github.com/sebastienrousseau/corral.git
cd corral
make install # installs ~/.local/bin/corralctl
```
### Platform Prerequisites
<details>
<summary><b>macOS</b></summary>
```bash
brew install go git gh
```
</details>
<details>
<summary><b>Ubuntu / Debian / WSL2</b></summary>
```bash
sudo apt install golang git
```
Install `gh` separately following the [GitHub CLI installation guide](https://github.com/cli/cli/blob/trunk/docs/install_linux.md).
</details>
<details>
<summary><b>Fedora / RHEL</b></summary>
```bash
sudo dnf install golang git gh
```
</details>
---
## Quick Start
Run Corral with an owner name (GitHub username or organization) to clone and automatically sort all repositories into a clean local directory hierarchy:
```bash
# Log in to GitHub CLI first (or set GITHUB_TOKEN)
gh auth login
# Run Corral for your profile
./corralctl my-username
```
This converges your local directory structure into a structured mirror:
```
~/Code/
├── Public/
│ ├── Go/
│ │ └── corral/
│ ├── Rust/
│ │ └── my-crate/
│ └── Web/
│ └── project.github.io/
├── Private/
│ └── Python/
│ └── internal-tool/
├── Forks/
│ └── Rust/
│ └── upstream-project/
└── Work/
```
On macOS, Corral also writes native Finder Tags to repository folders while
preserving tags you added yourself. This keeps the physical hierarchy shallow
and makes Finder searches and Smart Folders useful across ecosystems.
---
## Features
| Feature | Description |
| :--- | :--- |
| **Apple-style Layout** | Sorts source repositories into `Public/`, `Private/`, and `Forks/`, using Finder-friendly ecosystem names such as `Go`, `Rust`, `Python`, and `Web`. |
| **Finder Tags** | Applies native macOS lifecycle colors and searchable visibility, ecosystem, owner, fork, archive, template, and mirror metadata without replacing personal tags. |
| **Smart Syncing** | Compares remote `pushed_at` metadata to skip redundant network calls, speeding up syncs by 10x-50x. |
| **Interactive Selection** | A fully featured Terminal UI (TUI) selector dashboard to search, preview, and select repositories to clone. |
| **Legacy Migration** | Automatically moves existing flat directory layouts into the new structure and cleans up empty folders. |
| **Concurrency** | Processes clones and pulls concurrently with configurable worker limits (`--concurrency`). |
| **Batch Commands** | Batch execute Git commands concurrently across all cloned repositories using `exec`. |
| **Zero Configuration** | No configuration files required — simple, sensible defaults that work out of the box. |
---
## Architecture
A single run resolves git, fetches every repository concurrently from GitHub, optionally lets you pick a subset interactively, then dispatches clone / smart-sync / skip decisions across a worker pool. Smart sync consults a per-repository `.corral-state.json` sidecar to skip a `git pull` when the upstream `pushed_at` is unchanged.
```mermaid
graph TD
A[User Shell] --> B{corralctl}
B --> C[Pre-flight: exec.LookPath git]
C -- Missing --> Z1[Exit: git not found on PATH]
C -- OK --> D[Resolve auto/token/gh auth]
D --> E[GitHub API: list repos]
E --> E1["First page<br/>+ resp.LastPage"]
E1 --> E2{LastPage > 1?}
E2 -- Yes --> E3["Concurrent fetch<br/>pages 2..N (max 5)"]
E2 -- No --> F
E3 --> F[Filtered repository set]
F --> F1{TUI selector?}
F1 -- "--select" --> F2[Interactive TUI<br/>/sort, /all, /none, search]
F1 -- No --> G
F2 --> G[Layout template render<br/>Collection/Bucket/Name]
G --> H["Worker pool<br/>(--concurrency)"]
H --> I{Already cloned?}
I -- No --> J["git clone (+ blobless/<br/>depth/single-branch)"]
I -- "Yes (--no-sync)" --> K[SKIP]
I -- Yes --> L{Smart sync:<br/>pushed_at advanced?}
L -- No --> M[SKIP up-to-date]
L -- "Yes (or --force-sync)" --> N[git pull --rebase --autostash]
N --> N1["+ optional submodule update<br/>(--ignore-submodule-failures)"]
J & N1 --> O[Stamp .corral-state.json]
O & K & M --> P{All workers done?}
P -- No --> H
P -- Yes --> Q[Cleanup empty legacy dirs]
Q --> R{--orphans?}
R -- Yes --> S[Walk baseDir<br/>parse .git/config]
R -- No --> T[Print summary]
S --> T
```
---
## Interactive TUI Mode
By passing the `-i` or `--interactive` flag, you can launch the selection dashboard:
```bash
./corralctl -i my-username
```
### Keybindings
- `[space]` — Toggle selection of the current repository.
- `[ctrl+a]` — Select all currently filtered repositories.
- `[ctrl+n]` — Deselect all currently filtered repositories.
- `[/]` — Enter command / filter mode.
- `[enter]` — Confirm selection and begin cloning/syncing.
- `[esc]` — Exit the application silently.
### In-Session Commands
Press `/` inside the TUI to enter Command Mode. Commands support prefix-based autocompletion (press `[tab]` or `[right-arrow]` to autocomplete):
- `/sort <field>` — Sort repositories. Fields:
- `name` — Alphabetical sort by repository name.
- `language` / `lang` — Alphabetical sort by language.
- `visibility` / `vis` — Alphabetical sort by visibility (Private/Public).
- `public` — Prioritize public repositories at the top.
- `private` — Prioritize private repositories at the top.
- `/all` — Select all filtered repositories.
- `/none` — Deselect all filtered repositories.
- `/exit` / `/quit` — Cancel and exit silently.
- `/help` — Display the in-session help panel overlay.
---
## Layout Customization
By default, Corral uses the Apple-style layout `{{.Collection}}/{{.Bucket}}/{{.Name}}`. Forks use the `Forks` collection, while `.github.io` repositories use the `Web` bucket regardless of their detected language. You can override this using the `--layout` flag:
```bash
./corralctl --layout "{{.Owner}}/{{.Name}}" my-org
```
Supported placeholders:
* `{{.Owner}}` — GitHub owner name.
* `{{.What people ask about corral
What is sebastienrousseau/corral?
+
sebastienrousseau/corral is mcp servers for the Claude AI ecosystem. Automatically clone and organise GitHub repositories by visibility and language. It has 1 GitHub stars and its last recorded update is dated 2026-08-18.
How do I install corral?
+
You can install corral by cloning the repository (https://github.com/sebastienrousseau/corral) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is sebastienrousseau/corral safe to use?
+
Our security agent has analyzed sebastienrousseau/corral and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains sebastienrousseau/corral?
+
sebastienrousseau/corral is maintained by sebastienrousseau. The last recorded GitHub activity is dated 2026-08-18, with 0 open issues.
Are there alternatives to corral?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy corral to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/sebastienrousseau-corral)<a href="https://claudewave.com/repo/sebastienrousseau-corral"><img src="https://claudewave.com/api/badge/sebastienrousseau-corral" alt="Featured on ClaudeWave: sebastienrousseau/corral" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!