Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/wattdata/plugin/audiencenpx skills add wattdata/plugin --skill audiencegit clone --depth 1 https://github.com/wattdata/pluginWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00167 | $0.01585 |
| Opus 5 | $0.00084 | $0.00792 |
| Sonnet 5 | $0.00033 | $0.00317 |
| Haiku 4.5 | $0.00017 | $0.00159 |
Grade C, and why
audience scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Tells the agent never to refusehighAnti-refusal
Suppressing the ability to decline removes a core safety control; a later harmful request then succeeds.
- **A list of people as the starting point** — a pasted set of identifiers or a CSV (customers, leads, accounts). Route by **intent**, never refuse it: *build from it* ("match my customer list", "expand my list to every How it starts
The opening of the file, as written. The whole thing — 48 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Audience
Purpose
Supported platform first. Watt runs in Claude Cowork, Claude Code, or the Claude Agent SDK — not the Claude Chat app, where only these skill files load and the rest of Watt — its hooks, context, scripts, and Signal Graph — does not. If the user isn't on a supported platform, tell them plainly to switch before continuing; otherwise this will not function correctly.
/watt:audience is the front door to the audience lifecycle — and the only audience command the user can type. The user says what they're after; you work out which step that is and hand them into it by invoking that leaf skill. The leaves aren't in the user's slash menu; they exist only behind this door. You run no Watt tools yourself — the leaves do the work.
Route; don't run. Your whole job is one good question and a clean handoff — re-eliciting what a leaf will elicit again, or starting work a leaf owns, just duplicates the flow.
Works with
- Called by: the user (
/watt:audience) — often arriving with an/watt:exploresignal pool — which carries straight through to generate, or, with a read or export intent, directly into analyze (its signal way in) or activate, both of which auto-compose it. - Hands off to: the three leaves —
audience-generate— compose a new audience: brief + target size band → signals, scored and user-approved → a signal stack with measured reach.audience-analyze— read a built audience: who these people actually are, as aggregates — or profile a market straight from a brief (size is the answer, not a target) — and, on request, a self-contained shareable report file (the deliverable when the goal was to profile).audience-activate— export a built audience as a platform-ready file (Meta, Google, Reddit, and TikTok), behind its own explicit confirmation.
Entry
- A generate-shaped ask — a new audience, a "who + how many" ("build me an audience of pet owners, around 2M") → hand into
audience-generatewith everything they've said so far; it elicits only what's missing. - A list of people as the starting point — a pasted set of identifiers or a CSV (customers, leads, accounts). Route by intent, never refuse it: build from it ("match my customer list", "expand my list to every match", "get it ready for Meta") →
audience-generate(which routes to its list way in); read who they are ("who are these people", "what do they have in common", "profile my customer list") →audience-analyze(its list way in). The flow has a list anchor on both the build and read sides. - A profile-shaped ask — "who's in my market", "how many roofers near Nashville", "an audience profile for my client" — understanding a market, not sizing to a budget →
audience-analyze(its-searchflavor profiles from a brief and writes the shareable report). There's no target to compose toward, so this is a read, not a build. - An analyze-shaped ask — "who's actually in it", "what do these people look like" →
audience-analyze. If no audience has been built this session and none is supplied — and there's no signal pool to read either — route to generate first; there's nothing to read yet. - An activate-shaped ask — "export it", "push it to Meta", "push it to Google", "get me the file" →
audience-activate. Same dependency: no built audience and no signal pool → generate first, honestly named (a pool exports directly — activate auto-composes it). - A refresh-shaped ask — "refresh my audience", "re-run this", "is this still ~2M?" — usually with a pasted audience record. The record is the recipe and refresh means freeze the expression: the same signals re-run verbatim against today's Signal Graph (it recalculates daily), returning refreshed membership and an updated record — never silently re-picking signals. Route by what they want from the refreshed audience: the updated count and read →
audience-analyze(its signal way in); a fresh export →audience-activate. Wanting different signals isn't a refresh — that's runningaudience-generateagain with the brief; name the difference if it's ambiguous. - A built audience already in session — offer the next step instead of re-eliciting: "You've got the 2.4M-reach hiker audience — analyze who's in it, or export it for Meta, Google, Reddit, or TikTok?"
- Bare
/watt:audience. One question: "What are you trying to do — build an audience to a size, profile a market (how many, who they are), read one you've built, or export one?" - Explore-shaped curiosity — "what's out there for X", no intent to build →
/watt:explore, named as the lighter step. Its signal pool carries straight into generate later.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 48 lines · 167 tokens per session scan C b263264ad61b
audience is a skill published in the GitHub repository wattdata/plugin (5 stars, last pushed 1mo ago), licensed Apache-2.0. It adds 167 tokens to every session and 1,585 once invoked, about $0.0008 per session on Opus 5. A static security scan graded it C with 1 finding (tells the agent never to refuse). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
next-cache-components-adoption
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…
babysit-pr
Babysit a GitHub pull request after creation by continuously polling review comments, CI checks/workflow runs, and mergeability state until the PR is merged/closed or user help is required. Diagnose failures, retry likely flaky failures up to 3 times, auto-fix/push branch-related issues when appropriate, and keep…
imagegen
Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output…
cpu-profile-analysis
Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…
next-cache-components-optimizer
Drive a Next.js route to instant navigation by setting up an agentic loop, under Cache Components / PPR, on initial load (hard navigation) and client-side navigation (soft navigation). Encode the goal as a failing @next/playwright instant() e2e and work it to green, one verified route at a time; the shipped test then…