Folio quickstart
Bootstrap a new Folio sheet from scratch — the contract.yaml schema, records.jsonl format, and the first materialize loop. Invoke when the user wants to start a Folio sheet, asks "how do I create a Folio data set", or has only data and needs a typed Folio container for it.From its SKILL.md
npx -y skills add nyuta01/folio --skill folio-quickstartAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.1 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
Folio quickstart
Create a working Folio sheet (a directory containing contract.yaml
and records.jsonl) from a description of what data the user wants
to collect. Hand it back so other Folio skills (derivations,
materialize) can build on it.
When this skill applies
- The user asks to "make a Folio sheet" / "set up Folio" / "build a data contract".
- The user has a CSV / JSON file and wants a typed, AI-friendly container for it.
- The user is starting a new entity collection (customers, research notes, support tickets, etc.) and wants the sheet to be the system of record.
This skill does not apply when the user already has a sheet and
wants to add a derivation, run materialize, or query — see the other
add-derivation-* and debug-* skills.
Prerequisites
folioPython CLI is installed:
(PyPI distribution name ispipx install folio-kit # or: uv tool install folio-kitfolio-kit; the binary on disk isfolio.) Verify withfolio --help. If the user is on macOS Apple Silicon andfolio --helperrors with ENOENT, they may need to add~/.local/binto PATH.
Procedure
-
Pick the slug. Ask the user for a stable slug (kebab- or snake_case ASCII). Use it as both the directory name and the contract
id. Example:customers,research-notes,onboarding-queue. -
Identify the primary key. A Folio sheet must have exactly one
primaryKey: trueproperty. Composite keys are not allowed. When the data has no obvious key, generate one (<slug>_<NNN>). -
Identify required fields. Anything the row cannot exist without. Mark them
required: true. -
Pick
logicalTypeper field. The eight valid values are:string,integer,number,boolean,date,timestamp,array,object. Default tostringwhen unsure. -
Write
contract.yamlat the sheet root. Skeleton:apiVersion: v3.0.0 kind: DataContract id: customers name: customers version: 1.0.0 description: A customer master. schema: - name: items physicalType: jsonl properties: - name: id logicalType: string primaryKey: true required: true - name: company_name logicalType: string required: true - name: country logicalType: string -
Write
records.jsonlwith one JSON object per line, no enclosing array. Every record must include the primary key. Skeleton:{"id": "cust_001", "company_name": "Acme", "country": "Japan"} {"id": "cust_002", "company_name": "DataFlow", "country": "United States"} -
Validate. Always run
folio validate <sheet>before handing the sheet back. Fix every error.
Verify
folio validate <sheet>
folio list <sheet> --limit 3
Both should exit 0 and the second should print the records you just wrote.
What to do next
- For a derived field that an LLM fills, use the
add-derivation-aiskill. - For a 1:1 join to another sheet, use
add-derivation-cross-sheet. - For per-field write-permissions, set
x-editable-by(an array offnmatchpatterns matched against the actor on every write). - For external consumers, ship the sheet as a tarball — caches and per-sheet venvs live outside the directory and don't need to be bundled.
Common mistakes (don't make them)
- Two
primaryKey: trueproperties.folio validaterejects. Pick one. logicalTypeoutside the eight allowed values (e.g.text,int,datetime). Map to the closest from the list.- Forgetting
apiVersion: v3.0.0orkind: DataContract. Both are required and pinned. - Putting the cache or venv inside the sheet. Folio's cache
lives at
<user-cache>/folio/<id>/cache/by design — do not commit.folio-cache/directories.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.