@@@ @@@
@@ @@ @@ #
@@ @@ @@ @@
@# @@ @@ #@
@= @@ @@ =@
@@. @@ @@ -@@
@@ @@ @@ @@
@@ @@@@ @@
@@ @ @@
@@ @@
@@@@ %# @@@@
@%...* =@@. =...@@
@@=*#....@@ @@....#++@@
@@@-.:=.*#=.@@ @%.=*+.==.=@@@
@@*++=..+.+:*..:@@ @@@::.#:---..==++@@
%:+..=..+--+.*+=*.@@ @%::#++.*-.+..=..=:#@
@@@@@+..#+.@@.#...%@ @%...*.@@.*#..+@@@@@
@=.....-..%..:*=*.#@ @#.+=*:..%..:.....=@
@@@@%.*=:*.@.=.@*@@ @@*@:=.@.*:=+.@@@@@
@..*.@.+.=-.@ @.=..*.%.*..@
@@@..=.@@@@@ @@@@@.=..@@@
@@@@@ @@@@@┌┬┐┌─┐┌─┐┬─┐┌─┐┌┬┐┌─┐┬─┐ ││││ │├─┘├┤ ├┬┘├─┤ │ │ │├┬┘ ┴ ┴└─┘┴ └─┘┴└─┴ ┴ ┴ └─┘┴└─
Marketing Operations AI Agent
Open Source · github.com/joe-reitz/oss-moperator
mOperator is a marketing operations agent you fork. It lives in your Slack, works in your CRM and ad accounts, and every rule it follows is a file you can edit — the prompt, the playbooks, the approval policies, the naming conventions.
Built on eve, Vercel's framework for durable agents, and deployed as a single Next.js project. Turns are durable, so an approval can wait days and resume exactly where it paused — across a redeploy.
Marketing ops is not a generic problem. Your segment field is not their segment field, and your approval chain is specific. A closed product has to average over all of that. A fork does not.
# Clone the repo
git clone https://github.com/joe-reitz/oss-moperator.git# Install dependencies
cd oss-moperator && npm install# Copy environment template
cp .env.example .env.local# Add your API keys to .env.local (see setup guides below)
open .env.local# Start the dev server
npm run dev# Or talk to the agent in your terminal — no Slack setup needed
npm run agent# See exactly which integrations, tools, and skills are active
npm run agent:info# ─── Model (required) ──────────────────────────────────────── # One key, any model, through the Vercel AI Gateway. AI_GATEWAY_API_KEY= # AI_MODEL=anthropic/claude-opus-4.8 # optional override # ─── Who can approve writes (required) ─────────────────────── # Gates the admin pages, and lets these people write to the CRM # without waiting for approval. Empty means every write waits. AUTHORIZED_USER_EMAILS= # GROWTH_MARKETING_APPROVERS= # who may approve ad spend # ─── Browser sign-in (required for /chat, /console) ────────── SLACK_CLIENT_ID= SLACK_CLIENT_SECRET= MOPERATOR_SESSION_SECRET= # openssl rand -hex 32 # ─── Slack ─────────────────────────────────────────────────── # Recommended: npx eve add channel/slack, then set the connector. # MOPERATOR_SLACK_CONNECTOR=slack/moperator SLACK_BOT_TOKEN= SLACK_SIGNING_SECRET= # ─── Your conventions (optional, high value) ───────────────── MOPERATOR_ORG_NAME=Acme MOPERATOR_TIMEZONE=America/New_York MOPERATOR_CAMPAIGN_NAME_EXAMPLE=NAM-FY26Q1-webinar-launch # ─── Integrations: set the keys, the tools appear ──────────── SALESFORCE_ACCESS_TOKEN= SALESFORCE_INSTANCE_URL= HUBSPOT_API_TOKEN= LINEAR_API_KEY= GOOGLE_ADS_CUSTOMER_ID= LUMA_API_KEY=
Create a Vercel account and deploy mOperator with one click. Free tier is all you need.
One key, any model. Switch providers by changing a single string.
Let your team @mention the agent, or DM it. Vercel Connect manages the token and verification for you.
Query campaigns, contacts, and leads. Update records and export CSV — all from Slack.
Search contacts, companies, and deals. Manage lists and CRM records from Slack.
Search leads, manage static lists, trigger campaigns, and view programs from Slack.
File bugs and feature requests from Slack to Linear, Asana, Monday.com, or your PM tool of choice.
View commits, generate release notes, and see what shipped this week.
Manage campaigns, create ads, set budgets, and track performance. All spend operations require approval.
Create event registration pages with compliance questions baked in. Optionally stamp the Luma event ID onto a Salesforce Campaign.
Slack signature verification, admin sign-in, per-user Salesforce OAuth, and a deployment checklist. Required before sharing the bot link.
mOperator is designed to be extended. The real power comes from building your own integrations — small modules that teach mOperator about your internal tools and APIs.
Upload a CSV to Slack, have mOperator parse it, validate emails, and import contacts into your CRM or MAP automatically.
Connect mOperator to your internal docs so it understands your field mappings, lifecycle stages, and scoring models.
Build a module that checks campaign naming conventions, UTM parameters, and audience sizing before launch.
Connect your BI tool and generate weekly marketing reports posted to Slack on a schedule.
@mOperator What campaigns are active, and how many members each?@mOperator Export every contact at Acme Corp as a CSV@mOperator Which campaigns had the worst cost per conversion last month?@mOperator Here's a list from the conference — dedupe it against Salesforce@mOperator Build tracked links for LinkedIn and the newsletter@mOperator Add these 400 contacts to campaign 701xx000000ABCD@mOperator Raise the brand campaign budget to $300/day@mOperator Bug: the pricing form drops UTM parameters@mOperator Create a Luma event for our NYC launch party on March 15Slack (@mOperator) Browser (/chat) Cron (schedules)
| | |
v v v
/eve/v1/slack /eve/v1/session agent/schedules/*
| | |
+----------+----------+--------------------+
|
v
the agent runtime (durable turns: an approval
| can wait days and resume)
+---------------+---------------+---------------+
v v v v
tools/ skills/ subagents/ sandbox
env-gated load on demand read-only /workspace + pandas
|
v
Salesforce HubSpot Marketo Google Ads Linear GitHub Luma
(only the ones you configure)mOperator is an admin-level integration — once deployed it can query your CRM, send Slack messages, and write campaign data. Treat it like a production service.
AUTHORIZED_USER_EMAILS/chat with the same tools and rules as Slack/console — natural language to SOQL to CSV/analytics/audience-vocab — teach it what “segment” means, no deploynpm run eval