For the complete documentation index, see llms.txt. This page is also available as Markdown.

Understand your skill estate

How to use Tessl Skill Inventory to understand the skills you have across your org and the extent of your skill sprawl.

Skills are multiplying across your repos. Most teams have no idea how many they have, who owns them, or how many are near-duplicates of each other.

Tessl Skill Inventory gives you a living map of every skill in your org - what exists, where it's used, and where you're duplicating effort.

It's free, and you can run it today.


The CLI import in the Quickstart below needs at least the publisher role. Creating an inventory from the web, enabling automatic scanning, and private indexing are manager-only. See Roles for the full permission breakdown.

Quickstart

1. Download Tessl

2. Download the Github CLI (we access your code through your Github auth via the CLI)

3. Authenticate

tessl login

4. Run the import

tessl inventory import

Tessl scans your repos, collects your skills and manifests, and gives you a snapshot of your whole inventory. Run it again any time - each scan is diffed, so you get a living view of what's new, unchanged, and removed over time.

Want to test on a subset first? tessl inventory import --repo repo-a --repo repo-b


Detailed Guide

How It Works

The tessl CLI scans your repository, collects your skills and manifest files, and uploads them to Tessl. Each upload is a snapshot — Tessl tracks what's new, what's unchanged, and what's been removed across successive uploads so you get a living view of your skill inventory over time.


The Tessl CLI

The scan runs entirely from your local machine using the tessl CLI. Before running it, you need two things:

  • GitHub CLI (gh) authenticated - the CLI uses your GitHub credentials to read repos and files. Access is scoped to whatever your GitHub account can see.

  • Logged in to Tessl - run tessl login to authenticate before scanning.

Running the scan

By default, tessl scans your last 100 most recently active repositories. For large organisations this is a good starting point, but you can be more selective using --repo:

tessl inventory import --repo repo-a --repo repo-b

You can pass --repo as many times as you like. This is useful for testing the import on a small subset before running it across your whole organisation.

What we don't collect

  • No code - only skill.md files and manifest files are read. Source code files are never accessed.

  • No names or email addresses - only GitHub usernames are collected, never real names or email addresses.

  • No repo clones - repos are never checked out. Individual files are fetched directly via the GitHub API.

GitHub API rate limits

The CLI uses the GitHub API under the hood, which has a limit of 5,000 requests per hour. If you have a large number of repos or skills, you may hit this limit mid-scan. In that case, wait for the limit to reset and re-run - successive scans are diffed, so you won't lose previously collected data.


What Gets Collected

Skills (skill.md files)

Every skill.md file found anywhere in your repository is collected, including:

  • The full markdown body

  • Any YAML frontmatter (name, description, etc)

  • The file path within the repo

  • Git metadata: created/updated dates, last touched by username.

Skills inside test fixture directories are included but tagged separately so they don't pollute your inventory metrics.

Manifest files

The following manifest files are collected if present:

File
What it represents

skills-lock.json

Skills installed via npx skills with pinned versions and content hashes

tessl.json

Tessl's installed skill manifest

tile.json

Legacy tessl plugin definition with skill declarations

.tessl-plugin/plugin.json

Tessl plugin definition

.claude-plugin/plugin.json

Claude plugin definition

.claude-plugin/marketplace.json

Marketplace plugin listing

.claude/settings.json

Claude Code agent settings. Used to determine which marketplaces are being used


Limitations

  • Linked files are not uploaded. If your skill.md references other markdown files (e.g. via @rules.md or a markdown link), those files are not followed or stored — only the skill.md itself is captured.

  • Scripts are not uploaded. Any executable files (.sh, .py, etc.) associated with a skill are not collected.

  • Manifest references are not resolved. The manifest files themselves are stored, but any file paths referenced inside them are not read or uploaded.

  • Default scan is capped at 100 repos. Only the 100 most recently active repositories are scanned by default. Use --repo to target specific repos if needed.

Last updated