Meet the three

Day 3: Choose your adventure · Lesson 3 of 5 · 12 min

Three frameworks, one page, and the same five questions for each. Each tab answers them for one framework, and Exercise 1 installs the one you pick.

How to read this page

Pick a tab and read only that one: the panels answer the same questions in the same order, so skipping two costs you nothing the exercises need. The Show all three button beside the tabs stacks every panel on one page; it then reads Show one track, which takes you back. Your choice sticks for the rest of Day 3, and ?track=lid on this page's address opens the LID tab.

What a panel says a tool wrote was observed on the build machine on 2026-09-22, in copies of the Swift lane; Exercise 1's diff shows what yours writes. Read the install commands here and run nothing yet: Exercise 1 runs them from inside day3-work.

The five questions every panel answers

  1. What it installs, and what that needs.
  2. Where specs live once it is initialized.
  3. The command that creates a spec.
  4. The command that implements one.
  5. What happens to the spec after the change ships.

Exercise 1 asks questions 2 to 5 again, from your own install.

Panel: OpenSpec

Watch first · 5 min

OpenSpec GitHub Tutorial: Spec-Driven Development for AI Coding Assistants

Alex Hitt, 2026-07-01, 1:11 to 6:04, delta specs through the explore-propose-apply-archive workflow. Watch for the step that moves text from the changes folder into the specs folder.

OpenSpec installs from npm as a global command (-g puts openspec on your PATH for every project) and needs Node 20.19.0 or higher.

npm install -g @fission-ai/openspec@latest

openspec init asks which tools to set up, and you choose Claude Code. On the build machine it wrote fifteen new files: openspec/config.yaml, placeholders that create openspec/specs/ and openspec/changes/archive/, and six /opsx commands and six skills under .claude/. Specs live in openspec/specs/, the requirements that are true of the system now.

/opsx:explore surveys the code before you commit to anything. /opsx:propose plus a feature description creates a change folder under openspec/changes/; on the build machine, Change C's folder held proposal.md, design.md, tasks.md, .openspec.yaml and a delta spec per capability under specs/. /opsx:apply implements it from the task list. /opsx:archive folds the deltas into openspec/specs/ and moves the folder to changes/archive/ under a date-prefixed name.

A delta spec holds only what the change does, under ## ADDED Requirements, ## MODIFIED Requirements or ## REMOVED Requirements: each ### Requirement: with #### Scenario: blocks in GIVEN, WHEN and THEN lines.

OpenSpec: where a change's files go Top to bottom. An arrow labelled openspec init leads to openspec/specs/, the live requirements. An arrow labelled /opsx:propose leads to openspec/changes/<name>/, which holds proposal.md, design.md, tasks.md and specs/ with the deltas. An arrow labelled /opsx:apply leads to code. From code, an arrow labelled /opsx:archive splits two ways: a dashed arrow, deltas folded in, runs back up into openspec/specs/, and an accent arrow leads down to the boxed destination after ship, changes/archive/<date>-<name>/. openspec init openspec/specs/ live requirements /opsx:propose openspec/changes/<name>/ proposal.md, design.md, tasks.md, specs/ (deltas) /opsx:apply code /opsx:archive deltas folded in changes/archive/ <date>-<name>/ after ship
A change lives in its own folder until archive folds it into the live specs and files the folder by date.

Quick check

In OpenSpec, you finish a change and archive it. Which spec folder got bigger, and which listing lost an entry?

The live tree under openspec/specs/ absorbed the delta sections and grew. The change folder left the active list in openspec/changes/ and reappeared, date-prefixed, under openspec/changes/archive/.

Panel: LID

No video on this tab: research found no LID walkthrough on any channel.

LID installs as two Claude Code plugins, typed inside Claude Code: the marketplace, then the workflow and its arrow-maintenance overlay. They need nothing installed beyond Claude Code itself. On the build machine the two added about 1,090 tokens to every session:

/plugin marketplace add jszmajda/lid
/plugin install linked-intent-dev@jszmajda-lid
/plugin install arrow-maintenance@jszmajda-lid

The arrow is LID's one-way chain: high-level design, low-level designs, EARS requirements, tests, code, with changes flowing down and never up. /linked-intent-dev bootstraps a new project. LedgerKit already has code, so Exercise 1 runs /arrow-maintenance:map-codebase, which builds the tree from it. On the build machine, in a run that could not load the skill's own text, it wrote docs/high-level-design.md, a design file and a specs file per segment under docs/intent/<segment>/, and an overlay index, docs/arrows/index.yaml; the skill itself also asks for an arrow doc per segment under docs/arrows/.

Specs live in the specs files. Each requirement has a path-shaped ID, FEATURE-NNN growing one segment per level of nesting as in PEVAL-RUN-014, and a status: [x] implemented, [ ] gap, [D] deferred. Code cites it with // @spec AUTH-UI-001, AUTH-UI-002 on the topmost function or module that owns the behavior, and tests carry it too.

No command creates a change's spec: the directives LID appends to CLAUDE.md send any change that could touch code through the linked-intent-dev skill, so Exercise 2 starts Change C as an ordinary message. None of the five entry points the two plugins install implements one either: the same walk continues down the arrow to tests, then code. /arrow-maintenance:arrow-maintenance audits code against the tree. After ship nothing is archived; the design tree stays the source of truth.

LID: the arrow from design to code Top to bottom. An arrow labelled /arrow-maintenance:map-codebase, or /linked-intent-dev for a new project, leads into a chain of five files, each joined to the next by an arrow that points down only: docs/high-level-design.md; then, per segment, docs/intent/<segment>/<segment>-design.md; then <segment>-specs.md, EARS requirements marked [x], [ ] or [D]; then tests carrying // @spec, tests first; then code carrying // @spec. An accent box around the whole chain reads after ship: the tree stays the source of truth. Below it, a dashed note: docs/arrows/index.yaml plus an arrow doc per segment, an overlay audited by /arrow-maintenance:arrow-maintenance. No arrow points up. /arrow-maintenance:map-codebase new project: /linked-intent-dev docs/high-level-design.md per segment docs/intent/<segment>/ <segment>-design.md then specs <segment>-specs.md EARS, [x] [ ] [D] tests first tests (// @spec) then code code (// @spec) after ship: the tree stays the source of truth docs/arrows/index.yaml + an arrow doc per segment overlay, audited by /arrow-maintenance:arrow-maintenance
Every link in the chain is a file that outlives the change, and edits travel only downward.

Quick check

You add a helper function that computes part of a behavior LID already has a requirement for. Where does the @spec annotation go?

Not on the helper. It goes on the topmost function or module that owns the behavior, so a reader walking down from the requirement lands once, at the entry point.

Panel: BMAD

Watch first · 5 min

BMad V6 is Finally Here… /bmad-help, /party-mode... Pure Magic

BMad Code, 2026-02-23, 6:34 to 11:23, the installer walkthrough. At each installer choice, ask whether you could make it where you cannot install Python tooling. It predates the 6.11.0 renames, so some skill names on screen are old.

BMAD needs Node 20.12 or later and uv, a Python package and environment runner:

npx bmad-method install

uv is not optional. /bmad-build and /bmad-build-auto open by running a uv run shell command, and their own text says to halt if it fails, uv missing included. On the build machine, a session that could not run shell commands halted before planning. In a locked-down environment that blocks either, they do not degrade; they do not start.

On the build machine, BMAD 6.12.0's install, with Claude Code as its tool (your answer at Integrate with:), wrote 235 files: a _bmad/ tree, 29 skills under .claude/skills/, and an empty _bmad-output/.

Specs live in _bmad-output/implementation-artifacts/, one spec-<slug>.md per change. /bmad-build creates it. The same /bmad-build run implements it after you answer its questions and approve its plan; a small change with no open questions and nothing irreversible skips both. The docs show /bmad-build write an implementation of mars rover kata; larger work chains bmad-sprint-planning, bmad-build, then bmad-code-review.

On the build machine on 2026-09-22, handed Exercise 2's prompt and told to halt after planning, /bmad-build wrote a folder instead: statement-periods/, holding SPEC.md, stories.yaml and a stories/<id>-<slug>.md per story, the layout BMAD's docs give for work split into stories. Exercise 2's checkpoint copies it in.

The status in the spec's frontmatter moves through draft, ready-for-dev, in-progress, in-review and done; BMAD's unattended loop, /bmad-build-auto, can also stop it at blocked. After ship the spec stays where it was written, its status at done.

BMAD: one skill writes the spec, then builds it Top to bottom. An arrow labelled npx bmad-method install leads to _bmad/ and .claude/skills/bmad-*. An arrow labelled /bmad-build leads to _bmad-output/implementation-artifacts/, which holds one spec file, spec-<slug>.md, with a muted note: the build run wrote a SPEC.md folder. The same run continues to code, and beside that arrow the spec's frontmatter status moves through draft, ready-for-dev, in-progress, in-review and done. An accent arrow labelled ship leads to the boxed destination: after ship the spec stays where it was written, status done. npx bmad-method install _bmad/ and .claude/skills/bmad-* /bmad-build _bmad-output/ implementation-artifacts/ spec-<slug>.md build run: a SPEC.md folder /bmad-build, same run status: draft → ready-for-dev → in-progress → in-review → done code ship after ship: the spec stays where it was written, status: done
One skill writes the spec and builds it; after ship the spec stays, marked done.

Quick check

In BMAD, a change ships. Where is its spec now, and what in it changed?

Where it was written, _bmad-output/implementation-artifacts/spec-<slug>.md. Only the status in its frontmatter moved, to done.

What each one does to your standing instructions (all tracks)

CLAUDE.md is the standing part of your spec, and Day 1 taught you to keep it short. On the build machine only LID wrote into it: OpenSpec 1.13.1's init left it untouched and created no AGENTS.md, and BMAD's install did the same. The published sources disagree about OpenSpec, and Exercise 1 has you check your own run. BMAD's managed region, <!-- bmad:context --> to <!-- /bmad:context --> in AGENTS.md at the repo root, is written only by its bmad-project-context skill, when you invoke it.

LID's mapping run appended a 29-line ## LID section with no marker comments: mode, version, ID prefix, where the design documents live, and the rule that any change that could touch code walks the arrow. That run could not load the plugin's own skill body. LID's own template, in the pinned update-lid skill, is longer, about 48 lines in Full mode: a ## LID block with mode and version, then a ## Linked-Intent Development (MANDATORY) section with the arrow rule, a navigation table, terminology and the @spec rule. Exercise 1 has you read yours.

Shelf life and pinned versions (all tracks)

This page was checked against OpenSpec 1.13.1, released 2026-09-17; LID commit 831c1959 of 2026-08-12, still the tip of main on 2026-09-22; and BMAD 6.12.0, the latest on npm on 2026-09-22.

If an install hands you something newer, re-check BMAD's command names first. Its 6.11.0 release renamed bmad-quick-dev to bmad-build and bmad-dev-auto to bmad-build-auto, and a default 6.12.0 install leaves the old names out, so a tutorial's /bmad-quick-dev is an unknown command.

When your tab is the wrong tab (all tracks)

If you picked BMAD for a blog's roster of named agents, the personas still ship as bmad-agent-* skills, but v6 is a catalog of skills you invoke, and Change C uses /bmad-build. If you cannot install uv on this machine, pick again now.

If you picked LID for a video, there is none. If you picked the track that looked lightest, Lesson 4 asks the question again from the failure you actually have.

Quick check

On the build machine, which of the three wrote into CLAUDE.md?

Only LID: its mapping run appended a 29-line ## LID section. OpenSpec's init and BMAD's install left it untouched, and BMAD writes its AGENTS.md region only when you invoke bmad-project-context.

Sources

Every citation for this page

Each project's own documentation and repository, accessed 2026-09-22, and observations on the build machine the same day.