Commands & Permissions
Every console command, chat command and ACE, what each one needs, and the detections no per-detection exemption can ever cover.
On this page7 entries
Everything staff-facing is gated by a FiveM ACE. Grant them to a group in
server.cfg; the group names below are examples, not requirements.
§4.1ACEs
| ACE | Grants |
|---|---|
| sculk.admin | The in-game admin panel (/sculkpanel), and the actions inside it. |
| sculk.spectate | /spectate. Holders are also automatically excused from antiSpectate. |
| sculk.screenshot | /sculkview (request a capture of a player's game view). |
| sculk.bypassall | Full exemption: this player is never acted on by any detection. Works out of the box: Config.BypassAces ships with it listed — see below. |
| sculk.bypass | The pre-3.4 global exemption. Honoured while Config.HonourLegacyBypassAce is on, which it is by default so an upgrade does not suddenly make your admins bannable. Because ACEs are hierarchical it also grants every sculk.bypass.<detection>. Rename it to sculk.bypassall in server.cfg, then turn the fallback off — in that order, or your admins lose their exemption. |
| sculk.bypass.<detection> | Exempt from one detection, e.g. sculk.bypass.antiTeleport. sculk.bypass.* exempts from everything that can be scoped. |
add_ace group.admin sculk.bypassall allow
add_ace group.admin sculk.spectate allow
add_ace group.admin sculk.admin allow
-- config.lua: the global exemption ACEs. Ships like this, so an
-- `add_ace ... sculk.bypassall allow` grant works with no edit here.
-- Never add 'command': it would exempt every resource holding it.
Config.BypassAces = { 'sculk.bypassall' }
Two things worth knowing about exemptions:
- Exempt is not silent. An exempt player still trips detections and still produces log lines; the pipeline just does not act. That is deliberate — it is how you watch what a rule would have done before it does it to a customer.
- txAdmin is exempt by default. While
Config.ExemptTxAdminis on, anyone holding thecommandACE is fully exempt. That ACE is broad; turn the switch off if a resource on your server holdscommandfor reasons unrelated to administration.
§4.1.1Detections no per-detection exemption can cover
A small set can never be scoped away with sculk.bypass.<detection> (or
sculk.bypass.*), or whitelisted by a zone, because
the thing they detect is the attempt to gain an exemption:
antiHoneypot, antiMoneyInjection, antiHeartbeat, antiSculkMind,
antiTrustEscalation.
§4.2Console commands
Run from the server console (RCON/txAdmin), not from chat.
| Command | What it does |
|---|---|
| sculk | Status: version, licence state, tier, server id, clients tracked and linked, bans on file, how many dashboard commands are remembered, and the last error (for example expired after a subscription hard stop). Answers "is it actually protecting?" at a glance. |
| sculk detections | Every detection: category, side, the evidence it rests on, the action it will actually take (capped ones marked *), and its on/off state. Anything catalogued with no implementation is listed separately as not running. |
| sculkmind | Sculk Mind's current view: pattern counts, upheld vs cleared, and its top ten patterns. |
| sculkmind reset | Clears Sculk Mind's decision pool. |
| sculk:api:players | Prints the connected-player list as JSON. Only exists while the REST API is enabled. |
§4.3Chat commands
Run in game by a player holding the relevant ACE.
| Command | Needs | What it does |
|---|---|---|
| /sculkpanel | sculk.admin | Opens the full-screen admin panel. Alias: /sculkmenu. See In-Game Admin Panel. |
| /spectate <id> | sculk.spectate or sculk.admin | Follows the player, invisibly, with an on-screen overlay (name, id, distance, trust). /spectate off (or /spectate with no id) returns you. |
| /sculkview <id> [reason] | sculk.screenshot or sculk.admin | Requests a capture of that player's current game view. Rate-limited to six requests a minute per requester and one capture per target every 20 seconds. Also runs from the console. |
| /link | — | Gives the player a one-time code, shown only to them, to link their Discord account to this game identity on the Sculk website. |
Every one of these is checked on the server. A client cannot grant itself a command by editing the resource; the ACE lookup and the target resolution both happen server-side.
§4.4The website dashboard
The anticheat dashboard is where policy lives. It exposes, per activated server:
- Detections — enable/disable, action, threshold, window, ban duration, message, escalation. Changes reach the server on its next heartbeat, no restart.
- Players / live feed / map / console / logbook — the roster the server publishes, its recent detections, and a searchable event history.
- Bans and shared ban intelligence — issue, review, lift; share a ban with other Sculk servers and withdraw it. Bans shared by other Sculk servers arrive as review events for your staff; they never block a player automatically.
- Zones, triggers, webhooks, fingerprints, whitelist — edited live. Dashboard
zones replace
Config.WhitelistZones; dashboard triggers are the connection and log triggers, notConfig.AdvancedTriggers; dashboard webhooks are posted by the website, alongside (not instead of) anysculk_webhook_*convars. - Sculk Mind — review what the learning layer is holding.
Actions taken there and actions taken from the in-game panel are the same
command pipeline: a ban is recorded, webhooked and synced identically. The only
difference is the attribution — panel actions are marked In-game: <name>.
§4.5The Discord bot
The bot runs lookups and moderation from Discord, scoped to the licence a guild
has bound with /bind. It cannot act outside the servers a guild is bound to,
and a licence holder can pull the kill switch on bot-originated writes at any
time. Its commands mirror the dashboard: lookups, licences, bans and global
bans, whitelist requests, and tickets.
§4.6The REST API
Off by default. When enabled (Config.RestApiEnabled plus a 24+ character
sculk_rest_api_key), it serves a small authenticated API on the server's own
HTTP endpoint for local tooling. Enabling it grants ban authority to every
resource on the server — FiveM can name the caller but not refuse it — so leave
it off unless you are using it.
