Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add germanfndez/fiveai-skills --skill lua-basics -a claude-code
Open on GitHub

What 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.insert with an index write
  • turn nested if blocks 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 assert pre-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-code

2Manually: put the files in place

~/.claude/skills/lua-basics/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/lua-basics/

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

Similar skills

All skills for Programming languages →

From the same set4

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor