CtrlK
BlogDocsLog inGet started
Tessl Logo

tessleng/skill-insights

Scan a directory or workspace for SKILL.md files across all agents and repos, capture supporting files (references, scripts, linked docs), dedupe vendored copies, enrich each Tessl tile with registry signals, and emit a canonical JSON inventory validated by JSON Schema. Then run four analytical phases in parallel against the inventory — staleness + git provenance (history, broken refs, contributors), quality (Tessl `skill review`), duplicates (similarity + LLM judgement), registry-search (per-standalone-skill registry suggestions, HTTP only) — and render a self-contained interactive HTML report with a top-of-report health overview, top-issues panel, recently-changed list, and per-tessl.json manifests view.

84

1.44x
Quality

90%

Does it follow best practices?

Impact

97%

1.44x

Average score across 2 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

duplicates.schema.jsonreferences/schemas/

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tessl.io/skill-insights/duplicates.schema.json",
  "title": "Skill Insights — Duplicates Output",
  "description": "Final duplicate clusters and overlapping pairs produced by detect-skill-duplicates (finalize_duplicates.py). Built from per-pair LLM verdicts via union-find.",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema_version", "metadata", "clusters", "overlapping_pairs", "estate_summary", "warnings"],
  "properties": {
    "schema_version": { "type": "string", "const": "1.0" },
    "metadata": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "scanned_at", "tool_version",
        "skill_count",
        "candidate_pairs_generated", "candidate_pairs_evaluated",
        "max_pairs_cap", "allow_cross_repo",
        "llm_calls", "failed_pairs"
      ],
      "properties": {
        "scan_id": { "type": ["string", "null"] },
        "scanned_at": { "type": "string", "format": "date-time" },
        "tool_version": { "type": "string" },
        "skill_count": { "type": "integer", "minimum": 0 },
        "candidate_pairs_generated": { "type": "integer", "minimum": 0 },
        "candidate_pairs_evaluated": { "type": "integer", "minimum": 0 },
        "max_pairs_cap": { "type": ["integer", "null"], "minimum": 0 },
        "allow_cross_repo": { "type": "boolean" },
        "llm_calls": { "type": "integer", "minimum": 0 },
        "failed_pairs": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["skill_a", "skill_b", "reason"],
            "properties": {
              "skill_a": { "type": "string" },
              "skill_b": { "type": "string" },
              "reason": { "type": "string" }
            }
          }
        }
      }
    },
    "clusters": {
      "type": "array",
      "items": { "$ref": "#/$defs/DuplicateCluster" }
    },
    "overlapping_pairs": {
      "type": "array",
      "items": { "$ref": "#/$defs/OverlappingPair" }
    },
    "estate_summary": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "duplicate_clusters", "skills_in_clusters",
        "overlapping_pair_count", "total_skills_implicated",
        "estimated_skill_reduction_potential"
      ],
      "properties": {
        "duplicate_clusters": { "type": "integer", "minimum": 0 },
        "skills_in_clusters": { "type": "integer", "minimum": 0 },
        "overlapping_pair_count": { "type": "integer", "minimum": 0 },
        "total_skills_implicated": { "type": "integer", "minimum": 0 },
        "estimated_skill_reduction_potential": { "type": "integer", "minimum": 0 }
      }
    },
    "warnings": { "type": "array", "items": { "type": "string" } }
  },
  "$defs": {
    "ClusterSeverity": {
      "type": "string",
      "enum": ["low", "medium", "high", "critical"]
    },
    "PairSeverity": {
      "type": "string",
      "enum": ["low", "medium", "high"]
    },
    "DuplicateCluster": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "cluster_id", "skill_ids", "dominant_skill_id",
        "verdict", "reason", "severity", "confirmed_pairs"
      ],
      "properties": {
        "cluster_id": { "type": "string", "pattern": "^cluster-\\d{3,}$" },
        "skill_ids": {
          "type": "array",
          "items": { "type": "string" },
          "minItems": 2,
          "uniqueItems": true
        },
        "dominant_skill_id": { "type": "string" },
        "verdict": { "type": "string", "const": "duplicate" },
        "reason": { "type": "string" },
        "severity": { "$ref": "#/$defs/ClusterSeverity" },
        "confirmed_pairs": {
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": ["skill_a", "skill_b", "verdict", "reason", "similarity_score"],
            "properties": {
              "skill_a": { "type": "string" },
              "skill_b": { "type": "string" },
              "verdict": { "type": "string", "const": "duplicate" },
              "reason": { "type": "string" },
              "similarity_score": { "type": "number", "minimum": 0, "maximum": 1 }
            }
          }
        }
      }
    },
    "OverlappingPair": {
      "type": "object",
      "additionalProperties": false,
      "required": ["skill_a", "skill_b", "verdict", "reason", "similarity_score", "severity"],
      "properties": {
        "skill_a": { "type": "string" },
        "skill_b": { "type": "string" },
        "verdict": { "type": "string", "const": "overlapping" },
        "reason": { "type": "string" },
        "similarity_score": { "type": "number", "minimum": 0, "maximum": 1 },
        "severity": { "$ref": "#/$defs/PairSeverity" }
      }
    }
  }
}

README.md

tile.json