Loft 2.1: Import OpenSpec projects and render them back
Loft 2.1 converts the main specs of an OpenSpec project into a Loft specification and writes a Loft specification back out as OpenSpec specs. A team using OpenSpec can start from the specs it already has and keep an OpenSpec copy while it adopts Loft.
Loft 2.1.0, released on October 15, 2026, converts specifications in both directions between the Loft Specification Format and OpenSpec (github.com) (opens in a new tab), a spec-driven development tool for AI coding assistants. A team that already keeps its specs with OpenSpec can start a Loft product contract from them, and keep an OpenSpec copy while it moves over.
From OpenSpec into Loft
loft import openspec reads the main specs of an OpenSpec project, from its openspec/ directory by default, and writes them into spec/ as a product contract: the structured specification of what a product should do and of the decisions and constraints that govern it. Each capability becomes a Feature, each requirement a Requirement, and each scenario an acceptance criterion. Every item keeps its OpenSpec name and metadata, such as an **ID**: AUTH-1 line, and a sidecar file records where each one came from.
The import reports what it leaves behind, each with its file and line: active and archived changes, the context in the project's config.yaml, and every place the project departs from OpenSpec's own grammar. OpenSpec states obligations in scenario text, which loft check flags as warnings, so the import also says how many to expect and which lint setting lowers them while the team adopts the format. It changes no configuration itself.
Adopting the import with a coding agent
The loft-spec skill for Claude Code and Codex gains a workflow for an imported project. The agent works through the findings that need attention, adds Components, rewrites acceptance criteria as sentences a test can check, fills in placeholder purposes, and records the decisions and constraints the project already holds. The people responsible review the changes and ratify the result with loft publish.
From Loft back to OpenSpec
loft render --openspec <dir> writes the specification as the main specs of an OpenSpec directory, with a map from each rendered requirement and scenario to the item it came from. It reports what OpenSpec's validator would reject or warn about, and what the OpenSpec form leaves out. An imported project renders back to the specs it was read from. The command refuses to write into a specs directory that already holds files unless you pass --force.
Tool data in the format
Any item in the format can now carry data that a tool keeps under its own namespace; the OpenSpec import uses it for the names and metadata it carries over. That data never makes a link between a criterion and its tests stale, and a specification that does not use it keeps the content hash it had. Versions 2.0.4 and earlier refuse a specification that uses it, so everyone working on an imported specification needs 2.1.
Upgrade
npm install --save-dev @ask-loft/loft@2.1.0
cargo install --locked loft-cli
The changelog (github.com) (opens in a new tab) lists every change in 2.1.0, including those to the Rust library.