Cellprose writes an Excel workbook as plain Markdown: values in a pipe table, formulas as fill ranges, one file per workbook. Models answer questions about it with less reasoning, and it renders as tables on GitHub.
Sonnet 5.5: −5% on all workbooks, which is within the noise (−12% to +2%), and −16% on the hard ones. Means of two same-session repeats, every input token priced as uncached, Claude models only. Full results and limitations.
A 12-month forecast from the benchmark, converted in this page by the JS writer. Switch views, and hover a cell or a formula line. Coloured bands are fill ranges; the striped cells are typed-in numbers sitting where formulas belong.
bytes of XML in the forecast workbook once unzipped. Formulas, cached values and styling attributes on every cell.
characters of Markdown, written in this page by the JS writer. One pipe table per region, then a formulas block of fill ranges.
output tokens on Haiku 5.5 against CSV, across all 14 workbooks: less work spent guessing what the sheet means.
Someone overwrote formula cells with typed numbers. This is what the values look like. Click the cells you suspect, then reveal what Cellprose shows.
| A | B | C | D | E | F | G | H | I | J | K | L | M | N |
|---|
A recorded benchmark call, replayed at a fixed token rate. Haiku 5.5 read the forecast once as CSV and once as Cellprose.
One recorded call, picked to show the kind of miss values-only formats make; it is not a typical call. Token counts are the whole call (6 questions); the reasoning text was not saved. Across both models and repeats, CSV scored 68.1% on typed-in questions and Cellprose 100% (12 answers each, partial credit).
Cellprose adds a little input. Models then write fewer tokens working out what the sheet means.
Mean tokens per call over 14 workbooks and two same-session repeats; input priced as uncached; Claude models only. Repeats, intervals and limitations.
Pick an edit to the forecast. Git can only say a binary file differs; the .sheet.md shows which lines changed.
Binary files a/forecast.xlsx and b/forecast.xlsx differ
Both versions of the .sheet.md were written just now, in this page, by the JS writer from the edited workbook. The edited cell and the cached total next to it are patched in the XML; nothing else changes.
# convert, then compare sizes cellprose encode model.xlsx cellprose stats model.xlsx
Working with an agent? /llms.txt indexes the format for it, and /llms-full.txt is the spec, the skill and these steps in one file.