build-sheets
Skill0 starsChanged 46 days agoMITView on GitHub
Build, fill, fix and analyse Nemi Sheets spreadsheets with formulas that the Nemi engine can calculate. Use when the user wants a spreadsheet, budget, tracker, planning grid, invoice list or table in Nemi, wants to add or change rows, fix a formula, or turn a CSV or Excel file into a live sheet.
In this repository9 other files it gives its agents.
- convert-and-editSkill
- draw-on-canvasSkill
- nemi-basicsSkill
- organize-filesSkill
- plan-with-calendarSkill
- read-and-extractSkill
- run-formsSkill
- share-and-collectSkill
- write-docsSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Write numbers as plain numbers (1250.5), never with currency signs or thousands separators, or they become text and formulas skip them.
- Distinctive: line 25
Not available, with what to use instead:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Nemi Sheets
A Nemi Sheet is a live spreadsheet in the Sheets app. Through this connection you read and write the first tab only, cell by cell, keyed by A1 references. Formatting (bold, colours, widths, number formats) is done in the app.
Cells
- Keys are A1 references: columns A to Z, then AA, AB and on; rows from 1.
- Values are text, numbers or formulas starting with
=. Use$for absolute references ($B$1). - Write numbers as plain numbers (
1250.5), never with currency signs or thousands separators, or they become text and formulas skip them. Put the unit in the header instead: "Amount (EUR)". - Dates in formulas are serial numbers from 1899-12-30. Use
DATE(2026,10,1)in a formula, or write an ISO date as text for display.
The formula engine is not full Excel
These functions exist, and only these:
SUM, AVERAGE, MIN, MAX, COUNT, COUNTA, COUNTBLANK, PRODUCT, MEDIAN, STDEV, ROUND, ROUNDUP, ROUNDDOWN, ABS, SQRT, POWER, MOD, INT, CEILING, FLOOR, EXP, LN, LOG, SIGN, IF, IFS, IFERROR, AND, OR, NOT, TRUE, FALSE, ISBLANK, ISNUMBER, ISTEXT, CONCAT, CONCATENATE, TEXTJOIN, LEN, UPPER, LOWER, TRIM, LEFT, RIGHT, MID, REPT, SUBSTITUTE, TEXT, COUNTIF, SUMIF, AVERAGEIF, COUNTIFS, SUMIFS, TODAY, NOW, DATE, YEAR, MONTH, DAY, HOUR, MINUTE, EOMONTH, WEEKDAY, WEEKNUM, DATEDIF, VLOOKUP, HLOOKUP, XLOOKUP, INDEX, MATCH
Also available: arithmetic, comparisons, & for joining text, ranges (B2:B20) and TRUE/FALSE.
Not available, with what to use instead:
| Not there | Use |
| FILTER, SORT, UNIQUE, QUERY | SUMIFS / COUNTIFS summaries, or sort the rows yourself before writing |
| ARRAYFORMULA, spilling ranges | one formula per row |
| SUMPRODUCT | a helper column with the product, then SUM |
| NETWORKDAYS, WORKDAY | WEEKDAY-based helper columns |
| VALUE, NUMBERVALUE | write the number as a number in the first place |
other tabs (Sheet2!A1) | keep everything on the first tab |
Errors you may see: #NAME? (unknown function), #REF!, #VALUE!, #DIV/0!, #N/A, #CYCLE. Wrap lookups and divisions in IFERROR where a blank is expected.
Create
- Plan the layout first: a header row in row 1, one record per row from row 2, one kind of value per column, totals in a clearly labelled row below the data (or in a summary block to the right, leaving a blank column between).
sheet_createwithtitleand all thecellsat once, formulas included.sheet_getand check thedisplayof every formula cell. Fix any error before replying.- Reply with what the sheet contains and where the totals are, plus one or two numbers from the
displayvalues.
Change
sheet_set_cells patches only the cells you send; everything else is left alone. An empty string clears a cell. The grid grows to fit.
sheet_getfirst, to see where the data ends and which columns hold what. Never assume the layout.- To add rows, write them below the last filled row. Then extend any totals or ranges that should include them (
=SUM(B2:B20)becomes=SUM(B2:B23)). sheet_getagain and check thedisplayvalues of the formulas you touched.
Read and analyse
sheet_get returns each filled cell with value (the stored value or formula) and display (the calculated result). Quote display values when answering; they are what the user sees. When the user asks "what is the total" and there is no total cell, compute it yourself from the values and say that you did.
From a file
To turn a CSV or Excel file into a live sheet: file_read it (Excel and ODS come back as CSV), map the columns to A1 keys, convert numbers to plain numbers, and sheet_create. For a very large file, create the sheet with the first chunk and add the rest with sheet_set_cells in batches of a few hundred rows.
For a static export nobody will edit, file_write a CSV into the file tree instead.
Delete
sheet_delete is permanent and creator-only. Confirm first. A form's response sheet feeds that form; deleting it breaks the form's record.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

