An Agent Skill that builds a skill with evals out of the conversation in which the agent finally got it right.
84
98%
Does it follow best practices?
Impact
96%
1.71x1 of 3 eval scenarios. Add 2 more for a full score.
Passed
No findings from the security scan
Editing evals/, evals-reference/, evals-regression/, scoring rules, or any claim about how
much the skill helps.
task.md. Write the prompt a user would type: the task, the version or
environment, and the inputs. Never the diagnosis, the convention, or the shape of the answer.criteria.json to make a run pass. If a criterion is unfair (it asks for something
the task never required, or rejects a correct answer), fix it as its own fix(evals) commit
with the reason, then rerun both variants.scripts/local_screen.sh is a local screening result (Local
screening): it decides placement and guides tuning, and is recorded as
local with its run count and range, never presented as a hosted result.task.md starts with a # heading, contains an Assume sentence that names the version or
environment (Assume Python 3.12.), and asks for a named file such as settings.py or
review.md.capability.txt is one line naming the capability under test.criteria.json is a Tessl weighted_checklist: context, type, and checklist items with
name, description, and max_score. Nothing else, so tessl eval lint stays clean.criteria-meta.json holds this repository's metadata (invocation, task_type,
evidence_type) and a categories map from each checklist name to safety, quality, or
maintainability.invocation is natural when the prompt never names the skill and explicit when it says
Use $my-skill. Report the two separately; only natural scenarios show that the description
triggers the skill. The validator does not require a mix, because an explicit-only skill can
have no natural scenarios.task.md, the context of criteria.json, or the name or description of a check: "skill
bundle", "the skill's", "as the skill says", "from the skill", or "bundled". The validator
reads nothing else, so criteria-meta.json and capability.txt never trigger it. It then
requires evidence_type: skill_context_dependent in evals-regression/. If the scenario does
not need the skill's text, reword the phrase instead of moving it.evals/ is the main suite and the only source of lift claims. Run it with both variants.
evals-reference/ holds candidates and broad coverage. Run it with both variants.
evals-regression/ holds scenarios both variants already solve, plus scenarios that need text
only the skill contains. Run it with the skill only.
evidence_type says why a scenario sits where it does: ordinary_lift, focused_main,
focused_reference, solved_regression, or skill_context_dependent. The validator enforces
which suite each value may live in.
New scenarios start in evals-reference/. A scenario starts in evals-regression/ only when
it needs text that exists only in the skill; a reference scenario moves there once it scores 100
both with and without the skill. Classify each one from an isolated run:
tessl eval view <run-id> --json > /var/tmp/eval-run.json
python3 scripts/classify_eval_result.py /var/tmp/eval-run.json --scenario-dir <scenario-dir>Promotion to evals/ needs 100 with the skill and a delta of at least 30 percentage points.
Move the folder rather than copy it: a main task that shares 85% or more of its eight-word runs
with a reference or regression task fails the validator as a duplicate.
NUMBERING.md has the full rule and the numbering scheme.
skills/my-skill/references/: no scenario names, expected outputs, rubrics,
run IDs, or scores.runtime_reference_overlap_rationale..tessl-plugin
skills
build-a-skill
assets
template
.tessl-plugin
evals
01-settings-loader-errors
evals-reference
01-webhook-error-review
evals-regression
02-hard-stop-audit
scripts
skills
my-skill
references