By ejkaz
Read-only, on-demand macOS security harness — scan, egress firewall (LuLu), persistence diffing (KnockKnock), malware triage (ClamAV/YARA/capa/VirusTotal), and hardening audit (Lynis/mSCP). Baseline-and-diff, no resident daemons, no self-surveillance.
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".
macOS hardening audit — runs Lynis for a hardening-index score, optionally an mSCP (NIST/CIS) audit-only compliance check, verifies GUI guardians (BlockBlock/OverSight/ RansomWhere) are present, and produces a prioritized, drduh-aligned checklist of RECOMMENDED (never auto-applied) actions. Read-only / audit-only. Invoke with /mac-security:harden. Trigger phrases: "harden my mac", "hardening audit", "lynis", "cis benchmark", "security posture checklist", "am I hardened".
On-demand malware triage of a specific file, app bundle, or directory — NOT a resident scanner. Layers ClamAV (signatures), YARA (IOC/family rules), capability analysis (entitlements + frameworks + imported symbols for Mach-O; capa for PE/ELF), and VirusTotal (cloud reputation) into one verdict. Read-only. Invoke with /mac-security:malware-triage <path>. Trigger phrases: "scan this file", "is this safe", "check this download", "triage this binary", "what does this app do", "virustotal this", "scan my downloads".
Enumerates everything that persists on macOS (launchd, login items, cron, dylib hijacks, browser extensions, etc.) using KnockKnock's JSON CLI with built-in VirusTotal reputation, then diffs against a known-good baseline so recurring runs surface only NEW persistence. Read-only. Invoke with /mac-security:persistence-watch. Trigger phrases: "what persists on my mac", "knockknock", "new launch items", "persistence check", "autoruns for mac", "did something install itself".
Read-only macOS security sweep — detects monitoring/surveillance agents (MDM, EDR, DLP, RMM, time-trackers, spyware), persistence (launchd, shell rc, cron, login items, BTM), malware signatures, network exposure, privacy-permission grants (screen recording / keylogging vectors), and hardening posture (SIP, Gatekeeper, FileVault, firewall). Diffs against a known-good baseline so recurring runs surface only what CHANGED. Optional reputation layer via KnockKnock + VirusTotal and Lynis hardening audit. Invoke with /security-scan (quick), /security-scan deep (privileged + tools), or /security-scan harden (hardening checklist). Trigger phrases: "security scan", "scan my mac", "is anything monitoring me", "check for spyware/malware", "what's watching my machine", "audit my laptop", "harden my mac", "check my security posture".
Executes bash commands
Hook triggers when Bash tool is used
Uses power tools
Uses Bash, Write, or Edit tools
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
A read-only, on-demand macOS security harness, packaged as a Claude Code plugin. Open-source tooling only. No resident daemons, no self-surveillance — every check snapshots state, diffs against a known-good baseline, and surfaces only what changed.
Design spine: read-only · on-demand · baseline-and-diff · recommend-never-mutate. The agent drives a headless scanning layer; real-time GUI guardians (BlockBlock, OverSight) stay out-of-band. Aligned with the drduh macOS Security & Privacy Guide: threat-model first, OS hardening + an egress firewall + persistence alerts get you ~90% of the value.
/plugin marketplace add ejkaz/claude-mac-security
/plugin install mac-security-suite@claude-mac-security
New machine? One command does the rest (toolchain, YARA rules, Quad9 DNS profile, weekly sentinel), then prints the unscriptable GUI gates (LuLu approval, Full Disk Access, VirusTotal key) and how to seed your baselines after:
PLUGIN=~/.claude/plugins/marketplaces/claude-mac-security
bash "$PLUGIN/bin/bootstrap.sh" # phase 1 + GUI checklist
bash "$PLUGIN/bin/bootstrap.sh" --seed # after the gates: seed baselines + first run
Baselines, snapshots, and the trend ledger are per-machine state in ~/.mac-security-suite/ — each machine seeds its own; nothing machine-identifying ships in this repo. To audit the toolchain piecemeal instead: bash "$PLUGIN/bin/install-tools.sh" (read-only; --install to provision).
| Skill | Does | Built on |
|---|---|---|
/mac-security:security-scan | Read-only sweep: monitoring agents, persistence, malware sigs, network exposure, hardening posture. Diffs a baseline. | native macOS + osquery |
/mac-security:firewall | Egress advisor — review/curate LuLu's per-process allowlist; diff live connections. | LuLu + lulu-cli + Netiquette |
/mac-security:persistence-watch | Enumerate all persistence, diff a baseline, VirusTotal reputation per binary. | KnockKnock |
/mac-security:malware-triage <path> | On-demand triage of a file/app: signature + IOC + capability + reputation. | ClamAV · YARA · capa · vt-cli |
/mac-security:harden | Hardening-index score + audit-only CIS/NIST checklist. Never auto-applies. | Lynis · mSCP |
A security-analyst subagent interprets findings (attribution, capability-vs-activity, triage).
Deterministic, zero-LLM core under the skills — prose diffing replaced by canonical JSON:
| Tool | Does |
|---|---|
bin/snapshot.py <kind> | Canonical {section: {key: detail}} snapshot — persistence (KnockKnock), egress (LuLu rules), posture (SIP/Gatekeeper/FileVault/firewall, system extensions, launchd inventory) |
bin/baseline_diff.py <kind> | Diff snapshot vs JSON baseline. Added/changed = findings (exit 1); removed = informational. --init seeds. |
bin/accept_delta.py <kind> <key> -m "why" | Promote a confirmed-legit delta into the baseline with a dated justification (required). |
bin/sentinel.sh | The ONE scheduled job: snapshot → diff → trend ledger (~/.mac-security-suite/ledger.jsonl). Notifies only on findings; silent when clean. Weekly quick, auto-deep (VirusTotal) monthly. Install: bash bin/install-sentinel.sh. |
Data lives in ~/.mac-security-suite/ (baselines, snapshots, ledger, reports) — never in this repo.
For full persistence coverage from launchd, grant KnockKnock.app Full Disk Access (terminal FDA doesn't extend to cron).
The optional hooks/hooks.json PreToolUse guard (blocks curl|sh pipe-to-shell installs and rm -rf) ships enabled as of v0.2.
Headless / agent-driven: LuLu + lulu-cli · KnockKnock · Netiquette · ClamAV · YARA · capa · vt-cli · Lynis · osquery (ad-hoc CLI only).
GUI guardians (install-and-forget, not agent-drivable): BlockBlock, OverSight, RansomWhere?.
Deliberately excluded: Santa lockdown, osqueryd + Fleet, Pi-hole, resident AV, Little Snitch (not OSS) — friction / attack-surface / paid for a personal non-MDM Mac.
This catches commodity/commercial tooling and standard persistence. It does not guarantee detection of a bespoke, fileless, or well-hidden targeted implant. The VirusTotal reputation layer narrows that gap; nothing closes it entirely.
MIT © Eric Kazmaier
npx claudepluginhub ejkaz/claude-mac-security --plugin mac-security-suiteek-design brand SSoT — maintains design-model.yaml (the single file every other ek-* skill reads). Neo-Tokyo cyberpunk register for agentic UI. Versioned via YAML frontmatter (version, brand_version, supersedes, updated_by) and git tags for rollback.
ek-web token exporter — reads design-model.yaml from the ek-design plugin and emits consumable token artifacts for web codebases: Tailwind v4 CSS-first (tailwind-v4.css ★ default), legacy Tailwind v3 (tailwind-tokens.ts), shadcn theme CSS variables (shadcn-theme.css), and flat CSS variables (ek-tokens.css). Brand evolution → re-run → downstream apps pick up new tokens.
ek-craft — data-driven brand lint for .tsx / .css / .html targets. Two layers: universal anti-AI-slop / color / typography rules adapted for cyberpunk web UI (in this skill), and palette enforcement that reads design-model.yaml from the sibling ek-design plugin (avoid list, primary axis, invariants). Brand evolution auto-adapts; no code changes here.
Harness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses
Complete collection of battle-tested Claude Code configs from an Anthropic hackathon winner - agents, skills, hooks, and rules evolved over 10+ months of intensive daily use
Efficient skill management system with progressive discovery — 410+ production-ready skills across 33+ domains