# Notebook Structure
Jupyter notebooks are JSON documents with this high-level shape:
- `nbformat` and `nbformat_minor`
- `metadata`
- `cells` (a list of markdown and code cells)
When editing `.ipynb` files programmatically:
- Preserve `nbformat` and `nbformat_minor` from the template.
- Keep `cells` as an ordered list; do not reorder unless intentional.
- For code cells, set `execution_count` to `null` when unknown.
- For code cells, set `outputs` to an empty list when scaffolding.
- For markdown cells, keep `cell_type="markdown"` and `metadata={}`.
Prefer scaffolding from the bundled templates or `new_notebook.py` (for example, `$CODEX_HOME/skills/jupyter-notebook/scripts/new_notebook.py`) instead of hand-authoring raw notebook JSON.
Source: claude-code-templates (MIT). See About Us for full credits.