一键导入
casl-compliance
Mandatory compliance gate before any outbound (email, SMS, blast). Verifies consent, opt-out status, CASL footer, send window, and daily cap.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Mandatory compliance gate before any outbound (email, SMS, blast). Verifies consent, opt-out status, CASL footer, send window, and daily cap.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Queue a cold outreach campaign to a segmented lead list via the cold_outreach_campaigns endpoint, with CASL compliance enforced before any send.
Generates the structured daily call sheet for Ezra — 6 prioritized categories, specific opening lines for each call, and a clear action order.
Surfaces overdue follow-ups, prioritizes the call list, and recommends specific outreach actions for each stuck deal or contact.
Domain literacy for MCA and alternative business funding. Reference glossary and clarifying-question guide for when operators use ambiguous terms.
Uses historical lender feedback data to recommend the best lenders for a specific deal profile and surfaces typical terms and decline patterns.
Pause cleanly at a decision boundary, surface the decision to Ezra via Telegram or dashboard chat, and wait for explicit confirmation before proceeding.
| name | casl-compliance |
| description | Mandatory compliance gate before any outbound (email, SMS, blast). Verifies consent, opt-out status, CASL footer, send window, and daily cap. |
| triggers | ["casl check","compliance check before send","is this CASL compliant","check opt-out","can we send this"] |
| tier | stable |
| disable_model_invocation | false |
| requires | ["env:SUNBIZ_SUPABASE_URL","env:SUNBIZ_SUPABASE_ANON_KEY"] |
Where these endpoints live: All
/api/...URLs below are routes on the OASIS Command Center dashboard (repo:CC90210/oasis-command-center, deployed at https://agent-dashboard-sigma-eight.vercel.app). They are NOT served by this repo's localscripts/api_server.py(which only exposes/health,/status,/sms/send,/webhook/jotform). Solara's bridge makes authenticatedfetchcalls into the dashboard's API surface, and the dashboard then writes to Supabase / queues threads / dispatches the 8 daemons in this repo.
Canada's Anti-Spam Legislation (CASL) applies to every commercial electronic message sent to a Canadian recipient. Non-compliance carries fines up to $10 million per violation for organizations. This skill is the mandatory gate before ANY outbound — no exceptions.
All sends route through scripts/integrations/send_gateway.py. This skill provides the pre-flight checklist that runs before the gateway is invoked.
| Concept | Rule |
|---|---|
| Express consent | Recipient explicitly opted in to receive messages from SunBiz Funding |
| Implied consent | Existing business relationship (client, prospect who inquired) — valid for 2 years from last interaction |
| No consent | Cold contact to a business email found via UCC list, LinkedIn, etc. — requires implied consent exemption only if the email is publicly listed for commercial contact |
| Opt-out | If recipient unsubscribed, they cannot receive ANY commercial message, even under implied consent |
Run all five checks. If ANY fails, stop and surface to Ezra — do not send.
GET /api/compliance/consent?recipient_email=[email]
status: express → proceedstatus: implied → verify consent_expires_at > today; if expired, do not sendstatus: none → only proceed if the email is publicly listed for commercial contact on the recipient's own website/LinkedIn AND the message is relevant to their stated business purposestatus: opted_out → HARD STOP. Never send.GET /api/compliance/opt-out-check?email=[email]
This is separate from the consent table — it's the global suppression list. If suppressed: true, do not send regardless of consent status.
Every commercial email must contain:
Check that the template includes all three. If any are missing, refuse to queue until the template is fixed.
Canadian business recipients:
Current statutory holidays to check:
If the current time is outside the window, schedule for the next business day opening — do not force-send.
GET /api/compliance/daily-send-stats?date=today
Check emails_sent_today against the configured daily_cap (default: 100 per sending domain, 50 per individual campaign).
If cap is reached: do not send today. Queue for tomorrow.
Additional requirements for SMS:
Check scripts/integrations/send_gateway.py for the SMS compliance wrapper — it handles the STOP keyword listener automatically.
When a recipient replies "unsubscribe," "stop," "remove me," or similar:
POST /api/compliance/opt-out
{ "email": "[email]", "source": "email_reply", "opted_out_at": "[timestamp]" }
There is no grace period on opt-outs. Honor immediately.
send_gateway.py — it's the single enforcement point for all outbound compliance logging.memory/DECISIONS.md and send only if you are confident the legal risk is Ezra's explicit call to make.