Portable, AI-native data sheets.
Project description
Folio
Portable, AI-native data sheets.
A sheet is a directory of plain files that AI agents read and write as
first-class users, that humans review later, and that travel as a tar
archive across machines.
my-sheet/
├── contract.yaml # required — ODCS subset
├── records.jsonl # required — one JSON object per line
├── derivations/ # optional — derivation files
├── scripts/ # optional — reusable scripts
├── provenance.jsonl # append-only audit log
└── README.md # optional, with typed frontmatter
Surfaces
folio— Python SDK + CLI (validate, query, list, upsert, delete, materialize, status, provenance, serve, script, export).folio-mcp— FastMCP server exposing the SDK as nine tools (stdio or HTTP transport).folio-viewer— local-only FastAPI + React UI for human review.
Documentation
User-facing documentation lives in apps/docs/ (Astro +
Starlight). Run it locally:
cd apps/docs
npm install
npm run dev # → http://127.0.0.1:4321/
Or read the canonical sources directly:
- Design overview — the spec
- ADRs — architectural decisions
- Examples — four use-case sheets that run offline
Quickstart
uv tool install folio-kit # → installs the `folio` command
folio validate examples/customers
folio materialize examples/customers --actor agent:demo
folio serve examples/customers --port 3000 --actor agent:human
# → http://127.0.0.1:3000/
Install
Releases ship three artifact families. Pick the one that matches how you want to use Folio.
Python (CLI + SDK + MCP server + Viewer backend)
# from PyPI (preferred)
pipx install folio-kit
uv tool install folio-kit
# from a tagged GitHub Release wheel
pipx install https://github.com/nyuta01/folio/releases/download/vX.Y.Z/folio_kit-X.Y.Z-py3-none-any.whl
The PyPI distribution name is folio-kit; the wheel installs three
console scripts: folio, folio-mcp, folio-viewer. SHA-256
checksums for every release artifact are attached as SHA256SUMS.txt.
Folio Desktop (Electron wrapper)
Download the installer for your platform from the latest release:
| Platform | Asset |
|---|---|
| macOS (Apple Silicon) | Folio-X.Y.Z-arm64.dmg |
| macOS (Intel) | Folio-X.Y.Z.dmg |
| Windows | Folio Setup X.Y.Z.exe (or Folio-X.Y.Z-portable.exe) |
| Linux | Folio-X.Y.Z.AppImage (or folio_X.Y.Z_amd64.deb) |
The desktop app shells out to the host's folio-viewer Python CLI; if
it is missing, the launcher offers an "Open install docs" button. See
docs/methodology/desktop-runtime.md
for the rationale.
First-launch warning (unsigned builds)
Folio Desktop ships unsigned and un-notarized today. Both macOS Gatekeeper and Windows SmartScreen will warn on first launch. This is expected — the workarounds below are safe; signing and notarization are tracked as a release follow-up.
macOS — "Apple は、"Folio" にマルウェアが含まれていないことを検証できませんでした" / "Apple could not verify that "Folio" is free of malware":
# 1. Drag Folio.app into /Applications first.
# 2. Then strip the quarantine attribute Chrome / Safari put there:
xattr -dr com.apple.quarantine /Applications/Folio.app
open /Applications/Folio.app
Or, without Terminal: right-click Folio.app in Finder → Open →
confirm in the dialog. After that, normal double-click works.
If macOS shows "Folio was blocked" in System Settings → Privacy & Security, scroll to the bottom and click Open Anyway.
Windows — "Microsoft Defender SmartScreen prevented an unrecognized app from starting":
Click More info → Run anyway. Or use the portable
Folio.X.Y.Z.exe and approve the unverified-publisher prompt.
Linux — .AppImage works without prompts; .deb is unsigned:
chmod +x Folio-X.Y.Z.AppImage
./Folio-X.Y.Z.AppImage
# or for the .deb:
sudo dpkg -i folio-desktop_X.Y.Z_amd64.deb
Verifying the download — every release ships
SHA256SUMS-{macos-arm64,linux-x64,windows-x64}.txt. Compare locally:
shasum -a 256 Folio-X.Y.Z-arm64.dmg # macOS / Linux
certutil -hashfile "Folio Setup X.Y.Z.exe" SHA256 # Windows
Documentation site
Browse the Folio docs or build them locally:
cd apps/docs
npm install
npm run dev # → http://127.0.0.1:4321/
The site is auto-deployed to GitHub Pages on every push to main that
touches apps/docs/.
Releases
A maintainer cuts a release by pushing a tag of the form vX.Y.Z:
make verify # CI gate locally
git tag v0.2.0
git push origin v0.2.0
Two workflows then fire:
release-python.ymlbuildsdist/folio_kit-*.whl+dist/folio_kit-*.tar.gz, smoke-tests the wheel in a clean venv, and attaches both plus aSHA256SUMS.txtto a draft GitHub Release.release-desktop.ymlbuildsviewer/dist/, then runselectron-builderon macOS / Windows / Linux runners, attaching DMG, Setup, AppImage, and zip artifacts to the same draft Release.
The release stays in draft until a human flips it to Published.
Full procedure in
docs/methodology/release.md.
Repository harness
This repo follows an AI-first operating model: compact router docs, structured task state, and a single deterministic verification gate.
make agent-init # restart context for the next agent
make verify # harness-check + drift-check + validate-docs
# + pytest + 6 smokes (cli, materialize, scripts,
# mcp, extension-kinds, viewer)
See AGENTS.md and
docs/methodology/harness-engineering.md
for the full operating model.
Project details
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 folio_kit-0.1.4.tar.gz.
File metadata
- Download URL: folio_kit-0.1.4.tar.gz
- Upload date:
- Size: 281.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3326d93da79932c0d5d411d4958c71bd6a0a3c9baf08630616570e0d14685a76
|
|
| MD5 |
12ab62f115c7fc5a82cf40380cd5d319
|
|
| BLAKE2b-256 |
fd143a275295abc0c9bfd87fa76ec16345966ae2a56277db5ec248bb391d9626
|
Provenance
The following attestation bundles were made for folio_kit-0.1.4.tar.gz:
Publisher:
release-python.yml on nyuta01/folio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
folio_kit-0.1.4.tar.gz -
Subject digest:
3326d93da79932c0d5d411d4958c71bd6a0a3c9baf08630616570e0d14685a76 - Sigstore transparency entry: 1497869924
- Sigstore integration time:
-
Permalink:
nyuta01/folio@b77da3db07616ab52caa86d8b27b6c9cd19a6e83 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nyuta01
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python.yml@b77da3db07616ab52caa86d8b27b6c9cd19a6e83 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file folio_kit-0.1.4-py3-none-any.whl.
File metadata
- Download URL: folio_kit-0.1.4-py3-none-any.whl
- Upload date:
- Size: 58.8 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 |
ccec94b03a3c2ceaebeffff9ff1f81a971c97bd1ed2a68e5c6d534e49b20e7d8
|
|
| MD5 |
ef7fd702808e6fe1117facd723fad1e9
|
|
| BLAKE2b-256 |
3fb961e00ee29d0aed2ffa41fc2ca96666205aa7c9b84bd629daaf8d838ed7d9
|
Provenance
The following attestation bundles were made for folio_kit-0.1.4-py3-none-any.whl:
Publisher:
release-python.yml on nyuta01/folio
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
folio_kit-0.1.4-py3-none-any.whl -
Subject digest:
ccec94b03a3c2ceaebeffff9ff1f81a971c97bd1ed2a68e5c6d534e49b20e7d8 - Sigstore transparency entry: 1497870046
- Sigstore integration time:
-
Permalink:
nyuta01/folio@b77da3db07616ab52caa86d8b27b6c9cd19a6e83 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/nyuta01
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-python.yml@b77da3db07616ab52caa86d8b27b6c9cd19a6e83 -
Trigger Event:
workflow_dispatch
-
Statement type: