Skillsight, the Terminal App I Finally Built
I've wanted to build a terminal app for ages.
There's something about a well-made TUI, the density of it, the keyboard-only navigation, the fact that it makes you feel like a hacker from the 80s. Every time I've used a good one I've thought, right, I'd like to make one of those.
The wanting was never the problem. The problem was never having a reason good enough to justify the time.
Then one turned up.
The frustration
Over the last year my setup has changed dramatically. Like most people, I've spent that year moving my development work over to agents, and that brings a lot of tool churn with it. The terminal is where I do almost everything now, running either Herdr or tmux across a handful of agent harnesses: Claude Code, Codex, Pi, and others. Each of them has its own skills, or plugins, or MCP servers. Usually all three.
None of them agree on where any of that lives, or what format it should be in. JSON here, TOML there, YAML frontmatter inside a folder of markdown files somewhere else again. Some things are global. Some are pinned to a single project. Some are bundled inside a plugin. Some are symlinked in from a shared store, so the file you're looking at isn't really the file.
Which is all fine, right up until you have thirty-odd projects and roughly a hundred of these things, and you sit down one morning and genuinely cannot answer three fairly basic questions:
Is this skill switched on here?
Where did it come from?
Is anything actually using it?
I'd been answering those with cat, find, and a great deal of guessing. Badly, as it turns out.
What I built
Skillsight reads the lot and puts it on one screen. The part I care most about is provenance. Most tools show you what one agent declares in the folder you happen to be sitting in, and stay quiet about the big inherited layer above it. Skillsight resolves the full global to project to local chain for every folder, then labels each item with where it came from and which runtimes actually point at it. So instead of "here's a config file", you get an answer.
Try it
npx skillsightYou'll need Node 22+. It only ever reads. No writes, no network, no telemetry, and MCP env and headers are reduced to key names so secret values are never read into memory.
If you'd rather not point it at your real setup straight away, there's a demo mode that renders a made-up machine and reads nothing real:
npx skillsight --demoThere are one-shot --report and --json modes too, if you'd rather pipe it somewhere than sit in a dashboard.
Honest caveats. macOS is what it's built and tested on. Linux should work (same paths, same symlink model) but I haven't verified it, so treat that as a maybe. Windows isn't supported yet. You'll want a Nerd Font for the folder and branch icons, or SKILLSIGHT_ICONS=off if you'd rather keep your current font and skip the glyphs.
It's on npm, the source is on GitHub, MIT licensed. Issues and opinions both welcome.
What I learned
The thing I didn't expect is how much of this was a design problem rather than an engineering one. Reading the config files is fiddly but tractable. Deciding what deserves a column, what belongs in a detail pane, and what should simply not be shown, that's where all the time went, and where every rewrite came from.
Which is probably why I enjoyed it. It's the same work I've always done, just rendered in a monospace grid with no CSS to hide behind.
Anyway. I finally built a terminal app. Only took me about a decade to find a reason.