
One command installs verified Courier knowledge into Claude Code, Cursor, Codex, or whatever your team runs.
We rebuilt Courier Skills and it's available now. It's an agent skill that teaches your AI coding assistant how to use Courier: the right primitive for each use case, the exact payload shapes, and the mistakes that produce unhelpful errors.
npx skills add trycourier/courier-skills
No API key, no config file, no signup. A few seconds.
Your agent can write a week of integration code in an afternoon. What slows it down isn't the writing, it's the details it can't see: which payload shape an endpoint accepts, which field is required, what a vague error actually means. Each of those becomes a guess, and every guess costs a round trip.
We'd rather you moved at the speed your agent is capable of. That's the entire reason to package this knowledge where it can reach it.
Here's what the alternative looks like. One customer last week, mid-build:
Hey mate. I'm now building the journeys and preparing them for handover to my engineering team. I've been trying to build my journeys with old mate Claude via API, but we're hitting some errors. Could you please give me a steer here?
The steer they needed was a JSON shape. One node type kept rejecting their payload, and the error never changed:
We've tried roughly 15 different shapes and every single one comes back with that exact same generic "Invalid input" message, with no indication of what's actually expected.
Fifteen attempts, one error string. So they asked for help:
We have three journeys ready to go the moment we know the right shape. Happy to share full request/response logs or hop on a call if that's faster.
We wrote back suggesting they install the skill and start there, and said we'd take a deeper look either way.
Legend, I'll give that a go and let you know.
Then, minutes later:
Fixed, no need to follow up with your team. Thanks mate!
So what changed? Their agent's own account of it is the clearest explanation of what a skill is for.
The answer was in the skill's Journeys guide, in a Common Mistakes list at the top of the file, naming that exact bug verbatim:
Wrapping a single condition in an extra array (
[[...]]) or using non-string values
It found that with one grep, before making another API call. No guessing, no sixteenth attempt.
The reason it worked is ordering, not content. That warning sits in the first thirty lines of the file, under a heading an agent searches when something fails. You can't look up a concept you don't have a name for yet, so the fix has to be findable using the words you already have: the error you got, or the thing you tried. It was.
A support reply would have resolved one error. The guide resolved the category.
Keep talking to us anyway. Some problems need a human, and that customer's escalation told us two things we needed to know. But when the answer is a shape someone already worked out, waiting on a person is the wrong shape of solution.
35 reference files covering channels, Journeys, templates, preferences, routing, and delivery debugging. Your agent reads one or two per task, not the whole tree. Four things define the rebuild.
Failure modes come first. Every guide opens with Rules and Common Mistakes before any explanation or example. A stuck agent searches before it reads, so what unblocks it has to be in the first thirty lines, not paragraph forty.
Errors are indexed. Guides map the literal error strings the API returns back to their causes, so your agent can search with the string it already has instead of guessing what to call the problem.
It routes instead of dumping. SKILL.md is a table: one row per reference, keyed by what you're doing. This is why the new version is smaller than the old one. Attention is the scarce resource, not storage, so a sprawling reference makes your agent read more and find less.
It says when not to trust it. Caches go stale, so the skill ranks its own sources, starting with the installed SDK's type definitions because they're local and true for the version you actually have. If a live source contradicts the skill, the live source wins and the agent is told to say so rather than quietly pick one.
It also carries the rules you can't get wrong, as constraints rather than suggestions. Never batch or delay an OTP. Mask contact details in security alerts. Use idempotency keys where a duplicate would hurt.
Agent skills are a shared open format, so this isn't a Claude Code feature others imitate. The same command covers Claude Code, Cursor, Codex, GitHub Copilot, Gemini CLI, Windsurf, Amp, Zed, Cline, and OpenCode. The installer detects what you have and writes to the right place, or takes -a to target directly:
npx skills add trycourier/courier-skills -a claude-code -a cursor
A dozen of them now share .agents/skills/ as their project directory, so one committed install increasingly covers a whole team regardless of what each person runs.
Claude Code can install it as a plugin instead, which self-updates and ships the Courier docs MCP alongside it:
/plugin marketplace add trycourier/courier-skills/plugin install courier@courier-skills
They do different jobs and you want both.
An MCP server gives your agent capability: which operations exist and the ability to run them against your workspace. A skill gives your agent knowledge: what the payload looks like and which shapes fail.
The customer above had our MCP server connected the whole time. It offers a replace_journey tool, and that tool's nodes parameter is typed as an object with nothing declared and anything allowed. It could execute the call. It could never describe the payload, because a tool schema is a call signature, not a payload grammar. As their agent put it: MCP for doing, skills for knowing the shape.
Install globally for yourself, per-project for your team. Add -g for your user directory. Leave it off and it installs into the project, where you can commit it so teammates and CI agents get the same knowledge.
Let it route. Don't paste it. The skill is built to be read selectively. Dumping all 35 files into context buries the part that matters.
Give it the error verbatim, then name the move. The guides are indexed on those strings, so the raw response beats your paraphrase. "Check the Common Mistakes list before you try again" works well, because agents default to retrying variations, which is the wrong move against a generic error.
npx skills add trycourier/courier-skillsOr read the Courier Skills docs to see what's covered. Already have an older copy? Reinstall with the command above, or run /plugin update courier@courier-skills. The layout changed in this release, so a fresh install beats a merge.
Found a gap? PRs are welcome. The note you leave saves the next person an afternoon.
Courier Skills is an agent skill for the Courier notification platform: a set of markdown reference files that teach an AI coding agent how to send notifications, build Journeys, manage preferences, and debug delivery with Courier. It's free, MIT licensed, and open source.
Claude Code, Cursor, Codex, GitHub Copilot, Gemini CLI, Windsurf, Amp, Zed, Cline, OpenCode, Continue, Goose, Roo Code, Kiro, Junie, Antigravity, Warp, Droid, Replit, and Augment, among others. Agent skills are a shared open format, so npx skills add trycourier/courier-skills is the same command everywhere and the installer writes to whichever directory your agent expects.
Run npx skills add trycourier/courier-skills. Add -g to install into your user directory for every project, or leave it off to install into the current project so you can commit it for your team. Claude Code users can install it as a plugin instead with /plugin marketplace add trycourier/courier-skills followed by /plugin install courier@courier-skills.
No. The skill is a set of markdown files your agent reads locally. You'll need an API key to actually send notifications, but not to install or use the skill.
An MCP server gives your agent capability: which operations exist and the ability to run them against your workspace. An agent skill gives your agent knowledge: what the payload looks like and which shapes fail. A tool schema describes a call signature, not a payload grammar, so the two are complements rather than alternatives. The Claude Code plugin ships the Courier docs MCP alongside the skill.
Email, SMS, push, in-app inbox, Slack, Microsoft Teams, and WhatsApp, plus Journeys, templates and Elemental, preferences, routing strategies, brands, audiences, tenants, and delivery debugging through the CLI. 35 reference files in total.
Re-run the install command, or /plugin update courier@courier-skills if you installed the plugin.

How Apple's on-device AI works, and what it changes for your users
Apple's 2026 on-device models (AFM 3) are good enough to read, rank, and summarize everything that lands on your phone, locally and for free. Here's how they actually work, in plain terms, and how a model that reads every message before your users do changes what you should send.

You can build anything now. That's exactly why you shouldn't build this.
AI made building software cheap, so the temptation is to build everything. But owning infrastructure is a permanent draw on your scarcest resource, attention. The value lives at two ends, the systems everything runs on and the product only you can make; the move is to build less, buy the opinionated platform, and let an agent operate it.

I redid every cover image on our blog in an afternoon with Claude, Ideogram, and Contentful
I refreshed 81 blog covers, two years of posts, in a single afternoon. Claude Code orchestrated the pipeline, Ideogram generated the art, and the Contentful MCP moved every post in and out. Here is the stack, and why it only took an afternoon.
© 2026 Courier. All rights reserved.