src/index.ts, holds one LuaAgent; the CLI compiles everything the agent references and records server-side ids and versions beside your code. This page lists every file lua init writes, who edits it, and what lua compile adds.
Verified against lua-cli 3.33.0.
Files after lua init
lua init --with-examples adds examples/ with README.md, skills/ (three skills, their tools under skills/tools/), webhooks/, jobs/, preprocessors/, postprocessors/, services/, and workflows/. Nothing under examples/ is compiled until you import it from the agent.
Who edits what
What lua compile adds
lua test, lua chat -e sandbox, and lua push compile first, so dist-v2/ appears after any of them. dist/ exists only if you run npm run build (plain tsc); the CLI never reads it.
Ignore files
The scaffold’s ignore list is published as.npmignore (npm renames a package’s .gitignore when it publishes), and lua init copies it under that name. It ignores dist/, dist-v2/, *.js, *.js.map, node_modules/, .env, .env.local, .vscode/, .idea/, .lua/, .DS_Store, and Thumbs.db. lua compile writes a .gitignore containing only dist-v2/. Before your first commit, copy the full list: cp .npmignore .gitignore.
lua.skill.yaml
lua.skill.yaml maps the project to its agent and records what has been pushed; it holds no configuration, so the persona, tools, and skills live only in code.
lua.skill.yaml
version on each push. Don’t edit version by hand: push and sync overwrite it with the server’s active version before the push reads it. To choose the next version, pass lua push <type> --set-version <ver>; --force bumps the patch number. Every field is listed in the lua.skill.yaml reference.
Naming
- Tool
name: lowercase letters, digits, hyphens, and underscores, starting with a letter; the compiler warns otherwise. The scaffold uses snake_case (get_weather). It is what the model calls and whatlua test --nameselects. - Skill, webhook, and job
name: kebab-case (weather,order-status,daily-summary). Each is the primitive’s identifier on the server, so renaming one creates a new primitive. - Files: a convention, not a rule. The scaffold uses
src/skills/tools/<Name>Tool.tswith a default-exported class,src/skills/<name>.skill.ts,src/webhooks/<Name>Webhook.ts, andsrc/jobs/<Name>Job.ts. - Entry file: the compiler looks for
index.ts,src/index.ts,agent.ts,src/agent.ts,main.ts, thensrc/main.ts, and uses the first one that exists.

