For Developers
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.
$
npm install -g lua-cliimport { LuaTool } from "lua-cli";
import { z } from "zod";
export class GetWeatherTool implements LuaTool {
name = "get_weather";
description = "Get current weather for a location";
inputSchema = z.object({
city: z.string().describe("City name"),
units: z.enum(["celsius", "fahrenheit"]).default("celsius"),
});
async execute(input: z.infer<typeof this.inputSchema>) {
const response = await fetch(
`https://api.weather.com/v1/current?city=${input.city}&units=${input.units}`
);
return response.json();
}
}Modern developer
experience
Everything you expect from a modern framework. TypeScript, testing, live reload, and one-command deployments.
Real TypeScript
Not YAML or JSON configs. Actual code with full IDE support.
// Type-safe tool definitions
export class MyTool implements LuaTool {
name = "my_tool";
inputSchema = z.object({...});
async execute(input: any) {...}
}Zod Validation
Schema validation built-in. Parameters are type-safe at runtime.
inputSchema = z.object({
email: z.string().email(),
age: z.number().min(18)
})Live Reload
Instant feedback during development. No restart needed.
$ lua dev
✓ Watching for changes...
✓ Agent updatedOne-Command Deploy
Push to production with a single command. We handle the rest.
$ lua deploy
✓ Building...
✓ Deploying to production
✓ Live at agent.heylua.aiStart building
today
Comprehensive documentation, examples, and community support to help you ship faster.
Ready to start
building?
Get from zero to your first deployed agent in under 5 minutes.
$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!