Skip to main content
Glama

Run dataset

run_dataset
Read-onlyIdempotent

Runs a declared plan of runs on one card, or of solves of one solver, and seals the rows under one root. A plan is a list of runs, a grid over a base run, or a seeded sample over a base run; a run is a run_trajectory request without domain and card. A plan of solves names solver in place of domain and card and is a list or a grid of solve requests. The answer is small by default: the head, which holds the request, the counts and the dataset_seal, and one summary row per run; answer "states" adds each final state in decimals and "full" gives every row whole, under the same dataset_seal. A row is completed, ended, refused or unadmitted: an ended or a refused row is a run sealed up to its last landed step, and an unadmitted row is a request turned away before computing, with no seal. The seal shows the dataset was not altered after it was sealed. It does not show the engine made it: a row's request sent to run_trajectory gives the run seal to compare. The input schema says how each input is written, with a worked plan of each kind. On this open connection a dataset is returned inline and holds at most 300 runs (OPEN_MAX_DATASET_ROWS), 1000000 steps in all (OPEN_MAX_DATASET_STEPS), 10000 frames and an answer counted from the plan at 4194304 bytes (OPEN_MAX_DATASET_ANSWER_BYTES) and 42500 characters, up to about 150 summary rows; a plan of solves holds the engine's own 64 and at most 15 s of them, or one, at each solver's measured time, which describe_solver states with the count (OPEN_PLAN_SECONDS). One address holds at most 1 physics permit at a time, and long work (a solve, a plan of runs or of solves, a run of more than 10000 steps, or a verification that computes one again) runs 1 at a time. A call that finds no permit or no place is answered "Too many concurrent physics tasks." and nothing waits: the same call sent later is answered once one is free. An answer is waited for 60 seconds, and long work is stopped there.

Input Schema

NameRequiredDescriptionDefault
cardNo
planYesA path names one number: initial.<field>, dt_s, or segments[0].load.<field>, with the segment's number in square brackets and [0], [1] or [2] after a 3-vector field for one of its components. steps and record_every are not paths and cannot vary: every row of a grid or a sample takes them from the base run. A value an axis or a draw sets replaces the base's value of that field, and the answer's base_replaced names each field replaced; a 3-vector the base sets whole is replaced only when the paths set all three of its components. Two paths may not set one number. Each row of a grid is held to the card's bounds alone, as each run of a list is: a value outside a bound makes that row unadmitted and the other rows run. A sample's interval or choice outside a bound refuses the plan. One worked plan of each kind, each a whole request: list: {"domain":"energy","card":"thermal","plan":{"kind":"list","runs":[{"initial":{"temperature_k":293.15},"dt_s":1.0,"segments":[{"steps":60,"load":{"heat_power_w":5.0,"ambient_k":293.15}}],"record_every":60}]},"store":"none","return":"inline"} grid: {"domain":"energy","card":"thermal","plan":{"kind":"grid","base":{"initial":{},"dt_s":1.0,"segments":[{"steps":60,"load":{"ambient_k":293.15}}],"record_every":60},"axes":[{"path":"initial.temperature_k","values":[283.15,293.15]},{"path":"segments[0].load.heat_power_w","values":[0.0,5.0,10.0]}]},"store":"none","return":"inline"} sample: {"domain":"energy","card":"thermal","plan":{"kind":"sample","base":{"initial":{},"dt_s":1.0,"segments":[{"steps":60,"load":{"ambient_k":293.15}}],"record_every":60},"rows":4,"generator":"splitmix64_counter_v1","seed_hex":"0000000000000001","draws":[{"path":"initial.temperature_k","choice":[283.15,293.15]},{"path":"segments[0].load.heat_power_w","uniform":{"low":0.0,"high":10.0}}]},"store":"none","return":"inline"}.
storeNo
answerNoLeave out, or "summary", for the head and one short summary row per row: the values it sets, outcome, steps landed, refusal name and seal; "states" adds each run's final state in decimals; "full" gives every row whole. With return "file" the answer is the head and the names of the files whatever this says. Not part of the sealed request. The head and the dataset_seal are the same in all three forms. A summary row holds row, set (the values a grid's or a sample's row sets), outcome, steps_landed, reject and run_seal; the quantities of one row are read by sending its request to run_trajectory with a readout. An ended row is a run that stopped at an end its card declares: it has a run seal, the end's reject name in reject and the sentence naming the end in reject_detail. A refused row is a run the card refused part way: it has a run seal, the refusal's name in reject and its sentence in reject_detail. An unadmitted row is a request turned away before computing: it has no run seal, and its sentence, with the refusal's name in round brackets when the sentence gives one, is its reject_detail; its summary row gives that name in reject. What a sentence that begins "Physical Failure" or "Physical Violation" means is in the description of run_trajectory. An inline answer is counted from the plan before anything runs, and one above 42500 characters is refused with what to change: a summary row counts 220 characters and the values it sets; with states, each number of the final state adds its name and 28 characters (84 for a 3-vector, 9 for a flag); a whole row counts its own request and 1900 characters, and for each number twice its name and 60 characters (150 for a 3-vector, 9 for a flag); store "frames" adds 128 characters for each recorded state to a full answer; the head repeats the request.
domainNo
returnNo
solverNoA plan of solves: the solver, in place of domain and card. It takes no store and no return. A plan of solves is answered inline: a list, {"kind":"list","solves":[{"parameters":{...}}]}, or a grid, {"kind":"grid","base":{"parameters":{...}},"axes":[{"path":"parameters.<input>","values":[...]}]}, of at most 64 solves. Each row is a solve request, solved as solve solves it and carrying the solution_seal solve gives it; a request turned away without a seal, by the rules of a request or by the solver, is an unadmitted row. The rows are sealed under one dataset_seal by the rules of a plan of runs, with solution_seal in the leaf in the place of run_seal, and completed in the counts counts the solves that converged. A summary row has row, set, outcome, reject, solution_seal and every single number of the result in decimals; answer "full" gives every solution whole, and is refused when it comes to more than 42500 characters. verify_dataset verifies a plan of solves by its request and dataset_seal, and validate_series compares one number of its results with measurements. Worked plan of solves: {"solver":"atom_dft","plan":{"kind":"list","solves":[{"parameters":{"atomic_number":10}}]}}.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / description
      Previous value: -"A plan of runs on one card (domain, card, plan, store and return, all required) or of solves of one solver (solver and plan). Rows <= 100000, steps in total <= 100000000, stored frames <= 16777216; inline: an answer counted from the plan <= 40000 characters, which a plan reaches first, a grid on one axis at about 140 summary rows and a list sooner, its head repeating each run's request (a plan of more than 1000 rows is refused before it is counted, as too large to return inline), and frames <= 10000; solves <= 64. With return \"file\" the answer is the head and the names of the files stored, on a connection started with a directory for them."New value: +"A plan of runs on one card (domain, card, plan, store and return, all required) or of solves of one solver (solver and plan). Rows <= 100000, steps in total <= 100000000, stored frames <= 16777216; inline: an answer counted from the plan <= 42500 characters, which a plan reaches first, a grid on one axis at about 150 summary rows and a list sooner, its head repeating each run's request (a plan of more than 1000 rows is refused before it is counted, as too large to return inline), and frames <= 10000; solves <= 64. With return \"file\" the answer is the head and the names of the files stored, on a connection started with a directory for them."
    • changedInput schema / properties / answer / description
      Previous value: -"Leave out, or \"summary\", for the head and one short summary row per row: the values it sets, outcome, steps landed, refusal name and seal; \"states\" adds each run's final state in decimals; \"full\" gives every row whole. With return \"file\" the answer is the head and the names of the files whatever this says. Not part of the sealed request. The head and the dataset_seal are the same in all three forms. A summary row holds row, set (the values a grid's or a sample's row sets), outcome, steps_landed, reject and run_seal; the quantities of one row are read by sending its request to run_trajectory with a readout. An ended row is a run that stopped at an end its card declares: it has a run seal, the end's reject name in reject and the sentence naming the end in reject_detail. A refused row is a run the card refused part way: it has a run seal, the refusal's name in reject and its sentence in reject_detail. An unadmitted row is a request turned away before computing: it has no run seal, and its sentence, with the refusal's name in round brackets when the sentence gives one, is its reject_detail; its summary row gives that name in reject. What a sentence that begins \"Physical Failure\" or \"Physical Violation\" means is in the description of run_trajectory. An inline answer is counted from the plan before anything runs, and one above 40000 characters is refused with what to change: a summary row counts 220 characters and the values it sets; with states, each number of the final state adds its name and 28 characters (84 for a 3-vector, 9 for a flag); a whole row counts its own request and 1900 characters, and for each number twice its name and 60 characters (150 for a 3-vector, 9 for a flag); store \"frames\" adds 128 characters for each recorded state to a full answer; the head repeats the request."New value: +"Leave out, or \"summary\", for the head and one short summary row per row: the values it sets, outcome, steps landed, refusal name and seal; \"states\" adds each run's final state in decimals; \"full\" gives every row whole. With return \"file\" the answer is the head and the names of the files whatever this says. Not part of the sealed request. The head and the dataset_seal are the same in all three forms. A summary row holds row, set (the values a grid's or a sample's row sets), outcome, steps_landed, reject and run_seal; the quantities of one row are read by sending its request to run_trajectory with a readout. An ended row is a run that stopped at an end its card declares: it has a run seal, the end's reject name in reject and the sentence naming the end in reject_detail. A refused row is a run the card refused part way: it has a run seal, the refusal's name in reject and its sentence in reject_detail. An unadmitted row is a request turned away before computing: it has no run seal, and its sentence, with the refusal's name in round brackets when the sentence gives one, is its reject_detail; its summary row gives that name in reject. What a sentence that begins \"Physical Failure\" or \"Physical Violation\" means is in the description of run_trajectory. An inline answer is counted from the plan before anything runs, and one above 42500 characters is refused with what to change: a summary row counts 220 characters and the values it sets; with states, each number of the final state adds its name and 28 characters (84 for a 3-vector, 9 for a flag); a whole row counts its own request and 1900 characters, and for each number twice its name and 60 characters (150 for a 3-vector, 9 for a flag); store \"frames\" adds 128 characters for each recorded state to a full answer; the head repeats the request."
    • changedInput schema / properties / solver / description
      Previous value: -"A plan of solves: the solver, in place of domain and card. It takes no store and no return. A plan of solves is answered inline: a list, {\"kind\":\"list\",\"solves\":[{\"parameters\":{...}}]}, or a grid, {\"kind\":\"grid\",\"base\":{\"parameters\":{...}},\"axes\":[{\"path\":\"parameters.<input>\",\"values\":[...]}]}, of at most 64 solves. Each row is a solve request, solved as solve solves it and carrying the solution_seal solve gives it; a request turned away without a seal, by the rules of a request or by the solver, is an unadmitted row. The rows are sealed under one dataset_seal by the rules of a plan of runs, with solution_seal in the leaf in the place of run_seal, and completed in the counts counts the solves that converged. A summary row has row, set, outcome, reject, solution_seal and every single number of the result in decimals; answer \"full\" gives every solution whole, and is refused when it comes to more than 40000 characters. verify_dataset verifies a plan of solves by its request and dataset_seal, and validate_series compares one number of its results with measurements. Worked plan of solves: {\"solver\":\"atom_dft\",\"plan\":{\"kind\":\"list\",\"solves\":[{\"parameters\":{\"atomic_number\":10}}]}}."New value: +"A plan of solves: the solver, in place of domain and card. It takes no store and no return. A plan of solves is answered inline: a list, {\"kind\":\"list\",\"solves\":[{\"parameters\":{...}}]}, or a grid, {\"kind\":\"grid\",\"base\":{\"parameters\":{...}},\"axes\":[{\"path\":\"parameters.<input>\",\"values\":[...]}]}, of at most 64 solves. Each row is a solve request, solved as solve solves it and carrying the solution_seal solve gives it; a request turned away without a seal, by the rules of a request or by the solver, is an unadmitted row. The rows are sealed under one dataset_seal by the rules of a plan of runs, with solution_seal in the leaf in the place of run_seal, and completed in the counts counts the solves that converged. A summary row has row, set, outcome, reject, solution_seal and every single number of the result in decimals; answer \"full\" gives every solution whole, and is refused when it comes to more than 42500 characters. verify_dataset verifies a plan of solves by its request and dataset_seal, and validate_series compares one number of its results with measurements. Worked plan of solves: {\"solver\":\"atom_dft\",\"plan\":{\"kind\":\"list\",\"solves\":[{\"parameters\":{\"atomic_number\":10}}]}}."
  2. Changed1 schema field changed
    • changedInput schema / description
      Previous value: -"A plan of runs on one card (domain, card, plan, store and return, all required) or of solves of one solver (solver and plan). Rows <= 100000, steps in total <= 100000000, stored frames <= 16777216; inline: rows <= 1000, frames <= 10000, an answer counted from the plan <= 40000 characters; solves <= 64. With return \"file\" the answer is the head and the names of the files stored, on a connection started with a directory for them."New value: +"A plan of runs on one card (domain, card, plan, store and return, all required) or of solves of one solver (solver and plan). Rows <= 100000, steps in total <= 100000000, stored frames <= 16777216; inline: an answer counted from the plan <= 40000 characters, which a plan reaches first, a grid on one axis at about 140 summary rows and a list sooner, its head repeating each run's request (a plan of more than 1000 rows is refused before it is counted, as too large to return inline), and frames <= 10000; solves <= 64. With return \"file\" the answer is the head and the names of the files stored, on a connection started with a directory for them."
  3. Changed1 schema field changed
    • changedInput schema / properties / solver / description
      Previous value: -"A plan of solves: the solver, in place of domain and card. It takes no store and no return. A plan of solves is answered inline: a list, {\"kind\":\"list\",\"solves\":[{\"parameters\":{...}}]}, or a grid, {\"kind\":\"grid\",\"base\":{\"parameters\":{...}},\"axes\":[{\"path\":\"parameters.<input>\",\"values\":[...]}]}, of at most 64 solves. Each row is a solve request, solved as solve solves it and carrying the solution_seal solve gives it; a request turned away without a seal, by the rules of a request or by the solver, is an unadmitted row. The rows are sealed under one dataset_seal by the rules of a plan of runs, with solution_seal in the leaf in the place of run_seal, and completed in the counts counts the solves that converged. A summary row has row, set, outcome, reject, solution_seal and every single number of the result in decimals; answer \"full\" gives every solution whole, and is refused when it comes to more than 40000 characters. verify_dataset checks a plan of solves by its request and dataset_seal, and validate_series compares one number of its results with measurements. Worked plan of solves: {\"solver\":\"atom_dft\",\"plan\":{\"kind\":\"list\",\"solves\":[{\"parameters\":{\"atomic_number\":10}}]}}."New value: +"A plan of solves: the solver, in place of domain and card. It takes no store and no return. A plan of solves is answered inline: a list, {\"kind\":\"list\",\"solves\":[{\"parameters\":{...}}]}, or a grid, {\"kind\":\"grid\",\"base\":{\"parameters\":{...}},\"axes\":[{\"path\":\"parameters.<input>\",\"values\":[...]}]}, of at most 64 solves. Each row is a solve request, solved as solve solves it and carrying the solution_seal solve gives it; a request turned away without a seal, by the rules of a request or by the solver, is an unadmitted row. The rows are sealed under one dataset_seal by the rules of a plan of runs, with solution_seal in the leaf in the place of run_seal, and completed in the counts counts the solves that converged. A summary row has row, set, outcome, reject, solution_seal and every single number of the result in decimals; answer \"full\" gives every solution whole, and is refused when it comes to more than 40000 characters. verify_dataset verifies a plan of solves by its request and dataset_seal, and validate_series compares one number of its results with measurements. Worked plan of solves: {\"solver\":\"atom_dft\",\"plan\":{\"kind\":\"list\",\"solves\":[{\"parameters\":{\"atomic_number\":10}}]}}."
  4. Changed4 schema fields changed
    • changedInput schema / description
      Previous value: -"A plan of runs on one card (domain, card, plan, store and return, all required) or of solves of one solver (solver and plan). Rows <= 100000, steps in total <= 100000000, stored frames <= 16777216; inline: rows <= 1000, frames <= 10000, an answer counted from the plan <= 40000 characters; solves <= 64. With return \"file\" the answer is the head and the names of the files the gateway stored, and the gateway must have been started with a directory for them."New value: +"A plan of runs on one card (domain, card, plan, store and return, all required) or of solves of one solver (solver and plan). Rows <= 100000, steps in total <= 100000000, stored frames <= 16777216; inline: rows <= 1000, frames <= 10000, an answer counted from the plan <= 40000 characters; solves <= 64. With return \"file\" the answer is the head and the names of the files stored, on a connection started with a directory for them."
    • changedInput schema / properties / answer / description
      Previous value: -"Leave out, or \"summary\", for the head and one short summary row per row: the values it sets, outcome, steps landed, refusal name and seal; \"states\" adds each run's final state in decimals; \"full\" gives every row whole. With return \"file\" the answer is the head and the names of the files whatever this says. Not part of the sealed request."New value: +"Leave out, or \"summary\", for the head and one short summary row per row: the values it sets, outcome, steps landed, refusal name and seal; \"states\" adds each run's final state in decimals; \"full\" gives every row whole. With return \"file\" the answer is the head and the names of the files whatever this says. Not part of the sealed request. The head and the dataset_seal are the same in all three forms. A summary row holds row, set (the values a grid's or a sample's row sets), outcome, steps_landed, reject and run_seal; the quantities of one row are read by sending its request to run_trajectory with a readout. An ended row is a run that stopped at an end its card declares: it has a run seal, the end's reject name in reject and the sentence naming the end in reject_detail. A refused row is a run the card refused part way: it has a run seal, the refusal's name in reject and its sentence in reject_detail. An unadmitted row is a request turned away before computing: it has no run seal, and its sentence, with the refusal's name in round brackets when the sentence gives one, is its reject_detail; its summary row gives that name in reject. What a sentence that begins \"Physical Failure\" or \"Physical Violation\" means is in the description of run_trajectory. An inline answer is counted from the plan before anything runs, and one above 40000 characters is refused with what to change: a summary row counts 220 characters and the values it sets; with states, each number of the final state adds its name and 28 characters (84 for a 3-vector, 9 for a flag); a whole row counts its own request and 1900 characters, and for each number twice its name and 60 characters (150 for a 3-vector, 9 for a flag); store \"frames\" adds 128 characters for each recorded state to a full answer; the head repeats the request."
    • addedInput schema / properties / plan / description
      Added value: +"A path names one number: initial.<field>, dt_s, or segments[0].load.<field>, with the segment's number in square brackets and [0], [1] or [2] after a 3-vector field for one of its components. steps and record_every are not paths and cannot vary: every row of a grid or a sample takes them from the base run. A value an axis or a draw sets replaces the base's value of that field, and the answer's base_replaced names each field replaced; a 3-vector the base sets whole is replaced only when the paths set all three of its components. Two paths may not set one number. Each row of a grid is held to the card's bounds alone, as each run of a list is: a value outside a bound makes that row unadmitted and the other rows run. A sample's interval or choice outside a bound refuses the plan. One worked plan of each kind, each a whole request: list: {\"domain\":\"energy\",\"card\":\"thermal\",\"plan\":{\"kind\":\"list\",\"runs\":[{\"initial\":{\"temperature_k\":293.15},\"dt_s\":1.0,\"segments\":[{\"steps\":60,\"load\":{\"heat_power_w\":5.0,\"ambient_k\":293.15}}],\"record_every\":60}]},\"store\":\"none\",\"return\":\"inline\"} grid: {\"domain\":\"energy\",\"card\":\"thermal\",\"plan\":{\"kind\":\"grid\",\"base\":{\"initial\":{},\"dt_s\":1.0,\"segments\":[{\"steps\":60,\"load\":{\"ambient_k\":293.15}}],\"record_every\":60},\"axes\":[{\"path\":\"initial.temperature_k\",\"values\":[283.15,293.15]},{\"path\":\"segments[0].load.heat_power_w\",\"values\":[0.0,5.0,10.0]}]},\"store\":\"none\",\"return\":\"inline\"} sample: {\"domain\":\"energy\",\"card\":\"thermal\",\"plan\":{\"kind\":\"sample\",\"base\":{\"initial\":{},\"dt_s\":1.0,\"segments\":[{\"steps\":60,\"load\":{\"ambient_k\":293.15}}],\"record_every\":60},\"rows\":4,\"generator\":\"splitmix64_counter_v1\",\"seed_hex\":\"0000000000000001\",\"draws\":[{\"path\":\"initial.temperature_k\",\"choice\":[283.15,293.15]},{\"path\":\"segments[0].load.heat_power_w\",\"uniform\":{\"low\":0.0,\"high\":10.0}}]},\"store\":\"none\",\"return\":\"inline\"}."
    • changedInput schema / properties / solver / description
      Previous value: -"A plan of solves: the solver, in place of domain and card. It takes no store and no return."New value: +"A plan of solves: the solver, in place of domain and card. It takes no store and no return. A plan of solves is answered inline: a list, {\"kind\":\"list\",\"solves\":[{\"parameters\":{...}}]}, or a grid, {\"kind\":\"grid\",\"base\":{\"parameters\":{...}},\"axes\":[{\"path\":\"parameters.<input>\",\"values\":[...]}]}, of at most 64 solves. Each row is a solve request, solved as solve solves it and carrying the solution_seal solve gives it; a request turned away without a seal, by the rules of a request or by the solver, is an unadmitted row. The rows are sealed under one dataset_seal by the rules of a plan of runs, with solution_seal in the leaf in the place of run_seal, and completed in the counts counts the solves that converged. A summary row has row, set, outcome, reject, solution_seal and every single number of the result in decimals; answer \"full\" gives every solution whole, and is refused when it comes to more than 40000 characters. verify_dataset checks a plan of solves by its request and dataset_seal, and validate_series compares one number of its results with measurements. Worked plan of solves: {\"solver\":\"atom_dft\",\"plan\":{\"kind\":\"list\",\"solves\":[{\"parameters\":{\"atomic_number\":10}}]}}."
  5. First observed

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/idempotent annotations by disclosing real operational behavior: per-address physics permits, one-at-a-time long work, the exact refusal string 'Too many concurrent physics tasks.', a 60-second answer wait with long work stopped there, and the row/step/frame/byte limits. It also explains the seal's guarantee precisely ('the seal shows the dataset was not altered after it was sealed. It does not show the engine made it'), which is context structured fields cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, but the body is a dense, run-on block that mixes limits, seal semantics, error handling, answer sizing and return shapes without structure or line breaks. Much of this (dataset_seal contents, summary-row fields, character-cost arithmetic) reads as reference documentation that should live elsewhere, and the wall of text makes it hard to skim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return burden and does so: it names the head contents (request, counts, dataset_seal), the summary-row fields (row, set, outcome, steps_landed, reject, run_seal), and the outcomes completed/ended/refused/unadmitted with their seal rules. Some return details remain terse, but an agent has enough to interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43% across 7 parameters, so the description is obliged to compensate and largely does: it constrains answer/states/full, store frames vs none, inline vs file sizing, the solver-plan form (no store/return), and it points to the schema for input syntax. It stops short of restating path grammar itself, deferring to the schema's worked examples, so it is additive but not fully self-contained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Runs a declared plan of runs on one card, or of solves of one solver, and seals the rows under one root') and enumerates the three plan kinds. It actively distinguishes itself from siblings, positioning run_trajectory as the single-run primitive whose seal can be compared, and naming verify_dataset and validate_series for downstream work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The selection rationale is only implied: the tool batches many runs or solves, and file vs inline store/return is tied to size limits, so an agent can infer when to use it. But there is no explicit 'use this instead of N run_trajectory calls' or 'do not use for a single run' statement, and no prerequisites or preconditions are spelled out in usage terms.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources