Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use this skill to synthesize closed-form, automatically verifiable benchmark Q/A by exploring a tool environment, building a reusable exploration graph, and mining multiple hard questions from that graph. Use for: building a benchmark, writing eval items, generating evaluation data, closed-form QA, verifiable-answer datasets, synthesising eval data. Applies to any domain with callable tools. Do not use for open-ended writing, subjective scoring, or pure labeling.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 157% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 2608% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -9% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 59% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 80% | 0% |
This skill builds a generic closed-form Q/A dataset from real tool use.
Closed-form means each question has one intended answer, and the answer can be checked by code: exact match, regex, numeric tolerance, enum, or JSON field checks. The final benchmark should not require a human or an LLM judge for basic grading.
The central idea is simple:
The skill is domain-agnostic. Concrete task files, tool wrappers, and domain examples live outside this skill.
The task description is the source of truth for both the solver prompt and the verifier. When a task spec uses words such as "must", "must not", "required", "forbidden", "output format", "validation", "quality", or "acceptance", treat those clauses as benchmark requirements.
For every requirement in the task spec that can be checked mechanically, the generated verifier should include a corresponding scores key. This includes artifact constraints such as file names, raw-vs-wrapped output, syntax validity, compile/render success, required fields, banned strings, shape/count limits, style tokens, fixed palettes, local-only dependencies, and any other observable property of the submitted answer.
Do not reduce the verifier to only the gold answer. If the task says the output must have a particular structure or quality, that structure or quality should be scored directly whenever it is observable from the answer or from local helper tools. Subjective requirements may be approximated by deterministic proxies, but clearly subjective-only preferences should not be silently converted into a pass.
Ask for these if they are missing:
Do not infer hidden tools or hidden datasets. If the task needs live data, the Cartographer must collect it through the provided tools.
A simple question usually has one of these shapes:
A hard question usually forces at least one real operation:
A broken question is not a hard question. Drop or repair it if it is ambiguous, unstable, subjective, unverifiable, or impossible to answer from the collected graph.
Example:
The second question is not hard because the entities are obscure. It is hard because the solver must resolve a set, apply constraints, rank, traverse a relation, and return a precise terminal value.
| Stage | Agent | Purpose | Tool access | |---|---|---|---| | 1 | Cartographer | Explore with tools and build a graph plus reasoning walks. | Yes | | 2 | Miner | Convert walks into Q/A candidates and verification snippets. | No | | 3 | Validator | Reject candidates that are not answerable, unique, stable, executable, or hard enough. | Sometimes | | 4 | Deduper | Remove duplicate shapes and produce final files. | No |
The Cartographer is the only stage that should gather new facts. Miner and Deduper are pure over saved artifacts. Validator may run the system-under-test solver when an empirical difficulty gate is requested.
The graph stores reusable evidence:
A single good graph should support several distinct questions. Reusing a graph is the point: if the Miner prompt improves, the graph can be mined again without new tool calls.
See references/exploration_graph.md for the minimal format.
Use a small number of clear transformations rather than many decorative layers:
Do not build difficulty by listing forbidden entities or by adding arbitrary trivia. The question should feel like a realistic analysis task.
See references/difficulty_traps.md and references/layerwise_obfuscation.md for short examples.
The final benchmark has two files:
final.jsonl contains only the fields the grader needs:
json{"question": "...", "verification": "answer = open('answer.txt').read().strip()\ngold = 'GOLD'\nscores = {'exact': _normalize(answer) == _normalize(gold)}"}
final.meta.jsonl keeps debugging metadata in the same order:
json{"answer": "GOLD", "answer_type": "string", "seed_id": "segment_a", "walk_id": "walk_001", "difficulty": "hard"}
Keep graph artifacts under graph/<seed_id>/ and, when useful, in the shared exploration library for future re-mining.
Every candidate must pass these gates:
constraints, not just the terminal gold value.
See references/verification_format.md for snippet templates.
Other measured skills in the registry, with their headline benchmark lift.