Use when the user wants to know if their PaperMC server plugins are still optimal, when plugins may have been superseded by better alternatives, when redundant plugins are suspected, or when gaps in plugin coverage exist for a given MC version and server profile.
REQUIRED SUB-SKILL: superpowers:dispatching-parallel-agents REQUIRED SUB-SKILL: compat-check
Audit a PaperMC server's installed plugins to determine whether each is still best-in-class, find better alternatives using live Hangar and Modrinth data, record approved decisions to a shared decision doc, then chain to version-refresh.
Ask for any of these not already provided:
minecraft. Used for all remote reads (ssh <alias> "...")/opt/minecraft/server. Contains the plugins/ subdirectory.1.21.4./minecraft-audits/server-<hostname>-YYYY-MM-DD.md (create if not exists)No files are written in this section.
Fetch installed plugins from the remote server:
ssh <alias> "ls {server-files-path}/plugins/*.jar"
For each JAR, infer the plugin name and version. Try in order:
PluginName-X.Y.Z.jar conventionplugin.yml inside the JAR:
ssh <alias> "unzip -p {server-files-path}/plugins/<name>.jar plugin.yml 2>/dev/null | grep '^version:'"
Assign each plugin to exactly one category:
| Category | Example plugins |
|---|---|
performance | Spark, Paper (built-in), Chunky, ClearLag |
auth-security | AuthMe, SkinsRestorer, nLogin |
maps-visualization | DynMap, BlueMap, Pl3xMap |
world-management | Multiverse-Core, WorldBorder, VoidGen |
admin-tools | LuckPerms, EssentialsX (admin subset), LSQL, TAB |
qol-cosmetic | Maintenance, ServerUtils, chat formatting plugins |
library | Vault, PlaceholderAPI, ProtocolLib, PacketEvents |
Output: category → [plugin list with inferred versions] map.
REQUIRED SUB-SKILL: superpowers:dispatching-parallel-agents — use it to dispatch and manage all category agents.
Run one server-category-agent per non-library category. Dispatch all with run_in_background: true.
Read ./category-agent-prompt.md (in this skill's directory) for the full agent prompt template. Inject per-agent values (category name, plugin list with inferred versions, MC version, full installed plugin list for dependency checking) from Phase 1.
When constructing sub-agent prompts, resolve all relative paths (like ../compat-check/SKILL.md) to absolute paths using this skill's base directory before injecting.
Wait for all agents to complete before Phase 3.
Build the numbered upgrade plan from all category reports. Read ./upgrade-plan-format.md (in this skill's directory) for the exact output format and table rules.
After presenting the plan, tell the user:
Reply with:
- "approve all" — apply every proposed change
- "approve 1,3" — apply only items #1 and #3
- "skip 2" — approve all except #2
- "approve W1" — promote wildcard W1 to a full ADD entry
- "cancel" — abort, no changes made
No files are written until the user explicitly responds.
Files are written only after the user responds to the upgrade plan.
Decision doc path: ./minecraft-audits/server-<hostname>-YYYY-MM-DD.md
Create ./minecraft-audits/ if it doesn't exist. Create the file if it doesn't exist. If it already exists (created by audit), append to it.
Header (write at top if creating):
# PaperMC Server Audit — YYYY-MM-DD
Server: <server-name>
MC Version: <version>
Platform: Paper
Meta decisions section (always append):
## Meta decisions
| # | Action | Plugin | Alternative | Decision |
|---|--------|--------|-------------|----------|
| 1 | ADD | Spark | — | approved |
| 2 | REPLACE | EssentialsX | CMI | skipped |
| 3 | REMOVE | OldPlugin | — | approved |
Use approved, skipped, or cancelled in the Decision column.
After writing the decision doc, say:
Meta audit complete. Decision doc saved to
./minecraft-audits/server-<hostname>-YYYY-MM-DD.md.
- Proceed — continue to version-refresh
- Cancel — stop here
version-refresh." and invoke it, passing the decision doc path and server connection details.If any phase produces unexpected results — malformed agent output, Hangar or Modrinth API errors, agents returning empty or garbled Category Reports — invoke superpowers:systematic-debugging before retrying or escalating to the user.
versions:X facet uses minor-series matching, not exact matching. Always call the /version endpoint to confirm.plugin.yml depend: fields of other installed plugins before assigning REMOVE. Hard dependents block removal.date_modified — secondary signal