[ ezo labs // research ]

Your agent mostly sees one line of each skill. Write that line well.

Mostly the description. For diagrams and math, most answers came without the model opening the skill. Graphs and molecules usually came after it read the full page, which our rewrite also changed.

contentsThe short answer
  1. The short answer
  2. Does one line matter at all?
  3. The test
  4. How the test ran
  5. Results with the first descriptions
  6. Results after the rewrite
  7. Where the behaviour comes from
  8. Lines have side effects
  9. What this means for you
  10. What we could not settle
  11. Limitations
  12. Method appendix
  • −16.5 → +1.8 change in large-model diagrams per 100 answers, first run → rewrite; n = 162–236
  • 0 of 372 math trials where the large model opened the math skill (math-only test)
  • 16.8% of the smaller model's 1,008 diagram trials opened the skill; 84.5% drew one

assumptions

  • Each trial replays one real first request from a coding agent. Only the instruction lines and the skill list change between the two versions.
  • The skill list shows each description cut to 170 characters, as the agent's own list cuts it.
  • If the model opens a skill, it gets the full page and up to two more replies. Any other tool call ends the trial.
  • A skill passes only if, on both models, its worst plausible loss (a one-sided 95% bound) is under 5 points, and its output shows up in at most 5% of control answers.
  • Two models from one family: a large frontier model and a smaller one. We tested no other vendor.

abstract

An AI agent sees each skill as a name and a one-line description. It reads the full page only if it opens the skill. We moved four instructions from an agent's system prompt into skills: math, diagrams, graphs and molecules. We tested two models from one family. At first, about 1 in 6 to 1 in 5 answers lost their drawing in three of eight model-and-skill pairs. Rewriting descriptions and pages won most of that back, but those three pairs still miss the bar we set in advance. For diagrams and math, most answers came from the description alone. Most graphs and molecules came after the model read the full page. A new instruction can also push out other output.

An AI coding agent can have dozens of skills installed. Each skill is a page of instructions, but the model does not see the pages up front. It sees a list with one line per skill: a name and a short description, cut off at about 170 characters. It reads a skill's full page only when it calls a tool to open it.

Moving an instruction from the system prompt (the standing instructions sent with every request) into a skill keeps that prompt short. But then the model, seeing only one line, decides whether to read more. So which part does the work: the line, or the page?

The short answer

  • For diagrams and math, the one-line description did most of the work. The model usually did not open the skill.
  • Most graphs and chemical drawings came after the model opened the skill, so its full page mattered too.
  • Our first descriptions missed up to 1 in 5 drawings (20.5 in 100).
  • Rewriting them and the pages won most back, not all.
  • If the description misses a request, the page goes unread. So name the requests it should catch, in their words.
  • Test each change on questions that should not trigger it. New wording can also push out other output.
Skill version minus inline version, before and after the rewrite Dot plot of the skill version minus the inline version in percentage points, over answered trials only, for four skills on a large and a smaller model, with the first run beside the run after the rewrite of the skill descriptions and pages, 90% ranges that count each trial on its own as thick bars, ranges that resample whole questions (5th to 95th percentiles) as thin lines, and the minus 5 point limit as a dashed line. Diagrams, large model: minus 16.5 points with the first descriptions, plus 1.8 rewritten. Diagrams, smaller: plus 13.7, then plus 21.7. Graphs, large: minus 17.3, then 0.0. Graphs, smaller: minus 20.5, then minus 14.1, with a per-question range of minus 33.0 to 0.0. LaTeX, large: 0.0 both times. LaTeX, smaller: minus 2.1, then 0.0. Molecules, large: 0.0 both times. Molecules, smaller: plus 4.9, then plus 5.8. Skill version minus inline version, before and after the rewrite Points, over answered trials only, 98 to 1,008 per version and run. First run After the rewrite Per trial, 90% Per question, 5th to 95th −5 LIMIT Diagrams Graphs LaTeX Molecules LARGE SMALLER LARGE SMALLER LARGE SMALLER LARGE SMALLER BEFORE → AFTER −16.5 → +1.8 +13.7 → +21.7 −17.3 → 0.0 −20.5 → −14.1 0.0 → 0.0 −2.1 → 0.0 0.0 → 0.0 +4.9 → +5.8 −40 −20 0 +20 +40 SKILL VERSION MINUS INLINE VERSION, POINTS Source: EZO Labs Research. Two runs on fresh trials, a few hours apart.
fig. 1Skill version minus inline version, in points (one point is one answer in a hundred). It counts answered trials only, with the 90% ranges from Tables 2 and 4. After the rewrite, the large model's diagrams and graphs moved from well below the −5 limit to zero or above. The smaller model's graphs, at −14.1, are the one case still below it here. A range that shrank to zero width draws no thin line. Counting all trials and the control questions, the large model's diagrams and graphs fail as well.

Source: EZO Labs Research, the agent-mode skill runs with the first descriptions and with the rewritten descriptions and pages, a few hours apart (Table 8). full size

Does one line matter at all?

First we checked that one line in the system prompt matters. The day before the skill tests, we removed the line that asks for math in LaTeX, the code most math typesetting uses. We asked 12 math questions and 6 control questions that need no math, three times each, on both models. We did this with tools on (agent mode) and off (chat mode).

Without the line, the smaller model wrote 16 of 36 math answers in plain symbols such as ×, ² and ≈ with tools on, and 13 of 36 with tools off. The large model did so on 8 and 5 of 36. With the line, all four fell to 0 of 36. That is a drop of 44.4 and 22.2 points with tools on, and 36.1 and 13.9 points with tools off (ranges in the appendix). Chemistry markup went from 0 of 6 answers without the line to 6 of 6 with it, in every setting.

This test was small and ran one version after the other. Its ranges also count repeats of one question as separate questions, so they look more certain than they are. Still, one line changed over a third of the smaller model's math answers. Could that line live in a skill list instead?

The test

We asked whether four skills, each listed with its description, could replace the inline instructions for four kinds of output. The bar was to lose no more than 5 points on either model.

The four kinds are typeset math (LaTeX), diagrams, graphs of functions and numeric data, and drawings of molecules. We compared two versions of the agent's setup:

  • The inline version (A) kept the instructions as shipped. It had one line for diagrams, one for graphs, and one for math that also covers molecules. Its skill list named only the graphing skill.
  • The skill version (S) removed those lines and listed four skills instead: math, diagrams, graphs and molecules. Each description was cut to 170 characters, as the agent's list cuts every entry.

Each kind had 12 test questions that call for it, plus control questions that need none of it.

table 1 Skills, measures and controls.
Skill What counts as a hit Control (unwanted output)
Diagrams a figure that renders, on 12 diagram questions a diagram on a question that needs none
Function graphs a figure that renders, on 12 graph questions a graph on a question that needs none
LaTeX math LaTeX that renders, on 12 math questions any math notation on a control question
Molecules a structure drawing on 12 molecule questions a structure drawing on a control question

data (csv)

The diagram and graph questions describe something that reads faster as a picture. Examples are a call sequence, a pipeline, spend broken down by provider, or numbers along a numeric axis. Nine of the twelve graph questions never say graph, plot, chart, draw or visualise.

We set the pass rule before collecting any data. A skill passes only if two things hold on both models. Its worst plausible loss must stay under 5 points. And its output must show up in no more than 5% of control answers.

How the test ran

Each trial is one question asked once. It replays a real first request from a coding agent, with its full system prompt and tool list. It also carries a real user's list of about 100 skills and the product's model settings. Only the last user message changes, to the test question. The two versions differ only in the instruction lines and the skill list.

If every tool call in a reply opens one of the four skills, a stand-in returns that skill's page. The trial then goes on for up to two more replies. Any other tool call ends the trial. A trial that ends on a tool call, with no figure, leaves no answer to score. So we count two ways: over answered trials only, and over all trials, with unanswered ones counted as misses. The pass rule uses the worse of the two.

We ran each question 10 to 13 times, then topped both versions up once, to 156 to 1,008 trials per version. Control questions ran 18 to 42 trials per version. We wrote down the question, measures, pass rule and sizing rule before making any paid call. After the first run we changed one thing: we added the all-trials count and judged on the worse view. The second run used only fresh trials.

Each result comes with two 90% ranges, from two methods. A range is the span the true difference plausibly falls in. The appendix covers both methods, the sizing rule and the order of the runs.

Results with the first descriptions

table 2 Skill version minus inline version, in points, over answered trials and over all trials. The ranges are for the answered-trials difference. Rates are hits over scored trials.
Skill Model A S S − A, answered (all) Per trial, 90% Per question, 5th–95th
Diagrams large 225/235 (95.7%) 187/236 (79.2%) −16.5 (−15.8) −21.5 to −11.7 −34.8 to −1.6
Diagrams smaller 621/1008 (61.6%) 759/1008 (75.3%) +13.7 (+13.7) +10.3 to +17.0 +0.5 to +29.8
Graphs large 116/121 (95.9%) 77/98 (78.6%) −17.3 (−21.7) −25.1 to −10.0 −41.0 to +4.7
Graphs smaller 277/303 (91.4%) 198/279 (71.0%) −20.5 (−21.2) −25.6 to −15.2 −39.7 to −5.0
LaTeX large 143/143 (100%) 143/143 (100%) 0.0 (0.0) −1.9 to +1.9 0.0 to 0.0
LaTeX smaller 142/143 (99.3%) 139/143 (97.2%) −2.1 (−1.9) −5.4 to +0.7 −7.7 to +1.4
Molecules large 156/156 (100%) 146/146 (100%) 0.0 (−6.4) −1.8 to +1.7 0.0 to 0.0
Molecules smaller 193/203 (95.1%) 191/191 (100%) +4.9 (−1.0) +2.5 to +8.1 0.0 to +14.7

data (csv)

No kind of output passed.

The large model's diagram loss came from two questions with numbers by category: spend by provider, and test counts per package. The inline version charted them on 34 of 37 trials. The skill version charted them on 0 of 37, and gave a markdown table every time. Its description said to draw when "a category comparison reads faster as a picture". The model did not see a table of spend by provider as one.

The graph losses came from one kind of question on both models: numbers along a numeric axis. An effort-level curve went from 15 of 15 to 1 of 14 on the large model. On the smaller model it went from 31 of 31 to 0 of 31.

The smaller model gained on diagrams. Its skill version drew sequence diagrams, which show messages passing between parties step by step, where its inline version mostly drew nothing. For how a secure web connection opens (a TLS handshake), diagrams went from 2 of 84 to 83 of 84. For a sign-in through another site (an OAuth login flow), they went from 27 of 84 to 79 of 84.

The large model's molecule loss came from the skill page. The page advised taking a molecule's 3D layout from a public database. That sent the model to fetch on 10 trials, which ended them before any drawing. Over answered trials, which leave those 10 out, there was no loss.

Results after the rewrite

We rewrote three descriptions to name the kinds of request the models had missed:

  • The diagram description gained "numbers by category or share (bar, pie; even beside a table)" and "dependent steps".
  • The graph description became "any function, equation (even simple) or numbers on a numeric x (time, size), table or not". It also told the model it needs no tool first.
  • The math description added "worked calculation" and named the plain symbols to avoid.
  • The molecule description did not change.

The same change also revised the skill pages, with advice aimed at the same misses. For example, the graph page now says never to run a tool just to compute values the graph can compute. The appendix lists every page change. Then we re-ran the whole test on fresh trials. So every change between the two runs mixes the new descriptions with the new pages.

table 3 S − A in points, answered trials (all trials in brackets), first run against the run after the rewrite.
Skill Large model, first → rewritten Smaller model, first → rewritten
Diagrams −16.5 (−15.8) → +1.8 (−0.6) +13.7 (+13.7) → +21.7 (+21.6)
Graphs −17.3 (−21.7) → 0.0 (−1.9) −20.5 (−21.2) → −14.1 (−10.3)
LaTeX 0.0 (0.0) → 0.0 (0.0) −2.1 (−1.9) → 0.0 (0.0)
Molecules 0.0 (−6.4) → 0.0 (−0.6) +4.9 (−1.0) → +5.8 (+4.7)

data (csv)

The two runs are separate samples a few hours apart. The inline version's results moved between them too, so only the differences compare across runs. Table 4 gives the second run in full.

table 4 Second run, after the rewrite of descriptions and pages. 90% ranges; the low end is the cautious bound the pass rule reads.
Skill Model Trials A S S − A Per trial, 90% Per question, 5th–95th
Diagrams large answered 161/166 (97.0%) 160/162 (98.8%) +1.8 −1.1 to +4.9 −2.4 to +6.0
Diagrams large all 161/168 (95.8%) 160/168 (95.2%) −0.6 −4.6 to +3.3 −6.5 to +4.8
Diagrams smaller answered 634/1008 (62.9%) 852/1007 (84.6%) +21.7 +18.6 to +24.8 +6.0 to +39.5
Diagrams smaller all 634/1008 (62.9%) 852/1008 (84.5%) +21.6 +18.5 to +24.7 +6.0 to +39.4
Graphs large answered 102/102 (100%) 99/99 (100%) 0.0 −2.7 to +2.6 0.0 to 0.0
Graphs large all 102/156 (65.4%) 99/156 (63.5%) −1.9 −10.8 to +6.9 −11.5 to +7.7
Graphs smaller answered 189/202 (93.6%) 163/205 (79.5%) −14.1 −19.6 to −8.6 −33.0 to 0.0
Graphs smaller all 189/252 (75.0%) 163/252 (64.7%) −10.3 −16.9 to −3.6 −25.0 to +1.2
LaTeX both answered 143/143 (100%) 143/143 (100%) 0.0 −1.9 to +1.9 0.0 to 0.0
LaTeX both all 143/156 (91.7%) 143/156 (91.7%) 0.0 −5.3 to +5.3 0.0 to 0.0
Molecules large all 156/156 (100%) 155/156 (99.4%) −0.6 −2.8 to +1.1 −1.9 to 0.0
Molecules smaller answered 260/276 (94.2%) 273/273 (100%) +5.8 +3.6 to +8.6 +0.4 to +14.9
Molecules smaller all 260/276 (94.2%) 273/276 (98.9%) +4.7 +2.2 to +7.6 −0.4 to +14.1

data (csv)

Under the pass rule as written, math and molecules pass on both models. Math's pass over all trials rests on a flaw in one range method, explained in the appendix. Diagrams and graphs still fail, in three places.

The large model fails on diagrams for two reasons. First, it drew a diagram on 3 of 42 control trials (7.1%), and the true rate could be as high as 19%. All three came on one question asking what an idempotency key is, a tag that stops a request from being carried out twice. Each was a sequence diagram drawn without opening the skill: the new description fired by itself. Second, its cautious bound over all trials is −6.5, just past the −5 limit. On the two category questions it now charts 20 of 22 trials, against 26 of 26 for the inline version and 0 of 37 in the first run.

Graphs fail on both models. The smaller model still misses the same two questions. On the effort-level curve, the inline version drew 20 of 20 answered trials and the skill version 0 of 21. On response-time percentiles sampled every ten minutes, the split was 8 of 21 against 0 of 21. The skill version answered all 42 with a table and never opened the skill.

The large model passes over answered trials but fails over all trials, where its range is too wide (low end −10.8 or −11.5, by method). About a third of its graph trials ended on a tool call in both versions (54 and 57 of 156). Most were a shell command to work out the numbers first, and our sizing rule did not allow for that. It now draws the effort curve on 11 of 11 answered trials, up from 1 of 14. But all eleven are diagram-skill charts, not graphs from the graphing skill, and none came after opening it.

Where the behaviour comes from

Three clues point to the description. The one exception is the large model's graph gain.

The first clue is how often the skill version drew without opening anything (Table 5).

table 5 Skill version, second run: trials that opened the matching skill, hits over all trials, and hits from trials that never opened it.
Skill Model Opened the skill Hits Hits without opening it
Diagrams large 52/168 (31.0%) 160/168 110
Diagrams smaller 169/1008 (16.8%) 852/1008 683
Graphs large 69/156 (44.2%) 99/156 30
Graphs smaller 158/252 (62.7%) 163/252 7
LaTeX large 6/156 (3.8%) 143/156 137
LaTeX smaller 25/156 (16.0%) 143/156 118
Molecules large 120/156 (76.9%) 155/156 36
Molecules smaller 253/276 (91.7%) 273/276 22

data (csv)

For diagrams and math, most hits came from trials where the model never saw the page.

A follow-up math test changed only one thing: the math line in the prompt against the math skill's entry in the list. It mixed the versions in random order, with 372 math trials and 78 control trials per version and model. The skill version passed on both models. Its cautious bound was −0.8 points over answered trials, and −3.7 (large) and −3.4 (smaller) over all trials. No version put math on a control question (0 of 78 each, so the true rate is at most 4.7%).

The large model never opened the skill, and typeset all 340 answers it gave. The smaller one opened it on 13 of 372 trials (3.5%). No version answered a math question in plain symbols (0 of 372). The list entry did the job of the line it replaced.

Graphs and molecules work differently: the models usually opened the page before drawing. For the smaller model, 156 of its 163 graphs came after opening the graphing skill. For the large model, 69 of its 99 did. The page changed between the runs too, so the large model's graph gain is not the description's alone.

The second clue is where the failures sit. The trials that failed were ones where the model had only the description to go on. The smaller model's 42 missed graphs in the second run opened nothing. The large model's three unwanted diagrams came without opening the skill. In the first run, the large model answered both category questions with tables. The description was its only cue to draw a chart, and it did not match.

The third clue is what changed. The rewrite targeted the exact requests that had failed: categories, shares and tables for diagrams, and numbers on a numeric axis for graphs. Those results moved, apart from the smaller model's graphs. On the large model, the two category questions went from 0 of 37 to 20 of 22, eighteen of them without opening a skill. The effort curve went from 1 of 14 to 11 of 11. All eleven were diagram-skill charts, and nine came without opening any skill. The pages changed too, but a page can only act when the model opens it. For diagrams and math, that happened on a minority of trials.

The molecule skill shows how the work splits. A structure drawing needs exact syntax, so the models opened the page on 77% to 92% of molecule trials. What the page said then changed what they did. The first page's database advice cost the large model 10 trials, and narrowing that advice removed the loss. The description decides whether the model produces the output. The page shapes how, and only once it is opened.

Lines have side effects

An instruction that triggers one thing can suppress another. The molecule instruction is the clearest case we measured.

This test ran in chat mode, with no tools and no skill to open. We compared the shipped instructions (M) with the same instructions minus the molecule line (A). That line is the molecule skill's description, written into the system prompt. We asked 12 molecule questions, 20 times each: 240 trials per version and model, in mixed order.

table 6 Molecule questions, chat mode, without the molecule line (A) and with it (M). 95% ranges.
Measure Model A M M − A Per trial, 95% Per question, 95%
Any LaTeX large 223/240 (92.9%) 163/240 (67.9%) −25.0 −31.7 to −18.1 −42.9 to −9.2
Any LaTeX smaller 157/240 (65.4%) 58/240 (24.2%) −41.3 −48.8 to −32.8 −55.8 to −25.8
Formula or equation in text large 204/240 (85.0%) 131/240 (54.6%) −30.4 −37.9 to −22.4 −50.0 to −12.5
Formula or equation in text smaller 168/240 (70.0%) 100/240 (41.7%) −28.3 −36.5 to −19.6 −43.3 to −14.6
Chemistry in any form large 204/240 (85.0%) 240/240 (100%) +15.0 +10.7 to +20.1 +3.8 to +32.5
Chemistry in any form smaller 168/240 (70.0%) 240/240 (100%) +30.0 +24.3 to +36.1 +11.3 to +50.8

data (csv)

The line cut both LaTeX and the written formula. Plain-text formulas did not rise to fill the gap: −1.7 points on the large model and +0.4 on the smaller one. Every reply with the line included a drawing of a molecule the question asked about. So the chemistry was still there, as a drawing instead of a written formula. On some questions the swap was total. The large model wrote nicotine's formula in text on 18 of 20 trials without the line, and on 0 of 20 with it. Whether a drawing may stand in for a stated formula is a product choice that this test cannot make.

It happened elsewhere too. The rewritten diagram description drew a diagram on a question that only wanted a definition. In an earlier chat-mode run, we used each skill's description as the chat instruction. There, the first math description ("any formula, unit or equation" in LaTeX) put formulas in 5 of 18 large-model control answers, all on the six about prices. The shipped line put none. That run kept no per-trial records, so this comes from its written analysis and cannot be re-checked.

What this means for you

If you move instructions into skills, treat the description as the instruction. On most trials it was the only part the model saw. If a description does not match the request, the model never reads the page.

  • Name the requests that should trigger it, in the words those requests use. "Category comparison" did not match spend by provider. "Numbers by category or share", with "even beside a table", did. The models matched the request against the description's words. They did not stretch a general phrase to cover a specific case.
  • Put the trigger first. The list cuts every entry at 170 characters.
  • Test each change on questions that should not trigger it. Widening the diagram trigger won back the large model's loss. It also fired on a question that wanted a sentence. Our 18 to 42 control trials per version were too few to pin that rate down.
  • Check what a new trigger pushes out. A line that asks for a drawn molecule can stop the model writing the formula. If you need both, ask for both.
  • Where the output needs exact syntax, expect the model to open the page. Then everything on it, side advice included, changes what the model does.

What we could not settle

  1. The smaller model's graphs. After the rewrite, it still answered numeric-axis questions with tables. The next test is a description that names such data more directly.
  2. The large model's unwanted diagrams. All three came from one question, and the true rate could be as high as 19%. Pinning it down needs a few hundred control trials.
  3. Description against page. The rewrite changed both. A run that changes only the description, with the page held fixed, would separate them. Only the follow-up math test was built that way.
  4. Sizing when many trials go unanswered. About a third of the large model's graph trials ended on a tool call. The sizing rule ignored that, so the all-trials range could not clear −5 at the size we ran.
  5. A molecule description that keeps the formula. In a follow-up, a description that also asks for "the formula or equation in the text" kept every drawing. It also lifted written chemistry above the no-line level on both models. It passed the control check only under a rule we re-registered, by so small a margin that the other range method would have failed it.
  6. Other models. Both models come from one family. We do not know whether models from other vendors weigh list entries the same way.

Limitations

Each of these is spelled out in full in the appendix.

  • Every trial replays one real request, with one user's list of about 100 skills.
  • Any tool call other than opening a skill ends the trial, so some figures go unseen.
  • Both range methods have known flaws.
  • The rendering checks accept some wrong output and reject some fine output.
  • Some questions were written for testing rather than taken from real chats.
  • In the second run, the inline version listed the graphing skill with its older description.
  • The first skill run tested one version after the other, so time of day may explain part of its differences.
  • Some runs kept no per-trial records, so their figures cannot be re-checked.
  • The math-line test was small and graded by simple rules.
  • Control questions were few, so low rates of unwanted output are not pinned down.

Method appendix

Sizing

Stage 1 ran 10 repeats of each diagram and graph question, which is 120 trials per kind, version and model. It ran 13 repeats of each math question and 10 of each molecule question. From the inline version's rate alone, never from the difference, we set the final size per version, between 150 and 1,000 trials. Both versions were then topped up to that size once, with more repeats of the same questions. Control questions were not topped up.

From stage 1, arm A's rate p^\hat p for each kind and model sets the final trials per arm:

n=min⁡(1000, max⁡(150, ⌈2p^(1−p^) (1.645+0.842)20.052⌉))n = \min\left(1000,\ \max\left(150,\ \left\lceil \frac{2\hat p(1-\hat p)\,(1.645 + 0.842)^2}{0.05^2} \right\rceil\right)\right)

Here p^\hat p is a hit rate, and the denominator is the 5-point margin as a proportion, squared. The rule gives 80% power for non-inferiority at that margin when the true difference is zero. It uses the answered-trials rate, which is why kinds with many unanswered trials ended up too small for the all-trials view.

What the rewrite changed on the pages

The diagram and graph pages now say to chart such numbers "even when a table carries the exact values". The graph page says never to run a tool just to compute values the graph can compute. The math page covers "every line of a worked calculation". The molecule page says drawing "needs no tool call". Its lookup advice was narrowed to "only when the user asks for a verified" structure. All four pages had also been trimmed before the rewrite.

Run order

The first skill run ran each arm as a block, one after the other, so time is confounded with arm. The second run started both arms as parallel processes in the same second, and the skill arm finished up to 340 seconds behind. Only the two follow-up runs interleaved arms within one plan: the follow-up math test and the molecule side-effect test. Each ran one block per repeat and question, in a seeded random order.

Intervals

Every difference gets two 90% two-sided intervals, so each lower end is a one-sided 95% bound. The pass rule's "worst plausible loss" is that lower end.

The Newcombe hybrid score interval, the per-trial range in the tables and Figure 1, treats trials as independent. It combines the two arms' Wilson intervals at z=1.645z = 1.645. The prompt-cluster bootstrap, the per-question range, resamples whole questions instead. It draws the kind's questions with replacement and sums each drawn question's hits and trials in both arms. It then computes the pooled difference, and repeats 5,000 times with a fixed seed. The 5th and 95th percentiles bound it.

Repeats of one question are correlated, so Newcombe runs narrow, and the bootstrap decides when the two disagree on the gate. Where they agree, we quote the lower bound of the two. The control gate reads the skill arm's false-positive rate as a point estimate. Upper bounds quoted on control rates are Wilson 95% upper bounds.

The math-line run

Here are the math-line run's differences, line on minus line off, with 95% Newcombe intervals. In agent mode they were −44.4 points (−60.4 to −26.7) for the smaller model and −22.2 (−38.1 to −8.0) for the large model. In chat mode they were −36.1 (−52.4 to −19.4) and −13.9 (−28.7 to −1.5). These intervals treat repeats of one question as independent.

Limitations in full

  • Every trial replays one captured request, with one user's skill list of about 100 entries. The four skills compete with that list, not a clean install's. The captured system text names the large model, so the smaller model runs under a prompt that names the other one.
  • The stand-in answers only skill openings. Any other tool call ends the trial, so a figure the model would have drawn after a shell command or a fetch goes unseen. That is why we report two views and gate on the worse one.
  • Newcombe treats correlated repeats as independent, so it runs narrow. The cluster bootstrap has only 12 questions per kind to resample, and it can collapse to zero width (see below).
  • Rendering checks use the product's own renderers and validators, which accept some wrong input and reject some reasonable input. In the first run, the graph validator rejected one option spelling that a later version accepts. Counting arm A's misses of that kind as hits, the first run's graph losses widen to about −21 points on both models.
  • Nine graph questions came from a data-heavy suite written for graphing, which is why so many graph trials ran a tool first. Six molecule questions were written for this run rather than taken from logged chats.
  • In the second run, arm A listed the graphing skill with its older description, frozen for the first run.
  • The first skill run ran each arm as a block, so time is confounded with arm (see Run order).
  • The first skill run's and the chat-mode run's per-trial rows were not kept, so their figures come from the written analyses and cannot be re-checked. The second run, the follow-up math test and the molecule side-effect test kept their rows. Re-analysing them reproduces every number we quote from them.
  • The math-line run used three repeats per question (36 math trials per cell), ran one arm after the other, and graded with heuristics. We read every currency, false-positive and unrendered-math flag by hand.
  • Control questions were few: 18 to 42 per arm in the skill runs. So a 0% false-positive rate still has a Wilson 95% upper bound of 8% to 18%.

The degenerate cluster bootstrap

The cluster bootstrap fails silently when every question's difference between arms is the same number. Every resample then returns that number, and the interval has zero width. It measured no spread between questions, so it reports no uncertainty.

That happened to LaTeX in the second run, over all trials. On both models, the only misses were the 13 trials of one compound-interest question. Each ended on a tool call before any answer, in both arms. The other 11 questions hit 13 of 13 in both. Every per-question difference was exactly 0, so the cluster interval was 0.0 to 0.0. Newcombe on the same counts (143 of 156 in each arm) gave −5.3 to +5.3.

table 7 LaTeX, all trials, second run: the same counts under each decision rule.
Model Cluster lower bound Newcombe lower bound Gate as registered Gate with degeneracy rule
large 0.0 −5.3 pass (cluster decides) fail (Newcombe decides)
smaller 0.0 −5.3 pass (cluster decides) fail (Newcombe decides)

data (csv)

The registered rule let the bootstrap decide, so LaTeX passed and was set to be adopted. We then added a rule: when the bootstrap is degenerate, Newcombe decides. Under it the all-trials view fails on both models, and the decision flips to not adopt. That failure reflects sample size, since the arms were identical, and 156 trials cannot put the lower bound above −5. It is why we ran the follow-up math test, interleaved, with 372 trials per arm, which passed under the stricter rule. The first run had the same pattern on the large model and passed it the same way. A degenerate bootstrap is easy to miss because its interval looks like the best possible result.

Runs

table 8 Runs behind this report. Every run finished with zero errored calls. All ran on 26 and 27 October 2026.
Run Mode Arms Calls Rows kept
Math line agent and chat line off, line on, four rewordings in chat 864 no
Skills, first descriptions agent inline, skills 5,256 no
Skills, chat mode chat inline, descriptions as lines 4,176 no
Skills, rewritten descriptions and pages agent inline, skills 4,968 yes
Follow-up math test agent math line, math skill list entry 1,800 yes
Molecule side effect chat without line, with line 960 yes

data (csv)

revisionsfirst published , last updated
revisions to this post
datechange
Published.

cite this

EZO Labs Research. Your agent mostly sees one line of each skill. Write that line well. EZO Labs Inc, research report EZO-R-2026-05, 30 October 2026. https://ezolabs.io/research/skill-descriptions

@techreport{ezolabs2026skills,
  title       = {Your agent mostly sees one line of each skill. Write that line well.},
  author      = {{EZO Labs Research}},
  institution = {EZO Labs Inc},
  type        = {Research report},
  number      = {EZO-R-2026-05},
  year        = {2026},
  month       = oct,
  url         = {https://ezolabs.io/research/skill-descriptions}
}

published under the ezolabs.io terms of service.

next

  1. Let your lead agent only plan: fewer turns, same score

    Fewer turns, same score. In three paired runs of one task, a lead agent that only plans took 9 turns instead of 17 and compacted 4 times, not 5. All 168 tests passed. Total tokens did not fall.

all research