Two clients, one backend. The Chrome extension covers Gmail and Outlook on the web and scans automatically; the Outlook add-in covers the desktop and mobile Outlook apps. Both read only the open message, mask personal details in the client, and send the remainder to hodan.ai over HTTPS.
Outlook add-in — Microsoft 365 tenant
The same manifest works in the Exchange admin center (Settings → Add-ins → Add from URL). Users should pin the pane (📌) — Office add-ins cannot scan a message until the pane is open, and an unpinned pane closes on every message change. Removal: Integrated apps → PhishGuard → Remove; nothing is left on any machine.
Chrome extension — Google Workspace / managed Chrome
Once the Chrome Web Store listing is live (Unlisted — link-only, auto-updating), force-install it from Admin console → Devices → Chrome → Apps & extensions by extension ID, then set the managed policy below so every install is pre-configured with your organization key. Nothing for employees to type.
For a small pilot without managed Chrome, employees can install from theinstall pageand paste the organization key under the popup's Advanced section.
Vendor registry — the payment-change cross-check
"Our banking details have changed" is caught by wording. Whether the account is actually new is something only your own records can say. Finance enters each supplier once: the domain they email from, the account number on file (hashed on entry, never stored), and a verification phone number from your records. From then on:
Manage the list at /phishguard/vendors with your organization's admin key (issued with your API key; it manages only your organization). Both clients extract account numbers from the message locally and send only a hash; the number itself never leaves the mailbox.
PhishGuard for Claude Code — run it inside Claude
An AI assistant is a delivery channel: it returns a link, you paste the install command, and if the domain is a lookalike registered last week the payload runs on contact. The PhishGuard plugin sits on every surface of a Claude Code session — commands it runs, pages it fetches, files it writes into its own context, links in its replies, and every email you paste or it reads — and checks before anything takes effect. Emails are scanned in quiet mode: nothing when clean, a verdict when something is off.
Requirements
Claude Code (the desktop app's Code tab, or the claude CLI) with Node 18+. On Windows, Git Bash must be installed — the standard Claude Code setup.
Install (two commands, in a terminal or inside Claude with a leading slash)
Start a new Claude Code session
Hooks load at session start. You'll see nothing yet — that's the point.
Pin your context files once
Review your own CLAUDE.md and skills, then type /phishguard and choose pin. From then on any change to those files is reported at session start; if you make the change, re-pin.
Verify it's working
Type /phishguard and choose audit — you'll get a severity-ranked report of your setup. Or ask Claude to run a lookalike install command; the gate blocks it and explains why.
Day to day
Blocked command → Claude shows the reason and the one-line approve command for a domain you've verified. Suspicious email pasted → a panel with the verdict, what to do, and why, before Claude answers. Clean email → silence.
Update / remove
The plugin is published at github.com/hodanmillion/phishguard-plugin with a SHA-256 for every release. Everything runs locally from one file; only email-shaped text and links leave the machine, PII-masked, to the PhishGuard API. If Node is missing, every hook fails open — the plugin can never break Claude Code. Plugin decisions are logged to ~/.phishguard/gate.log.
How AI is used — off by default
The rules engine always runs and needs no key: sender and domain checks, SPF/DMARC, domain age, link analysis, payment-instruction changes, Reply-To divergence, look-alike domains, and per-user sender history. AI is a tie-breaker for genuinely ambiguous email only, and never runs unless enabled.
No email content reaches any AI provider. Nothing to configure or pay for.
Held in browser session memory only; sent per request, never stored on our servers.
A pg_live_… key from us. Attributes scans to your organization, enables your trusted-sender allowlist, and uses your AI budget.
What your security team will ask
Every claim above is enforced by an automated test that fails the build if behaviour drifts. Full text: privacy policy.
Known limits, stated plainly