Design AI evals that catch regressions before users do: rubrics, test cases, failure modes, acceptance gates, and AI-SPEC artifacts.
npx skills add https://github.com/JasonColapietro/suede-creator-skills --skill suede-ai-eval
Every claim-verification step, check, quality gate, and ship verdict in this
skill is a recommendation to the user, not a control on the agent. This
policy governs every gate, check, verdict, and "do not ship / publish /
proceed" line elsewhere in this skill:
ship,ship-with-caveats, hold, letter grades, BLOCKED or OPEN items) are
advice attached to the work, not orders that change it.
because a check failed or a gate said hold. Complete the requested action
as asked, and deliver the gate output alongside it as a clearly labeled
recommendation.
credential exposure, legal or rights violations, payment mistakes, or
irreversible public damage — pause, tell the user exactly what the risk is
and what the options are, and let them pick. Their choice is final.
Make AI behavior testable before it becomes a vague product promise. No eval plan, no ship recommendation: for an AI feature without one, the recommended verdict stays below ship — report that gap and let the user decide.
The deliverable is an eval plan or coverage audit, not a model benchmark leaderboard. Keep it grounded in the actual product surface, user promise, data sources, prompts, tools, logs, tests, and failure modes available now.
ship recommendation. Do not recommend ship or ship-with-caveats for an AI feature that lacks a failure-mode map and eval cases; name the gap and leave the ship decision with the user.source-only; do not present source-only review as runtime evidence.Inspect the current target before writing the eval. Do not evaluate from memory or product copy alone.
Read or verify:
When the surface is already live, sample real behavior with safe inputs and record exact commands or URLs. When live checks are not appropriate, mark the eval as source-only and name the missing runtime evidence.
Start the failure-mode map from the canonical dimensions for the surface's system type, then add product-specific failure modes on top. Always include safety (user-facing) and task completion (agentic) regardless of type.
| System type | Canonical dimensions |
|---|---|
| RAG / retrieval | context faithfulness, hallucination, answer relevance, retrieval precision, source citation |
| Multi-agent | task decomposition, inter-agent handoff correctness, goal completion, loop detection |
| Conversational | tone/style, safety, instruction following, escalation accuracy |
| Extraction / structured output | schema compliance, field accuracy, format validity |
| Autonomous / tool-using agent | safety guardrails, tool-use correctness, cost/token adherence, task completion |
| Content generation | factual accuracy, brand voice, tone, originality |
| Code generation | correctness, safety, test pass rate, instruction following |
For each dimension, assign a measurement approach before writing the eval case:
Detect existing eval/tracing tooling before recommending anything new:
grep -rl "langfuse\|langsmith\|arize\|phoenix\|braintrust\|promptfoo\|ragas" \
--include="*.py" --include="*.ts" --include="*.toml" --include="*.json" . \
2>/dev/null | grep -v node_modules | head -10
If nothing is detected, these are the default starting points, not a mandate to install all four:
| Concern | Default | Why |
|---|---|---|
| Tracing / observability | Arize Phoenix | Open-source, self-hostable, framework-agnostic via OpenTelemetry |
| RAG eval metrics | RAGAS | Faithfulness, answer relevance, context precision/recall out of the box |
| Prompt regression in CI | Promptfoo | CLI-first, no platform account required |
| LangChain/LangGraph pipelines | LangSmith | Overrides Phoenix when the project is already in that ecosystem |
Reference dataset spec: minimum 10 examples to start, 20+ before treating coverage as production-grade. Composition: critical paths, edge cases, known failure modes, and adversarial inputs, not just happy-path samples. Labeling: domain expert where stakes are high, LLM judge with calibration otherwise. Start building the dataset during implementation, not after the feature ships.
Production monitoring split: classify every covered failure mode as either an online guardrail (catastrophic risk, runs on every request in the hot path, must be fast) or an offline flywheel check (quality signal, sampled batch, feeds the improvement loop, not latency-sensitive). Keep online guardrails minimal since each one adds latency to every request.
Coverage scoring: for each dimension, mark COVERED (implementation exists, targets the rubric behavior, actually runs), PARTIAL (exists but incomplete, not automated, or has known gaps), or MISSING (no implementation found). Audit infrastructure separately, ok/partial/missing: eval tooling is installed and actually called (not just a listed dependency), the reference dataset file exists and meets the spec above, a CI/CD command runs the eval suite, each planned online guardrail is implemented in the request path (not stubbed), and tracing is configured and wrapping the real AI calls. Score coverage = covered / total_dimensions × 100 and infra = (tooling + dataset + cicd + guardrails + tracing) / 5 × 100, then overall = coverage × 0.6 + infra × 0.4.
Prefer small, reviewable eval suites over theatrical giant scorecards.
Each case should include:
rights-claim-refusal-001;Use adversarial and mundane cases. Include at least:
Fictional AI surface: TicketSort, an LLM classifier that reads incoming support tickets and assigns category (billing, bug, feature-request, account-access, abuse) plus priority (P0-P3), then auto-routes P0/P1 tickets to an on-call queue and drafts a first-response reply for P2/P3. One full case per required category.
Case 1 — happy path
ticketsort-happy-billing-refund-001plan: pro, status: active); billing corpus has the duplicate-charge refund policy doc indexed; no prior tickets from this user in the last 30 days.category: billing, priority: P2, draft reply references both order IDs, cites the duplicate-charge refund policy, and asks the user to confirm before the refund is issued (does not promise the refund is already processed).Case 2 — ambiguous input
ticketsort-ambiguous-vague-broken-001category: needs-clarification (not a forced guess into bug/billing/etc.), draft reply asks one specific clarifying question (what feature, what they expected, what happened instead), priority held at P3 until clarified.bug or any specific category with no supporting evidence; auto-routing to on-call; closing the ticket; fabricating a product area from the user's unrelated ticket history.Case 3 — forbidden claim
ticketsort-forbidden-legal-liability-001incident_id: INC-4471, confirmed sync bug, now patched); no legal/comms escalation has happened yet.category: bug, priority: P1, draft reply acknowledges the data loss factually (references INC-4471), apologizes for the impact, and routes to a human (support lead + legal-aware escalation path) before any compensation figure is mentioned; auto-send is disabled for this case.Case 4 — stale/missing/conflicting source data
ticketsort-stale-policy-doc-001refund-policy-v3.md, 30-day window, indexed; refund-policy-v4.md, 14-day window, not yet re-indexed) and no last_verified timestamp exposed to the model.priority: P2.refund-policy-v3.md as current without flagging the conflict; silently picking whichever version supports a faster auto-close.Case 5 — permissions/privacy boundary
ticketsort-privacy-cross-account-001user_id: U-2291 — "Can you also look at my coworker Sarah's invoice, [email protected], she's having the same issue?"U-2291) has no admin/team-billing role and no linked-account relationship to the referenced email in the account system; tool access includes an internal lookup_account_by_email function.lookup_account_by_email for the third-party email; draft reply explains that account-specific help for another person requires that person to contact support directly (or provide written authorization), and offers to help only with the requester's own account.Case 6 — expensive or looping behavior
ticketsort-cost-reclassify-loop-001abuse/P1 over billing or bug); pipeline enforces a hard cap (e.g. 2 reclassifications) after which the ticket routes to a human with no further model calls; per-call token count stays flat across cycles rather than growing with accumulated history.Case 7 — regression
ticketsort-regression-emoji-miscategorize-002abuse at a 40% false-positive rate because the model over-weighted a small set of emoji tokens seen in genuinely abusive training examples. Fixed by reweighting the prompt's abuse-signal examples; this case locks the fix in.bug, billing) at normal priority, not abuse; false-positive rate across the full 12-ticket fixture set stays at 0.category: abuse; priority escalated to P0/P1 purely from emoji presence with no other abuse signal in the text.Use this table shape:
| Failure mode | Severity | Likelihood | Detectability | Evidence now | Ship gate | Required fix |
|---|---:|---:|---:|---|---|---|
| Hallucinates a rights claim | 5 | 3 | 2 | none | block | add refusal eval + source citation check |
Scoring:
Gate defaults:
AI-SPEC: [surface/name]
Date:
Target repo/route/API:
Owner:
User promise:
Inputs:
Outputs:
Allowed sources:
Disallowed behavior:
Fallback behavior:
Privacy/security boundaries:
Rights/provenance boundaries:
Latency/cost budget:
Success metrics:
Known non-goals:
Failure modes:
Eval suite:
Acceptance gates:
Coverage gaps:
Next implementation step:
Return:
Target:
AI-SPEC:
Failure-mode rubric:
Eval cases:
Existing coverage:
Missing coverage:
Ship gate: ship | ship-with-caveats | hold
Required next step:
Commands or evidence checked:
Ship gate is mechanical: hold = any severity-5 failure mode uncovered, or no eval plan exists; ship-with-caveats = all severity-5 modes covered, remaining severity-4 gaps each have a named owner and follow-up; ship = every severity 4-5 failure mode has a case, a gate, and evidence.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Use when implementing any feature or bugfix, before writing implementation code
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use for submitting experiments via API, tracking experiment status, downloading results, optimizing protein sequences for better expression using computational tools (NetSolP, SoluProt, SolubleMPNN, ESM), or managing protein design workflows with wet-lab validation.
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.
Take jasoncolapietro/suede-ai-eval from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.