lua.skill.yaml is the state manifest at the root of a project. It records which agent the project is bound to and the server id and current version of every primitive the CLI has compiled or pushed. It holds no configuration: the persona, model, tools, and schedules live in src/. lua init creates the file, lua compile, lua push, lua sync, and lua deploy rewrite it, and only the template: section is written by you.
Verified against lua-cli 3.33.0.
Example
After a compile and a push of one skill, one webhook, and two processors the file looks like this:lua.skill.yaml
agent, skills, webhooks, jobs, preprocessors, postprocessors, mcpServers, template, skill, then the remaining keys alphabetically.
Keys
A row is written with exactly
name, version, and its id field. Any other key on a row is dropped the next time the CLI writes the file.
Writes by the CLI
lua compileadds a row for every primitive reachable from theLuaAgentinsrc/index.ts, withversion: 1.0.0and an empty id for a new one, and removes rows whose primitive is no longer in the code, as long as at least one primitive of that kind remains. It never writes server ids and sends nothing to the server.lua pushandlua syncreconcile with the server: they register primitives that have no id yet and write the returned id, link a row whose name already exists on the server, setversionto the server’s active version when the two differ, and add a row for any primitive that exists on the server but not in your code, with aFound … on server not in your local codemessage.- A push then writes the version it pushed;
lua deploywrites the version it made live. - Every push except
lua push agentends with a source backup and updatesbackup.
Hand edits
The file is safe to commit. Editing it is rarely needed, and these are the effects:- Changing
version: overwritten by the server’s active version the next time the CLI reconciles. To push a specific version uselua push <type> --set-version <ver>; to bump automatically use--force. - Deleting an id line: the next
lua pushorlua synclinks the row to the server entity with the same name, or registers a new one when none exists, and writes the id. This is the fix when the server entity was deleted and a push fails withno longer exists on the server(exit 3); for workflows the CLI clears a stale id itself. - Deleting a row:
lua compilerecreates it while the primitive is still in the code. - Removing a primitive from the code: its row disappears on compile, but the server copy stays and returns as a server-only row on the next push or sync until you delete it with that primitive’s
deleteaction, for examplelua webhooks delete. - Changing
agentIdororgId: uselua init --agent-id <id> --forceinstead; it also updates theLuaAgentname and persona insrc/index.ts. - Editing
backuporgit: the next push orlua git connectoverwrites them. - Editing
template: intended. Every section is sent onlua marketplace template publish; an absent section clears that part of the template rather than keeping the previous value.
See also
lua compileandlua pushlua sync— resolve drift between this file, your code, and the server- Project structure
- Agent templates — the
template:section

