bkit-evals

Runs skill evaluation suites via evals/runner.js and persists structured JSON results.

594|152|Updated Jan 9, 2026
One-click install
npx skills add https://github.com/popup-studio-ai/bkit-claude-code --skill bkit-evals
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: bkit-evals
Source: https://github.com/popup-studio-ai/bkit-claude-code/tree/main/skills/bkit-evals
Command: npx skills add https://github.com/popup-studio-ai/bkit-claude-code --skill bkit-evals

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Running skill quality evals previously required remembering the exact argv structure of evals/runner.js, with no timeout protection, no input validation, and no persisted record of results. This Skill wraps the runner with validation, safe subprocess spawning, and structured result persistence.

Core Features & Use Cases

  • Validated Eval Execution: Runs node evals/runner.js --skill <skill> with strict skill-name regex validation, argv-array spawning (no shell), and a 30s default / 120s max timeout.
  • Fail-Closed Result Parsing: Captures stdout/stderr, parses the trailing JSON block, and never treats exit code 0 alone as success.
  • Result Persistence & Discovery: Saves structured results to .bkit/runtime/evals-{skill}-{timestamp}.json and lists all skills with eval.yaml definitions grouped by classification.
  • Use Case: After modifying the gap-detector skill, run its eval suite to confirm quality, then review the persisted JSON result to see pass/fail counts and diagnose failures.

Quick Start

Run the eval suite for the gap-detector skill and show me the persisted result summary.

Frequently Asked Questions about bkit-evals

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I run evals for a Claude Code skill?

Use the run command with a skill name, such as `/bkit-evals run gap-detector`. The wrapper validates the name, spawns evals/runner.js with a timeout, parses the JSON output, and persists the result to .bkit/runtime.

How do I list which skills have eval definitions?

Run `/bkit-evals list` or invoke the skill with no arguments. It reads evals/config.json and shows a category-grouped table of skills that have an eval.yaml file, with a one-line description for each.

Why does an eval fail even when the exit code is 0?

The wrapper applies fail-closed defense: exit code 0 alone never implies success. If the trailing JSON block cannot be parsed, the result is marked with a reason such as parsed_null or argv_format_mismatch.

What skill names are accepted by the eval runner?

Skill names must match the regex ^[a-z][a-z0-9-]{0,63}$. Anything containing shell metacharacters, slashes, or spaces is rejected with reason invalid_skill_name to prevent argument injection.

What happens if an eval subprocess hangs?

The subprocess has a default timeout of 30 seconds and a hard cap of 120 seconds. A timed-out eval is recorded with timedOut set to true in the persisted result file, so it cannot block the session indefinitely.