1. Install and authenticate
2. Read the Results a Factory produced
Every directly valuable output a Factory produces is a Result. List them from the Result surface; ordinary Results carry no evaluation and no selection.research.factories.results.list(factory_id, kind="prompt", current_best=True).
3. Attach a benchmark-owned evaluation
When a benchmark grades an optimized prompt, attach the grader’s record to the Result. The backend never grades; it stores exactly what the grader proved. The Result’s identity and content do not change.4. Select the current best
Mark a passing Result as the current best for a named objective/scope. This is idempotent and historical: it appends a selection event and never deletes or rewrites the earlier Result.research.factories.results.restore_current_best(...)
re-selects a prior Result as current best.
5. Confirm the Result is conserved
The Result you graded and selected is the same Result throughout — selection is state layered on top of it, not a new object.MCP equivalent
The same lifecycle is available to an MCP client throughsmr_list_factory_results, smr_get_factory_result,
smr_evaluate_factory_result, smr_select_factory_result_current_best,
smr_restore_factory_result_current_best, and
smr_list_factory_result_selection_events.
Legacy compatibility
Theresearch.factories.candidates and research.factories.champions
namespaces (and their smr_*_candidate / smr_*_champion MCP tools) remain
available over the same backend authority for existing integrations. New code
should use Results; candidate/champion are legacy optimization terminology.