Every agent now speaks xlsx
Full Excel compatibility for agents and machines.
// what it does
The whole spreadsheet, headless and pipeable

compute
Every formula calculated correctly
Set a cell to =PMT(…) or =XLOOKUP(…) and read the answer back. It's the same engine the app runs, so if Excel can compute it, so can a shell script.
pipe
Text in, text out
Every command reads stdin and writes stdout, so a workbook works with jq, awk, curl, sqlite, and everything else you already use.
render
Pixel perfect rendering
Render any range to a PNG, or a whole workbook to a PDF, drawn the way the app would draw it. Post a chart to Slack, or mail a report from cron.
// free
Free to use
Nobie is free forever for everyone using it for their own work. We believe the world's best XLSX experience should be free. Large companies only need to pay when they use Nobie to power products or models for their customers. We'll also introduce optional paid features and services that go beyond what spreadsheets can do today.
Read the license// getting started
Your first sheet, start to finish
tip: nobie --help, nobie <noun> --help, and nobie <noun> <verb> --help never go stale.
// naming things
Point at a cell
Every command takes a target (which workbook) and usually a selector (which cells).
| Target | Means |
|---|---|
report.xlsx | A file path. This is the default; no session needed. |
@Report.xlsx | A workbook you've held open with workbook open, for back-to-back edits. |
file:@odd-name | Escape hatch: force a literal to be treated as a path. |
--path P | Force P to be a path regardless of how it looks. |
A selector is a sheet-qualified cell or rectangle: Sheet1!A1, Sheet1!A1:C9, or a bare A1 with --sheet Sheet1. Quote sheets with spaces for your shell: 'Q1 Sales'!A1.
Input accepts A1 or absolute R1C1 anywhere (auto-detected). Output is A1 by default; the global --ref-style r1c1 flag flips it.
// the shape
One grammar for everything
Learn it once and the whole tool falls out of it. A noun, a verb, the workbook, and what to act on:
| Noun | Verbs / Actions |
|---|---|
workbook | open, new, close, path, info, undo, print (PDF) |
save | save in place, Save As, save a copy |
sheet | add, rename, delete, list |
cell | set, read |
range | read, clear, paste, copy, cut, render (PNG) |
style | set, read (effective styles), compact |
calc | recalc, mode (automatic / manual / …) |
session | start, stop, list, open, close (the local daemon) |
script | run a readable spreadsheet program (replaces batch) |
serve | serve a workbook's defined-name HTTP APIs |
version | version & self-update (nobie update) |

Sixteen things to do in a pipe
every recipe runs as written
CSV → formula-driven workbook
Pipe a CSV in, drop a live =SUM total under it, and bold the header row.
command
stdout
Calculation microservice
Wrap a spreadsheet model in a shell function that takes arguments and prints the answer.
command
stdout
Live API data straight into cells
curl the prices, reshape them with jq, paste them into cells, recalc.
command
stdout
SQL → spreadsheet in one pipe
Run a SQL query, get TSV, paste it. There's no export step in the middle.
command
stdout
Nightly PDF report by cron
Cron recalcs the book, prints a PDF, and mails it. The report just shows up every morning.
command
stdout
Render dashboard tile to Slack
Render a cell range to a PNG and post it to a Slack channel.
command
stdout
Bulk-process a whole tree
Find every .xlsx under a directory tree and recalc them all, eight at a time.
command
stdout
git diff for spreadsheets
Diff two workbooks by value, not by zip bytes. Wire it into git as a textconv.
command
stdout
Live-reload renders
Edit the file anywhere; entr re-renders the preview PNG on every save.
command
stdout
Pick a sheet with fzf
Fuzzy-find a sheet with a live preview, then dump it as an aligned table.
command
stdout
Monte-Carlo a model
Roll a thousand random inputs through a live model and read back p50 and p95. The workbook never touches disk.
command
stdout
Generate a grid from a script
One awk line prints a 144-cell times table; nobie writes the whole grid.
command
stdout
CI spec gate
CI goes red when the model's own sanity checks don't hold.
command
stdout
xlsx → CSV without a GUI
Read a tight range and swap tabs for commas.
command
stdout
Pretty-print in the terminal
Pipe a range through column and less for a scrollable, aligned table.
command
stdout
Pre-commit hook: block broken formulas
Reject a commit if any staged workbook still has a #REF! or #DIV/0! cell.
command
stdout
// over http
Serve a sheet as an API
Name a cell NOBIE_API__quote__INPUT__quantity and nobie serve turns the workbook into an HTTP service: defined names become JSON routes, inputs go in with a POST, and recalculated outputs come back. The spreadsheet is the backend.
The formula behind the total cell does the work; there's no handler to write. Each request leases an isolated replica of the workbook, applies the inputs, recalculates, reads the outputs, and restores the replica before responding - so callers never see each other's state and the file on disk is never modified. It binds to 127.0.0.1:8000 by default (--bind, --replicas to change), and caps request bodies at 1 MiB.
// the whole toolbox
Command reference
Every command is nobie <noun> <verb> <target>. Pick a noun to see its verbs and flags.
Workbook Commands
Create, inspect, print, undo, and open workbooks as background sessions.
Save Commands
Decide where edits land: in place, save-as, or a detached copy.
Sheet Commands
Add, rename, and delete tabs, or list them NUL-safe for xargs.
Cell Commands
Set a cell to a literal or a =formula, or read back the value or the formula.
Range Commands
Work on rectangles: read, clear, copy, cut, paste grids, or render to PNG.
Style Commands
Set fonts, fills, borders, alignment, and number formats, or read back the style a cell actually resolves to.
Styling Flag Catalog
Colors accept: name (red), hex (#RRGGBB), rgb(31,78,120), theme:accent1/0.4, or auto.
Number formats support presets (general, integer, currency, percent, date) or raw OOXML patterns.
Calculation Commands
Force a recalc, or read and set the workbook's calc mode.
Session & Daemon Commands
Hold a workbook open behind an @ handle, so back-to-back commands skip the load-and-save round-trip. nobie session start runs the local daemon in the foreground; nobie session stop stops it and refuses dirty workbooks unless told --save-all or --discard-all.
Spreadsheet scripts
When several reads, edits, and exports belong together, write them as one reviewable program. Source comes from stdin, a string, or a file; every edit lives in an explicit transaction. It replaces the old batch command.
A deliberately small language: let binds values, ranges, and grids; there are no loops, conditions, or functions; errors stop the program instead of changing its meaning. --check validates, --format canonicalizes, --preview runs against a disposable copy, and --schema prints the whole sentence catalog as JSON.
Serve as an HTTP API
nobie serve <WORKBOOK> turns defined names into JSON routes. Name a cell NOBIE_API__quote__INPUT__quantity and it becomes the quantity field of POST /api/quote; outputs work the same way. Discovery lives at GET /apis.
Each request leases an isolated workbook replica, applies inputs, recalcs, reads outputs, and restores the replica before responding - one caller can never see another's temporary state, and the file on disk is never modified. Loopback by default; put a real proxy in front for anything else.
Write Modifiers
Flags every write command accepts. They decide when changes hit disk, whether to back up first, and what to do about locks.
| Flag | Effect |
|---|---|
--commit | Save to disk immediately when done (default mode). |
--no-commit | Apply to the open daemon session only; do not save. |
--dry-run | Show what would change, then exit without persisting anything. |
--backup | Create a .bak-<mtime> sidecar copy before executing. |
--force-overwrite | Overwrite target even if it changed on disk since command loaded. |
--lock-timeout-ms N | Wait time for the per-file advisory lock (default: 5000ms). |

// good to know
Tricks worth stealing
Generate sheets from code
Any program can build a spreadsheet. Have it print nobie script sentences and pipe them in - a thousand cells land in one transaction.
Keep workbooks in git
It's just an .xlsx, and nobie can diff it by value. Wire it up as a git textconv and review spreadsheet changes in a pull request, like any other code.
Preview without opening anything
range render … --out p.png && open p.png gets you a styled snapshot in about a second, without launching the app.
Quote your sheet names
Sheet names with spaces need quotes for your shell: 'Q1 Sales'!A1. Same for any selector you build by hand and pipe in.
