ox-target — FiveM skill for Cursor, VS Code & Claude Code

View on skills.sh

Trigger: ox_target, third-eye, targeting, interaction zone, qb-target migration. Add targetable entities, models, players and zones with exports.ox_target.

Don’t want to manage skills yourself? Get the full app.

How to install this skill

Download the zip, unzip it, and place the folder where your tool loads skills or rules. The exact path depends on the tool:

Claude Code

Unzip into .claude/skills/ox-target/ inside the project (the folder must contain SKILL.md). For every project, use ~/.claude/skills/ox-target/ instead.

Claude Code skills docs

Cursor

Cursor loads project rules from .cursor/rules/. Add a rule file there that points to the unzipped skill, or paste the contents of SKILL.md and the rule files into a rule. The format is .mdc with frontmatter and changes between versions, so check the docs for your version.

Cursor rules docs

VS Code / Copilot

Copilot reads instruction files from .github/instructions/*.instructions.md. Copy SKILL.md there with an applyTo glob for your Lua files, and keep the rule files next to it.

VS Code custom instructions docs

The SKILL.md file

This is the file your AI assistant reads. It links to the rule files bundled in the download.

Skill contents (includes SKILL.md and any other files)

ox_target

Third-eye targeting for FiveM. Replaces qb-target and bt-target. Supports ox_core, esx and qbx_core.

Activation Contract

Load this skill when the user asks to make something interactable: "press E on this ped", "third eye", "target option", "add an interaction to this vehicle/door/prop", or when migrating from qb-target.

Hard Rules

  • Call every function through exports.ox_target:<fn>(...). There is no global ox_target table.
  • onSelect runs on the CLIENT. Never trust its arguments server-side: re-validate in the serverEvent handler.
  • Always pass name on an option you intend to remove later. Removal is by name, not by index.
  • distance defaults to the resource default; set it explicitly for anything above ~2.5m.
  • Zone and entity functions are CLIENT-side only.
  • Prefer addLocalEntity for entities you spawned yourself; use addEntity only for networked entities and expect the id to change on respawn.

Decision Gates

Target Function
One entity you spawned locally addLocalEntity(entities, options)
A networked entity (net id) addEntity(entities, options)
Every instance of a model addModel(models, options)
Every ped / vehicle / object / player addGlobalPed / addGlobalVehicle / addGlobalObject / addGlobalPlayer
Everything, no filter addGlobalOption(options)
A location, not an entity addBoxZone / addSphereZone / addPolyZone

Execution Steps

  1. Confirm ox_target is started AFTER ox_lib in server.cfg.
  2. Pick the function from the Decision Gates table.
  3. Build the options array. Read rules/options.md for every allowed field.
  4. Gate visibility with groups, items or canInteract rather than checking inside onSelect.
  5. Route the action: onSelect for client logic, serverEvent for anything that grants money, items or state.
  6. Store the returned zone id if the zone must be removed later.

Output Contract

Return runnable Lua using exports.ox_target. Include the fxmanifest.lua dependency lines when the resource is new. Never emit qb-target syntax.

References

  • rules/setup.md — install, fxmanifest, convars, framework support.
  • rules/options.md — every field of the option table.
  • rules/entities.md — entity, model and global targets.
  • rules/zones.md — box, sphere and poly zones.
  • rules/migration.md — qb-target to ox_target.

Upstream docs: https://overextended.dev/ox_target

More skills