A toolkit for working with spreadsheets from Claude Code
Project description
sheetwright
A toolkit that lets Claude Code work with spreadsheets the way it works with code: text-source files, git, TDD, diffs, and review.
.xlsx is treated as a build artifact compiled from text sources. You
write Markdown tables and YAML sidecars; sheetwright produces the
workbook and runs LibreOffice Calc in
headless mode (the default, swappable calc engine) to evaluate every
formula. From there you assert on outputs with ordinary Python tests,
diff source against any other workbook, and snapshot calculated values
for regression checks.
sheetwright also ships an MCP (Model Context Protocol) server, so Claude Code (or any MCP client) can drive a project end-to-end through typed tools that mirror the CLI.
Quick reference
sheetwright init my-model # scaffold a fresh project
sheetwright import path/to/model.xlsx # ingest an existing workbook (or re-import)
sheetwright build # compile sources -> build/<name>.xlsx
sheetwright recalc # run the calc engine, cache results
sheetwright test # run testsweet tests
sheetwright snapshot [--update] # golden-file regression of outputs
sheetwright diff [--vs xlsx:<path>] # semantic diff of source or vs an xlsx
sheetwright check # lint dangling refs, missing names, etc.
sheetwright mcp # run the MCP server on stdio
Installation
sheetwright uses uv for project
management and Python 3.11.
git clone https://github.com/kaapstorm/sheetwright.git
cd sheetwright
uv sync
uv run sheetwright --help
LibreOffice must be on PATH for the default calc engine.
- Debian/Ubuntu:
apt install libreoffice - macOS:
brew install --cask libreoffice - Windows (PowerShell):
winget install --id TheDocumentFoundation.LibreOffice
Windows users new to the command line should start with the Windows setup primer.
Documentation
- Getting started — install through first test in about ten minutes.
- CLI reference — every command and flag.
- Source format — on-disk layout and the Markdown / YAML / TOML semantics.
- Testing reference — the
sheetwright.testing.ModelAPI and testsweet patterns. - MCP reference — typed tools, return shapes, error codes.
- Calc engine reference — the plugin interface and the LibreOffice backend.
- Tutorials: greenfield, importing, TDD, snapshots, escape hatch.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sheetwright-0.1.1.tar.gz.
File metadata
- Download URL: sheetwright-0.1.1.tar.gz
- Upload date:
- Size: 178.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1efafa4b6a170369132451dceafae60655c930f282c7b77d96ad989a5789fd87
|
|
| MD5 |
f2269b89907b3959a46de723e8e635c4
|
|
| BLAKE2b-256 |
70ea18c5109a6cd485c14ffac593bed1b79d50d59ca889927ab840bea080e5c1
|
Provenance
The following attestation bundles were made for sheetwright-0.1.1.tar.gz:
Publisher:
publish.yml on kaapstorm/sheetwright
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sheetwright-0.1.1.tar.gz -
Subject digest:
1efafa4b6a170369132451dceafae60655c930f282c7b77d96ad989a5789fd87 - Sigstore transparency entry: 1486167163
- Sigstore integration time:
-
Permalink:
kaapstorm/sheetwright@479334603bab90c76015ff3e7ad602cc75ea212c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/kaapstorm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@479334603bab90c76015ff3e7ad602cc75ea212c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sheetwright-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sheetwright-0.1.1-py3-none-any.whl
- Upload date:
- Size: 79.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cbe06be34fdf3ad5c3ca429acfc7f225eca850e58226a95e3b0fa00706aa85da
|
|
| MD5 |
751ca299c652e5edf86d75e48c355501
|
|
| BLAKE2b-256 |
d28296876341a8aa2a8832f8b7afc73a1184981d4936ccdb3c7ae4bba4fea4d4
|
Provenance
The following attestation bundles were made for sheetwright-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on kaapstorm/sheetwright
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sheetwright-0.1.1-py3-none-any.whl -
Subject digest:
cbe06be34fdf3ad5c3ca429acfc7f225eca850e58226a95e3b0fa00706aa85da - Sigstore transparency entry: 1486167173
- Sigstore integration time:
-
Permalink:
kaapstorm/sheetwright@479334603bab90c76015ff3e7ad602cc75ea212c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/kaapstorm
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@479334603bab90c76015ff3e7ad602cc75ea212c -
Trigger Event:
push
-
Statement type: