This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
OCIF (Open Canvas Interchange Format) is an interchange file format for canvas-based applications. This repo contains the specification (Markdown + JSON schemas), not application code. Current version: v0.7.0.
The only automated check is a file format validator run via pre-commit:
python3 .github/workflows/file_format.py <file>This strips trailing whitespace, normalizes to LF line endings, removes BOM, and ensures a final newline. CI runs this on all text files via pre-commit/action@v3.0.1.
spec/v0.7.0/— Current released spec (spec.md,schema.json,extensions/*.json)spec/v0.1/throughspec/v0.6/— Historical versions (do not modify)VERSION— Single line with current released version (e.g.,v0.7.0)public/_redirects— Line 2 points https://spec.canvasprotocol.org to the current versioncatalog.md— Registry of known extensionscookbook.md— Usage guide with examplesdesign/— Goals, requirements, design decisions, ADRs.claude/skills/— Release automation skills
Each version lives in its own directory (spec/vX.X.X/). Draft versions use spec/vX.X.X-draft/ and iterate on a long-running vX.X.X-draft branch.
Two skills automate the lifecycle:
/prepare-new-version vX.X.X— Copies current release to a draft dir, opens a PR to main, then creates the draft branch after merge/release vX.X.X— Renames draft dir to final, updates all version pointers (VERSION, _redirects, README, cookbook, catalog, examples), opens release PR from draft branch to main, tags after merge
When updating version pointers, replace the old version in all files outside /spec — never modify previous version directories.
From how-to-spec.md:
- Property tables: columns are Property, JSON Type, OCIF Type, Required, Contents, Default
**required**is bold in tables; other values are not- JSON types in backtick monospace; OCIF types linked to their definition
- Examples start with
**Example:** - Each extension section should end with
JSON schema: [name.json](extensions/name.json) - Unresolved TODOs use
- [ ] @@ description— search for@@before releasing
All built-in extensions follow @ocif/foo-bar mapping to extensions/foo-bar.json. There are no -node or -rel suffixes in v0.7.0+.