Agent skill

Customerio CI Integration

by jeremylongshore in jeremylongshore/tons-of-skills-marketplace

Configure Customer.io CI/CD integration with automated testing.

MITAuto-check passedDevOps & Cloud

Install Customerio CI Integration

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill customerio-ci-integration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace customerio-ci-integration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/customerio-ci-integration .claude/skills/customerio-ci-integration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
customerio-ci-integration
GitHub stars
2.8k
Token cost
~2.2k tokens
SKILL.md length
284 words
Files
2 (incl. references)
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Configure Customer.io CI/CD integration with automated testing.

  • Works in 6 steps: GitHub Actions Workflow → Test Fixtures and Helpers → Integration Test Suite → …
  • Setting up GitHub Actions
  • SKILL.md covers Output, Examples, Overview and Prerequisites, plus 5 more sections
  • Calls gh and npx; needs CUSTOMERIO_TRACK_API_KEY and CIO_TEST_TRACK_API_KEY

What it does

Customerio CI Integration is an agent skill from jeremylongshore/tons-of-skills-marketplace. Configure Customer.io CI/CD integration with automated testing. Use when setting up GitHub Actions, integration test suites, or pre-commit validation for Customer.io code. Trigger: "customer.io ci", "customer.io github actions", "customer.io pipeline", "customer.io automated testing".

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/implementation-guide.md`). Compatibility notes: Designed for Claude Code

It sits in DevOps & Cloud, covering CI/CD and Integration testing. It works with GitHub Actions. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • Setting up GitHub Actions
  • Integration test suites
  • Pre-commit validation for Customer.io code

Example prompts

  • “customer.io ci”
  • “customer.io github actions”
  • “customer.io pipeline”
  • “/customerio-ci-integration”

Requirements

  • Node.js
  • A credential in CUSTOMERIO_TRACK_API_KEY
  • A credential in CIO_TEST_TRACK_API_KEY
  • Compatibility (from SKILL.md): Designed for Claude Code
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash(npm:*), Bash(gh:*), Glob, Grep

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. GitHub Actions Workflow
  2. Test Fixtures and Helpers
  3. Integration Test Suite
  4. Test User Cleanup Script
  5. GitHub Secrets Setup
  6. Pre-commit Hook

What it can do on your machine

Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash(npm:*)
    • Bash(gh:*)
    • Glob
    • Grep

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • docs.github.com
    • vitest.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CUSTOMERIO_TRACK_API_KEY
    • CIO_TEST_TRACK_API_KEY
    • CIO_TEST_APP_API_KEY
    • CUSTOMERIO_APP_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Designed for Claude Code

    From compatibility in the SKILL.md frontmatter.

Context cost

Customerio CI Integration loads about 2.2k tokens when it runs, and up to ~4.1k if it reads all its reference files. Until then it costs about 78 tokens; SKILL.md has 284 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 284 words, ~2,175 tokens.

Download SKILL.mdSave it as .claude/skills/customerio-ci-integration/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
customerio-ci-integration
description
Configure Customer.io CI/CD integration with automated testing. Use when setting up GitHub Actions, integration test suites, or pre-commit validation for Customer.io code. Trigger: "customer.io ci", "customer.io github actions", "customer.io pipeline", "customer.io automated testing".
allowed-tools
Read, Write, Edit, Bash(npm:*), Bash(gh:*), Glob, Grep
compatibility
Designed for Claude Code
version
1.14.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
saas, customer-io, ci-cd, testing, github-actions

Customer.io CI Integration

Output

  • A credential-free pull-request lane for schema/template/unit checks and a trusted scoped lane for optional integration tests.
  • A redacted CI receipt with validation results and a safe failure/retry procedure.

Examples

Run event-schema and template tests on every pull request using fixtures, then execute a single synthetic integration event only from a protected branch with a development workspace secret. If a live check fails, retain redacted status and back off; never expose workspace credentials to forked code or bypass protected checks.

Overview

Set up CI/CD pipelines for Customer.io integrations: GitHub Actions workflow with unit + integration tests, test fixtures with automatic cleanup, pre-commit hooks, and environment-specific credential management.

Prerequisites

  • GitHub repository with Node.js project
  • Separate Customer.io workspace for CI testing (do NOT use production)
  • GitHub Actions secrets configured

Instructions

Step 1: GitHub Actions Workflow
yaml
# .github/workflows/customerio-tests.yml
name: Customer.io Integration Tests
on:
  push:
    paths:
      - "lib/customerio-*.ts"
      - "services/customerio-*.ts"
      - "tests/customerio*"
  pull_request:
    paths:
      - "lib/customerio-*.ts"
      - "services/customerio-*.ts"

env:
  CUSTOMERIO_SITE_ID: ${{ secrets.CIO_TEST_SITE_ID }}
  CUSTOMERIO_TRACK_API_KEY: ${{ secrets.CIO_TEST_TRACK_API_KEY }}
  CUSTOMERIO_APP_API_KEY: ${{ secrets.CIO_TEST_APP_API_KEY }}
  CUSTOMERIO_REGION: us

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - run: npx vitest run tests/customerio --reporter=verbose
        env:
          CUSTOMERIO_DRY_RUN: "true"  # Unit tests use mocks

  integration-tests:
    runs-on: ubuntu-latest
    needs: unit-tests  # Only run if unit tests pass
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - run: npm ci
      - name: Validate credentials
        run: |
          if [ -z "$CUSTOMERIO_SITE_ID" ]; then
            echo "::warning::CIO credentials not configured — skipping integration tests"
            exit 0
          fi
      - name: Run integration tests
        run: npx vitest run tests/customerio.integration --reporter=verbose
      - name: Cleanup test users
        if: always()
        run: npx tsx scripts/cio-cleanup-test-users.ts
Step 2: Test Fixtures and Helpers
typescript
// tests/helpers/cio-test-utils.ts
import { TrackClient, RegionUS } from "customerio-node";

const TEST_RUN_ID = `ci-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
const createdUsers: string[] = [];

export function getCioTestClient(): TrackClient {
  return new TrackClient(
    process.env.CUSTOMERIO_SITE_ID!,
    process.env.CUSTOMERIO_TRACK_API_KEY!,
    { region: RegionUS }
  );
}

export function testUserId(label: string): string {
  const id = `${TEST_RUN_ID}-${label}`;
  createdUsers.push(id);
  return id;
}

export async function cleanupTestUsers(client: TrackClient): Promise<void> {
  console.log(`Cleaning up ${createdUsers.length} test users...`);
  for (const userId of createdUsers) {
    try {
      await client.suppress(userId);
      await client.destroy(userId);
    } catch {
      // Ignore cleanup errors
    }
  }
  createdUsers.length = 0;
}
Step 3: Integration Test Suite
typescript
// tests/customerio.integration.test.ts
import { describe, it, expect, afterAll } from "vitest";
import { getCioTestClient, testUserId, cleanupTestUsers } from "./helpers/cio-test-utils";

const cio = getCioTestClient();

describe("Customer.io Integration", () => {
  afterAll(async () => {
    await cleanupTestUsers(cio);
  });

  it("should identify a new user", async () => {
    const userId = testUserId("identify-new");
    await expect(
      cio.identify(userId, {
        email: `${userId}@test.example.com`,
        created_at: Math.floor(Date.now() / 1000),
      })
    ).resolves.not.toThrow();
  });

  it("should update an existing user", async () => {
    const userId = testUserId("identify-update");
    await cio.identify(userId, { email: `${userId}@test.example.com` });
    await expect(
      cio.identify(userId, { plan: "pro", updated: true })
    ).resolves.not.toThrow();
  });

  it("should track an event on a user", async () => {
    const userId = testUserId("track-event");
    await cio.identify(userId, { email: `${userId}@test.example.com` });
    await expect(
      cio.track(userId, {
        name: "ci_test_event",
        data: { test_run: true, timestamp: Date.now() },
      })
    ).resolves.not.toThrow();
  });

  it("should track an anonymous event", async () => {
    await expect(
      cio.trackAnonymous({
        anonymous_id: testUserId("anon"),
        name: "ci_anonymous_test",
        data: { page: "/test" },
      })
    ).resolves.not.toThrow();
  });

  it("should suppress a user", async () => {
    const userId = testUserId("suppress");
    await cio.identify(userId, { email: `${userId}@test.example.com` });
    await expect(cio.suppress(userId)).resolves.not.toThrow();
  });

  it("should reject invalid credentials", async () => {
    const badClient = new (await import("customerio-node")).TrackClient(
      "invalid", "invalid", { region: (await import("customerio-node")).RegionUS }
    );
    await expect(
      badClient.identify("x", { email: "x@test.com" })
    ).rejects.toThrow();
  });
});
Step 4: Test User Cleanup Script
typescript
// scripts/cio-cleanup-test-users.ts
import { TrackClient, RegionUS } from "customerio-node";

const cio = new TrackClient(
  process.env.CUSTOMERIO_SITE_ID!,
  process.env.CUSTOMERIO_TRACK_API_KEY!,
  { region: RegionUS }
);

// Clean up any test users from failed CI runs
// This uses the ci- prefix convention from testUserId()
async function cleanup() {
  console.log("Cleaning up CI test users...");
  console.log("Note: Customer.io doesn't have a list/search API via Track API.");
  console.log("Cleanup relies on suppress+destroy for known test user IDs.");
  console.log("For bulk cleanup, use the Customer.io dashboard People filter.");
}

cleanup();
Step 5: GitHub Secrets Setup
bash
# Set up CI secrets (use a dedicated test workspace — NEVER production)
gh secret set CIO_TEST_SITE_ID --body "your-test-site-id"
gh secret set CIO_TEST_TRACK_API_KEY --body "your-test-track-key"
gh secret set CIO_TEST_APP_API_KEY --body "your-test-app-key"
Step 6: Pre-commit Hook
bash
# .husky/pre-commit (or lint-staged config)
npx lint-staged
json
// package.json
{
  "lint-staged": {
    "lib/customerio-*.ts": ["eslint --fix", "vitest related --run"],
    "services/customerio-*.ts": ["eslint --fix", "vitest related --run"]
  }
}

CI Best Practices

PracticeRationale
Dedicated test workspacePrevents CI from polluting dev/staging data
Unique test user IDsPrevents collisions between parallel CI runs
Always cleanup in afterAllPrevents accumulating stale test profiles
Rate limit awarenessAdd small delays between batched API calls in CI
Skip integration tests if no credsPRs from forks won't have secrets

Error Handling

IssueSolution
Secrets not available in PRFork PRs don't get secrets — skip integration tests gracefully
Test user pollutionUse ${TEST_RUN_ID} prefix, cleanup in afterAll
Rate limiting in CIKeep integration test count under 50 API calls
Flaky network failuresAdd retry logic to integration tests

Resources

Next Steps

After CI setup, proceed to customerio-deploy-pipeline for production deployment.

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/.curated/customerio-ci-integration of jeremylongshore/tons-of-skills-marketplace.

  • SKILL.md
  • references/implementation-guide.md

Open the folder on GitHubat commit cfae287

Compare with similar skills

Customerio CI Integration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Customerio CI Integration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Customerio CI Integration this skilljeremylongshore/tons-of-skills-marketplace2.8k—~2.2kAutomated safety check: PassMIT
Mirrord CImetalbear-co/mirrord5.4k1 repos~3.2kAutomated safety check: WarnMIT
CI Triagecanton-network/splice117—~1.4kAutomated safety check: PassApache-2.0
Analyze Test Runmicrosoft/GitHub-Copilot-for-Azure255—~2.5kAutomated safety check: PassMIT
CI Failure Triage and RepairChachamaru127/claude-code-harness3.2k1 repos~1.1kAutomated safety check: NotesMIT
CI Watchdoglatitude-dev/latitude-llm4.7k—~1.6kAutomated safety check: PassMIT

Similar skills

  • Mirrord CI

    metalbear-co/mirrord

    Help users set up mirrord in CI pipelines for testing against real Kubernetes environments.

    5.4k GitHub starsUsed in 1 repo~3.2k tokens
    DevOps & CloudAuto-check: warnings
  • CI Triage

    canton-network/splice

    Triage a failed splice GitHub Actions job (cn-test-failures ref) into a reproducible evidence packet - fetch job log and artifact, isolate the flagged lines, check the known flake families for…

    117 GitHub stars~1.4k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Analyze Test Run

    microsoft/GitHub-Copilot-for-Azure

    Official

    Analyze a GitHub Actions integration test run and produce a skill invocation report with failure root-cause issues.

    255 GitHub stars~2.5k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • CI Failure Triage and Repair

    Chachamaru127/claude-code-harness

    Diagnoses failing CI pipelines and tests, deciding first whether the test or the implementation is at fault, and hands hard cases to a dedicated fixer subagent.

    3.2k GitHub starsUsed in 1 repo~1.1k tokens
    DevOps & CloudAuto-check: notes
  • CI Watchdog

    latitude-dev/latitude-llm

    Continuously monitor GitHub PR CI checks and automatically fix failures until all checks pass.

    4.7k GitHub stars~1.6k tokensUpdated 2 days ago
    DevOps & CloudAuto-check passed
  • Official

    Investigates a failing GitHub Actions run or job for Megatron-LM, finds the root cause plus the PR and test author involved, and files a structured bug issue.

    18k GitHub stars~1.6k tokensUpdated today
    DevOps & CloudAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Adapting Transfer Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Agent Context Loader

    jeremylongshore/tons-of-skills-marketplace

    Execute proactive auto-loading: automatically detects and loads agents.md files.

    2.8k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Aggregating Performance Metrics

    jeremylongshore/tons-of-skills-marketplace

    Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.

    2.8k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Analyzing Capacity Planning

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.

    2.8k GitHub stars~947 tokensUpdated today
    Auto-check passed
  • Analyzing Database Indexes

    jeremylongshore/tons-of-skills-marketplace

    Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.

    2.8k GitHub stars~2k tokensUpdated today
    Auto-check passed

Works with

Questions about Customerio CI Integration

What does Customerio CI Integration do?

Configure Customer.io CI/CD integration with automated testing. Customerio CI Integration is an agent skill from jeremylongshore/tons-of-skills-marketplace.io CI/CD integration with automated testing.

When should I use Customerio CI Integration?

Customerio CI Integration fits situations like: setting up GitHub Actions; integration test suites; pre-commit validation for Customer.io code.

How do I install Customerio CI Integration in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill customerio-ci-integration -a claude-code`. Or copy the skill folder (skills/.curated/customerio-ci-integration in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/customerio-ci-integration in your project. Claude Code loads it when a task matches its description.

How do I install Customerio CI Integration in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill customerio-ci-integration -a codex`. Or copy the skill folder (skills/.curated/customerio-ci-integration in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/customerio-ci-integration in your project. Codex loads it when a task matches its description.

Can I use Customerio CI Integration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill customerio-ci-integration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/customerio-ci-integration, .gemini/skills/customerio-ci-integration, .github/skills/customerio-ci-integration and .opencode/skills/customerio-ci-integration in your project.

What does Customerio CI Integration need to run?

Going by SKILL.md and its folder, Customerio CI Integration needs the command-line tools its instructions call (gh and npx) and credentials named CUSTOMERIO_TRACK_API_KEY, CIO_TEST_TRACK_API_KEY, CIO_TEST_APP_API_KEY and CUSTOMERIO_APP_API_KEY. Our summary lists: Node.js; A credential in CUSTOMERIO_TRACK_API_KEY; A credential in CIO_TEST_TRACK_API_KEY. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(npm:*), Bash(gh:*), Glob, Grep. Compatibility (from SKILL.md): Designed for Claude Code.

Does Customerio CI Integration access the network?

SKILL.md names 2 domains. As links in the text: docs.github.com and vitest.dev. This is read from the text; nothing was executed.

Is Customerio CI Integration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Customerio CI Integration use?

Customerio CI Integration is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Customerio CI Integration use?

About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.9k tokens, read only when the agent opens those files.

What are the alternatives to Customerio CI Integration?

Skills that share tags, products or a category with Customerio CI Integration: Mirrord CI (metalbear-co/mirrord, 5.4k stars), CI Triage (canton-network/splice, 117 stars), Analyze Test Run (microsoft/GitHub-Copilot-for-Azure, 255 stars) and CI Failure Triage and Repair (Chachamaru127/claude-code-harness, 3.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Customerio CI Integration?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.