Every plugin on a Minecraft server registers commands, aliases and namespaced labels that regular players were never meant to see or run. /plugins hands out the entire plugin stack to anyone who asks, and tab-complete exposes admin tooling — but traditional permission plugins only control what a player may run, not what they can discover.
Approach
Filters the client command tree per LuckPerms group via PlayerCommandSendEvent: hidden commands are not suggested and are never sent to the client.
Blocks execution with a customizable message and supports literal, regex, negative (!entry) and plugin:<Name> matching plus per-command argument rules.
Ships a privacy layer for /plugins, /ver and help aliases, and an anti-enumeration shield against namespaced-label and completion probes.
Supports group inheritance and priority, per-world groups, temporary grants, permission-sync mode and blocked-attempt monitoring.
Includes verification tooling: /cmdguard test explains any decision before it is enabled, and /cmdguard generate writes a review-ready starter config.
Publishes a documented developer API (non-cancellable blocked-command event) that other plugins can consume.
Screenshots
A hidden command is not suggested and is not part of the client command tree.
A command outside the group list behaves as an unknown command.
An allowed command still tab-completes normally.
Impact
Active release line on GitHub, currently at v1.4.3, with build-from-source instructions and JUnit tests.
Distributed through SpigotMC with anonymous usage metrics via bStats.
GPL-3.0 licensed with the full source public.
Its event API is consumed by a second plugin, Sunshine Sentinel, as a security signal source.