Skip to main content

skillrecall

Measure how reliably an agent skill gets picked when it is installed next to other skills, and get a short, ranked list of edits that make it get picked more.

A skill is a directory with a SKILL.md. The host reads only the name and description when it decides which skill to use, so those two fields are what an author is really designing. skillrecall puts your skill in a room with its competitors, sends in a sample of realistic requests, counts how often yours wins, tries concrete edits to the description, and tells you which ones measurably help.

You edit, run it again, and it tells you what moved.

Install

uv tool install git+https://github.com/modiqo/skillrecall

Or pin a release wheel:

uv tool install https://github.com/modiqo/skillrecall/releases/download/v0.1.0/skillrecall-0.1.0-py3-none-any.whl

pipx install git+https://github.com/modiqo/skillrecall works the same way. The package is not on PyPI yet; uv tool install skillrecall will work once it is.

The core has no dependencies beyond Python 3.11. Optional extras:

Extra Adds Install
tokens Exact token counts instead of estimates uv tool install "skillrecall[tokens] @ git+https://github.com/modiqo/skillrecall"
dense A local embedding model as a second scorer uv tool install "skillrecall[dense] @ git+https://github.com/modiqo/skillrecall"
router A reference run that asks a model to route a sample of tasks uv tool install "skillrecall[router] @ git+https://github.com/modiqo/skillrecall"
all Everything above uv tool install "skillrecall[all] @ git+https://github.com/modiqo/skillrecall"

Use

skillrecall assess path/to/my-skill

That competes your skill against the closest skills in the public catalog. The skill does not have to be on disk. A skills.sh link, a GitHub link, or an owner/repo/skill id works the same way; the skill's files are fetched once and cached:

skillrecall assess https://skills.sh/owner/repo/my-skill
skillrecall assess https://github.com/owner/repo/tree/main/skills/my-skill
skillrecall assess owner/repo/my-skill

Add the skills already installed on your machine, or a directory of your own:

skillrecall assess path/to/my-skill --installed
skillrecall assess path/to/my-skill --corpus ./our-team-skills
skillrecall assess path/to/my-skill --installed --corpus ./our-team-skills --neighbours 60

Real requests beat generated ones. If you have them, put one per line in a file:

skillrecall assess path/to/my-skill --tasks-file requests.txt

What you get

Skill: landing-clarity
Competition: 28 other skills (28 from the public catalog)

How often you get picked
  When a task is yours, you are chosen about 6 in 10.
  Confidence: moderate (100 sample tasks).
  In bigger requests that need several skills, you are among the top 3 about 7 in 10.

Who takes your tasks
  landing-page-review (acme/skills)       takes about 1 in 10   44 installs
  landing-page (jezweb/claude-skills)     takes about 1 in 10   38 installs

Whose tasks you take
  landing-pages (someone/skills)          you answer about 1 in 10 of its tasks by mistake

Do these, in order
  1. Say the words people use when they ask for this (headline, subhead); for example add “Also covers headline and subhead.”
     Expected: picked more often, shows up more in bigger tasks.
  2. Remove sentence 4: “Trigger even if the user only pastes a URL, a screenshot, or a block of copy.”
     Expected: shorter by 20 tokens, no loss.

  If you apply them together, the header becomes:
    description: Audit a landing page or hero section for clarity ... Also covers headline and subhead.
  Expected: picked about 9 in 10 (from about 6 in 10); mistaken pickups almost never; 9 tokens shorter.

Structure
  [consider] The description never says what the skill produces.
        Add one clause naming the result, for example “returns a ranked list of fixes”.

Every edit shown was applied to a copy of your description and rescored on the same requests. Edits that would hurt are not shown. When you rerun after editing, the report opens with what changed.

Output formats

skillrecall assess my-skill                       # human, simple
skillrecall assess my-skill --detail detailed     # adds sizes, every competitor, every edit tried, sample tasks
skillrecall assess my-skill --explain             # appends how the numbers were measured
skillrecall assess my-skill --format json         # machine-readable, same sections
skillrecall assess my-skill --format json --detail detailed -o report.json
skillrecall history my-skill                      # previous runs for this skill

The JSON has a stable top level: skill, competition, pickup, takes_your_tasks, you_take_theirs, edits, suggested, structure, since_last_run. Detailed adds neighbours, all_edits, terms, sample_tasks, scorers, and options.

Options that matter

Flag Default Meaning
--neighbours N 40 How many catalog skills to compete against
--tasks N 100 How many of your own requests to sample; more gives a tighter confidence range
--installed off Also compete against every skill installed on this machine
--corpus DIR Compete against a directory of skills; repeatable
--no-catalog Skip the public catalog entirely
--offline Use cached catalog data only, never touch the network
--dense off Add the local embedding scorer (needs the dense extra)
--reference off Ask a model to route 30 tasks and report agreement (needs the router extra and credentials)
--seed N 7 Sampling seed; same seed and same competitors give the same numbers
--no-save Do not record this run in the history

Catalog searches and fetched competitor files are cached under ~/.cache/skillrecall for an hour and a week respectively. Run history lives under ~/.local/state/skillrecall. Set GITHUB_TOKEN to raise the rate limit when many competitors live in repositories with unusual layouts.

Use from Python

from skillrecall import Options, assess

result = assess(Options(skill_path="path/to/my-skill", include_installed=True))
print(result.recall.value, result.confidence)
for edit in result.edits:
    print(edit.instruction, "->", edit.verdict)
report = result.as_dict(detail=True)

How it works

The method is described step by step in ALGORITHM.md. In one paragraph: requests are sampled from your skill's body and from the bodies of its closest competitors; each request is routed across every competitor's name and description by a lexical scorer that treats hand-off sentences as rules, plus an optional embedding scorer; you are "picked" when you score highest; rates carry bootstrap intervals; and every suggested edit is a change that was applied and rescored on the same requests before being shown to you.

Development

uv venv && uv pip install -e ".[dev]"
uv run pytest
uv build

License

MIT

Metadata

Release files for skillrecall 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skillrecall 0.1.0
File Size Uploaded
skillrecall-0.1.0.tar.gz 41.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for skillrecall 0.1.0
File Interpreter ABI Platform
skillrecall-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 88.4 kB

Release files / skillrecall-0.1.0.tar.gz

Download URL skillrecall-0.1.0.tar.gz
Size 41.5 kB
Tags Source
SHA-256 checksum
How to use checksums
3b8c92dfdbcec8272ed7330d12226a2a7ae5f7e1a1f733d864ea44fcab77037c
BLAKE2b-256 checksum
How to use checksums
5b3da896dfd0877eb88eb2b26573465befaf5a19fe95718be16903f05f60ccfd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / skillrecall-0.1.0-py3-none-any.whl

Download URL skillrecall-0.1.0-py3-none-any.whl
Size 46.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
749231038a614b5b8e1a53000bc4e9d1d83849d52c8dd679ff2e7393b66b54ed
BLAKE2b-256 checksum
How to use checksums
510b46e23e9473e532b6be2d3f6a62cce7fef41669437f625c6a301f2456f080
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.16 {"installer":{"name":"uv","version":"0.11.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page