Search GitHub for repos, code, and usage examples using gh CLI. Capabilities: repo discovery, code search, finding library usage patterns, issue/PR search. Actions: search, find, discover repos/code/examples. Keywords: gh, github, search repos, search code, find examples, how to use library, stars, language filter. Use when: finding repositories, searching code patterns, discovering how libraries are used, exploring open source.
| Goal | Command |
|------|---------|
| Search repos | gh search repos "<query>" --limit 30 |
| Search code | gh search code "<query>" --limit 30 |
| Search issues | gh search issues "<query>" --limit 30 |
| Search PRs | gh search prs "<query>" --limit 30 |
GitHub matches your query tokens against repo name + description + README (for code search, the file contents). There is no semantic matching — a repo is invisible if its text doesn't contain words close to yours. Two ways a search misses:
Fix: generate keyword variants, and cascade from longer to shorter.
# ❌ Brittle — one long compound, matches almost nothing
gh search repos "AI powered headless browser automation framework"
# ✅ Variants + length cascade — run in parallel, shorter terms guarantee coverage
gh search repos "headless browser automation" --sort stars --limit 15
gh search repos "headless browser" --sort stars --limit 15
gh search repos "browser automation" --sort stars --limit 15
gh search repos "browserless" --sort stars --limit 15 # synonym
gh search repos "browser" --sort stars --limit 15 # shortest, widest net
| Rule | Why |
|------|-----|
| Longer → shorter | Each word you drop widens the match set; the shortest core noun catches repos with zero topics and terse descriptions |
| Generate variants | Authors and users pick different words (headless vs browserless, agent vs bot) — cover the synonyms |
| Never long-only | A single long compound is the most brittle query — if it's all you run, you miss the field |
| Run in parallel | Batch all variants into simultaneous calls; cost is the same, coverage is far higher |
| Repeat per language | Run the cascade in each target language with native terms (无头浏览器, автоматизация браузера) |
For complex queries where gh search repos gives different results than web:
# Template - URL-encodes query automatically
gh api "search/repositories?q=$(printf '%s' 'YOUR_QUERY_HERE' | jq -sRr @uri)&sort=updated&per_page=30" --jq '.items[].full_name'
Example - Multi-language with exclusions:
gh api "search/repositories?q=$(printf '%s' 'stars:>500 language:rust language:go language:TypeScript language:javascript -topic:ethereum -topic:cryptocurrency -topic:blockchain -topic:bitcoin -topic:web3' | jq -sRr @uri)&sort=updated&per_page=10" --jq '.items[].full_name'
Why use this?
gh search repos is a convenience wrapper with its own query parsinggh api search/repositories hits the raw API, matching web behavior exactlyCommon jq extractions:
| Output | jq filter |
|--------|-----------|
| Names only | --jq '.items[].name' |
| Full names | --jq '.items[].full_name' |
| With stars | --jq '.items[] \| "\(.full_name) ⭐\(.stargazers_count)"' |
| URLs | --jq '.items[].html_url' |
| Full JSON | (omit --jq) |
When you see: User wants to find projects/repos by criteria
Use: gh search repos
# Basic search with stars
gh search repos "stars:>500 language:rust" --sort=stars --limit=50
# Multiple languages (OR logic)
gh search repos "language:rust language:go language:typescript"
# Exclude topics
gh search repos "stars:>1000 -topic:cryptocurrency -topic:blockchain"
# By topic
gh search repos "topic:cli topic:terminal stars:>100"
# Recently updated
gh search repos "language:python pushed:>2024-01-01"
Output formats:
--json name,url,description,stargazersCount # JSON output
--web # Open in browser
When you see: User wants to know how to use a library
Use: gh search code
# Find usage patterns
gh search code "from zod import" --limit=20
gh search code "import { z } from 'zod'" --limit=20
# In specific file types
gh search code "useQuery" extension:tsx --limit=30
# In specific paths
gh search code "tanstack/query" path:src/ extension:ts
# Exact phrase
gh search code '"createTRPCRouter"' extension:ts
Pro tip: Combine with repo filter for focused results:
gh search code "pattern" repo:owner/repo
When you see: User looking for bug reports, feature requests, or discussions
Use: gh search issues or gh search prs
# Open issues with label
gh search issues "is:open label:bug repo:facebook/react"
# PRs by author
gh search prs "author:username is:merged"
# Issues mentioning error
gh search issues '"connection refused" language:go'
| Qualifier | Example | Description |
|-----------|---------|-------------|
| stars: | stars:>1000, stars:100..500 | Star count |
| forks: | forks:>100 | Fork count |
| language: | language:rust | Primary language |
| topic: | topic:cli | Repository topic |
| -topic: | -topic:blockchain | Exclude topic |
| pushed: | pushed:>2024-01-01 | Last push date |
| created: | created:>2023-01-01 | Creation date |
| license: | license:mit | License type |
| archived: | archived:false | Archive status |
| is: | is:public, is:private | Visibility |
| Qualifier | Example | Description |
|-----------|---------|-------------|
| extension: | extension:ts | File extension |
| path: | path:src/ | File path |
| repo: | repo:owner/name | Specific repo |
| language: | language:javascript | Code language |
| filename: | filename:package.json | File name |
| Flag | Description |
|------|-------------|
| --limit N | Number of results (max 1000) |
| --sort X | Sort by: stars, forks, updated, best-match |
| --order X | asc or desc |
| --json FIELDS | JSON output with specific fields |
| --web | Open results in browser |
gh search repos "language:X stars:>500" --sort=stars --limit=50
gh search code "import Y" extension:ts --limit=30
gh search code "from Y import" extension:py --limit=30
gh search repos "topic:Z -topic:cryptocurrency -topic:blockchain -topic:web3"
gh search repos "language:go pushed:>2024-06-01 stars:>100" --sort=updated
gh search repos "stars:>500"language:rust language:go matches either--json for scripting: --json name,url,stargazersCountpushed:2024-01-01..2024-06-01stars:100..500gh api for complex queries: When gh search repos gives unexpected results, use gh api search/repositories?q=... for exact web paritySearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer