LoopX Benchmark Workflow
Use this skill for a LoopX-managed benchmark experiment. The builtin
benchmark-toolkit capability owns provider-neutral experiment state and
integrity boundaries. This packaged skill is its task-triggered Agent playbook.
The capability is catalog-ready without a per-Goal enable switch. Installing
this skill does not grant runner, shell, network, credential, private-evidence,
or Goal mutation authority. Respect the selected todo's required capabilities,
any external provider binding, host permissions, and user gates.
Capability surface
loopx capability show benchmark-toolkit --format json — catalog entry with
usage hints, role boundaries, and the post-run case-insight template.
loopx benchmark --help — subcommands (experiment-board-show,
experiment-board-upsert, source-revision-fence, integrity-qualification,
classify-artifacts).
Share a study through the public-safe contract
When another benchmark developer needs portable study data, use the capability's
typed study flow rather than sharing a runner-specific ledger or raw evidence:
- Validate
benchmark_study_manifest_v0 with benchmark study-validate.
- Wrap one allowlisted manifest, experiment-board row, redacted insight, or runtime
observation with
benchmark upload-envelope.
- Run
benchmark upload-local without --execute first, then explicitly execute
against a caller-selected local JSONL store.
- Verify the record/digest/revision binding with
benchmark upload-readback.
- Derive the campaign/arm/case/run packet with
benchmark study-dashboard; pass a
compact four-arm contract only when the study preregistered that design.
For case_insight_projection, first upload the same run's active terminal
experiment-board row with insight.status=complete. The case, run, and outcome
must match; the run row remains the only arm, score, countability, integrity, and
treatment-fidelity authority. Reduce private post-run evidence to bounded prose
and public-safe handles or digests before building the envelope.
The local provider is a no-network simulation. It does not grant remote upload,
publication, credentials, retention, or benchmark submission authority. Adapters
keep their native metric names and reduce private post-run evidence before envelope
construction.
Share exploratory behavior findings
When the owner authorizes selected behavioral observations but not a complete
study release, use behavior_finding records and benchmark behavior-report.
See docs/reference/benchmark-behavior-findings.md for the contract. These records
require selection rules, sample denominators, observations, interpretations,
limitations, counterevidence, and evidence digests; they require neither a run-row
upload nor a full study manifest and have no score authority.
Freeze the authorized disclosure projection before rendering. Review the same
scope in visible text, foldouts, embedded data, downloads, and PR attachments.
Permission to share duration does not grant permission to share outcome totals
or deltas. Schema validity and a producer redaction attestation are not publication
approval or verification of unshared evidence. Keep selected-case observations
explicitly exploratory and retain the relevant limitations and counterexamples.
Select the operating lane
- Inspect or explain: use
capability show and benchmark --help; remain
read-only. Do not create an experiment-board row merely because the user asks
what the toolkit does.
- Plan, select, or launch a run: follow the experiment sequence below. The
first action is to read the board; a launch still requires an authorized
runner and admitted source.
- Monitor an active campaign: read the board and runtime-owned projections;
update only on material run transitions. Do not manufacture progress from a
timer tick.
- Analyze a terminal run: wait until solving is terminal and scoring is
complete before reading hidden evaluator evidence or writing a case insight.
For a generic library microbenchmark or an eval with no LoopX Goal/board, use
the task's normal tools instead of imposing this workflow.
Experiment sequence
Read the experiment board before launching or selecting a case.
loopx benchmark experiment-board-show --goal-id <GOAL_ID> --format json
Inspect baseline, treatment, explore, countability, effort, and insight rows
before choosing the next arm.
Qualify the source revision before each new run admission.
loopx benchmark source-revision-fence \
--source-checkout <clean-source> \
--expected-revision <PIN> \
--observed-reference-revision <OBSERVED_HEAD> \
--require-admitted --format json
The fence fails closed unless the clean pinned source matches the observed
reference head.
Preview, then preregister or mark the run row when it starts.
loopx benchmark experiment-board-upsert --goal-id <GOAL_ID> \
--row-json <running-row.json> --format json
loopx benchmark experiment-board-upsert --goal-id <GOAL_ID> \
--row-json <running-row.json> --execute --format json
The running row uses status=running, empty metrics, and
countability={integrity_qualified:false, official_result_present:false, score_countable:false}. Keep the same stable run_id for every transition.
Preview and upsert terminal score, countability, effort, and insight.
First run integrity qualification. An automated restricted-access match is a
countable suspicion, not a cheating verdict. After solver and scoring are
terminal, inspect the real solver trajectory, tool results, and final
workspace. Pass a compact
benchmark_restricted_access_adjudication_v0 only after that review; confirm
cheating only when restricted material was actually disclosed and causally
entered a solving or validation decision.
loopx benchmark experiment-board-upsert --goal-id <GOAL_ID> \
--row-json <terminal-row.json> --execute --format json
The terminal row sets status=completed, fills metrics (primary metric plus
guardrails), and updates countability. Only mark score_countable=true when
integrity_qualified=true and official_result_present=true. Fill effort
and set insight.status to complete after the post-run analysis.
For non-baseline arms, also reduce the reviewed mechanism facts separately:
loopx benchmark treatment-continuation-receipt \
--observation-json <compact-post-run-observation.json> --format json
This receipt distinguishes qualified startup from post-start semantic control
persistence. It is analysis-only and must not change score countability,
integrity qualification, treatment fidelity, or matched-pair eligibility.
Read matched comparisons before selecting the next arm.
loopx benchmark experiment-board-show --goal-id <GOAL_ID> --format json
Only claim paired results from matched_pair_countable comparisons. Keep
diagnostic-only explore rows in a separate evidence lane.
Run-row contract
benchmark_id, study_id, case_id, run_id, arm_id, arm_role,
attempt, status, observed_at, model_id, protocol_id,
comparison_protocol_id, claim_scope, primary_metric,
guardrail_metrics, metrics, countability, treatment_fidelity,
effort, insight are the canonical row fields (schema_version =
benchmark_experiment_board_row_v0).
- Baseline rows must use
treatment_fidelity=not_applicable and cannot name a
comparison_anchor_run_id. Non-baseline rows must name a
comparison_anchor_run_id.
- Metrics are
{"name": {"value": <number>, "unit": <str>, "higher_is_better": <bool>}}; at most 16 entries. The primary_metric must
not also be a guardrail metric.
score_countable requires status=completed, integrity_qualified=true,
and official_result_present=true. score=0 is a valid completed result.
Source, integrity, and artifact boundaries
source-revision-fence is read-only and caller-observed: it performs no
fetch, install, or launch. It blocks new admissions only.
integrity-qualification reduces private trajectory and runner isolation
evidence to a compact public-safe receipt (hashes, counts, reason codes).
- Scanner hits for restricted source access or host-boundary escape probes set
restricted_access_review=suspected while keeping the run score-eligible. Use
--restricted-access-adjudication-json for the post-run agent decision; only
confirmed disclosure plus causal use disqualifies the score.
classify-artifacts classifies benchmark artifact paths without reading them;
use it before reading or publishing any candidate artifact.
- The solver lane must not read hidden tests, verifier sources, gold answers, or
official feedback during the solving phase. The post-run analyst may read full
private evidence only after the solver is terminal and scoring is complete.
capability bind selects an external provider implementation for a Goal; it
is not the activation mechanism for this builtin capability. Todo
required_capability fields remain runtime prerequisites, not product
capability switches.
Campaign monitoring and post-run insight
- When a campaign starts and the caller authorizes ongoing monitoring, add one
continuous_monitor todo. Refresh aggregate score/coverage and write
benchmark_case_insight_v0 on material scored-case transitions, with bounded
periodic reviews while the campaign remains active.
- Treat that monitor as an observation lane, not executable delivery. When a
material poll discovers bounded repository, runner-repair, or experiment work,
use
quota monitor-poll --material-change --next-agent-todo with explicit
--next-action-kind, repository, and required capabilities so it creates an
independent runnable advancement_task. An unchanged poll creates no successor
and spends no delivery quota.
- If the main campaign advancement Todo is waiting for a monitor transition, keep
it
open and pair resume_when=monitor_changed:<monitor-todo-id> with an
already-created independent runnable successor. Do not mark the wait blocked,
and do not treat the monitor itself as delivery work.
- Report only public-safe conclusions (countable baselines, countable
treatments, matched pairs, aggregate primary metric by arm, improved/flat/
regressed pair counts). Never copy raw private evidence into a user update.
- After a solver stops and scoring completes, read the task, real trajectory,
final workspace, hidden tests, verifier, and failure/score details; write one
benchmark_case_insight_v0 explaining the decisive evidence, why the outcome
happened, and what LoopX should test next.
- For treatment arms, record whether qualified startup was followed by semantic
Todo transitions, technical replans, or control closeout. Use
startup_only
only when a complete authorized post-run review observed no such transition;
otherwise absence is unknown. Keep terminal settlement separate.
- Do not send a repetitive user update when nothing material changed.
1---2name: loopx-benchmark3description: Use when a LoopX-managed goal runs, tracks, scores, or analyzes a benchmark experiment through benchmark-toolkit, including experiment-board rows, solver arms, integrity qualification, matched comparisons, or case insights. Do not use for casual benchmark discussion, ordinary software microbenchmarks, or eval mentions without LoopX experiment state.4---56# LoopX Benchmark Workflow78Use this skill for a LoopX-managed benchmark experiment. The builtin9`benchmark-toolkit` capability owns provider-neutral experiment state and10integrity boundaries. This packaged skill is its task-triggered Agent playbook.1112The capability is catalog-ready without a per-Goal enable switch. Installing13this skill does not grant runner, shell, network, credential, private-evidence,14or Goal mutation authority. Respect the selected todo's required capabilities,15any external provider binding, host permissions, and user gates.1617## Capability surface1819- `loopx capability show benchmark-toolkit --format json` — catalog entry with20 usage hints, role boundaries, and the post-run case-insight template.21- `loopx benchmark --help` — subcommands (experiment-board-show,22 experiment-board-upsert, source-revision-fence, integrity-qualification,23 classify-artifacts).2425## Share a study through the public-safe contract2627When another benchmark developer needs portable study data, use the capability's28typed study flow rather than sharing a runner-specific ledger or raw evidence:29301. Validate `benchmark_study_manifest_v0` with `benchmark study-validate`.312. Wrap one allowlisted manifest, experiment-board row, redacted insight, or runtime32 observation with `benchmark upload-envelope`.333. Run `benchmark upload-local` without `--execute` first, then explicitly execute34 against a caller-selected local JSONL store.354. Verify the record/digest/revision binding with `benchmark upload-readback`.365. Derive the campaign/arm/case/run packet with `benchmark study-dashboard`; pass a37 compact four-arm contract only when the study preregistered that design.3839For `case_insight_projection`, first upload the same run's active terminal40experiment-board row with `insight.status=complete`. The case, run, and outcome41must match; the run row remains the only arm, score, countability, integrity, and42treatment-fidelity authority. Reduce private post-run evidence to bounded prose43and public-safe handles or digests before building the envelope.4445The local provider is a no-network simulation. It does not grant remote upload,46publication, credentials, retention, or benchmark submission authority. Adapters47keep their native metric names and reduce private post-run evidence before envelope48construction.4950## Share exploratory behavior findings5152When the owner authorizes selected behavioral observations but not a complete53study release, use `behavior_finding` records and `benchmark behavior-report`.54See `docs/reference/benchmark-behavior-findings.md` for the contract. These records55require selection rules, sample denominators, observations, interpretations,56limitations, counterevidence, and evidence digests; they require neither a run-row57upload nor a full study manifest and have no score authority.5859Freeze the authorized disclosure projection before rendering. Review the same60scope in visible text, foldouts, embedded data, downloads, and PR attachments.61Permission to share duration does not grant permission to share outcome totals62or deltas. Schema validity and a producer redaction attestation are not publication63approval or verification of unshared evidence. Keep selected-case observations64explicitly exploratory and retain the relevant limitations and counterexamples.6566## Select the operating lane6768- **Inspect or explain:** use `capability show` and `benchmark --help`; remain69 read-only. Do not create an experiment-board row merely because the user asks70 what the toolkit does.71- **Plan, select, or launch a run:** follow the experiment sequence below. The72 first action is to read the board; a launch still requires an authorized73 runner and admitted source.74- **Monitor an active campaign:** read the board and runtime-owned projections;75 update only on material run transitions. Do not manufacture progress from a76 timer tick.77- **Analyze a terminal run:** wait until solving is terminal and scoring is78 complete before reading hidden evaluator evidence or writing a case insight.7980For a generic library microbenchmark or an eval with no LoopX Goal/board, use81the task's normal tools instead of imposing this workflow.8283## Experiment sequence84851. **Read the experiment board before launching or selecting a case.**86 ```bash87 loopx benchmark experiment-board-show --goal-id <GOAL_ID> --format json88 ```89 Inspect baseline, treatment, explore, countability, effort, and insight rows90 before choosing the next arm.91922. **Qualify the source revision before each new run admission.**93 ```bash94 loopx benchmark source-revision-fence \95 --source-checkout <clean-source> \96 --expected-revision <PIN> \97 --observed-reference-revision <OBSERVED_HEAD> \98 --require-admitted --format json99 ```100 The fence fails closed unless the clean pinned source matches the observed101 reference head.1021033. **Preview, then preregister or mark the run row when it starts.**104 ```bash105 loopx benchmark experiment-board-upsert --goal-id <GOAL_ID> \106 --row-json <running-row.json> --format json107 loopx benchmark experiment-board-upsert --goal-id <GOAL_ID> \108 --row-json <running-row.json> --execute --format json109 ```110 The running row uses `status=running`, empty `metrics`, and111 `countability={integrity_qualified:false, official_result_present:false,112 score_countable:false}`. Keep the same stable `run_id` for every transition.1131144. **Preview and upsert terminal score, countability, effort, and insight.**115 First run integrity qualification. An automated restricted-access match is a116 countable suspicion, not a cheating verdict. After solver and scoring are117 terminal, inspect the real solver trajectory, tool results, and final118 workspace. Pass a compact119 `benchmark_restricted_access_adjudication_v0` only after that review; confirm120 cheating only when restricted material was actually disclosed and causally121 entered a solving or validation decision.122123 ```bash124 loopx benchmark experiment-board-upsert --goal-id <GOAL_ID> \125 --row-json <terminal-row.json> --execute --format json126 ```127 The terminal row sets `status=completed`, fills `metrics` (primary metric plus128 guardrails), and updates `countability`. Only mark `score_countable=true` when129 `integrity_qualified=true` and `official_result_present=true`. Fill `effort`130 and set `insight.status` to `complete` after the post-run analysis.131132 For non-baseline arms, also reduce the reviewed mechanism facts separately:133 ```bash134 loopx benchmark treatment-continuation-receipt \135 --observation-json <compact-post-run-observation.json> --format json136 ```137 This receipt distinguishes qualified startup from post-start semantic control138 persistence. It is analysis-only and must not change score countability,139 integrity qualification, treatment fidelity, or matched-pair eligibility.1401415. **Read matched comparisons before selecting the next arm.**142 ```bash143 loopx benchmark experiment-board-show --goal-id <GOAL_ID> --format json144 ```145 Only claim paired results from `matched_pair_countable` comparisons. Keep146 diagnostic-only explore rows in a separate evidence lane.147148## Run-row contract149150- `benchmark_id`, `study_id`, `case_id`, `run_id`, `arm_id`, `arm_role`,151 `attempt`, `status`, `observed_at`, `model_id`, `protocol_id`,152 `comparison_protocol_id`, `claim_scope`, `primary_metric`,153 `guardrail_metrics`, `metrics`, `countability`, `treatment_fidelity`,154 `effort`, `insight` are the canonical row fields (`schema_version` =155 `benchmark_experiment_board_row_v0`).156- Baseline rows must use `treatment_fidelity=not_applicable` and cannot name a157 `comparison_anchor_run_id`. Non-baseline rows must name a158 `comparison_anchor_run_id`.159- Metrics are `{"name": {"value": <number>, "unit": <str>,160 "higher_is_better": <bool>}}`; at most 16 entries. The `primary_metric` must161 not also be a guardrail metric.162- `score_countable` requires `status=completed`, `integrity_qualified=true`,163 and `official_result_present=true`. `score=0` is a valid completed result.164165## Source, integrity, and artifact boundaries166167- `source-revision-fence` is read-only and caller-observed: it performs no168 fetch, install, or launch. It blocks new admissions only.169- `integrity-qualification` reduces private trajectory and runner isolation170 evidence to a compact public-safe receipt (hashes, counts, reason codes).171- Scanner hits for restricted source access or host-boundary escape probes set172 `restricted_access_review=suspected` while keeping the run score-eligible. Use173 `--restricted-access-adjudication-json` for the post-run agent decision; only174 confirmed disclosure plus causal use disqualifies the score.175- `classify-artifacts` classifies benchmark artifact paths without reading them;176 use it before reading or publishing any candidate artifact.177- The solver lane must not read hidden tests, verifier sources, gold answers, or178 official feedback during the solving phase. The post-run analyst may read full179 private evidence only after the solver is terminal and scoring is complete.180- `capability bind` selects an external provider implementation for a Goal; it181 is not the activation mechanism for this builtin capability. Todo182 `required_capability` fields remain runtime prerequisites, not product183 capability switches.184185## Campaign monitoring and post-run insight186187- When a campaign starts and the caller authorizes ongoing monitoring, add one188 `continuous_monitor` todo. Refresh aggregate score/coverage and write189 `benchmark_case_insight_v0` on material scored-case transitions, with bounded190 periodic reviews while the campaign remains active.191- Treat that monitor as an observation lane, not executable delivery. When a192 material poll discovers bounded repository, runner-repair, or experiment work,193 use `quota monitor-poll --material-change --next-agent-todo` with explicit194 `--next-action-kind`, repository, and required capabilities so it creates an195 independent runnable `advancement_task`. An unchanged poll creates no successor196 and spends no delivery quota.197- If the main campaign advancement Todo is waiting for a monitor transition, keep198 it `open` and pair `resume_when=monitor_changed:<monitor-todo-id>` with an199 already-created independent runnable successor. Do not mark the wait `blocked`,200 and do not treat the monitor itself as delivery work.201- Report only public-safe conclusions (countable baselines, countable202 treatments, matched pairs, aggregate primary metric by arm, improved/flat/203 regressed pair counts). Never copy raw private evidence into a user update.204- After a solver stops and scoring completes, read the task, real trajectory,205 final workspace, hidden tests, verifier, and failure/score details; write one206 `benchmark_case_insight_v0` explaining the decisive evidence, why the outcome207 happened, and what LoopX should test next.208- For treatment arms, record whether qualified startup was followed by semantic209 Todo transitions, technical replans, or control closeout. Use `startup_only`210 only when a complete authorized post-run review observed no such transition;211 otherwise absence is `unknown`. Keep terminal settlement separate.212- Do not send a repetitive user update when nothing material changed.