CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/skill-discovery

Discover and apply best practice skills automatically. Gap analysis scans the codebase, skill-search fills gaps from the registry, skill-classifier separates proactive from reactive skills, quality-standards generates CLAUDE.md guidance, self-review compares code against checklists, and verification-strategy sets up test/lint/typecheck feedback loops.

86

Quality

86%

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

SKILL.mdskills/skill-search/

name:
skill-search
description:
Search the Tessl registry for skills that fill practice gaps identified by gap-analysis. Uses a two-pass strategy: first find language-agnostic best practice skills, then find technology-specific skills for the project's stack. Use after gap-analysis identifies gaps, when entering a new technology domain, or when the user asks "find skills for X", "what best practices exist for Y".
metadata:
{"author":"tessl-labs","version":"0.2.0","tags":["tessl","discovery","search","registry","install"]}

Skill Search

Search the Tessl registry for skills that fill identified gaps, then install and read them.

Tessl CLI

Always use the CLI via Bash for searching, not MCP tools. The MCP search tool only returns tiles and misses community skills.

tessl search --type skills "<query>"                                    # Find skills
tessl install <workspace/tile-name> --yes                               # Install tile
tessl install github:<user>/<repo> --skill <skill-name> --yes           # Install community skill

Two-Pass Search Strategy

Skills in the registry come in two flavours:

  1. Language-agnostic — universal best practice patterns that apply regardless of stack (error handling principles, security patterns, accessibility, testing strategy)
  2. Technology-specific — concrete implementations for a specific framework or tool (Express error middleware, React error boundaries, SQLite WAL mode)

You need both. The generic skill tells you what to do; the specific skill tells you how to do it in your stack.

Workflow

Step 1 — Read the Gap Report

Read .skill-discovery-state.json and look at the gaps array. Each entry is a domain that needs skills.

Step 2 — Pass 1: Search for Language-Agnostic Skills

For every gap domain, search for general best practice skills first. These apply to any project.

Search for every Core domain from the gap report — do not skip any:

DomainQuery
Error handling"error handling best practices"
Security"security best practices"
Testing"testing best practices"
Database"database design best practices"
Structured logging"structured logging best practices"
Accessibility"accessibility best practices"
Health checks"health check best practices"
Input validation"input validation best practices"

Step 3 — Pass 2: Search for Technology-Specific Skills

Now search again using the project's actual stack. Read package.json, requirements.txt, go.mod, or equivalent to identify the technologies in use, then search with the technology name included.

Include the framework/library name in every query:

Stack detectedQuery
Express"Express security", "Express error handling", "Express testing"
React"React best practices", "React testing", "React accessibility"
SQLite"SQLite best practices", "SQLite Node"
Flask"Flask security", "Flask testing"
PostgreSQL"PostgreSQL best practices"
Any framework"<framework> best practices", "<framework> testing"

Why two passes? A search for "security best practices API" may return Flask-specific results when you're using Express. A search for "Express security" finds the Express-specific skill directly. The generic search catches universal patterns; the specific search catches framework implementations.

Step 4 — Evaluate Results

For each search result, decide whether to install. Install a skill if:

  • It addresses a gap you identified
  • It matches the project's technology stack (or is language-agnostic)
  • It doesn't conflict with an existing project pattern that already follows best practices
  • It provides actionable guidance (checklists, patterns, code examples)

Prefer higher-scored results. Results with uplift scores (e.g., ↑6.18x) have been measured to improve code quality.

Skip a skill if:

  • The project already covers that domain well
  • It's for a different technology stack (e.g., Flask skill in an Express project)
  • It provides only generic advice with no concrete patterns

Step 5 — Install and Read

Install every relevant skill found. Read each SKILL.md in full before writing any code. Do not skim.

tessl install <workspace/tile-name> --yes

Then read the installed SKILL.md:

cat .tessl/tiles/<workspace>/<tile-name>/skills/<skill-name>/SKILL.md

Step 6 — Update State

Update .skill-discovery-state.json:

{
  "done": true,
  "skillsInstalled": true,
  "summary": "Pass 1: searched 6 domains, installed error-handling-patterns, security-basics. Pass 2: searched Express+SQLite, installed express-security-basics, sqlite-node-best-practices. No relevant skills found for: structured logging, health checks."
}

Set skillsInstalled to true if you installed any skills (keeps gap-analysis checks frequent) or false if not (gap-analysis checks become less frequent via adaptive backoff).

After Skill Search

Run the skill-classifier skill to classify your installed skills as proactive or reactive.

Session Memory

  • Track which gaps have been searched
  • Never repeat a search for the same gap in the same session
  • After 3 declined suggestions, stop suggesting for the session

skills

tile.json