Skip to content

A library that decides whether an AI agent may message a user right now

One gate, an ordered list of checks, and a reason for every rejection. TypeScript, Python and Go, held to the same fixtures.

Order is visible

Consent before everything, quiet hours before the budget. The order is one list in one place and the trace shows it ran that way.

Budgets at commit

evaluate reads, commit increments atomically right before you send. Two instances cannot both send the sixth message.

Policy as data

A JSON document names the checks and their options. The same file runs in TypeScript, in Python, in the CLI and in this site’s playground.

Presets with sources

LINE, WeChat, WhatsApp Business, Kakao, Korea’s Network Act, India’s TCCCPR, Brazil’s LGPD, US TCPA, EU ePrivacy, Telegram, Slack: seventeen presets, each next to the page it came from.