llm-output-schema-cons…
Zod schema constraints that Anthropic rejects or silently ignores when sent as structured-output tool definitions via aiSdk.Output.object(). Use when writing…
Audit an existing eval suite for trustworthiness. Use when inheriting evals, suspecting evals miss real failures, or after significant pipeline changes.
$ npx -y skills add growthxai/output --skill output-eval-audit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/output-eval-auditContext preview
The summary Claude sees to decide when to auto-load this skill.
Audit an existing eval suite for trustworthiness. Use when inheriting evals, suspecting evals miss real failures, or after significant pipeline changes.
name: output-eval-audit description: Audit an existing eval suite for trustworthiness. Use when inheriting evals, suspecting evals miss real failures, or after significant pipeline changes. allowed-tools: [Bash, Read]
Audit your eval suite to determine whether it actually catches real failures. This skill provides a structured diagnostic that identifies gaps in error analysis, evaluator design, judge validation, and dataset coverage, with concrete remediation steps for each finding.
Read the eval infrastructure files for the workflow being audited:
src/workflows/<workflow_name>/ ├── tests/ │ ├── datasets/ # YAML dataset files │ │ ├── *.yml │ │ └── ... │ └── evals/ │ ├── evaluators.ts # Evaluator definitions │ ├── workflow.ts # Eval workflow definition │ └── *.prompt # Judge prompt files
Inventory what exists:
| Artifact | File(s) | Count | |----------|---------|-------| | Evaluators | `tests/evals/evaluators.ts` | ? | | Eval workflow | `tests/evals/workflow.ts` | ? entries in `evals` array | | Judge prompts | `tests/evals/*.prompt` | ? | | Datasets | `tests/datasets/*.yml` | ? | | Datasets with ground_truth | ? of above | ? | | Datasets with last_output | ? of above | ? |
If any of these are missing entirely, note it and skip to "Starting From Zero" at the bottom.
Evaluate each of the four areas below. For each, assign a status:
---
**Question:** Were the evaluators derived from observed failure modes in real workflow traces?
**Check:**
**Pass criteria:**
**Common failures:**
**Remediation:** `output-eval-error-analysis` — Review 50+ traces and categorize actual failure modes before modifying evaluators
---
**Question:** Are the evaluators well-designed for reliable automated evaluation?
**Check each evaluator in `tests/evals/evaluators.ts`:**
| Check | What to look for | |-------|------------------| | One failure mode per judge | Each `judgeVerdict()` evaluator targets exactly one criterion | | Binary verdicts | Judge prompts use pass/fail, not Likert scales (1-5) or multi-axis ratings | | Code-based where possible | Objective checks use `Verdict.*` helpers, not LLM judges | | Few-shot examples in judges | Judge `.prompt` files include pass, fail, and borderline examples | | Critique before verdict | Judge prompts request critique/reasoning before the verdict in structured output | | Appropriate criticality | `required` for blocking failures, `informational` for nice-to-have checks | | Correct interpret type | `interpret` config matches what the evaluator returns |
**Pass criteria:**
**Common failures:**
**Remediation:** `output-eval-judge-prompt` — Redesign judge prompts following the four-component structure
---
**Question:** Have LLM judges been validated against human labels?
**Check for each LLM-based evaluator (those using `judgeVerdict()`, `judgeScore()`, `judgeLabel()`):**
| Check | What to look for | |-------|------------------| | Human labels exist | Datasets have `ground_truth.evals.<evaluator_name>.verdict` populated | | TPR/TNR measured | Validation results documented (file, comment, or commit) | | Train/dev/test split | Few-shot examples in the judge prompt come from a designated train split, not from the same data used for measurement | | Metrics meet threshold | TPR > 80% and TNR > 80% (target: > 90%) |
**Pass criteria:**
**Common failures:**
**Remediation:** `output-eval-validate-judge` — Calibrate each judge against human labels using TPR/TNR
---
**Question:** Do the datasets adequately cover the failure space?
**Check:**
| Check | What to look for | |-------|------------------| | Dataset count | Minimum 10 for simple workflows, 20+ for complex ones | | Diversity | Datasets vary across multiple input dimensions, not just happy paths | | Failure representation | At least 30% of datasets have
The open-source TypeScript framework for building AI workflows and agents. Designed for Claude Code — describe what you want, Claude builds it, with all the best practices already in place. One framework.
Repo: growthxai/output
Zod schema constraints that Anthropic rejects or silently ignores when sent as structured-output tool definitions via aiSdk.Output.object(). Use when writing…
Guide to the providerOptions structure in .prompt files — decision tree for where an option goes, common mistakes, per-provider quick reference, and Anthropic…
Implement an Output SDK workflow from a plan document. Use when the user asks to build, implement, or code a workflow from an existing plan, or after…
View and edit encrypted credentials in an Output.ai project. Use when adding secrets, updating API keys, verifying credential values, or retrieving a specific…
Wire encrypted credentials to environment variables using the credential: convention. Use when setting up LLM provider keys (ANTHROPIC_API_KEY, OPENAI_API_KEY)…