Overview
GitHub Orgs Repo Cloner dirancang untuk satu fungsi spesifik: menarik seluruh repository dari sebuah organisasi GitHub ke local disk dengan cepat dan tanpa konfigurasi njelimet.
Hanya ada dua subcommand inti:
list --org <name>: Menangani pagination kegh api orgs/<org>/reposdan mencetak daftar clone URL — langkah awal yang murah untuk memetakan "seberapa besar org ini?" sebelum kamu memutuskan clone massal.clone --org <name>: Mengambil daftar yang sama, otomatis menyaring repo yang berstatus archived, lalu menjalankan streaminggit cloneke<dest>/<repo>/satu per satu. Dengan begitu, kamu bisa melihat progres native git secara langsung di terminal.
Arsitekturnya dibuat sengaja ramping. Proses listing men-shell-out ke gh CLI bawaan (bebas ribet urusan personal access token); proses cloning men-shell-out ke binary git sistem, sehingga SSH key dan credential helper yang sudah kamu pasang langsung jalan otomatis — termasuk untuk repo private.
Tidak ada concurrency pool yang rumit atau manifest sidecar yang berlebihan: hanya pagination rapi, deduplikasi berbasis full_name, filter archived, dan output directory. Aman dijalankan berulang kali (idempotent), karena git clone otomatis melewati repo yang sudah ada di disk.
Nilai lebihnya ada pada kontrak integrasi dengan AI agent. Semua flag bersifat deterministik tanpa prompt interaktif, dan SKILLS.md di dalamnya ditulis khusus agar dipahami LLM — lengkap dengan kata kunci pemicu kapan agent harus menggunakannya dan kapan tidak. Ini menjadikannya utility primitive yang solid untuk backup org, proses offboarding/migrasi antar instance GitHub, atau analisis kode offline (air-gapped) — mengunduh semua codebase ke laptop agar terminal agent bisa leluasa me-ripgrep, membaca, dan menganalisis kode tanpa tercekik kuota rate-limit API.
Tech stack
Architecture
gh-tools/ # npm workspaces monorepo
├── packages/
│ └── orgs-repo-cloner/ # the leanest of the three — ~117 LoC
│ ├── src/
│ │ ├── cli.ts # entry — list + clone subcommands (commander)
│ │ │ # list: print <name>\t[archived]?\t<url>
│ │ │ # clone: filter archived → mkdir dest → git clone loop
│ │ └── github.ts # listOrgRepos() — paginated gh api (≤20 pages, dedup)
│ ├── SKILLS.md # LLM-agent manifest (when/when-not to invoke)
│ └── README.md
└── package.json # workspaces: ["packages/*"]
# deps: commander + execa only — no zod, no dotenv, no logger factory.
# auth: gh-CLI (list) + git (clone) — deliberately NOT dual-mode (documented).