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
93%
Does it follow best practices?
Impact
100%
1.49xAverage score across 4 eval scenarios
Passed
No known issues
{
"$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"]
}
}