Marketing as Code

Open source · MIT · Free

Run your marketing team like an open-source repo.

Rules an agent enforces, routines that draft the reports, every number linked to its source, and a human approval on anything public. Plain Markdown and git. No runtime, no database, no account.

Extracted from the system that has run a B2B developer-tool marketing team since mid-2026.

07-reports/2026-01-05-weekly-pulse.md

Weekly pulse, week of Jan 5

agent, for Jordan · visibility: team · example data

MetricLast weekPaceSource
Sign-ups412on trackanalytics
Sales calls17aheadCRM
Organic traffic22,140on tracksearch console
ABM engagedno data gapno dataCRM not connected

Data gap: CRM not connected. Connect it, or paste the count with its URL. Nothing guessed.

APPROVEDJR · 09:14

Three guarantees

Enforced by the system, not promised in a deck.

01

Every number links to its source.

An unlinked number is unverified, and the report says so. Anyone can click through to where it came from.

02

Data gaps over guesses.

A routine that cannot reach a tool writes the gap down. It never fills one in. The gaps list becomes the to-do list.

03

Nothing public without a human.

Public copy is always gated behind an approval. Agents draft; a person on your team signs off.

Start here

Two readers, two ten-minute paths.

If you run marketing

  1. Click Use this template, create a private repo, open it in your coding agent.
  2. Run ./.claude/bin/marketing init.
  3. /setup: five questions, and the agent writes your rulebook from your own website.
  4. /first-run: today's report with zero tools connected, and one draft waiting for your approval.
  5. When a teammate joins: one row in 01-rules/team.md, then marketing team sync.

If you are the engineer asked to vouch for it

  • Plain Markdown and git. No runtime, no database, no secrets in the repo; private/ is never committed.
  • Skills are files (.claude/skills/*/SKILL.md) with a metadata block the CLI reads.
  • The CLI is one bash script, shellcheck-clean, macOS and Linux.
  • Roles and visibility map onto CODEOWNERS and branch protection.
  • MIT.

Rules as code

Your brand, written so an agent can follow it.

The heart of the kit is CLAUDE.md plus 01-rules/. The agent checks these before every draft, so the rules actually get followed. /setup replaces the example rules with yours.

  • 01  No em dashes. Anywhere. Use periods, commas, colons, or parentheses.
  • 02  Gloss acronyms on first use: "DLQ, dead-letter queue, ...".
  • 03  Say the numbers correctly. GitHub stars: ~12K, never 15K.
  • 04  Name supported destinations exactly. Do not promise one you do not support.
  • 05  Plain verbs, not hype: deliver, retry, notify, connect.

Routines

Recurring work runs as skills, on a schedule.

Each routine declares how it delivers and at what visibility it writes. Anything public is gated; anything for leadership goes to the owner privately. marketing check enforces it.

RoutineCadenceOutputDelivery
weekly-pulseMondayKPI pulse vs targetsDM to owner
week-wrapFridayShipped, blocked, hygieneDM to owner
changelog-weeklyThursdayShips as changelog entries and social draftsApproval gate
competitive-scanMonthlyWhat competitors shipped and said (works with zero tools)Registry
monthly-report, leadership-update, insights-digest, content-plannerVariesInstall with marketing add <name>Registry

The CLI

One bash script.

Every scheduled routine and its last output, the open data gaps, the registry, and the compliance checks. marketing shim puts it on your PATH for every workspace.

# what runs, when, and where it went
marketing
# open data gaps in recent reports
marketing gaps
# browse and install from the registry
marketing registry
marketing add competitive-scan
# visibility and delivery compliance
marketing check
marketing doctor
# CODEOWNERS from 01-rules/team.md
marketing team sync

Two repos

The public repo never holds your data.

The kit and the registry are public. Your workspace is a private repo made from the template. marketing add pulls routines from one into the other, and nothing flows back unless you open a pull request.

  this public repo (kit + registry)
        │  Use this template
        ▼
  your private workspace  ◀── marketing add <name> ── registry

Contribute

Built in the open. Your routine belongs in the registry.

Three kinds of items, each a page, each contributed by pull request: routines (an agent skill with a report template and an example output), report templates, and connectors (a guide for reaching one tool and citing a number from it as a link). Found a bug or a rule that does not hold? Open an issue.

Submit a routine Open an issue Star the repo