ワンクリックで
pull-all-repos
Clone/pull git repos, verify local folders, auto-register orphans, and regenerate repos.md
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Clone/pull git repos, verify local folders, auto-register orphans, and regenerate repos.md
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Create an implementation plan in _plans/ with embedded repo context and step-by-step task lists
Execute a plan from _plans/, implementing steps, checking off tasks, running tests, and documenting fixes
Clone a git repo or register a local folder into repos/ and update repos.md with its description
Find and remove stale entries from repos.yaml whose directories no longer exist on disk
Iterate through all sub-repos in repos/ and stage/commit/push each one, then do the same for the master repo
Stage, commit, and push changes for the master repo only (excludes sub-repos in repos/)
| name | pull-all-repos |
| description | Clone/pull git repos, verify local folders, auto-register orphans, and regenerate repos.md |
| user-invocable | true |
| origin | template |
Read repos/repos.yaml at the project root and ensure all declared repositories and local source folders are present and up to date.
repos/repos.yaml — read the repos: listtype: git (or unset type) entry where repos/<name>/ doesn't exist, clone itrepos/<name>/ already exists, fetch and pulltype: local entry, verify repos/<name>/ exists on diskrepos/ not in the manifest, auto-detect type, analyze, and add to repos/repos.yaml.gitignorerepos/repos.md with current repo/folder analysisRead repos/repos.yaml from the project root. Each entry has:
name (required) — directory name under repos/type (optional, default: git) — "git" or "local"url (required for git, ignored for local) — git clone URLbranch (optional, default: main, git only) — branch to trackprefix (optional) — short prefix for the repo (used in references)description (optional) — one-line summaryIf repos/repos.yaml has an empty list (repos: []), skip steps 2–4 and proceed directly to step 5 (orphan detection). The manifest being empty does NOT mean the workspace is empty — there may be repos on disk that need to be registered.
For each entry where type is git (or unset) and repos/<name>/ does NOT exist:
git clone <url> repos/<name>branch is specified and it's not the default, run git -C repos/<name> checkout <branch>For each entry where type is git (or unset) and repos/<name>/ already exists:
.git directory)git -C repos/<name> fetch --all --prunegit -C repos/<name> branch --show-currentgit -C repos/<name> pull --ff-only
For each entry where type is local:
repos/<name>/ exists on diskmkdir -p repos/<name>) and report: created empty directory — user should add source filesLocal entries are never cloned, pulled, or synced from a remote. They are source folders managed directly.
List directories in repos/ and compare against repos/repos.yaml entries. For any directory that exists on disk but isn't in the manifest:
Auto-detect type — check if the directory has a .git/ subdirectory
.git/ → type: git.git/ → type: localFor git orphans:
git -C repos/<name> remote get-url origingit -C repos/<name> branch --show-currentrepos/repos.yaml:
- name: <name>
url: <remote URL>
branch: <current branch>
prefix: <inferred from name>
description: <1-line summary from analysis>
For local orphans:
repos/<name>/ be tracked by git, or gitignored?"repos/repos.yaml:
- name: <name>
type: local
gitignore: <true|false based on user's answer>
prefix: <inferred from name>
description: <1-line summary from analysis>
Analyze each orphan the same way as existing entries — read README, detect tech stack, scan directory structure (see Regenerate repos.md section)
Infer a prefix from the directory name (first 2-4 characters or a natural abbreviation, e.g., frontend → fe, shared-config → cfg). Avoid collisions with existing prefixes. If unsure, use the full name truncated.
Report what was registered:
✅ Registered
repos/<name>astype: git(remote:<url>) — added torepos/repos.yaml✅ Registeredrepos/<name>astype: local— added torepos/repos.yaml
Do NOT delete any directories. Registration is additive only.
After processing all entries, ensure the root .gitignore is correct:
.gitignorerepos/<name>/ is listed in .gitignore (add if missing) — git repos are always gitignoredgitignore field in repos/repos.yaml:
gitignore: true → ensure repos/<name>/ IS in .gitignoregitignore: false (or unset) → ensure repos/<name>/ is NOT in .gitignoregitignore field and the directory was just registered as an orphan, the user was already asked in the orphan detection step — use their answerAfter all sync operations, regenerate repos/repos.md. For each entry (git or local):
package.json, Cargo.toml, go.mod, pyproject.toml, or equivalent for tech stackgit -C repos/<name> remote get-url originCLAUDE.md, AGENTS.md, .github/copilot-instructions.mdWrite repos/repos.md with this format:
# Repositories
This file describes each repository and local source folder in `repos/`. Auto-generated by `/pull-all-repos`. Do not edit manually.
## <repo-name>
- **Type**: git | local
- **Remote**: <git remote URL> *(git only)*
- **Tech stack**: <languages, frameworks, key dependencies>
- **Description**: <1-2 sentence summary>
- **Key paths**: <notable top-level directories>
- **Agent instructions**: <which of CLAUDE.md, AGENTS.md, .github/copilot-instructions.md exist, or "None">
Omit the Remote line for local entries. If repos/ has no directories, keep the placeholder comment.
Report a table at the end:
| Entry | Type | Status |
|---|---|---|
<name> | git | Cloned / Updated (N new commits) / Already up to date / Error: <reason> |
<name> | local | Present / Created empty directory |
<name> | git | ✅ Registered (was orphan) |
<name> | local | ✅ Registered (was orphan) |
repos/repos.yaml doesn't exist, create it.