Create Custom Grader logo

Create Custom Grader

Organization
NVIDIA
create-custom-grader

Use when converting an existing benchmark, rubric, verifier, task YAML/JSON, or domain check into SkillEvaluator BYOG/BYOT custom evaluation.

Overview

PublisherNVIDIA
RepositorySkillEvaluator
Skill namecreate-custom-grader
Stars
560
Forks
65
Bundled files
1
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by NVIDIA on GitHub. Read the source before you install it.

Installation

Install the Create Custom Grader AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/NVIDIA/SkillEvaluator/tree/main/src/skillevaluator/tier3/reference_skills/create-custom-grader
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/NVIDIA/SkillEvaluator.git /tmp/SkillEvaluator
mkdir -p .claude/skills
cp -r /tmp/SkillEvaluator/src/skillevaluator/tier3/reference_skills/create-custom-grader .claude/skills/create-custom-grader
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Create Custom Grader in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Create Custom Grader on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Create Custom Grader is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Create Custom Grader

Convert team-owned benchmark definitions into runnable SkillEvaluator custom graders and, when needed, native Harbor tasks.

Purpose

Help an agent author valid SkillEvaluator BYOG/BYOT files from a user's benchmark instead of leaving the user with empty grader templates.

When To Use

Use this skill when the user wants to:

  • bring an existing benchmark into SkillEvaluator
  • turn a rubric into evals/grader.py or evals/grader.sh
  • add custom metrics beside the default evaluator metrics
  • convert task files such as task.yaml, task.json, pytest checks, or shell verifiers into BYOG or BYOT
  • prove a team can run its own benchmark through SkillEvaluator

Do not use this skill for ordinary evals/evals.json authoring when no custom grading logic is needed. Use the normal dataset authoring workflow for that.

Instructions

  1. Read the target skill, existing evals/, benchmark prompts, fixtures, and any verifier code.
  2. Choose default_plus_custom when custom metrics should complement default evaluator scoring.
  3. Choose custom_only only when the user wants the custom grader to own pass/fail semantics.
  4. Write or update evals/grader.py or evals/grader.sh, then validate the Harbor contract.

Examples

bash
skillevaluator init-custom-grader <skill-dir> --language python --mode default_plus_custom
skillevaluator tier3 validate <skill-dir>

Prerequisites

  • The target skill directory should contain SKILL.md.
  • The SkillEvaluator CLI should be available as skillevaluator.
  • Full E2E evaluation may need agent credentials, sandbox access, GPU access, or service credentials depending on the benchmark.

Core Choice

Choose one path before writing files:

User needEvaluator shape
Existing evals.json task plus extra domain checksTop-level BYOG: evals/grader.py or evals/grader.sh
Existing benchmark prompt/rubric that can run in the generated workspaceTop-level BYOG plus evals/evals.json and evals/files/
Benchmark owns task layout, setup, service lifecycle, or verifier harnessNative BYOT/BYOG: evals/harbor/<case>/...
User wants only custom reward/pass criteriagrading.mode: custom_only
User wants default evaluator dimensions plus custom metricsgrading.mode: default_plus_custom

Default to default_plus_custom unless the user explicitly wants the custom grader to replace the default evaluator metrics.

Workflow

  1. Resolve the target skill and benchmark source. Read the target SKILL.md, existing evals/, benchmark prompts, fixtures, rubric, reference solution, tags, and any expected trigger/non-trigger metadata.

  2. Map benchmark fields into evaluator inputs. Use benchmark prompts or prompt variants as question entries. Use the target skill as expected_skill. Put each case's required starter files under evals/files/<case-id>/, and declare files: ["evals/files/<case-id>"] on every corresponding eval entry. Do not omit files in a multi-case dataset, because omission intentionally stages the entire shared directory for legacy compatibility. Preserve benchmark-specific rubric text in the entry only when the grader needs to read it.

  3. Scaffold the evaluator contract. For generated tasks:

    bash
    skillevaluator init-custom-grader <skill-dir> --language python --mode default_plus_custom

    For shell checks:

    bash
    skillevaluator init-custom-grader <skill-dir> --language shell --mode default_plus_custom

    For native Harbor tasks:

    bash
    skillevaluator init-harbor-task <skill-dir> --case-id <case-id> --with-config
  4. Replace scaffold placeholders. The custom grader is real executable logic, not metadata. It must read available evidence, compute numeric scores, and write the evaluator reward contract.

  5. Validate before running.

    bash
    skillevaluator validate <skill-dir> --harbor-contract

    Fix missing files, invalid Python, missing reward output, and native Harbor ID mismatches before evaluation.

  6. Run the deepest practical proof. Prefer a real with-skill/baseline run. If services, credentials, GPU, or cost block full E2E, state exactly what was validated and what was not.

Grader Contract

Python and shell graders run inside the Harbor verifier context. They may read:

  • /logs/agent/trajectory.json for agent actions and final answer evidence
  • /tests/entry.json for the eval case metadata
  • /workspace/input/ for the entry's declared committed fixtures from evals/files/
  • /solution/ or other task outputs only when the task environment produces them

They must write:

  • /logs/verifier/reward.json
  • /logs/verifier/reward.txt with a numeric score from 0.0 to 1.0

Use this reward shape:

json
{
  "overall": 0.92,
  "custom_metrics": {
    "domain_repair": 1.0,
    "domain_verification": 0.8
  },
  "details": {
    "domain_repair": {
      "score": 1.0,
      "reason": "The solution repaired the required files."
    }
  }
}

In default_plus_custom, default evaluator scoring keeps its overall authoritative and adds the grader's custom_metrics into reports. In custom_only, the grader's overall is the pass/fail reward.

Never emit custom metric names that collide with reserved evaluator fields: security, skill_execution, skill_efficiency, accuracy, goal_accuracy, behavior_check, overall, details, metrics, metric_set, or entry_id.

Translation Rules

  • Convert each rubric item into a deterministic check when possible.
  • If a rubric item requires judgment, encode observable proxies and explain the limits in details.
  • Keep metrics stable across baseline and with-skill runs.
  • Score only the generated task workspace. Do not accidentally score copied skill source files, reference fixtures, or grader templates.
  • Keep custom metric values clamped to 0.0 through 1.0.
  • Preserve benchmark prompt variants as separate eval entries only when they exercise meaningfully different behavior.
  • Convert expected trigger/non-trigger metadata into expected_skill, expected_behavior, negative cases, or custom metrics that inspect trajectory evidence.

RAPIDS-Style Example

For a benchmark task with task.yaml, code/, prompt variants, coverage, and a rubric:

  1. Copy code/ into evals/files/<case-id>/.
  2. Create one or more evals/evals.json entries from the prompt variants, and set files: ["evals/files/<case-id>"] on each corresponding entry.
  3. Set expected_skill to the benchmark's target skill.
  4. Implement evals/grader.py to inspect the agent trajectory and changed workspace files.
  5. Emit custom metrics for each rubric criterion, for example rapids_diagnosis, rapids_requirements_repair, rapids_repair_safety, and rapids_verification.
  6. Validate and run SkillEvaluator with and without the target skill, then report both default evaluator metrics and custom metric deltas.

Limitations

  • The skill can design and implement deterministic checks, but ambiguous rubric judgment still needs explicit observable proxies or a human-approved scoring policy.
  • init-custom-grader creates scaffolding only; the agent must replace the placeholder scoring logic.
  • Local validation proves file contracts, not live agent behavior. Do not call the benchmark proven until an evaluation run has produced real rewards.

Troubleshooting

ProblemFix
evals/evals.json missingCreate entries from the benchmark prompt or run init-custom-grader to seed one.
Custom metrics do not appearEnsure reward.json has numeric values under custom_metrics and no reserved-name collisions.
custom_only failsWrite numeric overall in reward.json or numeric reward.txt.
Grader scores copied fixturesRestrict file searches to generated workspace/output paths, not the skill package or grader source.

Final Response

When finished, report:

  • files created or changed
  • exact validation and evaluation commands
  • default evaluator metric results
  • custom metric results
  • whether the proof was full E2E or only static/local validation
  • any benchmark rubric criteria that remain partly judgment-based

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Create Custom Grader AI skill do?

Use when converting an existing benchmark, rubric, verifier, task YAML/JSON, or domain check into SkillEvaluator BYOG/BYOT custom evaluation.

Why use Create Custom Grader on TypingMind?

Because you install it once and use it with any model. Create Custom Grader is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Create Custom Grader in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/NVIDIA/SkillEvaluator/tree/main/src/skillevaluator/tier3/reference_skills/create-custom-grader. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Create Custom Grader?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Create Custom Grader?

As many as you like. As long as a model supports skills, you can use Create Custom Grader with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Create Custom Grader AI skill free?

Yes. It is published on GitHub by NVIDIA under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇