Check that outbound campaigns carry a working unsubscribe path and that opt outs land somewhere that actually stops the next send...
An unsubscribe link that renders is not an unsubscribe path. The path has three parts, and the one that breaks is always the third: the link, the confirmation, and the write that reaches the suppression layer before the next scheduled send. This skill tests all three end to end rather than checking that the footer exists.
Check these before you run the skill. Nothing outside this table is needed.
| Requirement | Needed | Used for | What it costs you |
|---|---|---|---|
| Access to your sending platform (Instantly, Smartlead or similar) | Required | The campaign and its unsubscribe path | None beyond your existing sending plan. |
| Seed inboxes at Gmail, Microsoft and Yahoo that you control, or an inbox placement test service | Required | The end to end opt out test | Free with your own seed inboxes; a placement test service bills you directly. |
Missing a required item? Stop before the live steps and tell the user which item is missing and what it is for. Do not run the step without it and do not present an empty result as an answer. Keys are read from the environment at run time and are never written into a file, a prompt or the output.
Before doing anything else, read whichever of these exist at the project root and use them instead of asking the user to repeat themselves:
BRAND.mdIf none exist, do the work from what the user gives you, then offer to write the missing file so the next skill in the pack starts warmer.
This skill needs no live data tool. It works from the files, exports and answers you give it, so it runs the same in any agent with no setup.
scripts/check-output.py before you return it.Stop and ask before sending a test email to any address you do not own. Show exactly what will be sent or written, to whom or to which records, and how many. Proceed only on an explicit yes from the user in this conversation. A yes for one batch does not cover the next one.
A six row check table with evidence per row, then a single compliant or not compliant verdict, then the fixes.
Save the output to a file and run python3 scripts/check-output.py <file>. The
contract it checks is scripts/output-contract.json.
COMPLETE: return the output.INCOMPLETE: do not present the output as finished. Fill what you can, run
the check again, and if parts stay missing, return the output under the heading
Incomplete with every reason the check printed.suppression-architectreply-classifier-routerwave-launch-precheckShips in the deliverability, cold-email-system packs.