Thanks to visit codestin.com
Credit goes to github.com

Skip to content

cognis-digital/dripcheck

Repository files navigation

DRIPCHECK

DRIPCHECK

Lint email sequences and drip campaigns for deliverability: SPF/DKIM/DMARC, link health, unsubscribe presence, and CAN-SPAM/GDPR compliance.

PyPI CI License: COCL 1.0 Suite

Part of the Cognis Neural Suite.

pip install cognis-dripcheck

dripcheck lint sequence.json   # → prioritized findings in seconds

🔎 Example output

Real, reproducible output from the tool — runs offline:

$ dripcheck-emit --version
dripcheck 0.7.9
$ dripcheck-emit --help
usage: dripcheck [-h] [--version] {lint} ...

Lint email drip sequences for deliverability and CAN-SPAM compliance (unsubscribe, physical address, spam triggers).

positional arguments:
  {lint}
    lint      Lint an email sequence file (or '-' for stdin).

options:
  -h, --help  show this help message and exit
  --version   show program's version number and exit

examples:
  dripcheck lint sequence.json
  dripcheck lint sequence.json --format json | jq .summary
  cat sequence.json | dripcheck lint -
  dripcheck lint sequence.json --strict

Blocks above are real dripcheck output — reproduce them from a clone.

Sample result format (illustrative values — run on your own data for real findings):

{
"Findings": [
    {
        "id": "1234567890",
        "title": "Suspicious Network Traffic",
        "description": "Potential malicious activity detected on port 443.",
        "created_by": "John Doe",
        "created_at": "2023-02-15T14:30:00Z"
    },
    {
        "id": "2345678901",
        "title": "Unusual Login Attempt",
        "description": "Failed login attempt from an unfamiliar IP address.",
        "created_by": "Jane Smith",
        "created_at": "2023-02-16T10:45:00Z"
    }
]
}

Usage — step by step

  1. Install the CLI:

    pip install dripcheck
  2. Lint an email sequence described in a JSON file (or - to read from stdin):

    dripcheck lint sequence.json
  3. Pipe a sequence in from another step:

    cat sequence.json | dripcheck lint -
  4. Read the output. Pick the format your workflow speaks — table (default), json, sarif (GitHub code-scanning), or csv:

    dripcheck lint sequence.json --format json  > drip.json
    dripcheck lint sequence.json --format sarif > drip.sarif   # upload to code-scanning
    dripcheck lint sequence.json --format csv   > drip.csv     # triage in a spreadsheet
  5. Wire it into CI — treat warnings as failures so deliverability regressions block release:

    dripcheck lint sequence.json --strict || exit 1
  6. Explore the demos. Each demos/<NN-name>/ folder pairs a real-format sequence.json with a SCENARIO.md (where the data came from, the exact command, and how to act on the findings):

    python -m dripcheck lint demos/02-clean-onboarding/sequence.json   # passes
    python -m dripcheck lint demos/03-cold-outreach-saas/sequence.json # fails
    Demo What it shows
    01-basic A small mixed cold/drip sequence with seeded problems
    02-clean-onboarding A fully compliant onboarding drip — the green baseline
    03-cold-outreach-saas B2B cold outreach: fake RE:/FWD:, missing footers
    04-promo-spam-traps A promo that maxes out spam-trigger signals
    05-duplicate-subjects Clean emails but a sequence-level duplicate-subject smell (--strict)
    06-html-link-heavy HTML link-roundup parsing + too-many-links / low-text-ratio
    07-gdpr-eu-newsletter EU/GDPR send with a recognised non-US postal address
    08-stdin-ci-gate Piping from stdin and using the exit code as a CI gate
    09-broken-edge-cases Missing subject, empty body, oversized subject

Contents

Why dripcheck?

A pre-send CI gate — break the build if a campaign is missing an unsubscribe link or trips a spam trigger, before it ever hits a prospect's inbox.

dripcheck is single-purpose, scriptable, and self-hostable: point it at a target, get prioritized results in the format your workflow already speaks (table · JSON · SARIF), gate CI on it, and let agents drive it over MCP.

Features

  • ✅ CAN-SPAM checks: unsubscribe/opt-out mechanism + physical postal address

  • ✅ International address detection (US City, ST ZIP and EU/FR/DE/ES/IT footers)

  • ✅ Spam-trigger word density (subject + body), ALL-CAPS / !!!·$$$ punctuation

  • ✅ Deceptive RE:/FWD: subjects, missing/oversized subjects, empty bodies

  • ✅ HTML-aware link checks: too-many-links + low text-to-link ratio

  • ✅ Sequence-level checks (e.g. duplicate subjects across the drip)

  • ✅ Output as table · JSON · SARIF · CSV; --strict CI gate via exit code

  • ✅ Runs on Linux/macOS/Windows · Docker · devcontainer

  • ✅ Ports in Python, JavaScript, Go, and Rust (ports/)

Quick start

pip install cognis-dripcheck

dripcheck --version

dripcheck lint sequence.json                  # lint a drip sequence

dripcheck lint sequence.json --format json    # machine-readable

dripcheck lint sequence.json --format sarif   # GitHub code-scanning

dripcheck lint sequence.json --strict         # CI gate (non-zero exit)

Example


$ dripcheck lint demos/03-cold-outreach-saas/sequence.json

DRIPCHECK report
============================================================

[cold-1] quick question about your data pipeline
  ERROR no-unsubscribe: No unsubscribe/opt-out mechanism found (CAN-SPAM 15 U.S.C. 7704).
  ERROR no-physical-address: No valid physical postal address detected (CAN-SPAM requires one).

[cold-2] RE: quick question about your data pipeline
  WARN  deceptive-subject: Subject starts with RE:/FW: which can be deceptive for a cold send.
  ERROR no-unsubscribe: No unsubscribe/opt-out mechanism found (CAN-SPAM 15 U.S.C. 7704).
  ...

------------------------------------------------------------
emails=3  errors=5  warnings=2  FAIL

Architecture

flowchart LR
  IN[target / export] --> P[dripcheck<br/>collect + correlate]
  P --> OUT[ranked findings]
Loading

Use it from any AI stack

dripcheck is interoperable with every popular way of using AI:

  • MCP serverdripcheck mcp (Claude Desktop, Cursor, Cognis.Studio, uncensored-fleet)

  • OpenAI-compatible / JSON — pipe dripcheck lint sequence.json --format json into any agent or LLM

  • LangChain · CrewAI · AutoGen · LlamaIndex — wrap the CLI/JSON as a tool in one line

  • CI / scripts — exit codes + SARIF for non-AI pipelines

How it compares

| | Cognis dripcheck | mail-tester.com + textlint, echoing GlockApps |

|---|:---:|:---:|

| Self-hostable, no account | ✅ | varies |

| Single command, zero config | ✅ | ⚠️ |

| JSON + SARIF for CI | ✅ | varies |

| MCP-native (AI agents) | ✅ | ❌ |

| Polyglot ports (JS/Go/Rust) | ✅ | ❌ |

| Open license | ✅ COCL | varies |

Built in the spirit of mail-tester.com + textlint, echoing GlockApps, re-framed the Cognis way. Missing a credit? Open a PR.

Integrations

Pipes into your stack: SARIF for code-scanning, JSON for anything, an MCP server (dripcheck mcp) for AI agents, and a webhook forwarder for SIEM/Slack/Jira. See docs/INTEGRATIONS.md.

Install — every way, every platform

pip install "git+https://github.com/cognis-digital/dripcheck.git"    # pip (works today)

pipx install "git+https://github.com/cognis-digital/dripcheck.git"   # isolated CLI

uv tool install "git+https://github.com/cognis-digital/dripcheck.git" # uv

pip install cognis-dripcheck                                          # PyPI (when published)

docker run --rm ghcr.io/cognis-digital/dripcheck:latest --help        # Docker

brew install cognis-digital/tap/dripcheck                             # Homebrew tap

curl -fsSL https://raw.githubusercontent.com/cognis-digital/dripcheck/main/install.sh | sh

| Linux | macOS | Windows | Docker | Cloud |

|---|---|---|---|---|

| scripts/setup-linux.sh | scripts/setup-macos.sh | scripts/setup-windows.ps1 | docker run ghcr.io/cognis-digital/dripcheck | DEPLOY.md (AWS/Azure/GCP/k8s) |

Related Cognis tools

  • warmline — Score and rank inbound/outbound leads from a YAML rulebook, emitting a ranked queue as JSON/CSV for your SDRs and CI gates.

  • coldforge — Render personalized cold-outreach sequences from Markdown templates + a contacts CSV, with spam-score linting and per-send dry-run preview.

  • pactgen — Generate branded sales proposals and SOWs from a YAML scope file + pricing table into PDF/HTML, with a deterministic line-item math check.

  • crmsync — Bidirectional, idempotent sync of contacts/deals between a local SQLite source-of-truth and CRM APIs (HubSpot/Pipedrive/Salesforce) via one config.

  • dealflow — Model your sales pipeline as a YAML state machine and compute conversion rates, stage velocity, and weighted forecast straight from CRM exports.

  • introbot — Find warm-intro paths through your team's combined network graph and draft double-opt-in intro requests from a single contacts manifest.

Explore the suite → 🗂️ all 170+ tools · ⭐ awesome-cognis · 🔗 cognis-sources · 🤖 uncensored-fleet · 🧠 engram

Contributing

PRs, new rules, and demo scenarios are welcome under the collaboration-pull model — see CONTRIBUTING.md and SECURITY.md.

⭐ If dripcheck saved you time, star it — it genuinely helps others find it.

Interoperability

{} composes with the 300+ tool Cognis suite — JSON in/out and a shared OpenAI-compatible /v1 backbone. See INTEROP.md for the suite map, composition patterns, and reference stacks.

License

Source-available under the Cognis Open Collaboration License (COCL) v1.0 — free for personal, internal-evaluation, research, and educational use; commercial / production use requires a license ([email protected]). See LICENSE.


Cognis Digital · one of 170+ tools in the Cognis Neural Suite · Making Tomorrow Better Today

About

Lint email sequences and drip campaigns for deliverability: SPF/DKIM/DMARC, link health, unsubscribe presence, and CAN-SPAM/GDPR compliance.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors