using-lt-cli
Provides reference for the lenne.tech CLI tool (lt command). Covers lt fullstack init (workspace creation with local template symlinks), lt fullstack update (version sync), lt fullstack convert-mode (npm/vendor switch), lt git get/reset (branch management), lt server create (project scaffolding), lt server object/addProp (element generation), and lt dev (parallel project orchestration via Caddy + dedicated LaunchAgent — install/uninstall/migrate/up/down/status/doctor/tunnel). Activates when user mentions "lt", "lt CLI", "lenne.tech CLI", "lt fullstack", "lt git", "lt server", "lt dev", "fullstack workspace", "local templates", "--api-link", "--frontend-link", "--noConfirm", "convert-mode", "npm mode", "vendor mode", "Caddy tunnel", "trycloudflare", or any lt command syntax. NOT for NestJS module/object/property creation (use generating-nest-servers). NOT for Vue/Nuxt frontend code (use developing-lt-frontend).
What this skill does
# LT CLI Reference ## Gotchas - **`lt fullstack init` without `--noConfirm` blocks Claude Code forever** — The interactive prompts (project name, git init, template selection) wait for stdin input. Claude Code cannot respond to them, and the session hangs on "Unfurling..." with no token consumption. ALWAYS pass `--noConfirm` + all required flags (`--name X --frontend nuxt --git false`) when calling lt CLI from Claude Code. - **`--api-link` and `--frontend-link` create SYMLINKS, not copies** — Changes to the template (`nest-server-starter`, `nuxt-base-starter`) in `/Users/kaihaase/code/lenneTech/` immediately affect the linked project. This is a feature for framework development but surprises developers who expect copies. Document it in the project README when using `--api-link`. - **`lt git reset` is DESTRUCTIVE and irreversible** — Lives next to the safe `lt git get` in the CLI menu. `reset` does `git reset --hard` followed by force-pull, destroying ALL local changes without confirmation. Never run it on a branch with unpushed work. Prefer `git stash` + `lt git get`. - **`lt server object X --controller` generates REST, NOT GraphQL** — Default is REST. For GraphQL projects, use `--resolver`. The CLI does not auto-detect from existing project patterns — you must specify explicitly. - **`lt fullstack convert-mode` rewrites the source tree** — Switching between `npm` and `vendor` mode moves framework code in/out of `src/core/` (API) or `app/core/` (App). The operation is reversible but NOT idempotent mid-run — always commit before starting, so a failed conversion can be rolled back via `git reset`. - **`--next` is experimental and incompatible with `lt server module/object/addProp/test/permissions`** — When `lt server create --next` or `lt fullstack init --next` is used, the API is cloned from [`nest-base`](https://github.com/lenneTech/nest-base) (Bun + Prisma 7 + Postgres + Better-Auth) instead of `nest-server-starter`. The downstream generators target the classic nest-server layout (Mongoose models, src/server/modules/, etc.) and will not work on a nest-base project. Use it for greenfield prototyping only; for production work prefer the default template. ## Skill Boundaries | User Intent | Correct Skill | |------------|---------------| | "lt fullstack init" | **THIS SKILL** | | "lt git get feature-branch" | **THIS SKILL** | | "lt server create my-project" | **THIS SKILL** | | "lt server module / object / addProp" | generating-nest-servers | | "lt server permissions" | generating-nest-servers | | "Create a NestJS module" | generating-nest-servers | | "Build a Vue component" | developing-lt-frontend | **After `lt fullstack init`:** - Backend work (projects/api/) → `generating-nest-servers` - Frontend work (projects/app/) → `developing-lt-frontend` ## Commands ### lt git get — Checkout/Create Branch ```bash lt git get <branch-name> # alias: lt git g ``` 1. Branch exists locally → switches to it 2. Branch exists on remote → checks out and tracks 3. Neither exists → creates new branch from current ### lt git reset — Reset to Remote ```bash lt git reset ``` Fetches latest from remote, resets current branch to `origin/<branch>`. **Destructive** — all local changes lost. ### lt fullstack init — Create Fullstack Workspace ```bash # Non-interactive lt fullstack init --name <Name> --frontend <angular|nuxt> --git <true|false> --noConfirm \ [--git-link <URL>] [--api-link <path>] [--frontend-link <path>] [--next] ``` | Parameter | Required | Description | |-----------|----------|-------------| | `--name` | Yes | Workspace name (PascalCase) | | `--frontend` | Yes | `angular` or `nuxt` | | `--git` | Yes | Initialize git: `true` / `false` | | `--noConfirm` | No | Skip confirmation prompts | | `--git-link` | No | Git repository URL | | `--api-branch` | No | Branch of nest-server-starter | | `--frontend-branch` | No | Branch of frontend starter | | `--api-copy` / `--api-link` | No | Local API template (copy / symlink) | | `--frontend-copy` / `--frontend-link` | No | Local frontend template (copy / symlink) | | `--next` | No | **Experimental** — clone [`nest-base`](https://github.com/lenneTech/nest-base) (Bun + Prisma 7 + Postgres + Better-Auth) for the API. Forces `apiMode = Rest`, `frameworkMode = npm`, and skips the workspace install (run `pnpm install` for app and `bun install` for api manually). Downstream `lt server module/object/addProp/test` are NOT compatible with the resulting layout. | **Priority:** `--*-link` > `--*-copy` > `--*-branch` > default (GitHub clone) **Created structure:** ``` <workspace>/ ├── projects/ │ ├── api/ ← nest-server-starter (or nest-base with --next) │ └── app/ ← nuxt-base-starter (or ng-base-starter) ├── package.json └── .gitignore ``` **Post-creation:** ```bash cd <workspace> && pnpm install lt dev init # idempotent: ENV patches + register; auto-runs `lt dev install` first if the machine isn't set up yet lt dev up # Start API + App behind Caddy under https://<slug>.localhost # With --next: install per subproject, no workspace install cd <workspace>/projects/app && pnpm install cd <workspace>/projects/api && bun install ``` (Falls back to `pnpm -r --parallel run start` on default ports 3000/3001 if `lt dev` is not used.) ### lt dev — Parallel Project Orchestration (Caddy + HTTPS) Serves every lt project under stable HTTPS URLs (`<slug>.localhost`, `api.<slug>.localhost`) via Caddy so multiple projects can run side by side without colliding on 3000/3001 and without auth cross-wiring. Use this in every lt-monorepo or standalone API/App project. ```bash lt dev install # One-time per machine: bootstraps dedicated LaunchAgent/systemd unit + Caddyfile stub + CA reminder lt dev uninstall [--purge] # Remove the lt-dev service (--purge also drops Caddyfile + logs) lt dev init # Once per project (idempotent): ENV patches + register lt dev up # Start API + App behind Caddy lt dev down # Stop processes + remove Caddy block (also tears down any isolated test stack) lt dev test # ISOLATED Playwright E2E: parallel stack + dedicated `<slug>-test` DB, auto-teardown lt dev test --shard # Shard across 2 isolated stacks (default — stable sweet spot) lt dev test --shard 3 # Shard across N isolated stacks (each own ports/Caddy/DB `<slug>-test-<i>`) lt dev test --shard auto # Size N from this machine's CPU + RAM (conservative) lt dev test down # Tear the isolated test stack(s) down (residue-free) lt dev status # Show URLs + PIDs + live upstream state for THIS project (incl. any test stack) lt dev status --all # List every registered project + running state lt dev doctor # Diagnose Caddy / CA / DNS / port issues lt dev tunnel [--api] # Foreground Cloudflare Quick Tunnel: public *.trycloudflare.com URL ``` What each subcommand does: - **`install`** — One-time per machine. Verifies `caddy` is on PATH (suggests `brew install caddy` if missing), creates `~/.lenneTech/Caddyfile` stub, writes + bootstraps a dedicated LaunchAgent (macOS, `~/Library/LaunchAgents/tech.lenne.lt-dev-caddy.plist`) or systemd-user unit (Linux). Waits up to 8s for the Caddy admin endpoint (`:2019`) to respond, validates the file, and reminds you to run **`sudo -E HOME="$HOME" caddy trust`** (the `-E HOME="$HOME"` is mandatory — without it sudo switches HOME to `/var/root` and the CA install silently fails). **Does NOT use `brew services start caddy`** — its plist hardcodes `--config /opt/homebrew/etc/Caddyfile` and crash-loops against our Caddyfile location. **Auto-chains:** when run inside an un-initialized lt-dev project, runs `init` afterwards (`--skip-init` to opt out). - **`uninstall`** — Symmetric counterpart to `install`. Boots out the LaunchAgent / systemd unit, removes the unit
Related in Web Dev
generating-lwc-components
IncludedLightning Web Components with PICKLES methodology and 165-point scoring. Use this skill when the user creates or edits LWC components, builds wire service patterns, or writes Jest tests for LWC. TRIGGER when: user creates/edits LWC components, touches lwc/**/*.js, .html, .css, .js-meta.xml files, or asks about wire service, SLDS, or Jest LWC tests. DO NOT TRIGGER when: Apex classes (use generating-apex), Aura components, or Visualforce.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Set up queries with useQuery, mutations with useMutation, configure QueryClient caching strategies, implement optimistic updates, and handle infinite scroll with useInfiniteQuery. Use when: setting up data fetching in React projects, migrating from v4 to v5, or fixing object syntax required errors, query callbacks removed issues, cacheTime renamed to gcTime, isPending vs isLoading confusion, keepPreviousData removed problems.
document-processor-api
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
nutrient-document-processing
IncludedProcess documents with Nutrient DWS. Use when the user wants to generate PDFs from HTML or URLs, convert Office/images/PDFs, assemble or split packets, OCR scans, extract text/tables/key-value pairs, redact PII, watermark, sign, fill forms, optimize PDFs, or produce compliance outputs like PDF/A or PDF/UA. Triggers include convert to PDF, merge these PDFs, OCR this scan, extract tables, redact PII, sign this PDF, make this PDF/A, or linearize for web delivery.
tanstack-query
IncludedManage server state in React with TanStack Query v5. Covers useMutationState, simplified optimistic updates, throwOnError, network mode (offline/PWA), and infiniteQueryOptions. Use when setting up data fetching, fixing v4→v5 migration errors (object syntax, gcTime, isPending, keepPreviousData), or debugging SSR/hydration issues with streaming server components.
accelint-nextjs-best-practices
IncludedNext.js performance optimization and best practices. Use when writing Next.js code (App Router or Pages Router); implementing Server Components, Server Actions, or API routes; optimizing RSC serialization, data fetching, or server-side rendering; reviewing Next.js code for performance issues; fixing authentication in Server Actions; or implementing Suspense boundaries, parallel data fetching, or request deduplication.