Find out which skills your agent is really loading.
Install a few plugins and your agent quietly picks up dozens of skills from three different places. When two share a name, one wins and nothing tells you which. Flanner reads them all and answers.
How it works
Three places at once
Skills arrive from your project, your home directory and every plugin you have installed. Flanner reads all of them and says which copy your agent actually loads.
A read, and only a read
A skill package can carry scripts. None of them run during a scan, and nothing an agent owns is written to. Reading about a thing and executing it are different operations.
Watching is opt-in
Recording which skills get invoked is off until you turn it on, per repository. It stores that a name was invoked and when — not your prompts, not the replies.
Changes are reversible
An install snapshots whatever it replaces, so rollback always has something to restore. A directory you edited by hand is refused rather than overwritten.
The whole collection, in one place
flanner web opens a local dashboard. Every skill your agents would load, which copy is in effect, where each came from, and what is wrong with the collection.
This is a real capture, not a mockup. The numbers are from the machine Skills was developed on: 110 packages installed, 57 of them actually in effect.
Everything here is also a command, and everything a command does is also here. Neither surface is the poor relation.


And what is wrong with them
Two defects on this machine, both real. One plugin ships a skill whose frontmatter names a different skill than its directory — an agent matches on that name. And matcha exists in three places with different contents, where the copy in a home directory quietly wins over the plugin's.
Every finding names the file it came from, so you can check the claim rather than take it. Advice is kept apart from defects and never fails doctor: it is a judgement you may disagree with, and a judgement should not break your build.
A person approves the text
A skill can be drafted from work you hand over, reviewed against the evidence it came from, and approved. The approval covers the exact draft you read. Edit it afterwards and it goes back for another look, because a review of one text must never authorise the installation of another.
Send one to your team, on Flanner Mesh
What travels is the package files and nothing else: no record of who used it, no evidence it was written from. Receiving is not installing — a package waits until somebody on that machine decides. Following a skill tells you about a new version; it never installs one.
Nothing installs itself
A skill is a procedure your agent follows, which makes it a different kind of thing from a memory it reads. So none of this is exposed to your agent at all — not reading, not approving, and certainly not installing.
An agent that could approve and install its own skills would be writing its own instructions. That is the one line this feature will not cross, and it is why every command here is yours.
What it will not claim
It will not call a skill unused
It says a skill was not invoked in a stated window, and whether anything was watching during it. Zero uses and zero coverage are different facts, and only one means unused.
It will not learn on its own
Nothing is read from your conversation history. A skill is proposed from work you handed over, and an approval covers the exact draft you read — editing it sends it back.
It will not guess what a skill costs you
Package size is bytes on disk. That is not context consumption, and converting one into the other would produce a number that looks precise and is invented.
It will not run a comparison for you
Flanner records evaluations; it calls no model provider. A combination nobody ran is reported as not run rather than as a zero, with its sample size beside it.
Skills is free, in the open-source client
No account, and nothing leaves your machine. Sharing one with a team needs Flanner Mesh.
uv tool install flanner
