eval-analyze¶
Deep-reads a target skill and generates eval.yaml -- the configuration that /eval-run needs. Examines the skill's SKILL.md, follows sub-skill chains recursively (typically 2-5 levels, capped at 5 to avoid circular references) until it finds the skills that produce the final artifacts, explores scripts and test cases, and produces a complete config with execution mode, dataset schema, output descriptions, judges, model defaults, and thresholds. Uses an Explore sub-agent for the recursive skill analysis, validates the result with validate_eval.py, and caches the analysis in eval.md with a content hash of the top-level SKILL.md for staleness detection. The guiding principle is "observe, don't assume" -- every field name and path must come from a file actually read. Auto-invoked by /eval-run when eval.yaml is missing.
Plugin: agent-eval-harness | User-invocable
Contract¶
Deep-read a target skill (recursively through its sub-skills and scripts) or execute a custom analysis prompt, explore any existing dataset cases, and emit a complete, structurally valid eval.yaml -- dataset schema, outputs, judges, models, thresholds -- plus a cached eval.md analysis, where every field is grounded in files actually observed rather than templates or placeholders.
Identity
- Generates an eval.yaml at the resolved config path that passes validate_eval.py config (relative paths resolve, judge references resolve, execution.skill/prompt set, no template-variable errors).
- dataset.schema and every outputs[*].schema use the real file and field names observed in the skill and its sample case, not generic placeholders.
- Judges are concrete and runnable -- inline check snippets are valid Python and LLM prompts define per-level scoring; models default to the documented roles.
- Writes an eval.md caching the analysis with frontmatter (skill, analyzed_at, skill_hash) so freshness checks work.
- Correctly selects skill mode vs prompt mode and case vs batch execution from the skill's internal logic, asking the user when the mode is ambiguous.
Optimization Targets
Invariants
- Observe, don't assume: every field name, file pattern, and directory path in the generated eval.yaml must come from files actually read -- never invent placeholders like <output-dir> or fabricate sub-skill names, schema fields, or judge code.
- Under --update, preserve the existing file -- only add missing top-level keys; never overwrite user-modified judges, schemas, thresholds, or permissions.
- Keep dataset.path and outputs[*].path project-relative (never absolute, never ".") since absolute paths break under Harbor/EvalHub and "." would be cleaned between runs.
- Always validate the generated eval.yaml with validate_eval.py before reporting; fix errors and surface warnings rather than emitting a config full of placeholders.
- Fail loudly when skill analysis is incomplete or the dataset cannot be found instead of silently generating a degenerate config.
Traceability
Diagram¶
Arguments¶
/eval-analyze [--skill <name>] [--prompt <path>] [--config <path>] [--update] [--assess]
| Argument | Required | Default | Description |
|---|---|---|---|
--skill |
auto-detect |
Which skill to analyze. If omitted, lists all project skills (excluding eval harness skills) and picks automatically if only one is found. | |
--prompt |
none |
Path to a custom analysis prompt for prompt-based (non-skill) evals -- tests agent capabilities such as documentation effectiveness, pattern understanding, API usage, or constraint compliance instead of examining a SKILL.md. Mutually exclusive with --skill. | |
--config |
auto-discover |
Output path for the eval config file. If omitted, discovers existing layout and scaffolds at the project root or eval/ |
|
--update |
false |
Fill in missing sections only, preserving user edits. Useful for upgrading older configs (e.g., adding a models block, migrating check signatures). | |
--assess |
false |
Assess all project skills and recommend which ones need evals, instead of generating a config for one skill (skips config discovery; --skill is ignored in this mode). |
Usage¶
/eval-analyze --skill my-skill
/eval-analyze --prompt examples/openshift-agentic-docs.md
/eval-analyze --update
/eval-analyze --assess
/eval-analyze --skill rfe.create --config eval-rfe.yaml