roblox-input — Claude Code skill: Roblox input handling
A skill for Roblox input: touch, gamepad, keyboard, mouse, on-screen buttons and cross-platform bindings.
npx skills add TabooHarmony/roblox-brain --skill roblox-input -a claude-codeWhat roblox-input does
The skill loads when a project needs work on Roblox input: touch, gamepad, keyboard, mouse, on-screen buttons, cross-platform bindings. It is client-only — server-authority simulation input goes through the Input Action System.
Inside is a quick reference for InputBegan/Changed/Ended and filtering gameProcessedEvent, plus ContextActionService:BindAction with a state check and stacking via BindActionAtPriority. For mobile it advises reading UserInputService.PreferredInput through GetPropertyChangedSignal instead of a cached TouchEnabled. On-screen buttons should fire only for touches that began on the button. Gameplay input is gated while a window is open, a TextBox is focused, GuiService.MenuIsOpen is set, or GuiService.SelectedObject is assigned.
Cancel is not release: holds reset on window open, Cancel, unequip, focus loss, input switch or pad disconnect. For key hints there are GetStringForKeyCode, GetImageForKeyCode and InputActionLabel — hardcoding Xbox names is a bad idea. Device Simulator and Controller Emulator are the places to check behaviour.
What it helps with
- separate touch, gamepad and keyboard in one input handler
- build on-screen buttons that ignore camera drags across them
- fix controls that break on mobile or console
- show the right key prompt instead of a hardcoded name
- reset a held button when a menu opens or a pad disconnects
Example prompts for the agent
- Why does the attack button not work on mobile? Check with roblox-input.
- Set up ContextActionService bindings for gamepad and touch
- Key prompts show the wrong button on Xbox — sort it out
How to install roblox-input
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-input -a claude-code2Manually: put the files in place
~/.claude/skills/roblox-input/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/roblox-input/
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-input -a codex2Manually: put the files in place
.agents/skills/roblox-input/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-input -a cursor2Manually: put the files in place
.cursor/skills/roblox-input/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install TabooHarmony/roblox-brain roblox-input2Manually: put the files in place
.github/skills/roblox-input/SKILL.md1Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-input -a gemini-cli2Platform CLI
gemini skills install https://github.com/TabooHarmony/roblox-brain --path skills/gameplay/roblox-inputManually: put the files in place
.devin/skills/roblox-input/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add TabooHarmony/roblox-brain --skill roblox-input -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 roblox-input
How do I install roblox-input in Claude?
Run npx skills add TabooHarmony/roblox-brain --skill roblox-input -a claude-code. The skill lands in ~/.claude/skills/roblox-input/SKILL.md.
What does roblox-input do?
It helps with Roblox input: touch, gamepad, keyboard, mouse, on-screen buttons and cross-platform bindings. It is client-only.
When does the skill load?
When a button fires by accident, controls fail on mobile or console, a controller gets stuck in a menu, or prompts show the wrong key.
Source text
SKILL.md · MIT
--- name: roblox-input description: "Use when handling Roblox touch, gamepad, keyboard, mouse or motion input, on-screen action buttons, or cross-platform action binding." when_to_use: "Also when a button fires by accident, controls don't work on mobile or console, a controller gets stuck in a menu, or button prompts show the wrong key." last_reviewed: 2026-10-14 sources: - https://devforum.roblox.com/t/the-correct-way-to-design-mobile-buttons/2494558 - https://create.roblox.com/docs/reference/engine/classes/UserInputService - https://create.roblox.com/docs/reference/engine/enums/PreferredInput - https://create.roblox.com/docs/input/mobile - https://create.roblox.com/docs/production/publishing/console-guidelines - https://create.roblox.com/docs/reference/engine/classes/ContextActionService - https://create.roblox.com/docs/reference/engine/classes/Tool - https://create.roblox.com/docs/studio/controller-emulator - original - https://create.roblox.com/docs/projects/server-authority - https://create.roblox.com/docs/ui/3D-drag-detectors - https://create.roblox.com/docs/ui/ui-drag-detectors --- # Roblox Input ## When to Load Touch, gamepad, keyboard, mouse or motion input, on-screen action buttons, cross-platform binding. Client-only; Server Authority simulation input uses the Input Action System. ## Quick Reference - **Events:** `InputBegan/Changed/Ended` give `(input, gameProcessedEvent)`; filter it for gameplay. Wheel fires only `InputChanged`. - **Bindings:** prefer `ContextActionService:BindAction(name, handler, touchButton, ...keys)`; gate on `state` (touch is `KeyCode.Unknown`); stack order, so `BindActionAtPriority`. Server Authority: `InputAction`/`InputContext` + `RunService:BindToSimulation()` (needs `Workspace.UseFixedSimulation`). - **Mobile first, hybrid aware:** show controls from `UserInputService.PreferredInput` (`Enum.PreferredInput`), observed with `GetPropertyChangedSignal`, not from `TouchEnabled` cached once. - **Touch action buttons:** fire only for touches that began on the button; camera drags across it never fire. Place from the measured jump button under `PlayerGui.TouchGui`; clear the thumbstick zone. - **Gate gameplay:** block attacks while a game window is open, a `TextBox` is focused, `GuiService.MenuIsOpen`, or `GuiService.SelectedObject` is set. - **Cancel is not release:** holds cancel on window open, `Cancel`, unequip, focus loss, input switch or pad disconnect. - **Gamepad tools:** default controls bind `ButtonR2` through `BindActivate`; `Tool.ManualActivationOnly = true` disables it. Aim from the screen center on gamepad, not `GetMouseLocation()`. - **Hints:** `GetStringForKeyCode(key, Enum.KeyCodeStringFormat.Abbreviated)`, `GetImageForKeyCode`, or `InputActionLabel`; never hardcode Xbox names. - **Test:** Device Simulator + Controller Emulator; menu focus is in `roblox-gui`. > Details: [references/full.md](references/full.md)
© TabooHarmony · MIT · TabooHarmony/roblox-brain