Open source
A marketing ops agent you fork
It lives in your Slack, works in your CRM, and every rule it follows is a file you can edit. Not a product you rent — a repository you own, MIT licensed and free.
MIT licensed · built on eve · deploys to Vercel
Why fork instead of buy
Marketing ops is not a generic problem
Your segment field is not their segment field. Your naming convention is real. Your approval chain is specific, and the five things your team asks for every week are not the five things another team asks for.
A closed product has to average over all of that. A fork does not. Everything you would want to change is a file:
| To change | Edit |
|---|---|
| Who can approve what, naming and UTM conventions, limits | agent/lib/config.ts |
| How it talks and what it refuses | agent/instructions/ |
| Its playbooks for SOQL, audiences, launches, list hygiene | agent/skills/ |
| Which tools exist — one file per integration | agent/tools/ |
| Which writes need a human | agent/lib/approval.ts |
| Scheduled digests | agent/schedules/ |
What it does
Six things it handles that currently land on your plate
Answers questions about your data
Ask which campaigns had the worst cost per conversion. It pulls 90 days of ad performance, analyses it in a real Linux sandbox with pandas, and tells you which differences are too small to mean anything.
Cleans up lists nobody wants to touch
Drop a conference list in Slack. It reads the attachment, normalises the emails, finds the ones you already have and the ones who unsubscribed, and tells you exactly how many are worth importing.
Waits for a human on anything risky
Bulk writes, deletions, ad budget changes, and anything that sends to real people all pause for approval. The pause is durable — Slack shows Approve or Deny and the work resumes days later if it has to, even across a redeploy.
Builds emails and files tickets
Hand it approved copy and it briefs Knak, which renders on-brand and reports back with your naming convention applied. Report a bug and it files a real issue with a title, body, priority, and labels.
Enforces your tracking conventions
A UTM builder, a UTM auditor, and a campaign-name checker. Because one paid_social among a thousand paid-social splits a channel in every report you run this year.
Sends digests you didn't have to build
Monday campaign activity, daily ad-spend anomalies, Friday triage. They become Vercel Cron Jobs automatically and stay inert until you name a channel.
Guardrails
An agent with write access to your CRM needs more than a polite prompt
These are enforced in code, not asked for in a system prompt:
- CRM writes go through for people on the approver list. Everyone else's write pauses for one.
- Bulk writes are reviewed above a threshold no matter who asks, and refused above a hard cap. Splitting a batch to get under the limit does not work — the cap is per call.
- Deletions and anything that sends to real people always need a human, and can never run from a schedule.
- Ad budget changes need someone on the ad-spend approver list, re-checked at the moment the change applies — so nobody approves their own spend.
- Read-only means read-only — the SOQL it runs is validated against DML, statement stacking, and comment-hidden mutations. The analyst subagent has no write tools at all.
Connects to
Whatever you already run
Set the credentials, restart, done. The agent only sees tools for what you configured, so it never offers to do something your install cannot do. Delete an integration by deleting two files.
You do not need to be a developer
The setup guide starts at "create a GitHub account" and ends with a working agent in your Slack. No prior command-line experience assumed, and you can try the whole thing against a fake CRM before you connect anything real.