Build agents with real TypeScript.

Full control over your agent logic. Write TypeScript tools, test locally, deploy globally. No YAML configs, no vendor lock-in.

~/customer-support — lua
$

A modern developer experience.

Everything you expect from a modern framework. TypeScript, testing, live reload, and one-command deployments.

01

Real TypeScript.

Not YAML or JSON configs. Actual code with full IDE support.

02

Zod validation.

Schema validation built-in. Parameters are type-safe at runtime.

03

Test interactively.

Run any tool with real inputs from the CLI, then chat with the agent in a sandbox — before anything ships.

04

One-command deploy.

Push to production with a single command. We handle the rest.

A small set of primitives. A whole agent.

Skills, tools, jobs, webhooks, MCP servers, and message processors — every piece is a typed class, and every agent ships with the platform APIs built in.

LuaSkill

Group tools with the context that steers them.

new LuaSkill({ name, context, tools })

LuaTool

A typed capability — schema in, work out.

class CheckOrder implements LuaTool { … }

LuaJob

Scheduled work. No conversation required.

schedule: { type: "cron", expression: "0 9 * * *" }

LuaWebhook

HTTP endpoints your agent reacts to.

new LuaWebhook({ name, execute })

LuaMcpServer

Mount MCP servers as native tools.

new LuaMcpServer({ … })

PreProcessor / PostProcessor

Shape every message on the way in and out.

new PreProcessor({ priority, execute })

Batteries included — platform APIs on every agent:

DataUserAIProductsOrdersBasketsCDNVoiceTemplatesenv()

await Data.search("movies", "mind-bending thriller", 10, 0.7)

Write the tool once. Ship it everywhere.

Channels are the front doors to your agent. Connect one and the rest are configuration, not code.

WhatsApp
Instagram
Messenger
Slack
Email
Web widget
HTTP API
SMS · Teams · Discord · Telegram — coming soon

Ready to start building?

Get from zero to your first deployed agent in under 5 minutes.

lua chat
$lua init my-agent
$lua chat
You:What's the weather in SF?
Agent:Let me check that for you...
→ get_weather(city: "SF")
Agent:It's 68°F and sunny in San Francisco!