Skip to content

The evidence ​

Every number ToolForm shows comes from the study behind it. This page says what the study measured, which files carry its results inside the package, where each file came from, and how the advisor uses it.

What the study measured ​

A controlled study of how an agent shows its tools to a model and reads back the calls:

  • 129 schema formats, each a pure rendering of the same canonical tool description, so a difference between two formats is presentation, never content.
  • 31 answer protocols, kept as a separate axis from the format.
  • Three grading rules (main, symmetric, as_written), because one decision in the grader, whether a flat argument may be re-nested, changes the ranking.
  • 100 open-source and 12 proprietary models. The advisor's family table has one row per open family of the main grid, and one row per anchor model. Anchors are run by name and never fitted; for the proprietary ones, a hosted API may re-render the schema before the model reads it.
  • 24 generated domains with executable tools, so a call is checked against the state of a simulated world, and new uncontaminated tasks can be drawn at will.
  • 66 real tool schemas with 1,248 human-written requests, so the results are not an artefact of the generator.
  • Six public benchmarks, whose tools the study also rendered in its formats.

Every statistical claim of the paper is made on eight core formats (XML, natural language, Python signature, JSON Schema, YAML, TypeScript, Markdown table and the minimal schema). The main grid is 8 tools, tier 3, single calls.

The headline facts ​

facts.json holds the only numbers written by hand. The build checks each one against the paper's source and fails if the paper does not contain it. toolform evidence prints this list; GET /api/v1/facts returns it.

factvaluesource
schema formats129abstract
answer protocols31abstract
grading rules3results section
open-source models100introduction
proprietary models11setup section
generated domains with executable tools24abstract
real tool schemas / human-written requests66 / 1,248abstract
public benchmarks6introduction
full schema minus tool names alone57.09% [50.40, 64.02]tab:ladder
the schema ladder: names, parameter names, the minimal schema, the full JSON Schema2.19%, 25.05%, 38.38%, 59.28%tab:ladder
minimal schema against full JSON Schema19.22% [15.58, 23.05]tab:main
XML minus JSON Schema, main rule13.80% [9.16, 18.72]tab:main
XML minus JSON Schema, symmetric rule1.07% [-2.82, 4.61]results section
XML minus JSON Schema, as written-3.28% [-6.18, -0.58]tab:main
protocol spread over format spread: main, symmetric, as written2.00 [1.40, 3.22], 1.68 [1.07, 3.11], 1.22 [0.86, 1.67]tab:protocol
hallucinated tool names without and with a fixed grammar1.07%, 0.01%results section
hidden instruction followed, formats that show a description38.48 to 54.16%tab:pressure
decoy tool called5.22 to 8.45%tab:pressure
effect of a trust sentence, sentinel and valid payloads-0.35 [-1.49, 0.70], +0.23 [-0.74, 1.23]tab:injection_trust
followed hijacks that pass schema validation58.1%appendix on presentation under pressure
accuracy effect of dropping descriptions-1.86 to +1.94 (removing them costs 1.86% in the ladder appendix; adding them changes accuracy by -1.94 in tab:components4)results section
the Python signature without its docstring-12.76tab:ladder
accuracy at 1 and at 256 tools; the loss64.20%, 23.19%; 41.01%tab:count
turns with no answer at 256 tools40.77%tab:count
two-stage minus one shot at 256 tools: names; names and descriptions18.97 [11.37, 27.15], 26.72 [18.32, 34.98]tab:disclosure_v2
two-stage minus one shot at 4 tools, names-6.66 [-9.66, -3.90]tab:disclosure_v2
two-stage minus one shot at 4 tools, names and descriptions5.17 [1.23, 8.58]tab:disclosure_v2
a 128-tool panel shown whole; top 8 by BM25; top 8 by an embedding12.70%, 31.19%, 31.79%tab:count
human check: re-nesting repairs judged wrong12.5% [8.6, 17.8]results section
measure eight; fitted rule; always JSON Schema; always XML; lookup by count and tier; oracle69.18%, 64.35%, 57.97%, 65.02%, 65.85%, 75.00%tab:selection
requests to measure eight cells400selection appendix
fitted surface, held-out families, R²0.219results section
natural language minus the best structured format-11.24 [-14.93, -7.59]results section
median spread across the eight formats: anchor models, open checkpoints25%, 44%results section

Intervals are the paper's 95% intervals. Differences between formats are in percentage points, written with a % as the paper writes them.

The files ​

The evidence lives in toolform/advisor/data/ and ships in the wheel. The website keeps a byte-identical copy in website/public/data/framework/. Every file except the manifest has the same envelope:

json
{"schema_version": 1, "name": "families", "source": ["paper:tab_models_main", "paper:tab_models_full"],
 "description": "Strict-call accuracy per family and anchor model on the main grid ...",
 "conditions": {"n_tools": 8, "tier": 3, "regime": "single", "rule": "main", "seeds": "0-2"},
 "data": "..."}

A source written paper:tab_models_main is the paper's table tab:models_main; export:... is the study's results site export; registry:... is the live format or protocol registry; configs:models is the model zoo; framework:... is produced by the framework itself for its tests.

filesourcewhat it holdsused by
manifest.jsonthe buildthe evidence version, each file's sha256, size and sourcestoolform doctor, the version badge
facts.jsonthe paper's prose, checkedthe headline facts aboveexplanations, the CLI footers, the site
formats.jsonregistry:formats, export:format_leaderboardall 133 registered formats with metadata, and each study format's measured rowcandidates outside the core eight, compare_formats
protocols.jsonregistry:protocolsthe 31 protocols, with the five crossing protocols markedprotocol names
core_main.jsontab:mainthe eight core formats under the three rules, the paired contrasts against JSON Schema, the real-tool armthe pooled base accuracy, the evidence range
families.jsontab:models_main, tab:models_fullaccuracy per family and anchor model, and per open-source checkpoint (checkpoints), per core format, 8 tools, tier 3, main rulethe checkpoint, anchor and family base accuracy
protocol_crossing.jsontab:protocolformat by protocol under each rule, 35 checkpoints, and the spread ratiosthe protocol shift and the protocol switch
tool_count.jsontab:count_by_format, tab:countaccuracy and empty turns by tool count per format; the pooled sweep; the retrieval rowsthe count shift, the catalogue advice
tiers.jsontab:tier_by_formataccuracy and empty turns by tier per format; the tier definitionsthe tier shift
cost.jsontab:cost, export:cost_paretotokens per request and accuracy per token and per price for the core formats at 8 tools; the two price vectors; the cost frontier of every formattoken estimates without tools, the cost objective
injection.jsontab:pressure, tab:injection_trusthidden-instruction and decoy rates per format; the trust-line experimentguard advice, the guard's evidence
disclosure.jsontab:disclosure_v2two-stage disclosure against one shot by tool countthe catalogue advice
selection.jsontab:selectionthe selection strategies per held-out familythe measure hint, the evidence explorer
ladder.jsontab:ladder, tab:names_onlythe schema ladder and the names-only tablethe evidence explorer
zoo.jsonthe model zooevery model with its family, size, kind, context window; the family patternsmodel resolution
surface.jsonthe law fits (results repository)the fitted surface per format and its held-out R²Surface.predict
sample_renders.jsonthe frameworkthe sample tool rendered in all 133 registered formatsthe playground offline
render_cases.jsonthe frameworksix toolsets rendered in the eight core formatsparity tests of the browser renderers
advisor_cases.jsonthe frameworkabout 380 situations and the Python advisor's answers, with the catalogue reason and the costparity tests of the browser advisor
guard_cases.jsonthe frameworkabout 55 texts and the Python guard's findingsparity tests of the browser guard

Formats outside the core eight rest on the site export, not on the paper's tables. Every surface that shows such a number says so, and the advisor adds a warning when you include one as a candidate.

How the advisor uses the evidence ​

For one situation, the advisor reads (the steps are in Choose a format for your model):

  1. zoo.json, the anchor rows and the checkpoint rows of families.json to match the model;
  2. families.json (main rule, a match: the checkpoint's row, the anchor's or the family's) or core_main.json (otherwise) for the base accuracy of each candidate at 8 tools and tier 3;
  3. tool_count.json and tiers.json for the shifts to your tool count and tier;
  4. protocol_crossing.json for the protocol shift, and whether to switch protocol;
  5. cost.json for tokens and cost when no tools are given;
  6. disclosure.json and tool_count.json for the catalogue advice;
  7. injection.json for the guard advice;
  8. facts.json for the explanation, the warnings and the measure hint;
  9. surface.json for the extrapolation shown beside the answer.

The combination moves the model's base value by the count, tier and protocol shifts measured on pooled checkpoints, in log-odds, so no estimate passes 0 or 100. A tier gain (measured at 8 tools) is not applied at other tool counts. The study measured each factor alone and this combination was not itself evaluated, so the advisor prints the range across the table values it rests on beside its point value, and always suggests measuring.

Limits ​

These are the limits the paper states, and they carry over to the advisor:

  • The generated tasks isolate a mechanism. They do not look like production use. The real-tool arm (66 schemas, 1,248 requests) checks the main results on real schemas.
  • The real-tool schemas come from one framework.
  • The fitted surface reaches R² = 0.219 on held-out families. It is shown for extrapolation only, never used to choose.
  • The family table exists only under the main rule. Under the other rules the advisor uses pooled numbers and says so.
  • Past 256 tools, and outside tiers 1 to 5, nothing was measured. The advisor uses the nearest measured value and warns.
  • No table crossed two factors. The tool count, the tier and the protocol were each measured alone, so the advisor's combination of them is an estimate the study did not test.
  • Anchor models answered through their vendors' APIs or a shared endpoint, on one to three seeds of 25 requests per format, and enter no fit.
  • The guard was not measured by the study. The study measured how often models follow hidden instructions, not how well any detector finds them. The framework's own check, on 50 held-out descriptions, is in Guard third-party tools.

The paper's extended appendix lists every limitation in full.

How the evidence is built ​

The evidence files are built from the study's tables when the paper's tables change, and ship inside the package (toolform/advisor/data/). The build checks every fact against the paper's text and fails on a table row it does not know, so a renamed row is caught. manifest.json records each file's sha256 and an evidence_version (the build date and a counter); toolform doctor checks the hashes. The build itself is part of the study's code, which will be released with the study's records.

Released under the Apache 2.0 License.