Comprehensive reference for the lt CLI and the lt-dev Claude Code plugin, with focus on vendor-mode workflows for @lenne.tech/nest-server and @lenne.tech/nuxt-extensions.
- Overview
- Architecture Diagram
- lt CLI β Features
- lt-dev Plugin β Features
- Vendor-Mode Processes
- Decision Matrix
- Glossary
The lenne.tech ecosystem consists of two complementary tools:
lt CLI(@lenne.tech/cli) β Terminal tool for scaffolding, code generation, status, and mode conversionlt-devPlugin β Claude Code plugin providing commands, autonomous agents, and skills for intelligent development workflows
Both tools support the vendor mode as a pilot for @lenne.tech/nest-server (backend) and @lenne.tech/nuxt-extensions (frontend). In vendor mode, the framework code is copied directly into the project as source code under src/core/ (backend) or app/core/ (frontend) β without an npm dependency.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Developer / Claude Code β
βββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββββββ¬βββββββββββ
β β
β Terminal β Slash commands
βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββββ
β lt CLI β β lt-dev Plugin β
β β β β
β β’ Scaffolding β β β’ Commands β
β β’ Mode conversion βββββ invoked by βββββββ€ β’ Agents β
β β’ Code generation β β β’ Skills β
β β’ Status/diagnosis β β β
ββββββββββββ¬ββββββββββββ ββββββββββββββ¬ββββββββββββ
β β
β writes to β operates on
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Fullstack Project β
β β
β projects/api (Backend β NestJS) projects/app (Frontend) β
β βββ npm mode: @lenne.tech/nest-server βββ npm mode: @lenne.tech/ β
β β in package.json β nuxt-extensions β
β βββ vendor mode: src/core/ + VENDOR.md βββ vendor mode: app/core/ β
β + VENDOR.md β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β² β²
β syncs from β syncs from
β β
ββββββββββββ΄βββββββββββββββ βββββββββββββ΄βββββββββββββ
β github.com/lenneTech/ β β github.com/lenneTech/ β
β nest-server β β nuxt-extensions β
β nest-server-starter β β nuxt-base-starter β
βββββββββββββββββββββββββββ ββββββββββββββββββββββββββ
| Command | Purpose |
|---|---|
lt fullstack init |
Create a new monorepo with API + frontend. Supports npm and vendor mode for both sides |
lt frontend nuxt |
Standalone Nuxt 4 project from nuxt-base-starter |
lt frontend angular |
Standalone Angular project from ng-base-starter |
lt server create |
Standalone NestJS project from nest-server-starter |
lt starter chrome-extension |
Chrome extension starter |
lt cli create |
New CLI project via Gluegun |
lt typescript create |
TypeScript library starter |
Fullstack init with vendor modes:
lt fullstack init \
--name my-project \
--frontend nuxt \
--api-mode Rest \
--framework-mode vendor \
--frontend-framework-mode vendor \
--framework-upstream-branch 11.24.3 \
--noConfirmFlags:
--framework-mode npm|vendorβ Backend mode--frontend-framework-mode npm|vendorβ Frontend mode--framework-upstream-branch <tag>β Specific nest-server version for vendor--dry-runβ Show plan without making changes--nextβ Experimental: clonenest-base(Bun + Prisma 7 + Postgres + Better-Auth) for the API instead ofnest-server-starter. Forces--api-mode Rest,--framework-mode npm, and skips workspace install (runpnpm installfor app andbun installfor api manually). Downstreamlt server module/object/addProp/test/permissionsare NOT compatible with the resulting layout.
| Command | Purpose |
|---|---|
lt server module |
Generate a NestJS module (model, service, controller, resolver, tests) |
lt server object |
Generate an input/output type |
lt server add-property |
Add a property to an existing module |
lt server test |
Generate E2E tests for a module |
lt server permissions |
Analyze all @Roles/@Restricted decorators, generate report (md/json/html) |
lt server create-secret |
Generate secure secrets for .env |
lt server set-secrets |
Set secrets in the project |
lt server convert-mode |
Convert backend between npm and vendor mode |
All code generators are mode-aware: In vendor mode they use relative paths to src/core/; in npm mode they use the bare specifier @lenne.tech/nest-server.
| Command | Purpose |
|---|---|
lt frontend nuxt |
Create Nuxt project from starter |
lt frontend angular |
Create Angular project from starter |
lt frontend convert-mode |
Convert frontend between npm and vendor mode |
| Command | Purpose |
|---|---|
lt fullstack init |
Create fullstack monorepo (see above) |
lt fullstack update |
Show mode-specific update instructions for backend AND frontend |
lt fullstack convert-mode |
Convert backend AND frontend between npm and vendor mode in a single command |
Fullstack mode conversion in one command:
# Both subprojects to vendor mode
lt fullstack convert-mode --to vendor --noConfirm
# With specific upstream versions
lt fullstack convert-mode --to vendor \
--framework-upstream-branch 11.24.3 \
--frontend-framework-upstream-branch 1.5.3 \
--noConfirm
# Both back to npm
lt fullstack convert-mode --to npm --noConfirm
# Only convert backend
lt fullstack convert-mode --to vendor --skip-frontend --noConfirm
# Only convert frontend
lt fullstack convert-mode --to vendor --skip-backend --noConfirm
# Dry-run (plan without changes)
lt fullstack convert-mode --to vendor --dry-runThe command automatically locates projects/api/ and projects/app/ (or packages/api / packages/app), detects the current modes, shows a plan, and then orchestrates the conversion of both sides using the appropriate helper methods.
Backend: lt server convert-mode
# npm β vendor
cd projects/api
lt server convert-mode --to vendor --upstream-branch 11.24.3 --noConfirm
# vendor β npm
lt server convert-mode --to npm --version 11.24.3 --noConfirm
# Dry-run (plan without changes)
lt server convert-mode --to vendor --dry-runFrontend: lt frontend convert-mode
# npm β vendor
cd projects/app
lt frontend convert-mode --to vendor --upstream-branch 1.5.3 --noConfirm
# vendor β npm
lt frontend convert-mode --to npm --version 1.5.3 --noConfirm
# Dry-run
lt frontend convert-mode --to vendor --dry-runBoth commands clone the respective upstream repo into /tmp/, perform the code transformation, and clean up at the end. No local paths are required.
| Command | Purpose |
|---|---|
lt status |
Shows project type, framework mode (backend + frontend), config, git branch, versions. At the monorepo root, both subprojects are automatically scanned |
lt doctor |
Checks environment, versions, dependencies |
lt history |
Shows CLI command history |
Example at the monorepo root:
Monorepo Subprojects:
Backend: projects/api β vendor (src/core/, VENDOR.md)
Frontend: projects/app β vendor (app/core/, VENDOR.md)
| Area | Commands |
|---|---|
| Config | lt config init, lt config validate, lt config show, lt config help |
| Git | lt git create, git get, git update, git clean, git squash, git rebase, git rename, git reset, git undo, git clear, git force-pull |
| NPM | lt npm reinit |
| MongoDB | lt mongodb collection-export, mongodb s3-restore |
| Qdrant | lt qdrant stats, qdrant delete |
| Directus | lt directus docker-setup, directus typegen, directus remove |
| Deployment | lt deployment create (GitHub/GitLab pipelines) |
| Blocks/Components | lt blocks add, lt components add |
| Tools | lt tools regex, tools sha256, tools jwt-read, tools crypt, tools install-scripts |
| Docs | lt docs open |
| Claude | lt claude shortcuts, lt claude plugins |
| Templates | lt templates llm |
The lt-dev Claude Code plugin provides Commands (user-invocable), Agents (autonomous execution), and Skills (knowledge bases).
| Command | Purpose |
|---|---|
/lt-dev:backend:update-nest-server |
Update @lenne.tech/nest-server in npm mode with migration guides |
/lt-dev:backend:update-nest-server-core |
Sync vendored src/core/ with upstream (vendor mode) |
/lt-dev:backend:convert-to-vendor |
Convert existing project from npm β vendor (incl. migration guides) |
/lt-dev:backend:convert-to-npm |
Convert vendored project back to npm |
/lt-dev:backend:contribute-nest-server-core |
Prepare local patches as upstream PR for nest-server |
/lt-dev:backend:sec-audit |
Security audit of backend code |
/lt-dev:backend:sec-review |
Security review of a specific code area |
/lt-dev:backend:test-generate |
Generate E2E tests |
/lt-dev:backend:code-cleanup |
Clean up code (imports, formatting) |
| Command | Purpose |
|---|---|
/lt-dev:frontend:update-nuxt-extensions-core |
Sync vendored app/core/ with upstream |
/lt-dev:frontend:convert-to-vendor |
Convert frontend project from npm β vendor |
/lt-dev:frontend:convert-to-npm |
Convert vendored frontend back to npm |
/lt-dev:frontend:contribute-nuxt-extensions-core |
Prepare local patches as upstream PR for nuxt-extensions |
/lt-dev:frontend:figma-init |
Initialize Figma Code Connect setup |
/lt-dev:frontend:figma-research |
Analyze Figma designs for implementation |
/lt-dev:frontend:figma-to-code |
Translate Figma design into Vue/Nuxt code |
/lt-dev:frontend:env-migrate |
Migrate .env from old standards |
/lt-dev:frontend:init-conventions |
Initialize frontend conventions |
| Command | Purpose |
|---|---|
/lt-dev:fullstack:update-all |
Comprehensive update: backend + frontend (mode-aware) + package maintenance + CLAUDE.md sync + validation |
/lt-dev:fullstack:update |
Simple backend + frontend update (legacy, less comprehensive) |
/lt-dev:fullstack:sync-claude-md |
Sync CLAUDE.md from upstream starter templates |
| Command | Purpose |
|---|---|
/lt-dev:maintenance:maintain |
FULL MODE: package update + audit + security + deduplication |
/lt-dev:maintenance:maintain-check |
DRY-RUN: analysis without changes |
/lt-dev:maintenance:maintain-security |
Security patches only |
/lt-dev:maintenance:maintain-pre-release |
Conservative patch-only before release |
/lt-dev:maintenance:maintain-post-feature |
Post-feature cleanup |
| Command | Purpose |
|---|---|
/lt-dev:git:commit-message |
Generate conventional commit message from staging |
/lt-dev:git:create-request |
Create merge request with descriptive body |
/lt-dev:git:mr-description |
Generate MR description from commits |
/lt-dev:git:mr-description-clipboard |
Same, copied to clipboard |
/lt-dev:git:rebase |
Rebase onto development branch with conflict resolution |
/lt-dev:git:rebase-mrs |
Rebase multiple MRs sequentially |
| Command | Purpose |
|---|---|
/lt-dev:docker:gen-setup |
Generate Docker configuration (Dockerfile + compose + .env) |
| Command | Purpose |
|---|---|
/lt-dev:plugin:check |
Validate the plugin setup after context loss |
/lt-dev:plugin:element |
Interactive creation of new plugin elements |
| Command | Purpose |
|---|---|
/lt-dev:vibe:plan |
Create implementation plan from requirement |
/lt-dev:vibe:build |
Implement according to plan |
/lt-dev:vibe:build-plan |
Plan + build in one flow |
| Command | Purpose |
|---|---|
/lt-dev:debug |
Structured debugging session |
/lt-dev:review |
Code review with multiple reviewer perspectives |
/lt-dev:refactor-frontend |
Frontend refactoring helper |
/lt-dev:resolve-ticket |
Implement Linear ticket |
/lt-dev:create-ticket |
Create Linear ticket |
/lt-dev:create-story |
Create user story (German) |
/lt-dev:create-task |
Create Linear task |
/lt-dev:create-bug |
Create Linear bug |
/lt-dev:linear-comment |
Create Linear comment |
/lt-dev:dev-submit |
Dev-submit workflow (commit + push + MR) |
/lt-dev:interview |
Structured interview for requirements |
/lt-dev:skill-optimize |
Optimize a plugin skill |
/lt-dev:spec-to-tasks |
Spec β task list |
Autonomous agents perform multi-step tasks without interaction. They are spawned via commands or the Agent tool.
| Agent | Purpose | Spawned by |
|---|---|---|
vendor-mode-converter |
Backend npm β vendor conversion incl. migration guides | /lt-dev:backend:convert-to-vendor |
vendor-mode-converter-frontend |
Frontend npm β vendor conversion incl. changelog | /lt-dev:frontend:convert-to-vendor |
nest-server-core-updater |
Upstream sync for vendored nest-server core | /lt-dev:backend:update-nest-server-core |
nuxt-extensions-core-updater |
Upstream sync for vendored nuxt-extensions core | /lt-dev:frontend:update-nuxt-extensions-core |
nest-server-core-contributor |
Upstream PR drafts from local backend patches | /lt-dev:backend:contribute-nest-server-core |
nuxt-extensions-core-contributor |
Upstream PR drafts from local frontend patches | /lt-dev:frontend:contribute-nuxt-extensions-core |
| Agent | Purpose |
|---|---|
nest-server-updater |
npm-mode update of nest-server incl. migration guides |
fullstack-updater |
Coordinated backend + frontend update (legacy) |
npm-package-maintainer |
Package optimization (5 modes) |
branch-rebaser |
Rebase automation with conflict resolution |
| Agent | Purpose |
|---|---|
backend-dev |
Autonomous NestJS development |
frontend-dev |
Autonomous Nuxt 4 development |
architect |
Architecture planning with stack enforcement |
devops |
Docker, CI/CD, environment |
| Agent | Purpose |
|---|---|
code-reviewer |
6-dimension code review |
backend-reviewer |
NestJS-specific |
frontend-reviewer |
Vue/Nuxt-specific |
security-reviewer |
OWASP-aligned |
a11y-reviewer |
Accessibility + Lighthouse |
ux-reviewer |
UX patterns |
performance-reviewer |
Bundle, queries, caching |
devops-reviewer |
Docker, CI/CD security |
docs-reviewer |
README, JSDoc, migration guides |
test-reviewer |
Test coverage + quality |
Skills contain structured knowledge and are automatically activated on matching queries.
| Skill | Purpose |
|---|---|
nest-server-core-vendoring |
Backend vendoring pattern, flatten-fix, sync workflows |
nuxt-extensions-core-vendoring |
Frontend vendoring pattern, nuxt.config rewrite, sync |
nest-server-updating |
npm-mode update processes, migration guides, error patterns |
generating-nest-servers |
Generate NestJS modules/services/controllers |
developing-lt-frontend |
Nuxt 4 development, composables, forms, auth |
maintaining-npm-packages |
Dependency optimization (5 modes) |
using-lt-cli |
lt CLI reference, conventions |
developing-claude-plugins |
Plugin development (skills, commands, agents) |
coordinating-agent-teams |
Agent team coordination, parallelism |
building-stories-with-tdd |
TDD workflow for user stories |
rebasing-branches |
Rebase strategies with conflict resolution |
general-frontend-security |
OWASP frontend security |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEVELOPER β
β β
β lt fullstack init β
β --name my-project β
β --frontend nuxt β
β --api-mode Rest β
β --framework-mode vendor β Backend vendored β
β --frontend-framework-mode vendor β Frontend vendored β
β --framework-upstream-branch 11.24.3 β
β --noConfirm β
β β
βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β lt CLI performs: β
β β
β 1. git clone lt-monorepo β
β 2. setup frontend (nuxt-base-starter) β
β 3. setup backend (nest-server-starter) β
β 4. convertCloneToVendored (backend): β
β - clone nest-server 11.24.3 β /tmp β
β - copy src/core/, index.ts, core.module.ts, etc. β
β - apply flatten-fix (4 edge cases) β
β - rewrite consumer imports (@lenne.tech/nest-server β ../) β
β - merge upstream deps dynamically β
β - apply express type-imports fix β
β - create src/core/VENDOR.md β
β - prepend vendor notice to CLAUDE.md β
β 5. convertAppCloneToVendored (frontend): β
β - clone nuxt-extensions 1.5.3 β /tmp β
β - copy src/module.ts + src/runtime/ β
β - rewrite nuxt.config.ts modules[] entry β
β - rewrite consumer imports (4 files) β
β - remove @lenne.tech/nuxt-extensions dep β
β - create app/core/VENDOR.md β
β - prepend vendor notice to CLAUDE.md β
β 6. pnpm install (monorepo) β
β 7. git init + initial commit β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROJECT READY β
β β
β my-project/ β
β βββ projects/ β
β β βββ api/ β
β β β βββ src/ β
β β β β βββ core/ β Vendored nest-server β
β β β β β βββ VENDOR.md β
β β β β βββ server/ β Project code β
β β β β βββ main.ts β
β β β βββ bin/migrate.js β
β β β βββ package.json (no @lenne.tech/nest-server) β
β β βββ app/ β
β β βββ app/ β
β β β βββ core/ β Vendored nuxt-extensions β
β β β β βββ module.ts β
β β β β βββ runtime/ β
β β β β βββ VENDOR.md β
β β β βββ ... β
β β βββ nuxt.config.ts (modules: ['./app/core/module']) β
β β βββ package.json (no @lenne.tech/nuxt-extensions) β
β βββ CLAUDE.md β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Alternative: Only backend OR only frontend vendored. Omit the respective flag:
# Only backend vendored, frontend stays npm
lt fullstack init --name my-project --frontend nuxt --api-mode Rest \
--framework-mode vendor --framework-upstream-branch 11.24.3 --noConfirm
# Only frontend vendored, backend stays npm
lt fullstack init --name my-project --frontend nuxt --api-mode Rest \
--frontend-framework-mode vendor --noConfirmStarting point: Existing project in npm mode (@lenne.tech/nest-server in package.json).
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEVELOPER in projects/api/ β
β β
β Option A β Via Claude Code (with migration guides): β
β /lt-dev:backend:convert-to-vendor β
β β
β Option B β Directly via CLI (no migration guides): β
β lt server convert-mode --to vendor β
β β
β Option C β Dry-run (plan without changes): β
β lt server convert-mode --to vendor --dry-run β
βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ Option A uses agent
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β vendor-mode-converter agent β
β β
β Phase 0: Prerequisites β
β - Verify npm mode β
β - Verify NOT already vendored β
β - Verify lt CLI available β
β β
β Phase 1: Version detection β
β - SOURCE = current @lenne.tech/nest-server version β
β - TARGET = latest (or specified) β
β - Calculate version gap β
β β
β Phase 2: Migration-guide discovery β
β - gh api lenneTech/nest-server/contents/migration- β
β guides β
β - Filter by from-version >= SOURCE, < TARGET β
β - Build ordered migration plan β
β β
β Phase 3: CLI conversion β
β - lt server convert-mode --to vendor β
β --upstream-branch <TARGET> β
β - Applies all transformations: β
β β’ clone nest-server β
β β’ copy + flatten-fix β
β β’ rewrite imports β
β β’ merge deps β
β β’ express type-imports fix β
β β’ VENDOR.md β
β β
β Phase 4: Migration application β
β - Apply each migration guide in version order β
β - Translate @lenne.tech/nest-server refs to relative β
β paths β
β β
β Phase 5: Validation loop β
β - tsc --noEmit β
β - pnpm lint β
β - pnpm test β
β - Fix until green β
β β
β Phase 6: Report β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Starting point: Existing Nuxt project in npm mode.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEVELOPER in projects/app/ β
β β
β Option A β Via Claude Code (with changelog): β
β /lt-dev:frontend:convert-to-vendor β
β β
β Option B β Directly via CLI: β
β lt frontend convert-mode --to vendor β
β β
β Option C β Dry-run: β
β lt frontend convert-mode --to vendor --dry-run β
βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β vendor-mode-converter-frontend agent (Option A) β
β β
β Phase 0: Prerequisites β
β Phase 1: Version detection β
β - SOURCE = current @lenne.tech/nuxt-extensions β
β - TARGET = latest β
β β
β Phase 2: Changelog discovery β
β - Fetch CHANGELOG.md from nuxt-extensions repo β
β - Fetch GitHub releases for version gap β
β β
β Phase 3: CLI conversion β
β - lt frontend convert-mode --to vendor β
β --upstream-branch <TARGET> β
β - Transformations: β
β β’ clone nuxt-extensions β
β β’ copy src/module.ts + src/runtime/ β
β β’ rewrite nuxt.config.ts β
β β’ rewrite 4 explicit consumer imports β
β β’ remove @lenne.tech/nuxt-extensions dep β
β β’ VENDOR.md β
β β
β Phase 4: Changelog application β
β - Apply breaking changes from changelog β
β β
β Phase 5: Validation β
β - nuxt build β
β - pnpm lint β
β β
β Phase 6: Report β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Starting point: Project in vendor mode (src/core/VENDOR.md exists).
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEVELOPER in projects/api/ β
β β
β Option A β Via Claude Code: β
β /lt-dev:backend:convert-to-npm β
β β
β Option B β Directly via CLI: β
β lt server convert-mode --to npm β
β β
β With specific version: β
β lt server convert-mode --to npm --version 11.24.3 β
βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β lt CLI performs: β
β β
β 1. Read baseline version from src/core/VENDOR.md β
β 2. Warn if local patches exist in VENDOR.md β
β β Hint: /lt-dev:backend:contribute-nest-server-core β
β should be run FIRST to upstream them β
β 3. Rewrite consumer imports: β
β relative paths β @lenne.tech/nest-server β
β 4. Delete src/core/ β
β 5. Restore @lenne.tech/nest-server dep β
β 6. Restore migrate:* scripts to node_modules paths β
β 7. Remove vendor artifacts: β
β - bin/migrate.js β
β - migrations-utils/ts-compiler.js β
β - migration-guides/ β
β 8. Remove CLAUDE.md vendor marker block β
β 9. Post-verification: scan for stale relative imports β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
convert-to-npm, all substantial local patches in the vendored core should be contributed upstream via /lt-dev:backend:contribute-nest-server-core β otherwise they will be lost.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEVELOPER in projects/app/ β
β β
β Option A β Via Claude Code: β
β /lt-dev:frontend:convert-to-npm β
β β
β Option B β Directly via CLI: β
β lt frontend convert-mode --to npm β
β β
β With specific version: β
β lt frontend convert-mode --to npm --version 1.5.3 β
βββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β lt CLI performs: β
β β
β 1. Read baseline version from app/core/VENDOR.md β
β 2. Warn if local patches exist in VENDOR.md β
β 3. Rewrite consumer imports: β
β relative paths β @lenne.tech/nuxt-extensions β
β 4. Delete app/core/ β
β 5. Restore @lenne.tech/nuxt-extensions dep β
β 6. Rewrite nuxt.config.ts: β
β './app/core/module' β '@lenne.tech/nuxt-extensions' β
β 7. Remove vendor-freshness script β
β 8. Remove CLAUDE.md vendor marker block β
β 9. Post-verification β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
The recommended path for all updates is /lt-dev:fullstack:update-all. It is mode-aware and orchestrates the appropriate agents automatically.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β /lt-dev:fullstack:update-all β
β β
β Phase 1: Detect project structure + framework modes β
β Backend: test -f <api>/src/core/VENDOR.md β vendor | npm β
β Frontend: test -f <app>/app/core/VENDOR.md β vendor | npm β
β β
β Phase 2: Version analysis + UPDATE_PLAN.md + user approval β
β β
β Phase 3: Backend framework update β
β IF npm: spawn lt-dev:nest-server-updater β
β IF vendor: spawn lt-dev:nest-server-core-updater β
β β
β Phase 4: Frontend framework update β
β IF npm: spawn lt-dev:fullstack-updater --skip-backend β
β IF vendor: spawn lt-dev:nuxt-extensions-core-updater β
β β
β Phase 5: Package maintenance β
β β spawn lt-dev:npm-package-maintainer (FULL MODE) β
β (for backend AND frontend package.json) β
β β
β Phase 6: CLAUDE.md sync from upstream starters β
β β
β Phase 7: Cross-validation (build + lint + tests) β
β β
β Phase 8: Final report β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
All 4 mode combinations are supported:
| Backend | Frontend | Backend Agent | Frontend Agent |
|---|---|---|---|
| npm | npm | nest-server-updater |
fullstack-updater --skip-backend |
| npm | vendor | nest-server-updater |
nuxt-extensions-core-updater |
| vendor | npm | nest-server-core-updater |
fullstack-updater --skip-backend |
| vendor | vendor | nest-server-core-updater |
nuxt-extensions-core-updater |
Skip flags:
/lt-dev:fullstack:update-all --dry-run # Plan only
/lt-dev:fullstack:update-all --skip-backend # Frontend only
/lt-dev:fullstack:update-all --skip-frontend # Backend only
/lt-dev:fullstack:update-all --skip-packages # Framework only, no package maintenanceIndividual updates (if you only need one part):
# Backend npm mode
/lt-dev:backend:update-nest-server
# Backend vendor mode
/lt-dev:backend:update-nest-server-core
# Frontend vendor mode
/lt-dev:frontend:update-nuxt-extensions-core
# Packages only
/lt-dev:maintenance:maintainIf you have made generally useful changes to the vendored core (bug fixes, features), they can be contributed back as pull requests to the upstream repo.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND: /lt-dev:backend:contribute-nest-server-core β
β FRONTEND: /lt-dev:frontend:contribute-nuxt-extensions-coreβ
β β
β Phase 1: git log since VENDOR.md baseline β
β Phase 2: Filter cosmetic commits (format, lint) β
β Phase 3: Categorize: β
β - upstream-candidate: generic bugfix, framework β
β enhancement, type correction β
β - project-specific: business rules, branding β
β Phase 4: Clone upstream fresh + cherry-pick candidates β
β Phase 5: Generate PR draft with motivation β
β Phase 6: Present summary for human review β
β β
β Human: reviews + pushes PR via normal GitHub flow β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
After the PR is merged, the next /lt-dev:backend:update-nest-server-core or /lt-dev:frontend:update-nuxt-extensions-core run will recognize the patch as "upstream-delivered" and remove it from the VENDOR.md local-changes log.
- β Standard project without local framework modifications
- β
Fast updates via
pnpm update - β Simpler CI/CD
- β Smaller memory footprint in the repo
- β Claude Code should understand the framework code (better context comprehension)
- β Local patches to the framework are required
- β Upstream contributions should emerge from real development
- β Debugging in framework code with source maps / original code
- β Framework changes immediately testable without npm release cycle
β οΈ Requires occasional merge conflict handling during syncβ οΈ Longer test import phase (TypeScript source)
| Term | Meaning |
|---|---|
| npm mode | Framework as @lenne.tech/nest-server / @lenne.tech/nuxt-extensions npm dependency |
| Vendor mode | Framework source copied into src/core/ (backend) or app/core/ (frontend) |
| VENDOR.md | Marker file in the vendored core with baseline version, sync history, local patches |
| Flatten-fix | Import path rewrites in 4 backend files after copying (backend only) |
| Consumer-import codemod | Rewrite of @lenne.tech/nest-server to relative paths in project code |
| Upstream sync | Pulling upstream changes into the vendored core |
| Upstream contribution | Pushing local patches as PR to the upstream repo |
| Mode-aware | Code that automatically chooses correct paths for npm or vendor |
| Starter | nest-server-starter / nuxt-base-starter β template repo with standard config |
| Repo | URL |
|---|---|
| lt CLI | https://github.com/lenneTech/cli |
| lt-dev Plugin | https://github.com/lenneTech/claude-code |
| nest-server framework | https://github.com/lenneTech/nest-server |
| nest-server starter | https://github.com/lenneTech/nest-server-starter |
| nuxt-extensions module | https://github.com/lenneTech/nuxt-extensions |
| nuxt-base starter | https://github.com/lenneTech/nuxt-base-starter |
| lt-monorepo template | https://github.com/lenneTech/lt-monorepo |
cli/CLAUDE.mdβ CLI internal documentation + vendor touchpoints tablecli/docs/commands.mdβ CLI command referencecli/docs/lt.config.mdβ CLI config referencecli/scripts/test-vendor-init.shβ Backend vendor integration tests (4 scenarios Γ ~22 assertions)cli/scripts/test-frontend-vendor-init.shβ Frontend vendor integration tests (4 scenarios)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PROJECT SETUP
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# New project (both in vendor mode)
lt fullstack init --name <n> --frontend nuxt --api-mode Rest \
--framework-mode vendor --frontend-framework-mode vendor --noConfirm
# New project (npm mode, standard)
lt fullstack init --name <n> --frontend nuxt --api-mode Rest --noConfirm
# Check status (shows both modes at monorepo root)
lt status
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# CONVERSION β Fullstack (both subprojects in one step)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Both subprojects: npm β vendor (from monorepo root)
lt fullstack convert-mode --to vendor --noConfirm
# Both subprojects: vendor β npm (rollback)
lt fullstack convert-mode --to npm --noConfirm
# With specific upstream versions
lt fullstack convert-mode --to vendor \
--framework-upstream-branch 11.24.3 \
--frontend-framework-upstream-branch 1.5.3 \
--noConfirm
# Only backend or only frontend
lt fullstack convert-mode --to vendor --skip-frontend --noConfirm
lt fullstack convert-mode --to vendor --skip-backend --noConfirm
# Dry-run (plan without changes)
lt fullstack convert-mode --to vendor --dry-run
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# CONVERSION β Individual (in the respective subprojects)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Backend: npm β vendor (with migrations via Claude Code)
/lt-dev:backend:convert-to-vendor
# Backend: npm β vendor (directly via CLI)
cd projects/api && lt server convert-mode --to vendor
# Frontend: npm β vendor (with changelog via Claude Code)
/lt-dev:frontend:convert-to-vendor
# Frontend: npm β vendor (directly via CLI)
cd projects/app && lt frontend convert-mode --to vendor
# Rollback individually
cd projects/api && lt server convert-mode --to npm
cd projects/app && lt frontend convert-mode --to npm
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# UPDATES
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Comprehensive fullstack update (recommended, mode-aware)
/lt-dev:fullstack:update-all
# Backend only
/lt-dev:backend:update-nest-server # npm mode
/lt-dev:backend:update-nest-server-core # vendor mode
# Frontend only
/lt-dev:frontend:update-nuxt-extensions-core # vendor mode
# Packages only
/lt-dev:maintenance:maintain
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# UPSTREAM CONTRIBUTION
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Backend: prepare local patches as PR
/lt-dev:backend:contribute-nest-server-core
# Frontend: prepare local patches as PR
/lt-dev:frontend:contribute-nuxt-extensions-coreThis file is intended as living documentation. It should be updated when new features are added to the lt CLI or lt-dev plugin.