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.
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.
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, hooksArchitecture 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.
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.