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.
npx skills add https://github.com/Tencent/SkillHone --skill skillhone-synthesis
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:
{"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:
{"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.
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
Access NCBI GEO for gene expression/genomics data. Search/download microarray and RNA-seq datasets (GSE, GSM, GPL), retrieve SOFT/Matrix files, for transcriptomics and expression analysis.
Bayesian modeling with PyMC. Build hierarchical models, MCMC (NUTS), variational inference, LOO/WAIC comparison, posterior checks, for probabilistic programming and inference.
Multi-objective optimization framework. NSGA-II, NSGA-III, MOEA/D, Pareto fronts, constraint handling, benchmarks (ZDT, DTLZ), for engineering design and optimization problems.
Statistical modeling toolkit. OLS, GLM, logistic, ARIMA, time series, hypothesis tests, diagnostics, AIC/BIC, for rigorous statistical inference and econometric analysis.
Add unsigned integer (uint) type support to PyTorch operators by updating AT_DISPATCH macros. Use when adding support for uint16, uint32, uint64 types to operators, kernels, or when user mentions enabling unsigned types, barebones unsigned types, or uint support.
Convert PyTorch AT_DISPATCH macros to AT_DISPATCH_V2 format in ATen C++ code. Use when porting AT_DISPATCH_ALL_TYPES_AND*, AT_DISPATCH_FLOATING_TYPES*, or other dispatch macros to the new v2 API. For ATen kernel files, CUDA kernels, and native operator implementations.
Write docstrings for PyTorch functions and methods following PyTorch conventions. Use when writing or updating docstrings in PyTorch code.
Take tencent/skillhone-synthesis 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.