This document describes the genspec.jsonl format used to export and import
Waypoints projects. The format is JSON Lines (JSONL): one JSON object per line.
The first line is always a header. Subsequent lines are entries.
Location: exported to {project_slug}.genspec.jsonl via waypoints export.
The header identifies the schema and version and captures top-level metadata.
{
"_schema": "genspec",
"_version": "1.0",
"waypoints_version": "0.1.0",
"source_project": "my-project",
"created_at": "2026-01-19T23:52:10.123456",
"model": "claude-sonnet-4",
"model_version": "2024-12-01",
"initial_idea": "An IDE for generative software"
}Required fields:
_schema: must be"genspec"._version: format version (current:"1.0").waypoints_version: version of Waypoints at export time.source_project: project slug at export time.created_at: ISO 8601 timestamp.
Optional fields:
model,model_version,initial_idea.
Each following line is a JSON object with a type field:
"step": a generative step (LLM call or user input step)"decision": a user decision about generated content"artifact": a generated artifact (idea brief, product spec, flight plan)
Example:
{"type":"step", ...}
{"type":"decision", ...}
{"type":"artifact", ...}Artifacts capture the final outputs of each major phase.
artifact_type:"idea_brief"content: Markdownfile_path: relative path within project (optional)
artifact_type:"product_spec"content: Markdownfile_path: relative path within project (optional)
artifact_type:"flight_plan"content: JSON array of waypoints (serialized as a string)file_path: usually"flight-plan.jsonl"
Waypoint JSON fields in content:
id: string, e.g."WP-001"or"WP-001a"title: stringobjective: stringacceptance_criteria: array of stringsparent_id: string or nulldependencies: array of waypoint IDsstatus: string (pending|in_progress|complete|failed|skipped)
Example artifact entry:
{
"type": "artifact",
"artifact_type": "flight_plan",
"content": "[{\"id\":\"WP-001\",\"title\":\"Setup\",...}]",
"file_path": "flight-plan.jsonl",
"timestamp": "2026-01-19T23:52:10.123456"
}Steps capture the input, output, and metadata for a single generative event.
system_prompt: string (optional)user_prompt: string (optional)messages: list of{role, content}(optional)context: object (optional)
content: stringtype:"text" | "json" | "markdown"parsed: any (optional)
tokens_in: number (optional)tokens_out: number (optional)cost_usd: number (optional)latency_ms: number (optional)model: string (optional)
{
"type": "step",
"step_id": "step-003",
"phase": "shape_spec",
"timestamp": "2026-01-19T23:52:10.123456",
"input": {
"system_prompt": "You are a senior product manager...",
"user_prompt": "Generate the product spec",
"messages": [
{"role":"user","content":"..."},
{"role":"assistant","content":"..."}
]
},
"output": {
"content": "# Product Specification...",
"type": "markdown"
},
"metadata": {
"tokens_in": 1250,
"tokens_out": 2230,
"cost_usd": 0.21,
"latency_ms": 4200,
"model": "claude-sonnet-4"
}
}phase values are defined by genspec.spec.Phase:
spark: initial idea capture (user input only)shape_qa: Q&A dialogue (clarifying questions)shape_brief: idea brief generationshape_spec: product spec generationchart: waypoint generationchart_breakdown: AI-assisted breakdown of a waypointchart_add: AI-assisted add waypointfly: waypoint execution
- Format version:
1.0 - Header
_versionis used for compatibility checks.
Breaking changes require a new _version and a migration path for:
- renamed fields
- removed required fields
- semantic changes to enums
Non-breaking changes may add optional fields or new entry types that consumers can ignore.
- Consumers should ignore unknown fields.
- If
_schemais not"genspec", the file is invalid. - If
_versionis greater than supported, consumers should refuse or warn.
The bundle format packages a genspec plus its artifacts into a single, portable zip file. This is the recommended distribution format for testing, sharing, and verification.
{project}.genspec.zip
├── genspec.jsonl
├── metadata.json
├── checksums.json
└── artifacts/
├── idea-brief.md
├── product-spec.md
└── flight-plan.json
{
"schema": "genspec-bundle",
"version": "1.0",
"waypoints_version": "0.1.0",
"source_project": "my-project",
"created_at": "2026-01-19T23:52:10.123456",
"genspec_path": "genspec.jsonl",
"checksums_path": "checksums.json",
"files": [
{"path": "genspec.jsonl", "type": "genspec"},
{"path": "artifacts/idea-brief.md", "type": "artifact", "artifact_type": "idea_brief"},
{"path": "metadata.json", "type": "metadata"},
{"path": "checksums.json", "type": "checksums"}
],
"model": "claude-sonnet-4",
"model_version": "2024-12-01",
"initial_idea": "An IDE for generative software"
}Required fields:
schema,versionwaypoints_version,source_project,created_atgenspec_path,checksums_pathfileslist (withpathandtypeper entry)
Optional fields:
model,model_version,initial_idea
{
"algorithm": "sha256",
"files": {
"genspec.jsonl": "…",
"metadata.json": "…",
"artifacts/idea-brief.md": "…"
}
}Notes:
checksums.jsondoes not include a checksum for itself.- Use checksums to verify bundle integrity before import/verification.
Bundles are generated with deterministic zip entry ordering and normalized timestamps to ensure stable, reproducible archives for CI and comparisons.
User decisions are recorded when a user accepts, rejects, or edits a step.
{
"type": "decision",
"step_id": "step-004",
"phase": "shape_spec",
"decision": "accept",
"timestamp": "2026-01-19T23:52:10.123456",
"edits": {
"product_spec": "User-edited text..."
}
}Fields:
decision:accept|reject|editedits: optional mapping of edited content