Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run skill evals via evals/runner.js — wrapper validates skill names, captures stdout/stderr, persists JSON results. Triggers: bkit evals, evals run, skill quality, eval runner, 스킬 평가, 評価実行, 评估运行, evaluación, évaluation.
.claude/skills/popup-studio-ai-bkit-evals/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -12% | 0% |
> v2.1.11 Sprint β FR-β2. Wraps evals/runner.js with input validation, > result persistence, and structured reporting. Replaces the bare node > evals/runner.js <skill> invocation that previously required users to > remember argv structure and ignored timeout / sandbox concerns.
| Argument | Description | Example | |----------|-------------|---------| | run <skill> | Execute the eval suite for one skill | /bkit-evals run gap-detector | | list | List all skills that have an eval.yaml definition | /bkit-evals list |
If no argument is provided, render the same output as list.
run <skill>skill against /^[a-z][a-z0-9-]{0,63}$/. Reject anything else(no shell metacharacters, no slashes, no spaces) — see Security below.
node evals/runner.js --skill <skill> via child_process.spawnSync(argv form, no shell). Default timeout 30 s, max 120 s. The --skill flag form is mandated by the runner CLI and locked by L3 contract test.
balanced-brace fallback (string-aware).
parsed === null and stdout includesUsage:, return reason: 'argv_format_mismatch'; if parsed === null otherwise, return reason: 'parsed_null'. Exit code 0 alone NEVER implies success — the parsed JSON must be present.
.bkit/runtime/evals-{skill}-{ISO timestamp}.json with stdout/stderr tails (2000 chars each), parsed payload, and reason field.
listevals/config.json to enumerate skill classifications.workflow, capability, hybrid),list skills that have evals/{classification}/{skill}/eval.yaml.
the eval YAML (description field if present).
[a-z][a-z0-9-]{0,63} is rejected with reason: invalid_skill_name.
command lines.
name + timestamp; no traversal possible.
eval cannot block the session indefinitely.
| Module | Function | Usage | |--------|----------|-------| | lib/evals/runner-wrapper.js | invokeEvals(skill, opts) | Validate + spawn + persist | | lib/evals/runner-wrapper.js | isValidSkillName(name) | Regex pre-check shared with list | | evals/runner.js | (subprocess) | Existing eval execution engine |
.bkit/runtime/evals-{skill}-{timestamp}.json:
json{ "skill": "gap-detector", "invokedAt": "<ISO 8601>", "exitCode": 0, "timedOut": false, "stdoutTail": "...", "stderrTail": "...", "parsed": { /* whatever runner.js prints as JSON, or null */ } }
bash# Single eval /bkit-evals run gap-detector # Discovery /bkit-evals list
/control trust — eval results contribute to trust score/code-review — uses eval data when assessing skills/bkit explore (FR-β1) — explore evals as a categoryARGUMENTS:
Other measured skills in the registry, with their headline benchmark lift.