OverviewHistoryStatsSecurity
npx skills add ...
Documentation
SKILL.md
npx skills add luumenlabs/luau-skills --skill roblox-core
Use for foundational Roblox experience development: deciding what runs on the client or server, where scripts and modules belong, how to structure reusable code, and how to handle everyday services, attributes, bindables, workspace objects, input, camera, raycasts, collisions, and CFrame-based gameplay scripting in Studio.
npx skills add luumenlabs/luau-skills --skill roblox-core
Use this skill when the task is primarily about core Roblox runtime structure and everyday gameplay scripting:
Script, LocalScript, and ModuleScript instances should live.ServerScriptService, ServerStorage, ReplicatedStorage, ReplicatedFirst, StarterPlayer, StarterGui, and Workspace.WaitForChild(), and Output-driven debugging.CFrame behavior as part of ordinary experience scripting.Do not use this skill when the task is mainly about:
CFrame.RemoteEvent, RemoteFunction, trust boundaries, request validation, or multiplayer message design, hand off to roblox-networking.roblox-api.roblox-data.roblox-cloud or roblox-oauth.ServerScriptService for server-only scripts and modules.ServerStorage for server-only assets or modules that do not need to replicate.ReplicatedStorage for shared modules and replicated assets.ReplicatedFirst only for earliest client startup work.StarterPlayerScripts, StarterCharacterScripts, StarterGui, and StarterPack for client behavior copied into each player.LocalScript or Script with RunContext = Client for client code.Script with RunContext = Server or normal server placement for server code.ModuleScript for reusable logic and configuration.game:GetService() and keep names aligned with service names.WaitForChild() when accessing replicated objects from the client unless the load order is guaranteed by the container being used.ModuleScript return values as cached per Luau environment:
CFrame operations when orientation and relative transforms matter.references/scripting-overview.md for the basic Roblox scripting workflow in Studio and the standard service-module-function-event script shape.references/client-server-runtime.md to reason about authority, replication, edit versus runtime data models, and what each side can safely assume.references/script-locations-and-script-types.md when deciding between Script, LocalScript, ModuleScript, run contexts, and container placement.references/services.md for the core game:GetService() pattern and which container or gameplay services matter most in foundational code.references/modulescripts-and-reuse-patterns.md for module caching, shared code placement, configuration modules, and encapsulation patterns.references/attributes.md for per-instance state, replication-order cautions, and change-detection patterns.references/bindable-events.md for same-side script communication, async events, sync callbacks, and argument-shape cautions.references/input-overview.md for client-side input handling and adapting to preferred input type across devices.references/workspace-basics-camera-raycasting-collisions-and-cframes.md for the most common world-facing runtime patterns.ModuleScript form instead of duplicated across scripts.WaitForChild() where replication order is uncertain.CFrame operations are used intentionally for spatial logic.ReplicatedStorage or other replicated containers.Script to run everywhere without considering location or RunContext.LocalScript where a shared ModuleScript should hold reusable logic.WaitForChild().Touched for non-physical overlap logic that should be a raycast or explicit spatial query.CFrame.local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RoundConfig = require(ReplicatedStorage:WaitForChild("RoundConfig"))
local function onPlayerAdded(player)
print(player.Name, "joined; round length:", RoundConfig.RoundLength)
end
Players.PlayerAdded:Connect(onPlayerAdded)local Workspace = game:GetService("Workspace")
local camera = Workspace.CurrentCamera
camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.lookAt(Vector3.new(0, 10, 20), Vector3.new(0, 5, 0))
camera.Focus = CFrame.new(0, 5, 0)local part = script.Parent
part:SetAttribute("Active", true)
local changed = Instance.new("BindableEvent")
changed.Event:Connect(function(state)
print("State changed:", state)
end)
changed:Fire(part:GetAttribute("Active"))