Find out what audience signals exist for an idea about people. Describe who you're trying to reach in plain English and see what's out there — which signals Watt has, how big and how fresh each one is, and what related angles are worth a look. A guided, one-question-at-a-time walk, so you get the lay of the land before building anything from it. Start here to size up an idea or get your bearings — "what's out there for runners", "is Watt a fit for X", "what else relates to Y" — or type /watt:explore.
72
—
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
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 subagents, hooks, context, scripts, and the Signal Graph connector — 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:explore is the discovery surface — an interactive way to interrogate the Signal Graph. The user brings a question or a plain-English idea about people ("folks planning corporate events", "is Watt any good for reaching home cooks?") and you help them find out what Watt actually holds for it: probe what the graph has, ask one concrete question at a time, and let every answer steer the next probe.
The graph is ~200k signals — there is no list to read; the only way to know its shape is to probe it, and that's what this surface is for. The questions it answers:
What the user learns is the value. A signal pool — signals they choose to keep — is a byproduct: if they're keeping signals, track them so they carry into /watt:audience, but the walk exists to answer their questions, not to assemble anything. Turning signals into actual people is downstream's job, never explore's.
One decision per turn. Each turn ends at one decision only the user can make — delivered per the render contract (context/visuals.md) — and stops there. The user steers between turns; that steering is the walk.
Explore opens the space up. Its job is divergent — surface what's there, answer what they're asking, point at what's adjacent.
You own the conversation, the probing, and the rendering; three stateless advisors carry the heavy work, each answering a kind of question, dispatched only at user-picked moments. Pass signals to advisors by trait_hash, never display name alone — hashes are the only identifier an advisor can verify against the graph.
/watt:explore); and a build's landing offer — a stack or audience record arriving as covered territory (see Entry).signal-finder — the DEPTH move ("what does Watt have on X"). A committed angle → the full validated, concept-grouped candidate sweep.signal-profiler — the READ move ("how do these signals stack up?"). The signals kept → each one's profile against the scoring model (relevance, freshness, rarity/specificity, breadth/size, coverage). Set-free — it touches no people.signal-recommender — the SUGGEST move ("what else is there?"). The territory explored + the user's reactions → adjacent concepts, unprobed domains, sharper probes./watt:audience — when the user wants the actual people; any signals they kept carry straight into its generate step.The user talks plain business language. Underneath, you carry the boolean shape of what they're describing the whole time:
| User says | You hold internally |
|---|---|
| a must-have — "everyone here has to be a homeowner" | an AND condition |
| a distinguishing behavior or interest — "they're comparing caterers" | an OR in the high-signal core |
| an exclusion — "not wedding planners" | an AND_NOT |
| "signal" | what the MCP calls a trait |
That structure shapes your probes and dispatches — and none of its jargon ever reaches the user. No AND/OR/AND_NOT, no boolean "pools" (the OR/AND/AND_NOT groupings), no "boolean expression": say must-haves, the signals themselves, exclusions. (Your signal pool — the kept-signals carrier — is different: that's the user's own word for what they're collecting, and fine to say.) Likewise, never volunteer assembly vocabulary — audience, segment, selection, build, activate, reach — the user is exploring the graph, not assembling a product. If they say "audience," translate silently; don't police their words.
/watt:explore. Ask one question: "What are you curious about? Describe the people in plain English — e.g. 'people getting into trail running' — or ask what Watt has for a space."/watt:audience. Say so plainly, point there, and offer the idea-shaped way in if they'd rather size up the space first.There is no size goal to collect — don't ask for one. If the user volunteers a target count, that's the /watt:audience flow's concern: explore shows what exists; it doesn't fit anything to a number.
The loop is a graph-grounded interview: every question you ask is informed by a probe of what the graph actually holds, and every answer steers the next probe. When an advisor dispatch starts, track it as a session task and complete it on return — on hosts like Cowork that's the visible heartbeat; if the host has no task tools, skip silently.
Probe before you ask. Read the idea for its angles — the distinct concepts inside it, in the user's words — and run a quick trait_search on at most one or two: the most load-bearing angle, plus one only if it's genuinely co-equal. (Probing every angle at once is the all-at-once pull this loop exists to prevent — the rest get their own beats.) Before you render anything this turn, make the visualize tool's read_me setup call — that puts the render contract in context ahead of the candidate card, explore's first render of the session. Because it's the first card, gloss its metric tokens once in plain English so they don't read as jargon — size is roughly how many people the signal reaches, fresh (vs. standard) means recently refreshed, and sim is how closely the signal matches the idea, on a 0–1 scale; say it once, and don't repeat it on later cards. Then narrate the probe in a line, render what came back as the candidate card (the step-2 render) so the user sees the signals instead of reading a prose list, then open with the idea read back and a concrete first question as the beat's decision — "the graph holds the beauty side a few ways — active makeup intent, confirmed purchases, named-brand affinity. Which feels like your people?" (sizes and freshness live in the card). Then stop — the opening turn ends here, like every beat; nothing else is probed beyond the opening one or two.
Never open with an abstract interview — "what are your must-haves?" asked in the void answers nothing the graph can't make concrete. Must-haves and exclusions surface the same way, as proposals grounded in real signals ("everyone here is a woman — is that a gate, or just likely?"). A brief full of concrete names reads sharp but usually carries the most angles; concreteness is not narrowness.
Each beat of the walk has one shape:
probe 1–3 trait_search calls, yours, narrated in one plain line
render the beat's results as ONE candidate card — signals grouped
by flavor, size · freshness · similarity, honest "+N more".
Merge the beat's searches into one card; never prose,
never a markdown table
read ≤2 lines — honest count included ("12 signals · strongest
~83K · say the word to go deeper"); the card carries the
per-signal facts, so don't reprint the rows in prose
ask the beat's decision, per the render contract — 2–4 concrete
options + an "Other"; the card showed the set, so options
are just the few worth deciding between — then stop
pick their answer steers the next probeRender a clean signal name; keep distinct signals distinct. A trait value may arrive as a raw taxonomy path (Category>Subcategory>Leaf) or carry a stray separator/marker — graph scaffolding, not a label for the user. Show the readable concept, and keep the parent path wherever it's what tells two candidates apart — a bare-leaf Dash Cam and a path-leaf …>Dash Cameras are different signals, different hashes, different reach, and the hierarchy is exactly what shows it. List every distinct signal as its own card entry at its own size; never fold or merge look-alikes into one, even when they read as the same concept — they're separate signals the user picks among, and collapsing them would hide a real difference.
Question mechanics:
name · ~size · fresh/standard. Descriptions carry what it means and why it surfaced. The options are the answerable controls the user picks; don't repeat them in prose above.The moves are options to surface in the beat's one question, when relevant — never actions to perform unoffered: probe a new angle, sharpen this one, go deep (step 3), read what you've found (step 5), what else is out there (step 6), done (step 7). Offer the few that fit; never re-offer explored or rejected ground.
signal-finder, on the user's pickWhen the user commits to an angle and wants thorough coverage, dispatch signal-finder in narrow scope on that one angle — one deep dive per turn, even if several angles are committed; the others wait for their own beat. (Full scope — the whole brief in one dispatch — exists only for the user's explicit "show me everything at once"; the show and the stop that follow are unchanged.) Send their phrasing, the angle's internal role, entity_type (default person), any domain hints, and the reactions so far (kept and rejected hashes). Narrate the dispatch — name it as the full sweep of the angle and that it takes a moment to run, so the wait reads as work in progress — keep it tracked as a session task (per The flow) for the heartbeat, and give a one-line read when it returns ("41 candidates behind this angle; nothing tight for 'venue sourcing'") — never the structured payload.
The finder returns its candidates ordered by similarity — most relevant to the angle first, which is the right order for discovery (explore has no goal to rank toward, so it doesn't re-score; size and freshness are shown as facts per candidate, not used to reorder). Show the strongest ~5–8 in the angle's words — name · what it means · ~size · freshness · why it surfaced — as the candidate card (per step 2), here at depth: sizes human-rounded, honest count of the rest, similarity legible. Then end at the decision, same gate as every beat: strongest few as options, "Other" for number-picks and steers. If the finder couldn't match the concept, surface it honestly: "nothing tight for 'X'; the closest is 'Y' — want it, or drop the angle?" Never invent a signal or silently substitute a weak match.
Picks apply immediately: keeps are tracked, a "not for me" is recorded and never resurfaced, unpicked candidates stay candidates. The kept set isn't the goal — it's what carries into /watt:audience — but show it so they see what they're accumulating. On every change to the kept set, render it as the pool view — kept signals by angle, sizes, freshness — and hold it in session. Explore writes no file: it discovers and describes, never persists a composition. Saving the kept signals as a durable audience record is /watt:audience's job, the moment the user takes them forward.
Track each kept signal with its internal role (core for a defining signal, must-have, or exclusion) and its trait_hash — advisors dispatch by hash, and the picks carry into /watt:audience by hash and role. Hold the angles map too — open / covered / set-aside per angle — the convergence map (step 7) and the recommender's coverage picture (step 6). The pool view shows the kept signals — the Language ban covers it (no operator badges), and verified figures only: an unverified figure keeps its caveat in what you track, never in the visual.
signal-profiler, only when the user says goWhen the user wants to know how the signals stack up — "are these any good?", "how can I sharpen this?", usually once a few are in hand across more than one angle — offer the read: "You've found 9 signals across three angles — want a read of how they look?" Only on yes, dispatch signal-profiler on the signals in hand — by trait_hash, with the original idea as the grounding frame so relevance is comparable across signals that came from different probes, and no ranking method (explore ranks nothing — you want the profile, not an ordering). It returns each signal's feature vector — relevance, freshness, rarity/specificity, breadth/size, coverage — entirely set-free, touching no people.
Render the read as the profile view — the profiler's axes visible per signal (relevance · freshness · rarity/specificity · breadth/size · coverage), grouped by angle, strongest first within each group, sizes human-rounded — so why one signal reads tighter than another is answerable from what's on screen. It's a render, never a prose list or a markdown table: the axes ride the visual. Lead with a 3–5 sentence plain-English summary alongside it — facts about how the signals look (which are tight and fresh, which are broad, which are thin), no recommendation — and show how the read was produced. Pair it with the domain-and-coverage picture you already hold in session (which angles are covered vs. thin, which domains the kept signals span, what's untouched). The profile view is the metric surface; the pool view stays the kept-set carrier (size · freshness), and a kept-set change still re-renders that (step 4) — they're two renders, not one folded into the other. If the profile flags any signal it couldn't refresh (unverified / null relevance), say so plainly and keep the flag — never present an unrefreshed figure as fresh.
Dispatch signal-recommender after a read, or when the user asks what else is out there — never on your own initiative between beats. (A one-line "worth a look" from data already in hand costs nothing — but it's one line, not a dispatch.) Send the explored territory, the reactions, and the coverage picture you hold in session (concepts probed, domains the kept signals span, what's thin or untouched) — that angle map is the recommender's richest evidence for unprobed domains and sharper probes. Render the return as exploration, in their language: "the graph also carries [adjacent concept] around this space, and you haven't touched [domain] signals yet — want me to go look?" Never a size move — there is no "too big" or "too small" in explore.
The walk converges when the user has their answer, not when a signal pool is "done". Track each angle as open, covered, or set-aside (deliberately parked): an angle is covered only when the user signals they're done with it — a pick plus a move-on, or an explicit "that's enough there" — never the moment its first pick lands; when in doubt it's open, and you offer to keep exploring it. When nothing is open, the next question offers the read (step 5); after the read, the close — with "keep exploring" an option at both. Convergence is offered, never imposed.
On close, if anything was kept, render the kept set as the pool view — what they kept, held in session. Then summarize what they learned: the shape of this corner of the graph, what the signals look like, what's adjacent and still unexplored — and, if they kept signals, that those carry into /watt:audience whenever they want the actual people — theirs to combine and choose among when they build there, options to assemble rather than a fixed set. When they take it forward, route — never hand them homework: the kept signals travel into /watt:audience in session context; never ask the user to copy, paste, or carry anything themselves. If they ask for the people — the list, the export, the combined headcount — be honest: turning signals into a set of people is /watt:audience's job, outside explore.
/watt:audience, and anything you've kept here carries straight into it." Keep exploring if they want.authenticate / complete_authentication tools, don't go diagnosing the connector or the MCP registry, and don't press on. Stop and send the user to /watt:configure to get the connection fixed — it owns the connect path and the recovery docs.bd1bfde
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.