All notable changes to the Lua documentation will be documented in this file.
The format is based on Keep a Changelog.
-
lua modelscommand (LUA-268) — Manage your agent's LLM model directly from the CLI.lua models listshows all approved models grouped by provider, highlighting the current one.lua models setopens an interactive picker or accepts--model <code>for scripted use.lua models unsetremoves the model and reverts to the platform default. Changes are written tosrc/index.tsand synced to the server. -
lua devicescommand — Full CLI for bidirectional agent-device communication. Supportslist,status,enable,disable,remove,test, andtest-triggeractions. Devices are a new first-class primitive type: define them in your project, push withlua push device, and useDevice.sendCommand()/Device.listDevices()from within tools. Connect hardware or virtual devices using@lua/device-client. -
Sync pull conflict guard —
lua sync --accept(and--pull) now detects files you have modified locally since the lastlua push backupand refuses to overwrite them. Use--forceto bypass. After every successfullua push backup, a local cache of file hashes is stored so the guard can detect changes without requiring a server round-trip. -
Persona guide template (LUA-271) — New agents created via
lua initnow receive a structured persona template with suggested sections (identity, tone, audience, capabilities, boundaries, guidelines) instead of the"Placeholder persona"placeholder.
-
Sync conflict detection was always triggering — The backup conflict detector used a different hash format (64-char) than the backup manifest (16-char), causing every file to appear as a conflict even when nothing had changed. Fixed: the detector now uses the same 16-char truncated hash as the manifest.
-
lua sync --pullfailure was silently swallowed in CI — When a backup restore failed, the CLI printed "Sync complete" and exited 0. Likewise, when drift included source-bearing primitives but no backup was available, the missing count was never reported. Both paths now correctly propagate the failure solua sync --acceptexits non-zero in CI when it cannot fully restore.
lua sync --forceflag added to bypass the conflict guard when intentional overwrite is needed.
- Model selection in
lua init(LUA-262) — Choose your agent's LLM model duringlua init. Interactive mode shows a searchable, provider-grouped list with a skip option to use the server default. Non-interactive:lua init --model openai/gpt-4o. The model is written into yoursrc/index.tsand synced to the server. Works across fresh init, re-init, backup restore, and agent-switch flows.
- MCP sync pull now works —
lua sync --acceptand interactive pull for MCP servers were silently no-ops: servers missing locally were never written to YAML. Fixed — MCP servers created via the dashboard are now correctly added to local YAML on pull. lua push mcpsuggestion — The push suggestion shown during sync waslua push mcpServer(invalid command). Fixed tolua push mcp.
lua initwording — "Use one of your existing agents" replaces "Extend one of your existing agents" for clarity. The parent question was also updated from "create" to "set up".
- CI/CD-friendly authentication (LUA-258) —
keytar(OS keychain) removed. API keys now resolved fromLUA_API_KEYenv var,~/.lua-cli/credentialsfile, or.envfile. Works on headless Debian, Docker, and VMs without any system dependencies. Runlua auth configureonce to re-authenticate.
- Webhook event subscriptions (BAC-131) — Subscribe webhooks to WhatsApp message lifecycle events (
sent,delivered,read,failed,played). New commands:lua webhooks events list-events,subscribe,unsubscribe. - Generic multi-primitive deploy (BAC-137) —
lua deploynow works for any primitive type:lua deploy skill|webhook|job|preprocessor|postprocessor|persona. Interactive type menu when no type is given.lua deploy all --forcedeploys latest versions of everything. Generic--nameand--set-versionflags replace the old--skill-name/--skill-version(deprecated aliases kept).
- Jobs short flags (BAC-94) —
lua jobsnow accepts-i(--job-name) and-v(--job-version) short flags. Activate/deactivate list now shows live server status. - Active version display — Fixed incorrect active version comparison for jobs, preprocessors, and postprocessors in deploy and push workflows.
- Webhook unsubscribe validation — Invalid event types now show a clear error instead of a misleading "not subscribed" message.
- Per-agent message batching (BAC-113) — Agents can have individual batching configuration for message debouncing. New
--batchand--delayflags forlua chatto test batching behavior.
- Keychain authentication reliability — Fixed several issues that could cause API key saves to silently fail on macOS. Auth flow now correctly reports errors and clears stale data on re-authentication.
- Inline comment stripping —
.envparsing now strips inline comments correctly.
- HTTP retry with exponential backoff — Automatic retries with backoff for transient server failures (429, 500–504). Max 3 retries, never retries client errors.
- Reduced package size — Removed the
lua devweb UI command and unused dependencies, significantly reducing install size.
- Chat stream timeout — Chat sessions now have a 5-minute timeout instead of hanging indefinitely on unresponsive connections.
- Isolated AI text generation (
AI.generate) (BAC-14) — New API for running text generation from within tools, aligned with Vercel AI SDKgenerateText. Two call patterns: simplifiedAI.generate(prompt, content?)returns plain text; full-optionsAI.generate({ model, system, prompt, ... })returns a rich result withtext,finishReason,usage,sources(Google Search grounding),reasoning, and more. Supportsgoogle/*,openai/*, andanthropic/*providers.
- Lazy keytar loading — Keytar loaded on demand and skipped when
LUA_SKIP_KEYCHAINis set, fixingMODULE_NOT_FOUNDerrors in WebContainers and browser sandboxes.
- Chat thread isolation -
lua chatsupports-t/--threadfor scoped conversations;lua chat clearaccepts--threadto clear one thread. - Auto-clear chat history -
--clearand--clear-threadclear conversation history when the session ends (interactive and non-interactive).
- Model cleared on push - Removing
modelfromLuaAgentand pushing now clears the model on the server (BAC-87). - Features help -
lua featureshelp and examples use current feature names (e.g.inquiryinstead of deprecatedtickets).
- MCP integrations - Default for hiding sensitive MCP fields is now off so agents receive full tool payloads;
defer_toolsis set correctly for Unified.to (BAC-83). - Skill compilation - Tool references in skills resolve more reliably for import tracking.
- Agent error filter in logs - Added
lua logs --type agent_errorto filter logs for execution errors in tools, webhooks, and jobs.
- Cron timezone and logs - Fixed timezone handling for cron schedules and improved error logging for failed cron jobs.
- Internal URL resolution - Extended base URLs for internal service discovery.
- Job schedule fields preserved -
intervalschedules now correctly sendsecondsandonceschedules now correctly sendexecuteAtto the server. Previously these fields were dropped during compilation, causing push to fail with a validation error. - Agent imports resolved correctly - Agents referencing imported primitives in config arrays now compile correctly.
- CLI exits immediately - Removed ~1s exit delay after commands complete.
- Agent Model Selection (BAC-49) -
LuaAgentnow supports amodelproperty- Static model:
model: 'openai/gpt-4o' - Dynamic resolver:
model: async (request) => { ... } - Supported providers:
google/*,openai/*,anthropic/*
- Static model:
- Usage Telemetry (BAC-37) -
lua telemetrycommand for managing usage data collectionlua telemetry on/off/statusLUA_TELEMETRY=falseenvironment variable for opt-out
- Agent as Primitive - LuaAgent compiled through standard plugin pipeline (internal change, no user action needed)
- keytar as optional dependency - Fixes installation on CI/CD systems without native build tools
- User Lookup by Email or Phone -
User.get()now supports email/phone lookupUser.get({ email: 'customer@example.com' })- Look up by emailUser.get({ phone: '+1234567890' })- Look up by phone- Returns
nullinstead of throwing when user not found
- Integrations Command - Connect 250+ third-party services via Unified.to
lua integrations connect- OAuth and API token authenticationlua integrations list- View connected accountslua integrations webhooks- Manage webhook triggerslua integrations mcp- Manage MCP servers for connections- Server-side finalization for reliable connection setup
- Auth URL redirect resolution for seamless OAuth flows
- Webhook Triggers for Integrations - Event-driven triggers that wake up your agent
--triggersflag for specifying events--custom-webhookand--hook-urlflags for custom webhook URLs- Triggers pre-selected by default in interactive mode
- Project Backup & Restore -
lua push backupandlua init --restore-sources- Content-addressed deduplication, S3 direct upload (no size limits)
- CI/CD Mode -
--ciglobal flag fails loudly on missing required flags lua agentsCommand - List all organizations and agents with--jsonoutputlua updateCommand - Self-update from npm with background outdated version warning- Auto-Add
dist-v2/to.gitignore- Added on compile and init - Variable References in Primitive Config - Variables, imports, and expressions in config properties
- Complete
push all- Now includes persona and source backup - MCP and Mastra Log Types -
--type mcpand--type mastrain logs command - User ID Filtering in Logs -
--user-idoption - Non-Interactive Configure -
--api-key,--email,--otpoptions - Non-Interactive Sandbox Views -
lua persona sandbox view,lua skills sandbox view - Post-Process Display - Post-processed responses shown in chat streaming
- Parallel server sync during compilation (~3-6s → ~1s)
- Batch version checks in
lua push all - Lazy authentication (no upfront validation call)
- Push flag renamed:
--version→--set-version - Compile sync default changed:
--no-sync(opt-out) →--sync(opt-in) - New compile flag:
--verbosefor detailed output
- Job creation regression from new bundle format (BAC-40)
- Backup "request entity too large" with S3 presigned uploads (BAC-39)
- MCP server duplicate name race condition (BAC-44)
- Email channel creation aligned with API schema (LUA-122)
- Agent config arrays with variables no longer silently empty
- Webhook
headerSchemakey mapping fixed - Tool condition regression fixed
- MCP server push pipeline (3 bugs) fixed
- Auth error handling improved (403, sync propagation)
- Compile sync stale config fixed
- Marketplace approved-only filtering
- PreProcessor test object format handling
- Added
UserLookupOptions,EmailChannelMode,MCPServerSource - Added
CreateGeneratedEmailChannelResponse,CreateExistingEmailChannelResponse - Added
'mcp'and'mastra'to log type enums - Updated
User.get()return type toUserDataInstance | null
- Non-Destructive Compile Sync -
lua compilenow warns about orphaned primitives instead of auto-deleting- Safer workflow: orphaned skills/webhooks/jobs/MCP servers show warnings
- Only CLI-sourced skills trigger warnings (not marketplace or manual)
- Delete Commands - New explicit commands for removing primitives
lua skills delete --skill-name <name>lua webhooks delete --webhook-name <name>lua jobs delete --job-name <name>- Interactive confirmation with
--forceflag for automation
- Streamable HTTP MCP Transport - Modern MCP transport (spec 2025-03-26)
- New
transport: 'streamable-http'option for MCP servers - Recommended over legacy
ssetransport for new integrations - stdio transport removed (not supported yet in production)
- New
- Fixed crash when pushing primitives without version field (first push)
- Added
MCPStreamableHttpServerConfiginterface - Updated
MCPTransporttype to'sse' | 'streamable-http' - Added
SkillSourcetype for tracking skill origin
- Non-Interactive Mode - Complete automation support for all CLI commands
- Consistent option naming patterns (
--<entity>-name,--<entity>-version) --forceflag for dangerous operations--jsonflag for machine-readable output- Action arguments for entity management
- Consistent option naming patterns (
- User Message and Agent Response Logs - Filter logs by
user_messageandagent_responsetypes - MCP Server Environment Resolution - Function-based
env()API in MCP configs - Products.get() Filter Support - New filter options with backward compatibility
- Chat works without mandatory skills
- Better error handling and visual feedback in CLI
- Normalized action handling for case-insensitive commands
- Sync Command -
lua syncfor drift detection between server and local code - Chat Clear Command -
lua chat clearto clear conversation history - Lua Runtime API -
Lua.request.channelfor channel identification - Lua.request.webhook - Access raw webhook payloads in tool execute functions
- Marketplace Pagination - Browse skills with page navigation
- Simplified agent creation flow
- Better TypeScript path alias support
- Fixed sync command drift detection issues
- Fixed skill publishing
- Fixed compilation for inline skill definitions
- MCP Server Support -
LuaMCPServerclass,lua mcpcommand - Tool Conditions - Dynamic tool availability with
condition()function - CDN API - File upload and retrieval
- Jobs API Enhancements -
Jobs.getAll(),job.activate(),job.deactivate(),job.trigger() - Evaluations Dashboard -
lua evalscommand - Templates API - WhatsApp template messaging
- Marketplace CLI - Discover, install, and publish skills
- Enhanced Logs Command - Interactive filtering by primitive type
- Immutable User Profile -
user._luaProfilefor read-only core data
- JobInstance restructured (uses
activeVersion) welcomeMessageremoved from LuaAgent- Webhook execute function signature changed to event object
- PreProcessor response redesigned with discriminated union
- Data API type safety (searchText, Record types)
- PostProcessor simplified return type
- Removed deprecated
asyncfield from PreProcessor
-
Getting Started Section
- Quick start guide with 5-minute setup
- Complete installation and authentication guide
- Task management tutorial (first skill)
-
Core Concepts Section
- Skills and tools architecture explained
- Platform APIs overview (User, Data, Products, Baskets, Orders)
- Environment variables and configuration management
- Development workflows and best practices
-
CLI Commands Section
- Complete command reference for all CLI commands
- Authentication commands (configure, key, logout)
- Skill management (init, compile, test, push, deploy)
- Development mode with live reload
- Comprehensive troubleshooting guide
-
API Reference Section
- LuaSkill class complete API documentation
- LuaTool interface implementation guide
- User API for profile management
- Data API with vector search capabilities
- Products API for e-commerce
- Baskets API for shopping carts
- Orders API for order management
- Environment utilities (env function)
-
Template & Examples Section
- Template project overview (30+ tools)
- Project structure and file organization
- Building custom skills step-by-step
- Multi-skill project patterns
- Best practices and professional patterns
- 7 detailed tool examples (Weather, User Data, Products, Baskets, Custom Data, Payment)
-
Getting Started
- LuaPop introduction with features and benefits
- 2-minute quick start guide
- Installation for CDN, NPM, and platforms (WordPress, Shopify, etc.)
-
Configuration
- Complete configuration reference with all options
- Styling and customization guide
- Events API and callbacks
-
Integration
- Framework integration (React, Vue, Angular, Next.js, Svelte)
- Real-world industry examples (E-commerce, SaaS, Healthcare, Hotels)
- Migration guides from Intercom, Zendesk, Drift, Tawk.to, LiveChat
-
Advanced Features
- Voice chat capabilities and setup
- Analytics integration (Google Analytics, Mixpanel, Segment)
- Comprehensive troubleshooting
- Simplified navigation from 4 tabs to 2 tabs (CLI, Chat Widget)
- Moved API Reference and Template Guide into CLI tab
- Updated brand colors to match Lua AI purple theme
- Updated logo references to PNG format
- Old Mintlify template files and directories
- Example content from template (ai-tools, essentials, etc.)
- Template images and assets
- Generic placeholder content
- Generic Mintlify starter template
- Placeholder content
- Example pages for reference
- Interactive code playground
- Video tutorials
- Community-contributed examples
- Multi-language support
- API versioning documentation
- Performance optimization guides
- Advanced deployment strategies
- GraphQL API documentation (if added to platform)
- Mobile SDK documentation (if developed)
- Desktop app documentation (if developed)
- Enterprise features documentation
- White-label documentation
See CONTRIBUTING.md for how to contribute to this documentation.
- Discord Community: Join our Discord - Chat with other builders, get help, discuss ideas, and stay updated with announcements
- Pull Requests: For contributions
- Email: support@heylua.ai for general questions