This page is part of the plugin system reference. For the full plugin API, see Plugin System API Documentation.
Plugins can provide custom CLI commands and output formatters, but name collisions between plugins make behavior unpredictable.
Plugin command and formatter names are now resolved deterministically.
- Core commands always win.
- Plugin names are sorted deterministically by manifest name.
- If the manifest name is missing or empty, the plugin file name is used as a fallback.
- Plugin command names are normalized by trimming whitespace and lowercasing.
- Formatter names are normalized the same way.
- The first plugin in deterministic order wins for execution.
- All providers are recorded in a conflict map so collisions are visible.
- Warnings are emitted once during plugin loading or registry initialization, not during every command execution.
Plugin command collision: 'foo' winner: plugin_a ignored: plugin_b, plugin_c
Use a namespaced command style where practical:
plugin_name:command_name
This reduces collision risk and makes it easier to understand where a command comes from.
- No new plugin API is required for this behavior.
- Existing plugin commands continue to work.
- The registry exposes conflicts via
command_conflicts()andformatter_conflicts().