From Fort
Audits macOS security with 16 deterministic checks, explains findings in plain language, and applies approved fixes. Generates SOC 2/ISO 27001/NIST/CIS evidence on request.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fort:fortThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`fort` is a single Go binary that runs 16 deterministic security checks on a Mac,
fort is a single Go binary that runs 16 deterministic security checks on a Mac,
shows the exact command and output behind each result, and can fix the ones that
are safe to automate. This skill drives that CLI directly over the shell.
Your job is not to re-implement the checks. fort is the source of truth for what
the posture is. You add the layer a binary can't: explain what each finding means
and why it matters, prioritize them, respect what the user has told you about how
they use the machine, and apply fixes selectively and only with consent.
Auditing is always safe. Fixing changes the user's system settings — treat every fix like running a command on their machine: preview it, get an explicit yes, then apply. Never apply a fix the user hasn't specifically approved, and never "fix everything" implicitly. Default to read-only. When in doubt, audit and explain; don't change anything.
Run fort --version first. The plugin does not bundle the binary, so it needs fort
present on the machine — but don't dead-end if it's missing. Offer to install it:
brew --version succeeds), offer to install, and on a yes:
brew install djadmin/tap/fortcurl -fsSL https://github.com/djadmin/fort/releases/latest/download/fort_darwin_all.tar.gz | tar xz && sudo mv fort /usr/local/bin/go install github.com/djadmin/fort/cmd/fort@latestInstall only with the user's go-ahead, then re-run fort --version to confirm before
auditing. fort is macOS-only; on other platforms, say so rather than trying to install.
| Goal | Command | Changes the system? |
|---|---|---|
| Full audit, human-readable | fort | No |
| Full audit, structured data to reason over | fort --json | No |
| Audit specific checks only | fort --only firewall,osupdates --json | No |
| Preview the exact fix command for a check | fort --only firewall --dry-run | No |
| Apply a fix, with fort's own confirm prompt | fort --only firewall --fix | Yes |
| Apply a fix non-interactively (after the user approved) | fort --only firewall --fix --yes | Yes |
| Write an HTML evidence report | fort --report | No (writes fort-report.html) |
Notes:
fort exits non-zero when any check fails. That's expected, not an error — read
the output, don't treat a non-zero exit as a crash.--json when you need to reason over results; it gives you per-check
status, current vs expected, fixable, the evidence (the literal command
fort ran and its output), and frameworks mappings.--only <id>. A bare fort --fix would prompt for everything;
you want to apply exactly the checks the user agreed to.Run fort --json. Lead with the score and a one-line verdict, then walk the findings
in priority order — failures that expose the machine first, lower-risk items after.
Don't dump JSON at the user.
This is the point of the skill. For each finding that matters, tell the user:
current vs expected, and the evidence (the real command
fort ran and what it returned). Showing the evidence is what makes this trustworthy
instead of a black box.See reference/checks.md for a per-check explainer (what it is, why it matters,
what to watch out for when changing it). Read it when you need depth on a finding or
the user asks "what happens if I change this?"
A finding being "fail" doesn't mean blindly fix it. If the user says they use SSH to reach this machine, don't push to disable remote login. If they need an admin account for daily work, explain the trade-off rather than insisting. Prioritize against how they use the Mac, not a generic checklist.
When the user wants to fix something, run fort --only <id> --dry-run and show them
the exact command fort would run (would run: sudo …). Let them see it before it
happens.
After an explicit yes, run fort --only <approved-ids> --fix (or add --yes once
they've confirmed, to skip the second prompt). Fix exactly the checks they agreed to —
never expand the scope. Some fixes need sudo and will prompt for a password; that's
the user's machine asking, which is correct.
Re-run fort --only <ids> --json to confirm each change took effect. If the user
needs proof for an audit or wants a record, offer fort --report and tell them where
the HTML lands (fort-report.html, printable to PDF).
Use these exact IDs with --only. Never invent IDs; if unsure, run fort --json and
read them back. Full explainers are in reference/checks.md.
passwordmgr, filevault, screenlock, antivirusfirewall, gatekeeper, sip, sshlocaladmin, guestaccount, autologin, sudo_touchidsharing, airdroposupdates, osversionFixable today: screenlock, firewall, gatekeeper, ssh, guestaccount,
autologin, sudo_touchid, airdrop, osupdates. The rest are audit-only because
the safe action depends on the person (e.g. you can't auto-strip someone's admin
rights or install an antivirus for them) — explain and guide instead.
The audit comes first; framework mapping is a bonus. If the user is preparing for
SOC 2, ISO 27001, NIST CSF, or CIS, each finding already carries its control mappings
in the JSON (frameworks). Reference them when relevant ("this is SOC 2 CC6.6"),
and offer fort --report for an auditor-ready HTML record. Don't lead with this for
someone who just wants to know if their laptop is locked down.
fort --json, give the score and verdict, walk the failures
by real-world risk, offer to fix the safe ones.fort --only firewall --dry-run, show the command,
confirm, then fort --only firewall --fix, then re-audit to confirm it passes.fort --only <those-ids> --fix. Leave the
judgment-call items (admin rights, antivirus) for the user to decide.reference/checks.md for ssh, explain the
trade-off, don't change anything unless they ask.fort --report, return the path,
note it prints to PDF, and summarize which controls are covered.npx claudepluginhub djadmin/fort --plugin fortDiagnoses macOS issues: kernel panics, failing drives, slow boot, TCC permission denials, APFS snapshot bloat, wake failures, launchd audits, and startup item triage via logs, diskutil, and sysdiagnose.
Audits macOS apps for security vulnerabilities and teaches macOS internals through real-world CVE case studies. Covers sandbox escapes, TCC bypasses, dylib injection, XPC attacks, and kernel exploitation.
Scans developer workstations for exposed credentials, supply chain compromise indicators, persistence mechanisms, and compromised application data. Generates a prioritized remediation plan.