0.16.0

Your GitHub — or anyone else's — at a glance

A native TUI that pulls profile, activity, repo health and network from the GitHub GraphQL API and keeps them current in the background. Works for your own account, or any public profile.

octoscope dashboard showing the crosshair banner, the Overview / Repos / PRs / Issues / Activity tab bar, and the profile, social, activity, operational and network sections with a coloured languages bar

Five tabs, one keystroke away

octoscope Repos tab: sortable, searchable list of your repositories with language, stars, forks, open issues and last-pushed time
Repos

Every repo, at a glance

Every repo in one sortable, searchable list — language, stars, forks, open issues, last push. Press s to sort, / to search.

octoscope PRs tab: open pull requests you authored, with draft / ready / conflicts state and last-update time
PRs

Everything you've opened

Your open pull requests across every repo — draft, ready or conflicting, newest-update first. Same sort & search as Repos.

octoscope Issues tab: every open issue you authored, sorted by number or updated time, with repo and last activity
Issues

Nothing slips through

Every issue you've authored, wherever it lives. Sort by number or updated, filter by substring — whole backlog, no browser.

octoscope Activity tab: 52-week contribution heatmap shaded on the accent-pink gradient with totals, current streak, longest streak and busiest day
Activity

Your year, shaded

52 weeks of contributions as a heatmap — plus total, current streak, longest streak and busiest day from the same cells.

At a glance

Profile

Who you are

Name, login, pronouns, bio, company, location, website, and how many years you've been on GitHub.

Social

Followers & stars

Followers, following, and total stars received across your non-fork repositories.

Activity

What you've shipped

Lifetime PRs authored and merged, issues opened, commits in the last year, plus a languages bar coloured with GitHub's own hex palette.

Operational

What's on your plate

Public repositories, forks received, open issues and open PRs across everything you own.

Network

Where you belong

Organisations you're a member of and verified social accounts — X, LinkedIn, Bluesky, Mastodon.

Any profile

Yours, or anyone else's

Run with no arguments for your own dashboard (with a token), or pass any GitHub username to see their public stats — octoscope torvalds, octoscope dhh, whoever.

Live feedback

See what moved

When a value changes between refreshes — a new star arrives, someone follows, a PR merges — the affected card's border flashes accent-pink for two seconds. No diffing numbers with your eyes.

Notifications

Stars & followers, live

Changes to your Stars and Followers trigger a native system notification and a short beep. You notice passive attention even when octoscope is in a background tab. macOS, Linux and Windows — no configuration needed.

Auto-refresh

Stays current on its own

The dashboard re-fetches every 60 seconds so the numbers you're looking at are never more than a minute old. Press r at any time for an on-demand refresh, q to quit.

Rate-limit aware

Knows when to slow down

The footer surfaces your GitHub API budget live — rate 4872/5000 · reset 23m — coloured muted, warn-yellow under 20%, error-red under 5%. If you hit the ceiling, auto-refresh backs off until the bucket refills instead of hammering every 60s.

Public-only mode

Safe for screenshots

Pass --public-only at launch — or hit p while running — to hide private repos, PRs and issues from the lists. Perfect for demos, screencasts and screenshots where you don't want internal work leaking. A yellow ◐ public-only badge sits next to authenticated in the profile card so you always know what mode you're in. Global counters stay complete; only the titles get filtered.

Clear errors

Says what actually went wrong

When a refresh fails, the footer tells you why: rate-limited · retry at 14:23, token rejected · check $GITHUB_TOKEN, offline · retrying, or github errored · retrying — so you know whether to wait, fix auth, or check the network.

Drill in

One keystroke deeper

Press enter on any row of Repos / PRs / Issues for a rich detail view: descriptions in markdown, reviewers, checks, comments, linked PRs and timelines. Inside a PR, press f to inspect the changed files and Enter on any of them to read its unified diff syntax-highlighted inline — never leave the terminal. One targeted query per item, no rate-limit pressure.

Repos tab gets serious

CI status · pinned repos

New in v0.13.0. The Repos tab now leads with a CI status dot on every row — green / red / yellow / dim — sourced from the default branch's status-check rollup, with a "by CI" sort that surfaces failing repos first. Press P on a row to pin it: pinned repos stick to a section at the top of the list (order preserved across refreshes), and the choice is written back to ~/.config/octoscope/config.toml automatically. Hand-edit the file to lock the ordering you want; press P again to unpin.

Watching more, seeing more

Star history · latest release · watched repos

New in v0.14.0. A 12-month star-history sparkline lands in the Repos drill-in — ▁▂▃▄▅▆▇ blocks over weekly buckets, plus "+N in last 12mo · last star Xd ago". A new latest release column on the Repos tab shows tag + age ("v1.2.3 · 3d") and joins the sort cycle. Add watch_repos = ["owner/name", ...] to the config to monitor repositories you don't own: they appear in a dedicated Watched section under your list, fetched in parallel with the dashboard refresh. Bonus polish: monochromatic themes (monochrome, phosphor, amber) now suppress the GitHub language palette, CI rollup green/red and Activity heatmap gradient — "zero chroma" finally means zero chroma end-to-end.

Notified when it matters

Review requests inbox · richer notifications

New in v0.15.0. The PRs tab grows a sticky "PRs awaiting your review" section above your authored list when someone has requested you as a reviewer — one search query (review-requested:@me) wired as a fifth parallel branch on the dashboard refresh, ordered most-recently-updated first, with the same drill-in / open-in-github / copy-URL key bindings as the rest of the tab. macOS notifications now ship a subtitle ("Stars", "Followers", or "Stars & Followers" when both moved at once) — one extra line in Notification Center that keeps the per-entry timestamp visible even when terminal-notifier groups them, and adds a visual category to the banner.

Support & what's new

Sponsor splash · What's new tab

New in v0.16.0. A small sponsor splash greets you at launch — o opens the Sponsors page, c copies the link, any other key dismisses. It's suppressed under --public-only so screenshots stay clean; opt out with show_sponsor = false or --no-sponsor. A new “What's new” tab (press 6) shows the highlights of the version you're running — bundled into the binary, so it works offline — with the sponsor link one keystroke away.

Configurable

Tune it to your habits

A small ~/.config/octoscope/config.toml lets you set refresh_interval, toggle public_only and turn on the dense compact layout. CLI flags --refresh 30s, --compact and --public-only override the file when you want a one-off run. Press , for the in-app settings panel or p for a one-key public/private toggle — both apply live and persist back to the file.

Drill in — one keystroke deeper

Press enter on any row of Repos / PRs / Issues to slide into a dedicated detail panel for that item — the canonical TUI gesture, mirroring lazygit / k9s / ranger. Each tab gets its own rich detail: Repos show visibility / license / language chips, description, quick stats, latest release, languages bar, recent commits with a N total · M by you in the last year inline counter, open issues / PRs preview, and topics; PRs add a state chip (Open / Draft / Merged / Closed), glamour-rendered description, reviewers, checks summary, files changed, recent commits, labels, and a curated timeline; Issues show a state chip, glamour-rendered description, assignees, recent comments, labels, linked PRs (those that would close the issue when merged), and a curated timeline.

New in v0.12.0: inside the PR drill-in press f for a full-screen list of the changed files, then Enter on any row for its unified diff with syntax highlighting (chroma's diff lexer, monokai palette). The file list and the diff viewer each get their own keymap (↑↓ navigate, pgup/pgdn page, o open on github.com, c copy path, esc back one level). All in a single targeted query per item plus one parallel REST round-trip for the patches — no fan-out across your list, no rate-limit pressure. Press space instead for the action menu (o open in browser, d view details, c copy URL) when you'd rather pick than commit.

A list row with the action menu modal centred over the body. Three entries: o Open in GitHub, d View details (highlighted with the cursor), c Copy URL. Footer hints read '↑/↓ select · enter confirm · esc back'.
The Repos drill-in: header with visibility / license / language chips, description, quick stats (stars / forks / issues / PRs / created / pushed), latest release, languages bar, recent commits with a 'N total · M by you in the last year' counter, open issues / PRs preview, and topics.
The PRs drill-in: title, state chip (Open / Draft / Merged / Closed), glamour-rendered markdown description, reviewers, checks summary, files-changed counts, labels, and a curated timeline. Title-bar hints read 'esc back · o open in github · r refresh · f inspect'.
The PR files-changed sub-view: a cursor-navigable list of files with status glyphs (A / D / M / R / C) and +Additions / -Deletions counts per file. Title-bar breadcrumb reads '▸ PRs / owner/repo#NN / Files'; footer hints offer ↑↓ move · enter inspect · o open on github · c copy path · esc back · q quit.
The PR file-diff sub-view: chroma-highlighted unified diff with red - lines and green + lines, hunk headers, and surrounding context lines. Title-bar breadcrumb reads '▸ PRs / owner/repo#NN / Files / path/to/file'; footer hints offer ↑↓ scroll · pgup/pgdn page · esc back · o open on github · c copy path · q quit.

The single-letter shortcuts also work directly from inside the action menu, so power users skip selection entirely. esc goes back to the list with the cursor preserved; r refetches; q quits the app from any depth, same as ctrl+c. Mutating actions (close issue, merge PR) are deliberately out of scope — octoscope stays read-only by design.

Themes

Seven built-in palettes, swappable on the fly with --theme NAME, the theme config key, or live in the in-app settings panel (,Theme / ). The dashboard repaints in the new colours without a restart.

The full set: octoscope (default, pink + cyan), high-contrast, terminal (adapts to your emulator), monochrome (zero chroma), stranger-things, phosphor (CRT green), amber (CRT amber). You can also override just the accent slot — accent_color = "#FF0080" in your config — while keeping the rest of the palette on the named theme.

Configuration

octoscope reads ~/.config/octoscope/config.toml on startup (honours $XDG_CONFIG_HOME when set). All keys are optional; missing keys fall back to defaults. CLI flags override file values. The file is not created automatically — drop the snippet below in to get started.

~/.config/octoscope/config.toml
# Auto-refresh interval. Go duration syntax: 30s, 1m, 5m, 1h.
refresh_interval = "1m"

# Hide private repositories, PRs and issues from the list tabs.
public_only = false

# Use the dense card layout in the Overview tab.
compact = false

# Visual theme. Built-in: octoscope (default), high-contrast,
# terminal, monochrome, stranger-things, phosphor, amber.
theme = "octoscope"

# Optional override for just the accent slot of the active theme.
# Hex ("#FF0080") or ANSI 256 ("201"). Leave unset to keep default.
# accent_color = "#FF0080"

You can also tweak everything from inside octoscope: press , (comma) while running and a settings panel opens. Changes apply live — a new refresh_interval reschedules the auto-refresh tick, compact re-renders immediately, public_only filters the lists on the spot, and theme repaints the whole dashboard in the new palette — and persist back to your config file.

Install

Homebrew (macOS & Linux)
$ brew install gfazioli/tap/octoscope
From source (Go 1.25+)
$ go install github.com/gfazioli/octoscope@latest
Pre-built binary

Grab a platform archive from the latest GitHub Release and drop the binary on your $PATH.

Authentication: octoscope reads $GITHUB_TOKEN first, then falls back to gh auth token. A token is effectively required if you keep the dashboard open for more than a few minutes — the unauthenticated GitHub rate limit (60/hour) won't survive the 60-second auto-refresh loop.
Token scopes: octoscope is read-only. A classic PAT with read:user (plus repo if you want private content) is enough; fine-grained tokens just need read on Metadata, Contents, Issues, Pull requests, Profile and Followers. Full breakdown in the README.

Usage

Your own dashboard (requires a token)
$ octoscope
Any public profile (token optional)
$ octoscope torvalds
$ octoscope gvanrossum
$ octoscope gfazioli

While running: 15 or tab switches tab, r refreshes on demand, q quits. Auto-refresh ticks every 60 seconds.

What octoscope can't show

Some things on your GitHub profile page aren't exposed by the GraphQL or REST APIs, so octoscope doesn't show them — achievements (Pull Shark, Starstruck, YOLO…), Highlights like the PRO badge, and the local time next to the location field. Surfacing any of these would require scraping the profile HTML, which we don't do.