Skillgrade Evaluation Setup
Procedures
Step 1: Install Skillgrade
- Verify Node.js 20+ and Docker are available.
- Run
npm i -g skillgradeto install the CLI globally.
Step 2: Initialize an Eval Configuration
- Navigate to any project directory.
- If the directory contains a
SKILL.mdand an API key is set,skillgrade initgenerates AI-powered tasks and graders tailored to the skill. - Without a
SKILL.mdor API key,skillgrade initcreates a ready-to-edit generic eval template. - Pass
--forceto overwrite an existingeval.yaml.
Step 3: Configure eval.yaml
- Read
references/eval-yaml-spec.mdfor the full configuration schema. - Define tasks under the
tasks:key. Each task requires:name: unique task identifierinstruction: what the agent should accomplish (ORturns:for multi-turn evals)graders: one or more scoring mechanisms (see theskillgrade-gradersskill)
- Optionally add
workspace:(files the agent edits) andcontext:(reference material not directly graded). - Configure
defaults:for agent, provider, trials, timeout, and threshold. - For multi-turn evals, replace
instructionwithturns:— each turn has its owninstructionand optionalgraders. The workspace persists across turns. - For batch evals, add
dataset: path/to/file.jsonl(or.csv) to a task. Each row expands into a separate task with{{key}}template variables interpolated in the instruction.
Step 4: Run Evaluations
- Select an appropriate preset based on the evaluation goal:
--smoke(5 trials): Quick capability check.--reliable(15 trials): Reliable pass rate estimate.--regression(30 trials): High-confidence regression detection.
- Run the evaluation:
skillgrade --smoke. - Run a specific eval by name:
skillgrade --eval=fix-linting. - Run multiple evals:
skillgrade --eval=fix-linting,write-tests. - Run only deterministic graders (skip LLM calls):
skillgrade --grader=deterministic. - Run only LLM rubric graders:
skillgrade --grader=llm_rubric. - Run only human review graders:
skillgrade --grader=human. - The agent is auto-detected from the API key. Override with
--agent=gemini|claude|codex|acp|opencode|command. - For ACP, pass
--acp-command="gemini --acp"or setdefaults.acp.command. - For OpenCode, pass
--opencode-agent=build|plan|exploreor--opencode-model=provider/model. - For a custom agent, pass
--agent=command --command="node mycli.js"or setdefaults.command. The instruction is piped to the command's stdin. - Override the provider with
--provider=docker|local(or any custom-registered provider).
Step 5: Review Results
- Run
skillgrade previewfor a CLI report. - Run
skillgrade preview browserto open the web UI athttp://localhost:3847. - Export results:
--format=json|junit|csv|markdown. Combine with commas:--format=json,junit. - Reports are saved to
$TMPDIR/skillgrade/<eval-name>/results/. Override with--output=DIR.
Step 6: Integrate with CI
- Add a GitHub Actions step that installs skillgrade, navigates to the eval directory, and runs with
--regression --ci --provider=local. - Use
--provider=localin CI — the runner is already an ephemeral sandbox, so Docker adds overhead without benefit. - The
--ciflag causes a non-zero exit code if the pass rate falls below--threshold(default: 0.8). - Use
--format=junitto generate JUnit XML for CI dashboard integration. - Read
references/ci-example.mdfor a complete workflow template.
Step 7: Extend with Custom Registries
- Register custom graders:
registerGrader('my_grader', () => new MyGrader()). - Register custom agents:
registerAgent('my-agent', (config) => new MyAgent(config)). - Register custom providers:
registerProvider('ssh', (config) => new SSHProvider(config)). - Register custom reporters:
registerReporter('dashboard', () => new DashboardReporter()).
Error Handling
- If
skillgrade initproduces a generic template, it means noSKILL.mdwas found — this is expected for non-skill evals. - If evaluation hangs, check Docker is running and the container has network access for API calls.
- If all trials fail with "No API key," ensure the environment variable is exported, not just set inline for a different command.
- If a task has both
instructionandturns, skillgrade will error — use one or the other. - If a dataset file is not found, skillgrade errors at config load time with the resolved path.


