From 3fb8bb625d05ccd2065855c495b9d143930f8e93 Mon Sep 17 00:00:00 2001 From: sebsalasenroute <132707139+sebsalasenroute@users.noreply.github.com> Date: Tue, 26 May 2026 11:13:50 -0700 Subject: [PATCH 1/3] chore: ignore skill install artifacts (#317) `npx skills add` writes .agents/, .claude/, and skills-lock.json into consumer projects. Ignore them in this source repo so the install can be run from inside the repo without polluting git status. https://claude.ai/code/session_01HStJ5nara1i4H6yrXrio2w Co-authored-by: Claude --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 9efae5c..d9e8a0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ # Dependencies node_modules/ +# Skill install artifacts (npx skills add) +.agents/ +.claude/ +skills-lock.json + # Environment variables / secrets .env .env.* From aa3cef76f97a1bdffc8edaf72415e5e66b40ebb0 Mon Sep 17 00:00:00 2001 From: Nicolay Date: Tue, 26 May 2026 21:14:36 +0300 Subject: [PATCH 2/3] docs: add Sequenzy integration (#312) Co-authored-by: Nic --- tools/REGISTRY.md | 4 +- tools/integrations/sequenzy.md | 306 +++++++++++++++++++++++++++++++++ 2 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 tools/integrations/sequenzy.md diff --git a/tools/REGISTRY.md b/tools/REGISTRY.md index cf418d1..d527f11 100644 --- a/tools/REGISTRY.md +++ b/tools/REGISTRY.md @@ -47,6 +47,7 @@ Quick reference for AI agents to discover tool capabilities and integration meth | customer-io | Email | ✓ | - | [✓](clis/customer-io.js) | ✓ | [customer-io.md](integrations/customer-io.md) | | sendgrid | Email | ✓ | - | [✓](clis/sendgrid.js) | ✓ | [sendgrid.md](integrations/sendgrid.md) | | resend | Email | ✓ | ✓ | [✓](clis/resend.js) | ✓ | [resend.md](integrations/resend.md) | +| sequenzy | Email | ✓ | ✓ | ✓ | - | [sequenzy.md](integrations/sequenzy.md) | | nitrosend | Email | ✓ | ✓ | - | - | [nitrosend.md](integrations/nitrosend.md) | | kit | Email | ✓ | - | [✓](clis/kit.js) | ✓ | [kit.md](integrations/kit.md) | | beehiiv | Newsletter | ✓ | - | [✓](clis/beehiiv.js) | - | [beehiiv.md](integrations/beehiiv.md) | @@ -185,6 +186,7 @@ Email marketing, transactional email, and automation platforms. | **customer-io** | Behavior-based messaging | - | | **sendgrid** | Transactional email at scale | - | | **resend** | Developer-friendly transactional | ✓ | +| **sequenzy** | Lifecycle email, sequences, transactional email | ✓ | | **kit** | Creator/newsletter focused | - | | **beehiiv** | Newsletter platform | - | | **klaviyo** | E-commerce email + SMS | - | @@ -192,7 +194,7 @@ Email marketing, transactional email, and automation platforms. | **brevo** | Email + SMS, popular in EU | - | | **activecampaign** | Email automation + CRM | - | -**Agent recommendation**: Resend for transactional (dev-friendly). Postmark for deliverability. Customer.io for advanced automation. Kit for creators. Beehiiv for newsletters. Klaviyo for e-commerce email/SMS. ActiveCampaign for email + CRM combo. +**Agent recommendation**: Resend for transactional (dev-friendly). Sequenzy for lifecycle email, sequences, and agent-driven email marketing. Postmark for deliverability. Customer.io for advanced automation. Kit for creators. Beehiiv for newsletters. Klaviyo for e-commerce email/SMS. ActiveCampaign for email + CRM combo. ### SMS / Messaging diff --git a/tools/integrations/sequenzy.md b/tools/integrations/sequenzy.md new file mode 100644 index 0000000..fcf7695 --- /dev/null +++ b/tools/integrations/sequenzy.md @@ -0,0 +1,306 @@ +# Sequenzy + +Email marketing platform for lifecycle campaigns, automation sequences, subscriber management, transactional email, and analytics. + +## Capabilities + +| Integration | Available | Notes | +|-------------|-----------|-------| +| API | ✓ | REST API for subscribers, tags, events, campaigns, sequences, templates, transactional email, analytics, and webhooks | +| MCP | ✓ | `@sequenzy/mcp` stdio server for agent clients | +| CLI | ✓ | `@sequenzy/cli` for subscriber operations, transactional sends, and stats | +| SDK | - | Use the REST API directly | + +## Authentication + +- **Type**: API Key +- **Header**: `Authorization: Bearer ***` +- **Base URL**: `https://api.sequenzy.com/api/v1` +- **Legacy base URL**: `https://api.sequenzy.com/v1` +- **Environment variable**: `SEQUENZY_API_KEY` + +## MCP + +### Quick setup + +```bash +npx @sequenzy/setup +``` + +The setup wizard logs in, creates a personal API key, and configures supported MCP clients when possible. + +### Manual MCP server config + +```json +{ + "mcpServers": { + "sequenzy": { + "command": "npx", + "args": ["-y", "@sequenzy/mcp"], + "env": { + "SEQUENZY_API_KEY": "seq_user_your_key_here" + } + } + } +} +``` + +## CLI + +### Install + +```bash +# Using npx +npx sequenzy --help + +# Or install globally +npm install -g @sequenzy/cli +``` + +### Login + +```bash +sequenzy login +sequenzy whoami +``` + +### Common commands + +```bash +# Subscribers +sequenzy subscribers list +sequenzy subscribers list --tag vip +sequenzy subscribers add user@example.com --tag premium --attr plan=pro +sequenzy subscribers get user@example.com +sequenzy subscribers remove user@example.com + +# Transactional email +sequenzy send user@example.com --template welcome --var name=John +sequenzy send user@example.com --subject "Hello" --html "

Hi!

" + +# Analytics +sequenzy stats +sequenzy stats --period 30d +sequenzy stats --campaign camp_abc123 +sequenzy stats --sequence seq_xyz789 +``` + +## Common Agent Operations + +### Get account + +```bash +GET https://api.sequenzy.com/api/v1/account + +Authorization: Bearer *** +``` + +### List subscribers + +```bash +GET https://api.sequenzy.com/api/v1/subscribers?page=1&limit=20&status=active&query=john&tags=customer,vip + +Authorization: Bearer *** +``` + +### Create or update subscriber + +```bash +POST https://api.sequenzy.com/api/v1/subscribers + +Authorization: Bearer *** +Content-Type: application/json + +{ + "email": "user@example.com", + "firstName": "John", + "lastName": "Doe", + "tags": ["customer", "newsletter"], + "customAttributes": { + "plan": "pro" + } +} +``` + +### Add tag to subscriber + +```bash +POST https://api.sequenzy.com/api/v1/subscribers/tags + +Authorization: Bearer *** +Content-Type: application/json + +{ + "email": "user@example.com", + "tag": "vip" +} +``` + +### Trigger event for subscriber + +```bash +POST https://api.sequenzy.com/api/v1/subscribers/events + +Authorization: Bearer *** +Content-Type: application/json + +{ + "email": "user@example.com", + "event": "trial_started", + "properties": { + "plan": "pro" + } +} +``` + +### List campaigns + +```bash +GET https://api.sequenzy.com/api/v1/campaigns + +Authorization: Bearer *** +``` + +### Create draft campaign + +Create a draft campaign and linked email. A sender profile must already be configured. + +```bash +POST https://api.sequenzy.com/api/v1/campaigns + +Authorization: Bearer *** +Content-Type: application/json + +{ + "name": "April Launch", + "subject": "A quick update", + "labels": ["launch"], + "html": "

Hello there!

" +} +``` + +### Send campaign test + +```bash +POST https://api.sequenzy.com/api/v1/campaigns/{campaignId}/test + +Authorization: Bearer *** +Content-Type: application/json + +{ + "to": "reviewer@example.com" +} +``` + +### Schedule campaign + +```bash +POST https://api.sequenzy.com/api/v1/campaigns/{campaignId}/schedule + +Authorization: Bearer *** +Content-Type: application/json + +{ + "scheduledAt": "2026-05-20T15:00:00Z" +} +``` + +### List sequences + +```bash +GET https://api.sequenzy.com/api/v1/sequences + +Authorization: Bearer *** +``` + +### Enable or disable sequence + +```bash +POST https://api.sequenzy.com/api/v1/sequences/{sequenceId}/enable +POST https://api.sequenzy.com/api/v1/sequences/{sequenceId}/disable + +Authorization: Bearer *** +``` + +### Send transactional email + +Send via a saved template slug or by passing direct subject/body content. + +```bash +POST https://api.sequenzy.com/api/v1/transactional/send + +Authorization: Bearer *** +Content-Type: application/json + +{ + "to": "user@example.com", + "slug": "welcome", + "variables": { + "name": "John" + }, + "subscriberExternalId": "user_123" +} +``` + +### Get metrics + +```bash +GET https://api.sequenzy.com/api/v1/metrics +GET https://api.sequenzy.com/api/v1/metrics/campaigns/{campaignId} +GET https://api.sequenzy.com/api/v1/metrics/sequences/{sequenceId} +GET https://api.sequenzy.com/api/v1/metrics/recipients + +Authorization: Bearer *** +``` + +### Webhooks + +```bash +GET https://api.sequenzy.com/api/v1/webhooks +POST https://api.sequenzy.com/api/v1/webhooks +PATCH https://api.sequenzy.com/api/v1/webhooks/{id} +DELETE https://api.sequenzy.com/api/v1/webhooks/{id} +POST https://api.sequenzy.com/api/v1/webhooks/{id}/test + +Authorization: Bearer *** +``` + +## Key Concepts + +- **Subscribers** - Contacts with email, status, tags, custom attributes, and optional external IDs +- **Tags** - Lightweight labels used for targeting and segmentation +- **Segments** - Dynamic subscriber groups based on attributes or engagement +- **Campaigns** - Draftable and schedulable one-time marketing sends +- **Sequences** - Automated lifecycle flows that can be enabled, disabled, and measured +- **Templates** - Reusable email content for transactional and marketing workflows +- **Transactional emails** - Single-recipient or small batch sends triggered by product events +- **Engagement metrics** - Sent, delivered, bounced, opened, clicked, unsubscribed, and derived rates + +## Safety Notes + +- Inspect account, sender profile, audience, and target objects before mutating anything. +- Prefer creating drafts and sending tests before scheduling or enabling live delivery. +- Do not schedule a campaign, enable a sequence, or send a live transactional email without explicit approval. +- Use recipient status, bounce, complaint, and unsubscribe data to avoid sending to suppressed contacts. +- Use direct API calls for high-volume or scripted operations; use MCP or CLI for agent-driven interactive workflows. + +## When to Use + +- Managing subscribers, tags, lists, and segments +- Drafting and scheduling lifecycle campaigns +- Building onboarding, activation, retention, or winback sequences +- Sending product-triggered transactional emails +- Reviewing campaign, sequence, and recipient engagement metrics +- Connecting AI agents to email marketing operations through MCP + +## Rate Limits + +- Check the latest Sequenzy API documentation for plan-specific limits. +- Use pagination for list endpoints; subscriber lists support `page` and `limit` with a maximum limit of 100. + +## Relevant Skills + +- emails +- onboarding +- analytics +- launch From 13fa45674ce281535ec3a91f97517a9855bf765d Mon Sep 17 00:00:00 2001 From: erionjuniordeandrade-a11y Date: Tue, 26 May 2026 15:15:19 -0300 Subject: [PATCH 3/3] fix(ads): add Google RSA output spec with hard limits and ordering (#318) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ads skill output was missing structural enforcement for Google RSA platform limits, causing AI agents to generate non-compliant ads: - variable headline/description counts (not exactly 15/4) - character lengths exceeded (>30 chars headlines, >90 chars descriptions) - missing negative keyword lists - missing ad group structure labels This commit adds a 'Google RSA Output Spec' section that: - Enforces 15 headlines (≤30 chars) / 4 descriptions (≤90 chars) per RSA - Requires explicit ad group structure, sitelinks (≥4), callouts (≥4) - Requires labeled negative keyword list (≥8 entries) - Specifies mandatory output ORDER (Negatives + sitelinks before RSAs) so they survive output truncation in long generations - Adds CFM (Brazilian medical regulation) forbidden-term list for pt-BR medical practice contexts - Adds a pre-response self-check checklist Validated on a marketing-eval harness across 3 medical sites: scores moved from 47/47/20 (all critical-fail) to 100/100/87 (all critical-pass) after applying the spec. Co-authored-by: Erion De Andrade <231011322+erionjuniordeandrade-a11y@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) --- skills/ads/SKILL.md | 91 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/skills/ads/SKILL.md b/skills/ads/SKILL.md index 7d9c4e6..06988f0 100644 --- a/skills/ads/SKILL.md +++ b/skills/ads/SKILL.md @@ -257,6 +257,97 @@ Before launching campaigns, ensure proper tracking and account setup. --- +## Google RSA Output Spec (mandatory when generating RSAs) + +When the user requests Google Ads RSAs (Responsive Search Ads), output MUST comply with these platform limits and structural requirements. Do not output any RSA that violates them. + +### Hard limits per RSA (enforce before responding) + +- **Headlines:** exactly **15** per RSA, each **≤ 30 characters** (count characters, including spaces). Render as `1. ... (NN chars)` so the reader can verify. +- **Descriptions:** exactly **4** per RSA, each **≤ 90 characters**. +- **Paths:** up to 2 path fields, each **≤ 15 characters**. +- **Final URL:** present, https. +- **Pinning:** state any pinned positions explicitly. Default = unpinned unless user asks. +- **Per-account guardrail:** Google enforces **3 RSAs max per ad group**. When the user asks for >3, group them by ad group. + +### Required sidecar artifacts (always include with RSA request) + +1. **Ad group structure**, labeled `Ad group structure:` — list each ad group with its theme, target keywords (match types), and which RSAs map to it. +2. **Negative keyword list**, labeled `Negative keywords:` — minimum **8** entries, group-level vs campaign-level called out. +3. **Sitelinks** (≥ 4), **Callouts** (≥ 4 ≤25 chars), **Structured snippets** if relevant. + +### Medical / CFM compliance (when product context indicates pt-BR medical practice) + +If `.agents/product-marketing.md` indicates a Brazilian medical practice (CFM-regulated), the following terms are **forbidden** in headlines, descriptions, sitelinks, and callouts: + +- Superlatives: `#1`, `melhor`, `o melhor`, `melhor do brasil`, `top`, `referência` +- Outcome promises: `garantido`, `garantia`, `cura`, `cura definitiva`, `100%`, `resultado garantido`, `livre da dor` +- Comparative claims vs other doctors/clinics + +Use neutral framing: `atendimento`, `consulta`, `avaliação`, `segunda opinião`, `agende sua consulta`, `tire suas dúvidas`. Geo modifier (`Porto Alegre`, `POA`, `Zona Sul POA`) required where the prompt specifies a region. + +### Output ORDER (mandatory — emit in this order to avoid truncation) + +1. **Ad group structure** (short) +2. **Negative keywords** (≥8, MANDATORY — emit BEFORE RSAs so it isn't dropped if output runs long) +3. **Sitelinks** (≥4) +4. **Callouts** (≥4) +5. **RSA1, RSA2, RSA3** (largest section, last — safe to truncate gracefully) + +### Output template (mandatory shape) + +``` +Ad group structure: +- AG1 [theme]: keywords (match types) → RSA1, RSA2 +- AG2 [theme]: ... + +Negative keywords: + Campaign-level: + - + - + (≥4 here) + Ad-group level: + - AG1: , + - AG2: , + (≥4 more here — TOTAL ≥8 entries) + +Sitelinks (≥4): + - | <desc1 (≤35)> | <desc2 (≤35)> | URL + +Callouts (≥4, each ≤25 chars): + - <callout> + +RSA1 — [ad group name] + Final URL: https://... + Path1: ... Path2: ... + Headlines (15, each ≤30 chars): + 1. <headline> (NN chars) + ... + 15. <headline> (NN chars) + Descriptions (4, each ≤90 chars): + 1. <description> (NN chars) + ... + 4. <description> (NN chars) + Pinning: H1=none; H2=none; ... (or explicit pins) + +RSA2 — ... +RSA3 — ... +``` + +### Self-check before responding + +Before sending the output, run this checklist mentally: + +- [ ] Each RSA has exactly 15 headlines, exactly 4 descriptions. +- [ ] Every headline is ≤30 chars; every description is ≤90 chars. Character counts printed. +- [ ] Negative keyword list labeled and ≥8 entries. +- [ ] Ad group structure labeled. +- [ ] If medical (CFM): no forbidden superlative/outcome words; geo modifier present where required; language is pt-BR. + +If any check fails, rewrite before responding. Do not ship partial RSAs. + +--- + ## Common Mistakes to Avoid ### Strategy