From linux-av-manager
Maintain an existing UFW ruleset on a Linux desktop — list current rules, diff against the saved baseline, add or remove individual rules, dedupe redundant entries, flag overly-permissive rules (any-source allows, broad port ranges), and snapshot the new state. Triggers on "show ufw rules", "add ufw rule", "remove ufw rule", "audit ufw", "update firewall".
npx claudepluginhub danielrosehill/claude-code-plugins --plugin linux-av-managerThis skill uses the workspace's default tool permissions.
Day-2 firewall ops. Read the current rule set, compare to the baseline `ufw-setup` saved, and let the user mutate it surgically.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Day-2 firewall ops. Read the current rule set, compare to the baseline ufw-setup saved, and let the user mutate it surgically.
${CLAUDE_USER_DATA:-${XDG_DATA_HOME:-$HOME/.local/share}/claude-plugins}/linux-av-manager/config.json
Read ufw.baseline_path and ufw.lan_cidrs. If the ufw block is missing → tell the user to run ufw-setup first.
The skill is dispatched on user intent:
sudo ufw status verbose
sudo ufw status numbered
Then:
Anywhere in the From column) on a non-trivial port (anything other than ICMP/established).comment (anonymous rules accumulate cruft over time).Gather:
tcp / udp / any).Anywhere.Apply:
sudo ufw allow from <source> to any port <port> proto <proto> comment '<comment>'
Show before/after ufw status numbered.
sudo ufw delete <n>. Note that numbers shift after each delete — re-read after each removal, or sort descending and delete in that order.Parse ufw status numbered; group by (proto, port, source, dest, action). For any group with >1 rule, propose keeping the one with the most descriptive comment and removing the rest.
If the user wants to revert: read the baseline file, do sudo ufw --force reset, then re-apply each line. Confirm explicitly — this is destructive of any post-baseline rules.
Snapshot the new state:
${CLAUDE_USER_DATA:-${XDG_DATA_HOME:-$HOME/.local/share}/claude-plugins}/linux-av-manager/ufw/snapshot-<ISO-timestamp>.rules
Update config.json:
"ufw": {
"enabled": true,
"baseline_path": "<original baseline, unchanged>",
"latest_snapshot": "<new snapshot path>",
"last_modified_at": "<ISO-8601>"
}
Don't overwrite the baseline — keep it as the immutable reference for future diffs.
Anywhere allow, and never removes rules without confirmation.sudo ufw status returns "Status: inactive" → the user disabled UFW elsewhere. Surface it; don't silently re-enable./etc/ufw/user.rules directly with version control.