Discuss one product area

Update

Loft 2.2: A status pane, a term list, and test links that notice rewrites

Loft 2.2 shows where a specification stands while a coding agent works on it, lets a specification name its concepts in a term list, and reports a test rewritten after its link to an acceptance criterion was reviewed.

By Loft Published

Loft 2.2.0, released on October 18, 2026, adds three things to the open-source command line and its agent skill: a way to see where a specification stands while a coding agent works on it, a term list that names the concepts a specification uses, and links between acceptance criteria and tests that notice when a test is rewritten after it was reviewed.

See where the specification stands

loft status reports the published version the lock file pins and whether the tree still matches it, the branch and any uncommitted changes under spec/, and a merge or rebase that stopped partway. Given --base <revision>, it also lists the items added, changed, and removed since the branch left that revision, each with its label, file, and line. An item counts as changed only when its own content changed, so editing a requirement does not mark its Feature, and moving an item to another file is no change. The command writes nothing and sends no telemetry, since an agent host may run it every few seconds.

In Claude Code, the Loft plugin uses it to show a status pane in any project that holds spec/: the checks to pass before committing (formatting, loft check, spec/ committed, the trace, and the lock) with the next step, the items the branch changed since its base, the acceptance criteria it touched that still lack a reviewed test, and the file the agent is writing. /loft-status opens the pane, and /loft-status <revision> compares against another base for the session.

The plugin comes with the project

loft init and loft skill install now also enable the plugin in the project's .claude/settings.json, so Claude Code offers it to everyone who trusts the project. Every other setting in the file is kept, including a choice to leave the plugin off, and --no-skill leaves the file alone. The plugin marketplaces for Claude Code and Codex are both named ask-loft now. To install the plugin by hand, add the Ask-Loft/loft marketplace, then run /plugin install loft@ask-loft in Claude Code or codex plugin add loft@ask-loft in Codex. The plugin teaches the agent; it does not install loft itself.

A term list for the specification

A specification can now name its concepts in an optional term list: each term has a name, a definition, and the aliases the prose should not use for it. With a term list, loft check warns when the name, statement, or body of any item uses an alias instead of the term, and when two terms claim the same name. A specification without one checks as before.

loft terms helps build the list. It reports groups of names that may denote one concept, such as "audit entry" and "audit row", "change set" and "changeset", or "tenant admin" and "tenant administrator", and the subjects of each Product's statements. It only reports; people decide which name a concept takes. The loft-spec skill teaches the agent to read the term list before writing, to run loft terms afterwards, and to put each group to the user and record the answer.

Test links that notice a rewrite

The trace file links each acceptance criterion to the tests that verify it, and a reviewer accepts each link. loft reconcile now finds each linked test in its file's syntax tree, for Rust, TypeScript, JavaScript, Python, and Go, and records a fingerprint of the test's code when its link is accepted. A test rewritten after that review is reported until someone reviews it again. Formatting changes and comments do not count as a rewrite.

It also reports a test that was renamed and is now found only as a word, such as its old name left in a comment, and a test next to a part of its file the parser could not read, whose link cannot be accepted until the file parses there. A project that is already reviewed can record its fingerprints with loft reconcile --accept-stale, without reviewing every link again.

Upgrade

npm install --save-dev @ask-loft/loft@2.2.0
cargo install --locked loft-cli

Then run loft skill install to bring the agent skill up to date. The trace file moves to a new format the first time a link is accepted, and earlier versions refuse it, as they refuse a specification with a term list, so everyone working on the project needs 2.2. The changelog (github.com) (opens in a new tab) lists every change in 2.2.0, including those to the Rust libraries.

Next step