From mac-security-suite
Outbound (egress) firewall advisor built on LuLu + lulu-cli. Reviews what your Mac is phoning home to, curates LuLu's per-process allowlist programmatically, and diffs live connections via Netiquette against a known-good baseline. Read-only by default — proposes rule changes; you approve before any write. Invoke with /mac-security:firewall (review), firewall rules (list LuLu rules), firewall connections (snapshot live egress). Trigger phrases: "what is my mac connecting to", "egress firewall", "lulu rules", "outbound connections", "block this app from phoning home", "review my firewall".
How this skill is triggered — by the user, by Claude, or both
Slash command
/mac-security-suite:firewallThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
LuLu is the OSS per-process outbound firewall. Its rules live in
LuLu is the OSS per-process outbound firewall. Its rules live in
/Library/Objective-See/LuLu/rules.plist (NSKeyedArchiver). lulu-cli (MIT, built for
AI agents) reads/writes them from the command line; Netiquette snapshots live
connections as JSON. This skill drives both — read-first, write only on approval.
bash ${CLAUDE_PLUGIN_ROOT}/bin/install-tools.sh # confirms lulu, lulu-cli, Netiquette
LuLu must have been launched once and its system extension approved. lulu-cli writes
require sudo; surface the command, let the user run it.
| Invocation | What it does |
|---|---|
firewall (default) | Review posture: list current rules + snapshot live egress, attribute each destination, flag anything unexpected vs references/egress_baseline.md. |
firewall rules | lulu-cli list — dump the current allow/block rule set, grouped by process. |
firewall connections | Netiquette -list -names -pretty -skipApple → parse JSON, diff vs baseline, surface NEW listeners/flows. |
firewall recent | lulu-cli recent 50 — most recently prompted/created rules (catches "what did I just approve"). |
bash ${CLAUDE_PLUGIN_ROOT}/skills/firewall/scripts/firewall.sh
One read-only snapshot: LuLu status + rules + recent, live connections (Netiquette, lsof fallback), and app-firewall posture. Then diff against the baseline per the procedure below.
Netiquette -list -names -pretty -skipApple
Parse the JSON. For each process→remote, attribute the destination (cloud AI APIs,
browser push, vendor telemetry, etc. — see references/egress_baseline.md).lulu-cli list
references/egress_baseline.md. Surface only NEW destinations /
processes. A flow to an unrecognized IP from an unexpected process is the finding.malware-triage skill or
run vt ip <addr> for reputation.sudo lulu-cli add --process "/path/bin" --action block --endpoint "1.2.3.4:443"
sudo lulu-cli reload # rules only load at ext startup; batch writes, then ONE reload
Warn: reload restarts the system extension → ~8s filtering gap. Batch all changes,
reload once.references/egress_baseline.md so it
stops surfacing. See [[security-scan]] baseline pattern.references/egress_baseline.md — known-good destinations + processes (diff target).Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub ejkaz/claude-mac-security --plugin mac-security-suite