CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/review-plugin-creator

Guided workflow for creating a custom Tessl reviewer plugin, by forking the default rubric or building one from scratch. Scaffolds the plugin directory structure, authors rubrics and config.json, and validates the result with tessl review run.

95

1.49x
Quality

93%

Does it follow best practices?

Impact

100%

1.49x

Average score across 4 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

rubric.schema.jsonskills/create-review-plugin/references/schemas/

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "rubric.schema.json",
  "title": "SkillReviewRubric",
  "description": "JSON Schema for skill review rubric files (rubrics/description.json and rubrics/content.json).",
  "type": "object",
  "required": ["evaluation_target", "scale", "reference_examples", "dimensions"],
  "additionalProperties": false,
  "properties": {
    "evaluation_target": {
      "type": "string",
      "description": "Which part of the skill (or artifact) this rubric evaluates. Built-in values are 'description' and 'content'; custom rubrics may use any string."
    },
    "scope": {
      "type": "string",
      "description": "Human-readable description of what is being evaluated (content rubric only)."
    },
    "scale": {
      "type": "object",
      "required": ["min", "max"],
      "additionalProperties": false,
      "properties": {
        "min": {
          "type": "number",
          "description": "Minimum valid score (inclusive)."
        },
        "max": {
          "type": "number",
          "description": "Maximum valid score (inclusive)."
        }
      }
    },
    "reference_examples": {
      "type": "object",
      "required": ["judging_guidelines", "good_overall_examples", "bad_overall_examples"],
      "additionalProperties": false,
      "properties": {
        "judging_guidelines": {
          "type": "array",
          "items": { "type": "string" },
          "minItems": 1,
          "description": "Ordered list of guidelines for the judge to follow."
        },
        "good_overall_examples": {
          "type": "array",
          "items": { "type": "string" },
          "minItems": 1,
          "description": "Examples of high-quality skills for this evaluation target."
        },
        "bad_overall_examples": {
          "type": "array",
          "items": { "type": "string" },
          "minItems": 1,
          "description": "Examples of low-quality skills for this evaluation target."
        }
      }
    },
    "dimensions": {
      "type": "array",
      "minItems": 1,
      "description": "Ordered list of evaluation dimensions. Weights must sum to 1.0.",
      "items": {
        "type": "object",
        "required": ["id", "name", "weight", "question", "scores"],
        "additionalProperties": false,
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]*$",
            "description": "Unique snake_case identifier for this dimension. Used as key in judge output scores."
          },
          "name": {
            "type": "string",
            "description": "Human-readable name for this dimension."
          },
          "weight": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 1,
            "description": "Fractional weight of this dimension in the overall score. All weights must sum to 1.0."
          },
          "question": {
            "type": "string",
            "description": "The core question the judge should answer for this dimension."
          },
          "rationale": {
            "type": "string",
            "description": "Why this dimension matters (optional, content rubric dimensions)."
          },
          "scores": {
            "type": "array",
            "minItems": 2,
            "description": "Anchor definitions for each score level.",
            "items": {
              "type": "object",
              "required": ["score", "anchor", "example"],
              "additionalProperties": false,
              "properties": {
                "score": {
                  "type": "number",
                  "description": "The numeric score value."
                },
                "anchor": {
                  "type": "string",
                  "description": "Brief description of what earns this score."
                },
                "example": {
                  "type": "string",
                  "description": "Concrete example of content at this score level."
                }
              }
            }
          }
        }
      }
    },
    "scoring_notes": {
      "type": "object",
      "required": ["simple_skills", "code_vs_instruction_skills", "feedback_loops"],
      "additionalProperties": false,
      "description": "Additional scoring guidance (content rubric only).",
      "properties": {
        "simple_skills": {
          "type": "string"
        },
        "code_vs_instruction_skills": {
          "type": "string"
        },
        "feedback_loops": {
          "type": "string"
        }
      }
    }
  },
  "if": {
    "properties": { "evaluation_target": { "const": "content" } }
  },
  "then": {
    "required": ["scope", "scoring_notes"]
  }
}

README.md

tile.json