An open-source Claude Code plugin · by noreason ai

Your AI-native ads agency.
In Claude Code.

ad-agency replaces your ad agency with an AI team that lives in your terminal. Cross-channel attribution, creative analytics, budget AI, and experimentation — drafting every change for a human to approve in one click. Apache 2.0. Your data stays on your machine.

Meta · Google · TikTok Shopify · GA4 · Klaviyo DTC · Mobile · Leadgen Apache 2.0

Brands hire agencies for the work, not the time

Your agency runs the same five workflows every week — pull yesterday's data, find the anomaly, propose the fix, refresh creative, write the exec deck. Each one is a job Claude can do, faster and at zero marginal cost. ad-agency is that team, wrapped as a Claude Code plugin you install in 30 seconds.

What it does

Cross-channel attribution

Unified spend × revenue across Meta, Google, TikTok and Shopify in a local DuckDB warehouse. Server-side click-ID matching reconstructs ~80% of Hyros-style first-party tracking — no hosted endpoint.

Creative analytics & briefs

Auto-tag every ad by hook, format, persona, CTA. Detect fatigue via decay curves. Draft new variant briefs in the user's voice. Catalog overlay specs from the live product feed.

Budget AI + anomaly RCA

Daily brief at 9am: yesterday vs prior-7d baseline, top wins / top issues, proposed actions. Variance-decomposition finds the slice that explains a metric move — channel × campaign × adset × placement.

Experimentation

Design geo-holdout incrementality tests, run power calcs, read out lifts with confidence intervals. MMM with adstock and saturation. The numbers your CFO actually trusts.

Recurring jobs

User-configurable schedules with /schedules add — daily briefs, weekly exec reports, hourly anomaly scans, stop-loss checks. Daemon installs as launchd / systemd / Task Scheduler.

Slack-first reporting

Block-kit digests, anomaly alerts, and one-click Approve / Decline buttons on every proposed change. The morning standup, but it runs itself.

Recommend & propose — never autonomous

ad-agency never writes to your ad accounts on its own. Every change becomes a Proposal object you approve with /approve <id> or a Slack button. PreToolUse hooks enforce guardrails, budget caps, and a full audit log — so the recommend-and-propose model is a property of the system, not a convention.

Install in 30 seconds

Inside any Claude Code session:

/plugin marketplace add noreason-ai/ad-agency
/plugin install ad-agency@noreason-ai-ad-agency

Claude Code names the marketplace <owner>-<repo>, so the install ref is ad-agency@noreason-ai-ad-agency. We’re also pursuing a listing in Anthropic’s plugin directory; once accepted, the first step won’t be needed.

Then connect a platform and run your first brief:

/connect meta
/connect shopify
/connect slack
/sync
/brief

Requires Claude Code · Node 20+ · pnpm 9+

Daily-driver commands

/briefToday's brief — anomalies, wins, issues, queued proposals
/why <q>Root-cause an anomaly via variance decomposition
/ask <q>Open Q&A — routes to the right specialist agent
/rebalancePropose budget reallocations from saturated to starved
/pause <ad>Draft a pause; never writes without /approve
/creative auditScore every ad by hook, format, persona, fatigue
/sku reviewSKU-level ROAS, contribution-margin, stop-loss candidates
/forecastConservative / base / aggressive revenue projections
/reconcileBucket Shopify vs Meta vs GA4 discrepancies
/approve <id>Execute an approved proposal — the only write path
/schedulesManage recurring jobs (briefs, alerts, scans)
/doctorHealth-check: credentials, warehouse, daemon, hooks

Architecture in one line

A pnpm workspace monorepo. Each ad platform is its own stdio MCP server (mcp-servers/*) that exposes read tools and propose_* drafts. A local DuckDB warehouse joins paid spend × Shopify orders × surveys in one SQL. Subagents (media-buyer, creative-strategist, attribution-analyst, performance-investigator) own one reasoning domain each. Hooks enforce guardrails. The full plan and component inventory live in the GitHub repo.

Read the architecture doc →

FAQ

Is this safe to point at a real ad account?

Yes — that's the whole point of the recommend-and-propose model. No tool on any MCP server mutates a platform directly. Every change goes through proposal_apply, which requires a fresh approval token written by /approve or a Slack button. PreToolUse hooks validate against budget caps and blackout windows; rejected proposals stay drafts. The audit log captures every action with the approver's identity.

What data leaves my machine?

Calls to Meta / Google / TikTok / Shopify / Slack APIs — with their credentials, the same as any agency would make. Nothing else. The DuckDB warehouse lives at ~/.ads/warehouse.duckdb on your machine; no cloud sync, no telemetry. Your data stays where it already is.

How is this different from Triple Whale / Hyros / Big Atom / Adjust?

It borrows the best of each — Triple Whale-style post-purchase survey attribution, Hyros-style first-party click matching, Big Atom-style SKU stop-loss, Adjust-style cost aggregation — but ships as code your team owns, in the IDE/CLI your team already uses, with no per-seat fees. Open source, Apache 2.0.

Does it auto-publish creative to Meta like Triple Whale's Moby?

No, by design. ad-agency drafts creative briefs in the user's voice and generates dynamic catalog overlay specs, but never auto-publishes ads. A human producer takes the brief and ships the asset. That's the line we hold.

Is there a hosted version?

Not yet. The plugin runs entirely on the user's machine. If there's appetite, a noreason ai-hosted variant is on the roadmap — same code, managed infra.