Flanner Skills

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.

flanner skillsRead-only
$ flanner skills scan
+ 57 skills in effect, 53 shadowed
across 23 roots
$ flanner skills doctor
shadowed_package matcha
3 copies, from 2 places. The user copy wins.
Nothing executed

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.

The local web Skills page: counts for skills in effect, shadowed, from plugins and defective, above a table listing each skill with its scope, where it came from, its description and its file count.
The findings table on the local web Skills page: one manifest_invalid row where a skill's frontmatter name disagrees with its directory, and shadowed_package rows saying how many copies differ and which one wins.

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 your agent can and cannot do

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