private-repo-search
Private Repo Search
Section titled “Private Repo Search”gh search code — GitHub’s code search API through the CLI you already have
authenticated, scoped to exactly the repos/orgs you need instead of a raw
gh api call.
Prerequisites
Section titled “Prerequisites”Requires the gh CLI installed.
gh auth status # confirm authenticated; code search needs no extra scope beyond defaultCore usage
Section titled “Core usage”gh search code <query> [flags]| Flag | Use for |
|---|---|
--owner <org-or-user> |
Scope to everything an org/user owns |
--repo <owner/name> (repeatable) |
Scope to specific repo(s) |
--language <lang> |
Filter by language |
--filename <name> |
Filter by filename (e.g. package.json) |
--extension <ext> |
Filter by file extension |
--match file|path |
Restrict the match to file contents or the path itself |
--json path,repository,sha,textMatches,url + -q <jq-expr> |
Structured output for scripting |
-L, --limit <n> |
Result cap (default 30) |
# Find where a symbol is used across every repo in an orggh search code "someFunctionName" --owner patrickserrano
# Narrow to specific repos and a languagegh search code "RLSPolicy" --repo patrickserrano/harness --language go
# Find a config file by name across everything you can seegh search code --filename .lacquer.toml
# Machine-readable output for a downstream stepgh search code "TODO(migration)" --owner patrickserrano --json path,repository,url -q '.[] | "\(.repository.nameWithOwner): \(.path)"'After finding a hit
Section titled “After finding a hit”gh search code returns matched paths, not full file content. Fetch the
actual content once you know the repo and path:
gh api repos/<owner>/<repo>/contents/<path> --jq '.content' | base64 -d# or, simpler for a quick look:gh api repos/<owner>/<repo>/contents/<path> -H "Accept: application/vnd.github.raw"Caveats
Section titled “Caveats”- Results lag behind pushes. The index isn’t real-time — a just-pushed commit may not show up for a few minutes.
- Legacy search engine.
gh search codeuses GitHub’s older code-search API, not the newer engine github.com’s web UI uses — results and available qualifiers (no regex) can differ from what you’d see in the browser. - Scope is “everywhere
ghcan see.” A search with no--owner/--repofilter that returns nothing from a private repo you expect usually means an auth/visibility gap, not that the content isn’t there — checkgh auth statusand repo access before concluding a miss is real.