Installation
How to invoke
Ask your agent to create any combination of files:“Use the apastra-scaffold skill to create a prompt spec, dataset, evaluator, and suite for summarizing text”For a quick start without four separate files:
“Use the apastra-scaffold skill to create a quick eval for email classification”
What gets created
A full scaffold creates four files:Prompt spec template
Your agent createspromptops/prompts/<id>.yaml:
idis required and must be unique — use kebab-case with a version suffix (for example,classify-email-v1)variablesis required — defines the input schema as a map of variable names to JSON Schema type objectstemplateis required — the prompt text with{{variable}}placeholdersoutput_contractis optional but recommended — defines expected output structure- Never rename an
id; create a new version instead
Dataset template
Your agent createspromptops/datasets/<id>.jsonl — one JSON object per line:
- Use
.jsonlformat (one JSON object per line, not a JSON array) case_idis required and must be unique within the datasetinputsis required — keys must match the prompt spec’svariablesexpected_outputsis optional — used by evaluators for checking- Aim for 5–10 cases in a smoke dataset and 50+ in a regression dataset
- Include edge cases: empty inputs, very long inputs, adversarial inputs
Evaluator templates
Your agent createspromptops/evaluators/<id>.yaml. Three evaluator types are available:
- Deterministic
- Schema
- Judge
Rule-based checks — fastest to run, no model calls required:
idis required and must be uniquetypeis required — must be one ofdeterministic,schema, orjudgemetricsis required — array of metric names this evaluator produces (minimum 1)- For
judgeevaluators: treat the rubric text as a versioned artifact — changing it changes what the metric means
Suite template
Your agent createspromptops/suites/<id>.yaml:
Quick eval template
For rapid iteration, your agent can scaffold a single file instead of four: Your agent createspromptops/evals/<id>.yaml:
Dataset with inline assertions
When you want per-case checks without a separate evaluator file, ask your agent to addassert arrays directly in the JSONL:
Available assertion types
Deterministic:equals, contains, icontains, contains-any, contains-all, regex, starts-with, is-json, contains-json, is-valid-json-schema
Model-assisted: similar, llm-rubric, factuality, answer-relevance
Performance: latency, cost
Negate any type with not- prefix — for example, not-contains, not-is-json.