원클릭으로
github-repo-sync
Sync a plain-text list of GitHub repositories to local disk with optional macOS scheduled execution.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Sync a plain-text list of GitHub repositories to local disk with optional macOS scheduled execution.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Open local review artifacts in Xiaoer Omia when users ask to open, preview, inspect, or review a file.
Run a measured improvement loop for a skill by defining a yes/no checklist, capturing a baseline, scoring candidate outputs, and logging each iteration's keep/revert decision. Use when a skill works inconsistently and you want evidence-driven iteration instead of random prompt edits.
Build a static HTML report site from CSV, JSON, Markdown, or HTML inputs. Use when the user wants to turn existing data into a human-readable site, generate a data showcase page, create a static report website, or optionally publish the built site.
Add offline multilingual support to static HTML, small web projects, or reports by extracting text into tokens, maintaining language dictionaries, applying translated outputs, and optionally embedding a local language switcher. Use when the user asks for bilingual support, tokenizing Chinese copy, offline language switching, or i18n for reports and lightweight sites.
Unified entrypoint for Obsidian note operations such as cleanup, merge, lint/fix, meeting archive, daily rollover, and docs sync. Use when the user wants one command surface over an existing notes-tools repo instead of calling many atomic scripts by hand.
Test, tune, and regression-check LLM system prompts with a golden dataset. Use when the user wants to optimize a prompt, run prompt regression tests, manage `cases.yaml`, compare expected vs actual outputs, or follow a TDD workflow for prompts.
| name | github-repo-sync |
| description | Sync a plain-text list of GitHub repositories to local disk with optional macOS scheduled execution. |
| version | 1.0.0 |
| author | Vivi |
| tags | ["git","sync","automation","github"] |
| platforms | ["macos","linux"] |
| dependencies | ["python3","git"] |
Maintain a repos.txt file, run one command to clone or update all listed repositories.
cp .env.example .env
vim repos.txt # Add your repos
python3 main.py run
python3 main.py run [--repo-list FILE] [--root-dir DIR] [--only OWNER/REPO] [--dry-run]
| Option | Description | Default |
|---|---|---|
--repo-list | Path to repo list file | repos.txt |
--root-dir | Local root for synced repos | ~/Code/github-sync |
--only | Limit to specific repos (repeatable) | (all) |
--dry-run | Preview without executing | false |
--git-bin | Git executable path | git |
python3 main.py install-launch-agent [--interval-minutes N] [--label LABEL] [--dry-run]
| Option | Description | Default |
|---|---|---|
--interval-minutes | Sync interval | 60 |
--label | launchd label | com.example.github-repo-sync |
--dry-run | Preview plist only | false |
python3 main.py uninstall-launch-agent [--label LABEL] [--dry-run]
All via .env or environment variables:
| Variable | Description | Default |
|---|---|---|
REPO_LIST_FILE | Repo list path | repos.txt |
SYNC_ROOT_DIR | Local sync root | ~/Code/github-sync |
GIT_BIN | Git executable | git |
SCHEDULE_INTERVAL_MINUTES | Launchd interval (min) | 60 |
LAUNCH_AGENT_LABEL | Launchd label | com.example.github-repo-sync |
| Scenario | Action |
|---|---|
| Directory missing | git clone |
| Clean worktree + has upstream | git fetch --all --prune + git pull --ff-only |
| Dirty worktree | Skip pull (protect local changes) |
| Detached HEAD | Skip pull |
| No upstream on current branch | Skip pull |
| Not a git repo | Skip entirely |
github-repo-sync/
├── main.py # CLI entry point
├── repos.txt # Repo list (user-maintained)
├── .env.example # Configuration template
├── logs/ # launchd logs (auto-created)
├── SKILL.md
└── README.md
Private repos failing? Ensure your SSH key or Git credential helper is configured for the repo host.
Repos showing "skipped"? Expected when: local changes exist, detached HEAD, or no upstream set. This protects your work.
Want a different list file?
Set REPO_LIST_FILE in .env or pass --repo-list /path/to/file.txt.