Install the "lua-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/lua-helper into .claude/skills/lua-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lua-helper", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add shepherdjerred/monorepo --skill lua-helper -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "lua-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/lua-helper into .agents/skills/lua-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lua-helper", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add shepherdjerred/monorepo --skill lua-helper -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "lua-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/lua-helper into .cursor/skills/lua-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lua-helper", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add shepherdjerred/monorepo --skill lua-helper -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "lua-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/lua-helper into .gemini/skills/lua-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lua-helper", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add shepherdjerred/monorepo --skill lua-helper -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "lua-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/lua-helper into .github/skills/lua-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lua-helper", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add shepherdjerred/monorepo --skill lua-helper -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "lua-helper" agent skill from https://github.com/shepherdjerred/monorepo/tree/main/packages/dotfiles/dot_agents/skills/lua-helper into .opencode/skills/lua-helper/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lua-helper", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
lua-helper
GitHub stars
112
Token cost
~1.7k tokens
SKILL.md length
757 words
Files
6 (incl. references)
Skills in repo
63
Repo updated
First seen
Licence
GPL-3.0
At a glance
Current Lua guidance for portable Lua, LuaJIT, Neovim's Lua interface, WezTerm configuration, LuaLS, formatting, linting, testing, and security.
Works in 4 steps: Lua language/interface version. → Whether the runtime is PUC Lua, LuaJIT,… → Host application version and… → …
Neovim plugins/config
SKILL.md covers Current baselines, Select the runtime, Error discipline and Tables and sequences, plus 5 more sections
Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
What it does
Lua Helper is an agent skill from shepherdjerred/monorepo. Current Lua guidance for portable Lua, LuaJIT, Neovim's Lua interface, WezTerm configuration, LuaLS, formatting, linting, testing, and security. Use when writing or reviewing Lua, Neovim plugins/config, WezTerm config, rockspecs, or Lua tooling.
Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/core-language.md`, `references/neovim.md` and `references/releases.md`).
It sits in Development, covering Linting and formatting. It works with Lua. The repository describes itself as: Monorepo for all of my projects. The licence is GPL-3.0.
When your agent uses it
Neovim plugins/config
Tasks that involve Linting and formatting
Example prompts
“/lua-helper”
Workflow steps
4 steps, taken from the first numbered list in SKILL.md.
1Lua language/interface version.
2Whether the runtime is PUC Lua, LuaJIT, or a host embedding.
3Host application version and stable/nightly channel.
4Tooling version and project configuration.
What it can do on your machine
Read from SKILL.md and the folder at commit 46ddf2f. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
No scripts in the folder and no shell commands in SKILL.md (its code samples are lua and bash).
From the folder's file list and the shell code blocks in SKILL.md.
Network
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Lua Helper loads about 1.7k tokens when it runs, and up to ~6.1k if it reads all its reference files. Until then it costs about 64 tokens; SKILL.md has 757 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~64
When it runs· the whole SKILL.md, loaded when a task matches
~1.7k
With references· SKILL.md plus every file in references/, read only if the agent opens them
~6.1k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/lua-helper/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
lua-helper
description
Current Lua guidance for portable Lua, LuaJIT, Neovim's Lua interface, WezTerm configuration, LuaLS, formatting, linting, testing, and security. Use when writing or reviewing Lua, Neovim plugins/config, WezTerm config, rockspecs, or Lua tooling.
Lua Helper
Identify the host before writing Lua. Portable Lua 5.5, Neovim's Lua 5.1 interface, optional LuaJIT extensions, and WezTerm's Lua 5.4 runtime have different APIs and semantics.
Current baselines
Verified 2026-08-03:
Host or tool
Current baseline
Compatibility boundary
Lua
5.5.0; maintained 5.4 line at 5.4.8
Version-gate APIs newer than the project's minimum
LuaJIT
Active rolling 2.1 branch
Lua 5.1-compatible with implementation extensions and build flags
Neovim
0.12.4
Permanent Lua 5.1 interface; may use LuaJIT or a compatible fork
WezTerm
Stable release still dated 2024
Embeds Lua 5.4; online docs can describe nightly-only APIs
LuaLS
3.18.2
Annotations and diagnostics are tooling, not runtime validation
StyLua
2.5.2
Pin/configure per repository
LuaRocks
3.13.0
Installation runs package build logic and mutates environments
Whether the runtime is PUC Lua, LuaJIT, or a host embedding.
Host application version and stable/nightly channel.
Tooling version and project configuration.
In Neovim, target the documented Lua 5.1 interface and check jit before LuaJIT-specific behavior. In WezTerm, target Lua 5.4 and check the API's “Since” version against the installed binary.
Error discipline
Lua APIs commonly return nil, error or status tuples. Check every open, read, write, close, subprocess, and host callback result whose failure matters.
lua
local function read_file(path)
local file, open_error = io.open(path, "rb")
if not file then
return nil, open_error
end
local content, read_error = file:read("*a")
local close_ok, close_error = file:close()
if not content then
return nil, read_error
end
if not close_ok then
return nil, close_error
end
return content
end
Do not bind an unchecked io.open result as a to-be-closed value. Preserve close failures when durability matters.
Tables and sequences
The length operator does not count arbitrary table keys. For a table with holes, #table returns a valid border and is not a reliable element count. Model sequences as contiguous integer keys or count explicitly.
Version-gate table.move, table.unpack, rawlen, __pairs, and related APIs. Lua 5.1 uses global unpack; LuaJIT compatibility libraries can depend on build flags.
Avoid memoization keys built from table.concat({...}): they reject many value types and can collide. Use nested tables keyed by arguments or a deliberately encoded, restricted input domain.
Neovim
Current native LSP setup uses vim.lsp.config and vim.lsp.enable. This replaces nvim-lspconfig's deprecated legacy require('lspconfig').setup framework; nvim-lspconfig itself remains maintained and supplies server definitions.
Use current APIs:
vim.hl.hl_op() for yank highlighting.
vim.diagnostic.jump({ count = 1 }) and negative count for navigation.
vim.api.nvim_set_option_value(name, value, { buf = buffer }) for scoped options.
vim.system({ program, argument }, { text = true }):wait() for ordinary subprocesses, checking code, signal, and stderr.
Use :trust and vim.secure for project-local configuration. exrc executes project code and is a trust boundary.
Show full SKILL.md (320 more words)Show less
WezTerm
Create the configuration with strict mode so invalid options fail:
lua
local wezterm = require("wezterm")
local config = wezterm.config_builder()
config:set_strict_mode(true)
return config
WezTerm may evaluate configuration repeatedly. Keep top-level evaluation idempotent and free of side effects such as spawning processes. Config precedence includes CLI and environment overrides before standard paths.
wezterm.run_child_process returns success, stdout, and stderr. Inspect success. Returning false from a wezterm.on callback stops later callbacks and the default action.
Tooling
bash
stylua --check .
luacheck .
selene .
busted
Use the tools configured by the project. Choose Luacheck or Selene deliberately instead of layering both without purpose. Use Busted for behavior-style suites or LuaUnit for lightweight xUnit tests. Use headless Neovim/Plenary only when host integration is part of the contract.
LuaLS supports .luarc.json / .luarc.jsonc, annotations, diagnostics, addons, and stricter type-checking modes. Loading the entire Neovim runtime as a workspace library is valid but broad; prefer an addon or narrow explicit paths when sufficient.
Security
Load untrusted source only as text with a constrained environment; never accept untrusted binary chunks.
Avoid shell construction in os.execute and string-form vim.fn.system. Never concatenate untrusted input into a shell command.
WezTerm and Neovim config execute arbitrary code. Keep secrets out of config and use protected identity/agent mechanisms.
WezTerm config can execute more than once; repeated evaluation magnifies side effects.
LuaRocks installation executes rock build/package logic. Inspect sources and rockspecs and pin versions in reproducible environments.
LuaJIT FFI is an implementation extension with native-memory safety implications; do not assume it exists or is sandboxed.
Review checklist
Identify portable Lua, LuaJIT, Neovim, or WezTerm before choosing APIs.
Version-gate language, host, and online-documentation features.
Check file, process, callback, and cleanup results.
Do not use # as a general map size or unsafe concatenated memo keys.
Use current Neovim LSP, highlight, diagnostic, option, and process APIs.
Make WezTerm config strict, idempotent, and side-effect free at top level.
Configure LuaLS and one intentional lint/test workflow.
Treat project config, shells, rocks, binary chunks, and FFI as trust boundaries.
Preserve the distinction between Neovim's Lua 5.1 interface and optional LuaJIT implementation.
Lua Helper next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
A skill your agent uses when you need to check, verify, validate or understand code or structure of a file (often code related files or markdown) - automatically detects file type, finds appropriate…
Installs, updates or migrates the vendored anti-slop Oxlint plugin in a repository, keeping local rule changes and the plugin's license and provenance files.
This skill should be used when the user is writing Go code and needs guidance on Go-specific pedantry: error wrapping with fmt.Errorf and %w, interface design (accept interfaces return structs)…
Run Kedro's local lint / format / type-check / tests on changed files (uses the project's pre-commit hooks, ruff, mypy, pytest, lint-imports, detect-secrets, Make targets — in the right venv), or…
Current Bun test runner guidance for discovery, isolation, parallelism, sharding, changed tests, mocks, timers, snapshots, coverage, DOM Testing Library, and integration teardown.
This skill should be used when the user asks to "deep research", "research this topic", "investigate thoroughly", "do a deep dive on", "comprehensive research on", "find everything about", "survey…
This skill should be used when the user asks to "create a Figma design", "design in Figma", "make a Figma mockup", "create an app icon", "design UI", "render JSX to Figma", "export from Figma"…
Current Lua guidance for portable Lua, LuaJIT, Neovim's Lua interface, WezTerm configuration, LuaLS, formatting, linting, testing, and security. Lua Helper is an agent skill from shepherdjerred/monorepo. Current Lua guidance for portable Lua, LuaJIT, Neovim's Lua interface, WezTerm configuration, LuaLS, formatting, linting, testing, and security.
When should I use Lua Helper?
Lua Helper fits situations like: neovim plugins/config; tasks that involve Linting and formatting.
How do I install Lua Helper in Claude Code?
Run `npx skills add shepherdjerred/monorepo --skill lua-helper -a claude-code`. Or copy the skill folder (packages/dotfiles/dot_agents/skills/lua-helper in shepherdjerred/monorepo) into .claude/skills/lua-helper in your project. Claude Code loads it when a task matches its description.
How do I install Lua Helper in Codex?
Run `npx skills add shepherdjerred/monorepo --skill lua-helper -a codex`. Or copy the skill folder (packages/dotfiles/dot_agents/skills/lua-helper in shepherdjerred/monorepo) into .agents/skills/lua-helper in your project. Codex loads it when a task matches its description.
Can I use Lua Helper in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add shepherdjerred/monorepo --skill lua-helper -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lua-helper, .gemini/skills/lua-helper, .github/skills/lua-helper and .opencode/skills/lua-helper in your project.
What does Lua Helper need to run?
SKILL.md names no scripts, command-line tools or credentials: Lua Helper is instructions for the agent only.
Does Lua Helper access the network?
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Is Lua Helper safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Lua Helper use?
Lua Helper is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Lua Helper use?
About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.4k tokens, read only when the agent opens those files.
What are the alternatives to Lua Helper?
Skills that share tags, products or a category with Lua Helper: Checking Files With Lsp (Sidiora-Labs/centra-llm-agents, 115 stars), Install Anti-Slop Oxlint Rules (dmmulroy/anti-slop, 5.2k stars), Babysit PR To Pass CI (sgl-project/sglang, 37k stars) and Rust Best Practices (farm-fe/farm, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Lua Helper?
shepherdjerred (a GitHub user) maintains it in shepherdjerred/monorepo, which has 112 GitHub stars. The repository holds 63 skills in this directory. The repository was last updated on October 7, 2026.
Source: shepherdjerred/monorepo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.