A CLI for lenne.Tech libraries and frameworks.
CLI in action:
$ npm install -g @lenne.tech/cli
Menu mode
$ lt
or command line mode
$ lt <command> (<subcommand>) (<parameter>)
$ lt help
or
$ lt
- LT-ECOSYSTEM-GUIDE — Complete reference for
ltCLI and thelt-devClaude-Code Plugin (architecture, functions, vendor-mode workflows, agents, skills) - VENDOR-MODE-WORKFLOW — Step-by-step guide for npm → vendor conversion, updates, and rollback
- Command Reference — Complete list of all commands with options
- Configuration Guide — Configuration file documentation
- Plugin Guide — How to create plugins
# Check your environment
$ lt doctor
# Show project status
$ lt status
# Enable shell completions
$ lt completion installWhen you create a new api project (lt fullstack init or lt server create),
the CLI supports two framework consumption modes:
npm mode (default) — @lenne.tech/nest-server is installed as an npm
dependency. Framework source lives in node_modules/@lenne.tech/nest-server/.
Imports use the bare specifier from '@lenne.tech/nest-server'. Update path:
/lt-dev:backend:update-nest-server (Claude Code agent).
vendor mode — The framework's core/ directory is copied directly into
<api>/src/core/ as first-class project code. No @lenne.tech/nest-server
npm dependency. Generated imports use relative paths (from '../../../core').
Local patches are allowed and tracked in src/core/VENDOR.md. Update path:
/lt-dev:backend:update-nest-server-core (Claude Code agent).
# npm mode (classic, default)
$ lt fullstack init --name myapp --frontend nuxt --api-mode Rest
# vendor mode, HEAD of upstream
$ lt fullstack init --name myapp --frontend nuxt --api-mode Rest \
--framework-mode vendor
# vendor mode, pinned to a specific upstream branch or tag
$ lt fullstack init --name myapp --framework-mode vendor \
--framework-upstream-branch 11.24.1
# dry-run: print the plan without touching the filesystem
$ lt fullstack init --name myapp --framework-mode vendor --dry-run --noConfirm
# standalone api project (vendor mode works here too)
$ lt server create --name myapp --framework-mode vendorAll lt server … commands (module, object, addProp, test, permissions)
auto-detect the framework mode via src/core/VENDOR.md and generate
the correct import syntax automatically. You never pass --framework-mode
after init; it is persisted in the project's lt.config.json.
# inside projects/api — generates relative or bare imports automatically
$ lt server module --name Product --controller Rest
# shows the mode + project type
$ lt status
# prints the mode-specific update instructions
$ lt fullstack updateVendor-mode projects ship three maintenance scripts under scripts/vendor/:
| Script | Purpose | Invocation |
|---|---|---|
check-vendor-freshness.mjs |
Non-blocking warning when upstream has a newer release than the current baseline | pnpm run check:vendor-freshness (auto-invoked by pnpm run check / check:fix / check:naf) |
sync-from-upstream.ts |
Diff generator consumed by the nest-server-core-updater Claude Code agent |
pnpm run vendor:sync |
propose-upstream-pr.ts |
Patch-list generator consumed by the nest-server-core-contributor agent |
pnpm run vendor:propose-upstream |
The vendor-mode baseline (upstream version + commit SHA) is recorded in
src/core/VENDOR.md. Log any substantial local patch there so the updater
agent can classify it at sync time.
A full end-to-end smoke test for all four supported init combinations
(npm/Rest, vendor/Rest, vendor/GraphQL, vendor/Both) ships with the
CLI:
$ pnpm run test:vendor-initEach scenario runs init → module → object → addProp → test → tsc → build → migrate:list and asserts ~30 structural + functional invariants per scenario. Run this before releasing a new CLI version to catch upstream drift early.
The CLI supports project-specific configuration via lt.config files. This allows you to set default values for commands, reducing repetitive input.
# Create a configuration file interactively
$ lt config init
# Show current configuration (merged from hierarchy)
$ lt config showSupported formats:
lt.config.json- JSON format (recommended)lt.config.yaml- YAML formatlt.config- Auto-detected format
Configuration files are searched from the current directory up to root and merged hierarchically.
For detailed documentation, see docs/lt.config.md.
// Start
$ lt
// Create new server
$ lt server create <ServerName>
or
$ lt server c <ServerName>
// Create new module for server (in server project root dir)
$ lt server module <ModuleName>
or
$ lt server m <ModuleName>
// Update and install npm packages (in project dir)
$ lt npm update
or
$ lt npm up
or
$ lt npm u
// Checkout git branch and update packages (in project dir)
$ lt git get <branch-name or part-of-branch-name>
or
$ lt git g <branch-name or part-of-branch-name>
// Preview what a command would do (dry-run)
$ lt git clear --dry-run
$ lt git reset --dry-run
$ lt git squash --dry-run
$ lt git rebase --dry-run
// Skip confirmation prompts (noConfirm)
$ lt git get feature --noConfirm
$ lt git squash dev --noConfirm
// Combine flags for CI/CD pipelines
$ lt git clean --noConfirm
$ lt server module User --noConfirm
// View command history
$ lt history
...
# Clone project
git clone git@github.com:lenneTech/cli.git
cd cli
# Link the project for global usage
npm link
# Make changes
...
# Test changes
lt ...
# Build new version
npm build
Many thanks to the developers of Glugun and all the developers whose packages are used here.
MIT - see LICENSE
