Catalog Babysitter Users
Produce a curated, deduplicated catalog of public GitHub repositories that import defineTask from @a5c-ai/babysitter-sdk, stored at docs/repo-with-babysitter-processes.md. Refresh the catalog in-place when re-run; do not delete entries that no longer match (mark them as "last seen" instead, so the catalog is additive over time).
When to use
- User asks "who's using babysitter in the wild?", "find repos with babysitter processes", "refresh the catalog", "update the babysitter-users list".
- After a release, to see whether new adopters have appeared.
- Before a retrospective across external runs (see the sibling skill
retrospect-external-babysitter-run).
Prerequisites
ghCLI installed and authenticated (gh auth statusmust be OK). GitHub code search requires an authenticated user.- Writable working tree (the catalog file gets updated).
Exact search
Search the literal import statement across public code:
gh search code \
"import { defineTask } from '@a5c-ai/babysitter-sdk'" \
--json repository,path,url \
--limit 200
Also run the double-quote variant to catch formatter differences:
gh search code \
'import { defineTask } from "@a5c-ai/babysitter-sdk"' \
--json repository,path,url \
--limit 200
Union the two result sets. If the CLI caps out at 100 per query, paginate by adding language:javascript, language:typescript, and extension:js, extension:ts qualifiers to split the search space.
Filtering rules (apply in order)
- Drop any hit whose
repository.name(case-insensitive) equalsbabysitter. This excludes forks of this monorepo. - Drop any hit whose
repository.nameWithOwnerstarts witha5c-ai/-- those are first-party and already known. - Drop archived repos (
repository.isArchived === true). Enrich viagh api repos/<owner>/<name>if the search JSON lacks it. - Dedupe by
repository.nameWithOwner-- one entry per repo, even if multiple files match. Keep the count of matching files as evidence. - Drop private-visible-as-public fluke hits (repository.visibility !== 'public').
Enrichment per surviving repo
For each repo, fetch:
gh api repos/<owner>/<name> \
--jq '{nameWithOwner, description, stargazerCount: .stargazers_count, pushedAt: .pushed_at, defaultBranch: .default_branch, license: .license.spdx_id, topics}'
Also record:
processFiles: the list of matching file paths from the search (cap at 10 per repo in the catalog; note total count if higher).firstSeen: if the repo is new to the catalog, today's date (ISO). If already present, preserve the existing value.lastSeen: today's date (ISO) for every repo that matched this run.
Catalog file format
Maintain docs/repo-with-babysitter-processes.md as an additive, idempotent document. Structure:
# Repositories Using Babysitter
<!-- Generated by .claude/skills/catalog-babysitter-users. Re-run the skill to refresh. -->
Last refreshed: YYYY-MM-DD
Total repos tracked: N
New this run: M
No longer matching: K
## Active
| Repository | Stars | Description | License | Pushed | Process files | First seen | Last seen |
|------------|-------|-------------|---------|--------|---------------|------------|-----------|
| [owner/name](https://github.com/owner/name) | 123 | ... | MIT | 2026-04-01 | 3 | 2026-03-15 | 2026-04-12 |
### owner/name
- Default branch: `main`
- Topics: `a5c`, `orchestration`
- Matching files:
- [`src/processes/build.js`](https://github.com/owner/name/blob/main/src/processes/build.js)
- ...
## Stale (no longer matching at last refresh)
| Repository | Last seen | Notes |
|------------|-----------|-------|
| ... | ... | Import removed / repo archived / ... |
Rules when updating:
- Preserve every existing entry's
firstSeen. - Move a repo from Active to Stale only if it didn't match this run AND was Active last run. Include the reason if derivable (archived, 404, import removed).
- Never delete a Stale entry; only update its
lastSeennote if the situation changes (e.g. re-matched -> move back to Active). - Sort Active rows by stars descending, then by
pushedAtdescending. - Keep the summary counters at the top accurate.
Procedure
- Read the current
docs/repo-with-babysitter-processes.md(if absent, treat as an empty catalog). - Parse existing entries into a map keyed by
nameWithOwner. - Run both
gh search codequeries above; union results. - Apply the filtering rules.
- Enrich each surviving repo via
gh api repos/.... - Build the merged catalog: existing entries + new entries; move absent-this-run Active entries to Stale.
- Write the updated markdown file.
- Print a short summary to the user: N total, M new, K moved to stale, top 5 new repos by stars.
Notes on rate limits
gh search code is throttled (30 req/min for authenticated users). If the first pass returns the default cap, split by language: qualifier and by file extension: rather than spamming retries. Always include --limit 100 (max) and paginate via qualifier-splitting, not --page (code search doesn't page).
After running
Suggest the sibling skill retrospect-external-babysitter-run to go deeper on any specific entry -- "pick a repo from the catalog and retrospect on one of its runs".