Skip to main content
Courier Skills is a public repository of structured guidance that AI coding agents use when building notifications. Install it once and your agent gets channel-specific rules, compliance constraints, reliability patterns, and code examples for the full Courier platform. Works with Cursor, Claude Code, Windsurf, Cline, and any AI tool that supports agent skills.

Installation

Available in all projects:
git clone https://github.com/trycourier/courier-skills.git ~/.cursor/skills/courier-skills

What Your Agent Learns

CategoryCoverage
7 ChannelsEmail, SMS, push, in-app inbox, Slack, Microsoft Teams, WhatsApp; each with deliverability rules, compliance requirements, and code examples
5 Transactional TypesAuthentication (OTP, password reset), orders, billing, appointments, account notifications; timing requirements, security rules, and templates
6 Growth TypesOnboarding, adoption, engagement, re-engagement, referral, campaigns; consent requirements, frequency limits, and exit conditions
10 Cross-Cutting GuidesMulti-channel routing, preferences, compliance (GDPR/TCPA/CAN-SPAM), reliability, batching, throttling, CLI usage, and reusable patterns

How It Works

The skill is organized around a routing file (SKILL.md) that agents read first. Based on the task at hand, it directs the agent to read only the 1-2 files relevant to that task. Each resource file follows a consistent structure:
  1. Quick Reference at the top with hard rules, common mistakes, and copy-paste templates
  2. Detailed guidance with explanations, examples, and edge cases
  3. Related links to other relevant files
This means agents read the minimum necessary context rather than loading the entire skill.

Example: agent building an OTP flow

  1. Agent reads SKILL.md, finds the routing table
  2. Routing table says: OTP/2FA -> read authentication.md + sms.md
  3. Agent reads those two files, gets: 6-digit codes, 5-10 min expiry, SMS primary with email fallback, TCPA rules, idempotency key pattern, rate limits
  4. Agent generates code that follows all constraints

Code Examples

The skill includes TypeScript, Python, CLI, and curl examples for key patterns:
# Send with idempotency (CLI)
courier send message \
  --message.to.user_id "user-123" \
  --message.template "ORDER_CONFIRMATION" \
  --message.data '{"orderId": "12345"}'
// Send with idempotency (TypeScript)
await courier.send({
  message: {
    to: { user_id: "user-123" },
    template: "ORDER_CONFIRMATION",
    data: { orderId: "12345" }
  }
}, {
  idempotencyKey: "order-confirmation-12345"
});
# Send with idempotency (Python)
client.send(
    message={
        "to": {"user_id": "user-123"},
        "template": "ORDER_CONFIRMATION",
        "data": {"orderId": "12345"},
    },
    idempotency_key="order-confirmation-12345",
)

Universal Rules

The skill enforces these constraints across all generated code:
  • Never send promotional content in transactional notifications
  • Never batch or delay OTP, password reset, or security alerts
  • Never send SMS without TCPA-compliant consent records
  • Always use idempotency keys for transactional sends
  • Always respect quiet hours (10pm-8am local) unless critical
  • Always use method: "single" unless the notification warrants all channels

What’s Next