octoscope v0.13.0 β Repos tab gets serious π’π΄π‘
Two additions on the Repos tab that turn it from a passive listing into a dashboard you actually live in.
CI status, at a glance
Every Repos row now leads with a coloured dot sourced from the default branch's status-check rollup:
- π’ green β passing
- π΄ red β failing
- π‘ yellow β pending / expected
- dim Β· β no rollup (no CI on this repo)

Press s and the sort cycle picks up a "by CI" entry that surfaces failing repos first β open octoscope and immediately see the rows that need attention.
Pinned repos
Press P on any Repos row to pin it. Pinned repos stick to a sticky section at the top of the list, ordered exactly as you want, separated from the rest by a muted rule. The choice is written back to ~/.config/octoscope/config.toml automatically β your pins survive restarts. Sort cycle, filter and public-only mode all respect the partition.
pinned_repos = [
"gfazioli/octoscope",
"gfazioli/Mantine-Hint",
]Quiet but important
There's also a vhs smoke harness under tapes/ that scripts the canonical user flows β same scenarios I used to walk through manually before every release, now reproducible with make tapes. And a CI workflow runs build / test / lint on every push, so regressions don't sneak through to a tag. None of this you see as a user, but every future release lands faster and safer because of it.
Upgrade
brew upgrade gfazioli/tap/octoscopeOr grab a binary from the release page: https://github.com/gfazioli/octoscope/releases/tag/v0.13.0
As always: read-only, free, MIT, on Linux / macOS / Windows. Source: https://github.com/gfazioli/octoscope
π What would you want to pin to the top?
π CI dashboards for the 5 repos you watch?
π Personal projects only?
Curious how people use it.


Replies
Nice stuff - and the VHS approach is amazing! I guess it would be really great to be able to have assertions inside tapes - that would make things sooo much easier to test
octoscope
@sk_uxpinΒ Thanks β and great catch. vhs by itself doesn't expose Expect / Assert in its DSL today (it's record-only), so the literal "assertions inside the tape" needs to land via a wrapper.
Three concrete paths I'm weighing for the follow-up:
1. Textual transcript + grep. vhs can dump a plain-text snapshot alongside the GIF; a tiny script asserts expected substrings ("breadcrumb says Files / file.go", "row 3 highlighted"). Cheapest entry point, no new deps.
2. PNG / SSIM diff against baseline. Catches layout shifts the textual pass misses, but fragile across OS/font renderers β every legit UI tweak forces a baseline refresh. Skipping until someone actually needs it.
3. charmbracelet/x/exp/teatest. The test-oriented sibling of vhs β drives the tea.Model with simulated messages and snapshots the rendered output at model level (no terminal artefacts). Probably the "proper" path for unit-style assertions on the TUI; vhs stays as the asset-generation / visual-smoke layer.
My current plan is to start with (1) β it pays for itself the moment any tape would catch a regression β and graduate to (3) when there's a real assertion lacking the textual grep can't express. (2) only if specific layout bugs ever ship and demand pixel-level coverage.
Tracked it for a future release. Thanks again for nudging this forward β both v0.12.0 and v0.13.0's follow-ups now have your fingerprints π
@gfazioliΒ sounds like a great approach to me!