lua-basics — Claude Code skill: Lua rules for FiveM
A skill that makes your coding agent follow Lua conventions for FiveM resources: naming, locals, tables and error handling.
npx skills add germanfndez/fiveai-skills --skill lua-basics -a claude-codeWhat lua-basics does
The skill loads when the agent writes or reviews Lua inside a FiveM resource, or when you ask about naming, structure, performance, tables or error handling. It ships hard rules: ALL_CAPS constants, camelCase locals, PascalCase globals, _ for unused variables. Declare locals close to first use and group file-level globals at the top of a single client or server file.
A decision table separates expected failures from programmer errors. Missing values and bad input come back as nil, err or false. Impossible state goes through assert. A flag with more than two meanings becomes an enum table instead of a boolean. To append to an array the skill tells you to write t[#t + 1] = v rather than call table.insert.
The skill points at its own rule files: rules/functions.md, rules/tables.md, rules/variables.md, rules/conditionals.md, rules/errors.md and rules/reference-links.md. If your Lua lives outside FiveM, the table and local-variable advice still holds, but the activation contract is tied to FiveM resources.
What it helps with
- make variable and function naming consistent across a resource
- replace
table.insertwith an index write - turn nested
ifblocks into guard clauses with early returns - separate expected failures from programmer errors with
assert - hoist repeated table dereferences into locals
Example prompts for the agent
- review this Lua file against the lua-basics rules
- rewrite this function to append with an index instead of
table.insert - add guard clauses and
assertpre-conditions at the top of this function
How to install lua-basics
1Skills CLI (Vercel)
npx skills add germanfndez/fiveai-skills --skill lua-basics -a claude-code2Manually: put the files in place
~/.claude/skills/lua-basics/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/lua-basics/
1Skills CLI (Vercel)
npx skills add germanfndez/fiveai-skills --skill lua-basics -a codex2Manually: put the files in place
.agents/skills/lua-basics/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add germanfndez/fiveai-skills --skill lua-basics -a cursor2Manually: put the files in place
.cursor/skills/lua-basics/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install germanfndez/fiveai-skills lua-basics2Manually: put the files in place
.github/skills/lua-basics/SKILL.md1Skills CLI (Vercel)
npx skills add germanfndez/fiveai-skills --skill lua-basics -a gemini-cli2Platform CLI
gemini skills install https://github.com/germanfndez/fiveai-skills --path skills/lua-basicsManually: put the files in place
.devin/skills/lua-basics/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add germanfndez/fiveai-skills --skill lua-basics -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about lua-basics
How do I install lua-basics in Claude?
Run npx skills add germanfndez/fiveai-skills --skill lua-basics -a claude-code. The skill file then sits at ~/.claude/skills/lua-basics/SKILL.md.
What does lua-basics do?
It gives the agent rules for writing and reviewing Lua in FiveM resources: naming, scope, table handling, conditionals and error handling.
How is it different from generic Lua advice?
It has an activation contract: it triggers on Lua in a FiveM resource and on questions about naming, structure, performance, tables or errors.
Source text
SKILL.md · MIT
---
name: lua-basics
description: "Trigger: Lua code, Lua functions, tables, variables, conditionals, error handling, naming conventions, review Lua, optimize Lua. Write effective, performant Lua for FiveM resources."
license: MIT
metadata:
author: germanfndez
version: "1.0.0"
---
# Lua Basics
Idiomatic, performant Lua patterns for FiveM: functions, tables, variables, conditionals and errors.
## Activation Contract
Load this skill when writing or reviewing any Lua in a FiveM resource, or when the user asks about Lua naming, structure, performance, tables or error handling.
## Hard Rules
- Naming: `ALL_CAPS` constants, `camelCase` locals, `PascalCase` globals, `_` for unused variables.
- Prefer `local`; declare locals as close to first use as possible; group file-level globals at the top of a single client/server file.
- Do not use `table.insert`; append with `t[#t + 1] = v` or maintain your own size counter.
- Iterate arrays with numeric `for i = 1, #t`; imply array indices (`{ a, b }`) instead of writing them out.
- Extract repeated table dereferences into locals; use `t.key` for constant keys and `t[var]` for dynamic keys.
- Use guard clauses and early returns; never write `if x then return true else return false end`.
- Prefer positive boolean expressions; set defaults with `value = value or default`.
- Use `assert` for pre-conditions instead of `if not x then error() end`; fail loudly on unexpected state; return errors as values for expected failures.
- Limit parameters; avoid boolean parameters in APIs (use enums); pass named local functions instead of inline ones.
- Keep functions small, single-level of abstraction, and document exports.
## Decision Gates
| Situation | Pattern |
|---|---|
| Expected failure (not found, invalid input) | return `nil, err` or `false` |
| Programmer error / impossible state | `assert` / `error` |
| Flag with more than two meanings | enum table, not boolean |
| Function reused more than once as argument | `local function` then pass by name |
| Append to array | `t[#t + 1] = v` |
## Execution Steps
1. Apply naming and scope rules to every identifier.
2. Replace nested `if` with guard clauses.
3. Replace `table.insert` and `pairs` on arrays with index writes and numeric loops.
4. Add `assert` pre-conditions at function entry.
5. Re-read for size: split any function mixing high- and low-level code.
## Output Contract
Return Lua that follows the naming, locality, table and error-handling rules above; annotate any deliberate deviation.
## References
- rules/functions.md — size, naming, parameters, exports, guard clauses.
- rules/tables.md — indices, dereferencing, table.insert, iteration, size.
- rules/variables.md — naming, enums vs booleans, declaration location.
- rules/conditionals.md — defaults, boolean expressions, readability.
- rules/errors.md — assert, pre-conditions, errors as values, fail loudly.
- rules/reference-links.md — official Lua and FiveM documentation.
Upstream docs: https://www.lua.org/manual/5.4/
© germanfndez · MIT · germanfndez/fiveai-skills