Discover GitHub's hidden gems without leaving your terminal.
A keyboard-driven TUI that finds underdog repos, tracks rising stars,
and learns what you like — powered by gh CLI and local SQLite.
GitHub search is noisy. Trending lists reward fame over signal. GitVoyager flips the model: multi-signal scoring surfaces repos that are active, young, and under-appreciated — the projects you'd find if you had infinite time to browse.
- 9 discovery presets + Hot Space — Underdogs, Zero-Day Gems, Fresh Signal, Hidden Gems, Craft, Rising Stars, Agent-Ready, Contributor Magnets, Trending — plus a dynamic Hot Space preset fueled by live topic acceleration data
- Signal Board — see which topics are accelerating right now, before you even search
- Quality grades — A/B/C/D letter grades from intrinsic signals (README quality, CI, license, project structure) scored without cloning
- Watchlist with star velocity — track repos over time, see who's growing
- AI-powered summaries — optional Claude integration for README digests and trend analysis
- Taste profile & surprise picks — learns your preferred languages and topics, serves personalized discoveries
- Zero browser required — search, read READMEs, clone, compare — all in the terminal
Requires Go 1.25+ and an authenticated gh CLI.
Optional: claude CLI for AI features (auto-detected on startup).
git clone https://github.com/takoyaro/gitvoyager.git
cd gitvoyager
make installBinary lands in $GOPATH/bin — make sure that's on your PATH.
gitvoyager # interactive search prompt
gitvoyager -q "mcp server" # jump straight into results
gitvoyager rust web framework # positional args work too
gitvoyager data stats # aggregate discovery stats (JSON)
gitvoyager data repos --table # browse stored repos in a tableOn first launch you'll land on the discovery home screen. The Signal Board shows accelerating topics, and your Surprise Pick is waiting. Type a query or press 1–9 to fire a preset (0 for Hot Space). Press S for a new surprise pick based on your taste profile.
| Key | Action | Key | Action | |
|---|---|---|---|---|
| j / k | Navigate | o | Open in browser | |
| Enter / l | Select | c | Clone repo | |
| h / Esc | Back | w | Watch / unwatch | |
| Tab | Switch pane | W | Open watchlist | |
| Space | Peek overlay | s | Cycle sort mode | |
| / | Search | f | Filter results | |
| a | Advanced search | x | Exclude repo | |
| y / Y | Yank URL / clone cmd | C | Compare repos | |
| X | Exclusion manager | ← / → | Cycle language filter | |
| ? | Help | q | Quit |
AI (requires claude CLI)
| Key | Action |
|---|---|
| A | Summarize README |
| n | Natural language search |
| t | "Why is this trending?" |
Every result gets scored client-side across multiple dimensions:
| Score | What it rewards |
|---|---|
| Discovery | Stars + forks + issues + recency, normalized by repo age — young active repos rank higher |
| Underdog | Fork-to-star and issue-to-star ratio — finds repos with disproportionate community engagement |
| Freshness | Quality signals (description, license, language) + push recency + youth — gates the Fresh Signal preset |
| Intrinsic | README quality, CI presence, license, CONTRIBUTING guide, project structure — 0–10 score from GraphQL probes, no clone needed |
| Topic Heat | Acceleration ratio of a repo's topics over time — boosts repos in fast-growing problem spaces |
Optional. Defaults are sane. Lives at $XDG_CONFIG_HOME/gitvoyager/config.toml.
[search]
default_limit = 30
default_sort = "stars"
[clone]
default_directory = "" # empty = cwd
protocol = "ssh" # or "https"
[claude]
enabled = true
model = "haiku" # haiku | sonnet | opus
[exclusions]
keywords = ["awesome-list"] # hide repos matching name/description
topics = ["hacktoberfest"] # -topic: qualifiers in GitHub search
owners = [] # -user: qualifiers in GitHub search
[local]
enabled = false
scan_paths = ["~/Projects"] # detect deps → map to GitHub reposSee internal/config/config.go for all options.
All data follows XDG conventions:
| Path | Contents |
|---|---|
$XDG_CONFIG_HOME/gitvoyager/ |
config.toml |
$XDG_DATA_HOME/gitvoyager/ |
gitvoyager.db (SQLite, WAL mode) |
No telemetry. Network calls go through gh CLI and, when AI features are enabled, the claude CLI.
make build # → bin/gitvoyager
make test # go test ./... -v -race
make clean # rm -rf bin/Or with Task: task build, task test, etc.