

Dashboard — coverage of known AI activity (through the AI Client vs outside), safety, estimated spend, and block-that-one.
Know when your WordPress plugins use AI.
See activity. Control access. Track estimated spend.
No developer experience is required.
See Privacy / Data below for every stored or transmitted field.
By default this plugin does not send data to any external service. Features that store or transmit call metadata are opt-in (logging, denial alerts / webhook, shadow-AI observe alerts) or default-on only while logging/learn mode is on (weekly report) — each has an explicit Settings toggle.
If you enable recent-call logging in Settings HandL AI Connector Access Control, it stores a local log in the WordPress options table containing:
generate_text, is_supported_for_text_generation) — or direct_http for shadow observationsdirect_http and matched provider id when known.Logs are kept as a single shared entry-based ring buffer (default 200 entries, configurable 20–1000) for both AI Client rows and direct-HTTP AI observations. An optional maximum log age (days) setting also drops rows older than the threshold on the next read or append; when both the count cap and the time-based TTL apply, the stricter limit wins. Leave maximum age empty for entry-count-only retention. Repeated direct-HTTP calls from the same attributed plugin + host (or the same unattributed file + host) that stay active within ~5 minutes of idle time are collapsed into one row whose count is the number of HTTP calls (same unit as AI Client rows). Active clusters move to the newest slot so a chatty bypass does not erase the rest of the log, and the log does not drop the chatty cluster ahead of idle rows.
If you set an estimated spend alert threshold (Activity Estimated spend alerts), the plugin may send a message via WordPress wp_mail when the retained log’s estimated total first crosses that amount (site-wide or per-plugin). The email includes the threshold, current estimated total, dated log window, and (for per-plugin alerts) the plugin name. It states that the figure is estimated (token × rate placeholder), not billing. No prompt text or user identity is included. Empty thresholds never send mail. Delivery failures are contained and never change allow/deny.
If you enable denial email alerts, the plugin sends a message via WordPress wp_mail when enforcement blocks a prompt (immediate rate-limited mail, or an hourly digest). The recipient is the address you configure, or the site admin_email if left empty — that may be any address you enter, and mail is delivered through whatever transport your site uses (core PHP mail or an SMTP / transactional-mail plugin). Alert messages include:
Alert mail does not include prompt preview or user identity. Digest rows waiting to send are stored in a local options queue (path-only URI) and are removed when alerts are turned off or the plugin is uninstalled.
If you enable shadow-AI email alerts (Activity tab; off by default), the plugin sends a message via WordPress wp_mail the first time a given attributed plugin+host (or unattributed file+host) pair appears as a direct_http observe row in the retained log window — immediate rate-limited mail, or the same hourly digest queue, using the same recipient and mode as denial alerts. Messages are explicitly labeled observe / not blocked and include:
Shadow-AI alerts do not block HTTP and are not posted to the webhook. They require logging or learn mode, and are suppressed when AI is disabled site-wide via wp_supports_ai. Chatty-cluster collapse (~5 minutes idle) and the retained-window pair check prevent duplicate alerts for the same pair.
If you also set a Webhook URL (Activity denial alert settings), the plugin POSTs a generic JSON body with the same fields as the denial email alert to that http(s) URL whenever a denial alert would fire (same alert_on_deny gate, rate limit, and immediate/digest mode — not a separate toggle). Delivery uses WordPress wp_remote_post (timeouts/non-2xx are contained like wp_mail failures and never change allow/deny). The URL is an intentional admin-supplied outbound integration (same trust model as the alert recipient). Empty URL means no webhook POST is attempted. A Send test webhook control posts a sample payload clearly labeled as a test (bypasses rate limiting). Weekly report email and shadow-AI observe alerts are not sent to the webhook in this release.
If you enable the weekly report email (Activity tab), the plugin sends one message per week via WordPress wp_mail with Dashboard-style aggregates from the retained local log. This is the first surface where retained log data can leave the WordPress site (through your site’s mail transport into an inbox). The weekly report includes only:
Weekly report mail does not include prompt preview, user identity, request paths, hosts, denial reason detail rows, or any per-call URI. Recipient is the same address as denial alerts (or site admin_email if empty). Every email includes a link to turn the report off. The weekly cron is cleared when the report is disabled, logging is off, or the plugin is uninstalled.