| name | launch-monitor |
| description | Monitors press, social, developer communities, and competitor channels from any point around
a product launch โ tracking sentiment, flagging mischaracterizations, surfacing competitor
responses, and recommending actions in real time. Nimble reaches sources that block standard
agents โ including paywalled press, Reddit, LinkedIn, JavaScript-heavy pages, and live
community forums โ while Claude triages every signal by urgency. Delivers a Response War Room
dashboard with a live signal feed, mischaracterization tracker, competitor response panel,
and sentiment velocity chart.
Use when asked to "monitor this launch", "track the launch", "what's being said about the
launch", "flag any mischaracterizations", "competitor response to the launch", "post-launch
coverage", "check press coverage for the launch", or "what's the reaction to the
announcement".
Do NOT use for ongoing brand monitoring unrelated to a launch โ use brand-mention-monitor
instead. Do NOT use for ongoing competitor intelligence unrelated to a specific launch
window โ use competitor-intel instead.
|
| allowed-tools | ["Bash(nimble:*)","Bash(claude:*)","Bash(grep:*)","Bash(date:*)","Bash(cat:*)","Bash(mkdir:*)","Bash(python3:*)","Bash(echo:*)","Bash(jq:*)","Bash(ls:*)","Read","Write","Agent","AskUserQuestion"] |
| metadata | {"author":"Nimbleway","version":"1.1.0"} |
Launch Monitor
Monitors press, social, and community forums from launch day โ tracking sentiment, flagging mischaracterizations, surfacing competitor responses, and recommending actions so you can respond fast.
Onboarding message
When this skill is triggered for the first time in a session, send this message. Send it exactly once per session, before asking any setup questions. Do not skip it even when the user's opening message already names a product โ the onboarding sets expectations for what the skill collects and how it works.
๐ Launch Monitor is ready.
This skill monitors press, social media, developer communities, and competitor channels around a product launch โ tracking sentiment, flagging mischaracterizations, surfacing competitor responses, and telling you exactly what to respond to and how.
To start, just say:
"Monitor the launch of [product name]"
Or try:
- "Track coverage since we announced [product] yesterday"
- "What's the reaction to our [product] launch?"
- "Flag any mischaracterizations in our [product] press coverage"
- "How are competitors responding to our [product] launch?"
Would you like me to save your preferences so I skip the questions next time?
Preflight
Follow the transport selection and standard preflight from references/nimble-playbook.md: pick CLI vs MCP at session start, then run the parallel preflight calls (date, profile, memory index) simultaneously. Tag every Nimble CLI call: nimble --client-source nimble-agent-skills <subcommand>.
From the profile (~/.nimble/business-profile.json): load product/brand context and last_runs.launch-monitor for date windowing. Pre-populate setup questions so the user confirms rather than re-enters. If no profile exists, follow the first-run onboarding flow in references/profile-and-onboarding.md and create a stub after the first run.
How to start
Before asking anything, do two quick research steps:
Step A โ Resolve alternate names automatically:
Search for the product the user named to discover all alternate names, codenames, version names, and related search terms. Do not ask the user for this. Use what you find to build a comprehensive search term list for Step 1.
- Search:
"[product name]" official name OR "also known as" OR codename OR version
- For Apple products, always check for internal codename, model number, and marketing name variants
- For software: check GitHub repo names, API names, and SDK names
- Add all confirmed variants to your search queries silently โ the user never needs to see this step
Step B โ Confirm launch date automatically:
Search for when the product launched before asking the user. Surface what you find and ask the user to confirm or correct it.
- Search:
"[product name]" launch date OR announced OR "available now" OR "shipping today"
- If you find a clear date, present it to the user for confirmation
- If you find multiple conflicting dates (announcement vs GA), surface both and ask which window to use
Then ask in a single message:
"Before I run โ just confirming a couple of things:
- Launch date: I found that [product] launched on [DATE YOU FOUND] โ is that the right date to monitor from, or a different one?
- Window: How far back should I look beyond that? (default: from launch date to now)
- Depth: Quick scan (faster) or deep sweep (more thorough, more sources)? (default: deep)
- Competitors: I'll monitor competitor responses by default โ any specific competitors to prioritize or exclude?"
Output is always the Response War Room rendered directly in Claude. Do not ask about format or output options.
Exceptions โ skip asking entirely if:
- The user provided all the above in their initial message
- The user has run this skill before in the session (use prior config)
Defaults if user says "just run it":
- Window: launch date to now
- Depth: deep
- Competitors: on (identify automatically from context profiling)
Disambiguation: If the product name is ambiguous after research, confirm before proceeding:
"Just to confirm โ by [product], do you mean [Option A] or [Option B]?"
Step 0 โ Context profiling (run before any searches)
Before searching, profile the product to adapt all queries:
- What category is this? (developer tool, consumer app, enterprise SaaS, hardware, API, etc.)
- What ecosystem does it live in? (e.g. Claude/Anthropic, AWS, Salesforce, open source)
- Who is the target audience? (developers, PMs, enterprise buyers, consumers)
- What are the key claims made at launch? (extract from the user's description or a quick search of the announcement)
- What would a mischaracterization look like? (wrong category, wrong pricing, wrong capability, wrong comparison)
Use this profile to:
- Target the right communities and press outlets
- Build precise search queries that find real coverage vs noise
- Know what "correct" positioning looks like so mischaracterizations can be flagged accurately
- Understand what competitor responses would look like
Step 1 โ Signal sweep
Run all of the following in parallel. Use --search-depth lite for the discovery pass. Switch to --search-depth deep only when extracting full article or thread content. Tag every call: nimble --client-source nimble-agent-skills search ...
Press & editorial
"[product name]" site:techcrunch.com
"[product name]" site:theverge.com
"[product name]" site:wired.com
"[product name]" site:arstechnica.com
"[product name]" site:venturebeat.com
"[product name]" site:siliconangle.com
"[product name]" site:theregister.com
"[product name]" site:zdnet.com
"[product name]" "[company name]" announcement OR launch OR release
- Category-specific press (e.g. for dev tools: InfoQ, SDTimes; for AI: The Information, Import AI)
Social & community
Run ALL of the following โ social moves faster than press. Use focus:"social" on Nimble for broader platform reach. See references/sources.md Tier 2b for full query patterns per platform.
Reddit (run multiple subreddit-specific queries, not just the broad one):
"[product name]" site:reddit.com โ broad
"[product name]" site:reddit.com/r/[category] โ category subreddit
"[product name]" site:reddit.com/r/[company] โ brand subreddit
"[product name]" site:reddit.com/r/technology and other relevant subs
- Nimble social focus:
focus:"social" query "[product name]" reddit
X / Twitter:
"[product name]" site:x.com
"[product name]" wrong OR broken OR disappointed site:x.com โ complaint hunt
"[product name]" "actually" OR correcting site:x.com โ correction chains
- Check quote-tweets of the official launch tweet
LinkedIn:
"[product name]" site:linkedin.com
"[product name]" launched OR "my take" site:linkedin.com
Instagram:
- Nimble social focus:
focus:"social" query "[product name]" instagram
- Signal: influencer posts, brand account engagement, consumer reactions
TikTok:
- Nimble social focus:
focus:"social" query "[product name]" tiktok review OR reaction
- Signal: viral reaction videos within 48h; comment sentiment
YouTube:
"[product name]" review OR reaction OR "first impressions" site:youtube.com
"[product name]" problems OR issues site:youtube.com
Facebook / Threads:
- Nimble social focus:
focus:"social" query "[product name]" facebook OR threads
Hacker News:
"[product name]" site:news.ycombinator.com
- Also search:
hn.algolia.com/?q=[product+name]&dateRange=last24h
Dev communities:
"[product name]" site:dev.to
"[product name]" site:medium.com
Developer communities (if applicable)
"[product name]" site:stackoverflow.com
"[product name]" site:github.com โ issues, discussions, reactions
"[product name]" site:discord.com OR discord community
"[product name]" site:hashnode.com
Competitor monitoring (if enabled)
[competitor A] "[product name]" OR "[category]" โ how are they reacting?
[competitor A] announcement OR response OR "compared to" โ any counter-announcements?
- Check competitor social accounts and blogs for positioning moves
- Search for "[competitor] vs [product name]" content published since launch date
Mischaracterization hunting
Run targeted queries designed to surface wrong information:
"[product name]" "[wrong claim to watch for]"
"[product name]" pricing OR price โ check if pricing is being reported accurately
"[product name]" vs "[wrong comparison]" โ is it being compared to the wrong thing?
"[product name]" "[capability it doesn't have]" โ check for capability inflation or deflation
Step 2 โ Signal triage
For every signal found, assign:
Urgency level:
- ๐ด Act now โ mischaracterization going viral, high-reach negative coverage, competitor counter-announcement, crisis signal
- ๐ก Monitor โ emerging negative theme, mid-reach inaccurate coverage, competitor positioning content
- ๐ข Good signal โ accurate positive coverage, organic enthusiasm, developer adoption signals
- โฌ Noise โ irrelevant mentions, unrelated products with similar names, spam
Action badge:
RESPOND โ requires a direct public response (tweet, comment, press outreach)
CORRECT โ requires a correction or clarification (DM, comment, press note)
AMPLIFY โ worth sharing, retweeting, or building on
ESCALATE โ needs to go to comms, legal, or leadership
WATCH โ no action yet but track for escalation
IGNORE โ filtered noise
Signal type:
- Press coverage ยท Community discussion ยท Social mention ยท Competitor move ยท Mischaracterization ยท Churn signal ยท Influencer take ยท Developer reaction ยท Analyst comment
Source URL โ required for every signal:
Every signal must include the exact URL returned by Nimble for that article, thread, or post. This URL powers the clickable โ source link on each card. A homepage URL is useless to the user.
CORRECT โ exact article/thread/post URLs:
https://techcrunch.com/2026/06/11/nimble-mcp-connector-launch
https://news.ycombinator.com/item?id=12345678
https://reddit.com/r/MachineLearning/comments/abc123/is_nimble_just_another_scraper
https://x.com/[username]/status/[POST_ID]
WRONG โ never use these:
https://techcrunch.com
https://news.ycombinator.com
https://reddit.com
https://x.com
Use the URL exactly as Nimble returns it in the search result. Do not fabricate a URL.
Step 3 โ Mischaracterization analysis
For every piece of coverage that gets something wrong, extract:
- The claim โ exactly what was said
- The source โ outlet, author, reach estimate, date
- What's wrong โ specific inaccuracy
- The correct version โ what the accurate statement is
- Spread risk โ is this being picked up by others? (search for secondary coverage citing the wrong claim)
- Suggested response โ one-sentence correction Claude recommends
Step 4 โ Sentiment velocity
Track how sentiment is trending over time since launch:
- Break the window into intervals (e.g. hourly for first 24h, daily after that)
- For each interval: count positive, negative, neutral signals
- Identify the inflection point โ when did sentiment peak? When did it shift?
- Flag any velocity spike โ sudden surge in mentions (positive or negative)
Memory dedup (filter already-known signals)
Before generating output, run the dedup lifecycle from references/memory-and-distribution.md against prior launch-monitor reports in ~/.nimble/memory/reports/.
Skill-specific rules:
- Fingerprint:
{url, signal_type, published_date} โ normalize URLs (strip query params, trailing slashes).
- Returning signal, urgency changed: keep in feed, mark with
โฉ returning ยท urgency changed badge.
- Already known, no change: suppress from Act Now / Monitor sections; include in appendix only if user requested full history.
- Summary line: show at top of war room:
X net-new ยท Y returning (urgency changed) ยท Z suppressed.
- Persist: after the run, save signal fingerprints to
~/.nimble/memory/reports/launch-monitor-{YYYY-MM-DD}.md and append a log.md entry per references/memory-and-distribution.md.
Output template (REQUIRED)
Claude MUST follow references/template.html exactly when generating the HTML output. Load the template, substitute real researched data into placeholders, keep all CSS, JS, and interaction patterns identical.
Required response structure
Every launch-monitor response must follow this structure, in order:
## TL;DR โ first section, always. Two to three sentences: overall sentiment read (positive / mixed / negative / trending), count of act-now items, and the single most urgent signal or mischaracterization. Example: "Sentiment is mixed-to-negative in the first 48 hours, with 5 act-now items. The dominant risk is the 'Gemini reskin' framing spreading across HN and press. Three mischaracterizations are active, two spreading."
- The inline Response War Room widget โ rendered immediately after TL;DR per the sequence below.
## What This Means โ final section, always. Two to three sentences synthesizing what the signal pattern implies for launch trajectory and the single most important action for the team to take right now.
Rendering โ INLINE FIRST, ALWAYS (read this before producing output)
The Response War Room is an interactive widget that must be rendered inline in the chat. A downloadable file is a secondary artifact, never the primary deliverable. Follow this sequence exactly, every run:
- Render the war room inline FIRST. Write the fully-populated
launch-monitor-{YYYY-MM-DD}.html to ~/.nimble/ using the Write tool, then emit the HTML content inline in the conversation so the user sees the interactive widget immediately. This inline output is the main deliverable and must happen before anything else is offered.
- Then, and only then, offer downloads. After the inline widget is on screen, confirm that
~/.nimble/launch-monitor-{YYYY-MM-DD}.html and ~/.nimble/launch-monitor-{YYYY-MM-DD}.md have been saved and offer them to the user for download or sharing.
Hard rules:
- Never respond with only a download link or only a file. If the user sees a file but no inline war room, the run has failed its primary job.
- Do not ask the user whether they want it inline or as a file, and do not ask about format โ inline is always the default and the file always accompanies it.
- The inline widget and the downloadable HTML are the same artifact โ render the identical template, do not produce a stripped-down inline version.
If the inline output genuinely cannot be produced:
- Say so explicitly in one short line โ e.g. "I couldn't render the war room inline this time, so here's the file instead."
- Confirm the file has been saved to
~/.nimble/launch-monitor-{YYYY-MM-DD}.html as the fallback.
Never silently fall back to a download โ if inline fails, name the failure so the user knows it was the environment, not the intended behavior.
Output template spec (launch-monitor-{YYYY-MM-DD}.html)
The Response War Room has a distinct visual identity from all other skills:
- Light background using CSS variables โ inherits host theme, works in both light and dark mode
- Monospace accents for signal metadata โ feels operational, not reporty
- Color system: Red
#A32D2D / Amber #854F0B / Green #3B6D11 for urgency โ matches the CSS variable palette
- Tight, dense layout โ war room feel, not a dashboard feel
- Source links:
<a href="[EXACT_NIMBLE_URL]" class="src-link">โ source</a> โ color #185FA5, no border/background, click listener on sc-top (not sc) so links pass through
Required sections in order:
0. Launch header bar
Full-width bar showing: product name ยท launch date ยท time since launch ยท total signals found ยท last updated timestamp
1. Sentiment velocity chart
A small line chart (not bars) showing signal volume over time since launch, split into positive (green line) and negative (red line). X-axis = time intervals. Y-axis = signal count. Hoverable data points showing count + top signal at that moment. Click a point to filter the signal feed to that time window.
2. Signal feed โ the war room
The main panel. Signal cards displayed in a responsive grid that packs 2โ3 cards across by available width (it auto-fills columns rather than forcing a fixed count, so the feed stays compact and never collapses to a single long column). Cards are sorted by urgency (๐ด first, then ๐ก, then ๐ข). Each card shows:
- Top row: urgency dot + action badge + type tag + chevron (all on one line in
.sc-header)
- Headline (font-size 12px, font-weight 500)
- One-line context (font-size 11px, muted)
- Bottom row: metadata + โ source link โ pinned to card bottom with
margin-top:auto and a top border so all cards in a row align visually
- Suggested action shown on expand โ click card to expand (click listener on
.sc-top, not .sc, so source link clicks pass through)
Grid layout CSS: .feed { display:grid; grid-template-columns:repeat(auto-fill,minmax(215px,1fr)); gap:8px } โ auto-fill packs as many ~215px columns as fit (2โ3 across at typical render widths), keeping the feed short. Do not change this back to a fixed repeat(2,...), which can collapse to one column at narrow widths.
.no-sigs spans both columns: grid-column:1/-1
Filter bar above the feed:
- Primary: View tabs โ All / ๐ด Act now / ๐ก Monitor / ๐ข Good / Mischar. โ synced with clickable stat cards
- Secondary: Collapsed "Refine" button โ expands panel with action type + signal type pills
- Active filters shown as dismissable chips with "Clear all"
All filters stack. Signal count updates live. "No signals match" empty state spans full width.
3. Mischaracterization tracker
A dedicated panel โ only shown if mischaracterizations were found. Two-column layout:
Left column: The claim (what was said, source, reach)
Right column: The correction (accurate version + suggested response text)
Each row has a COPIED button that copies the suggested correction to clipboard. Status badge: SPREADING (if being picked up) / CONTAINED (single source) / CORRECTED (if already addressed).
4. Competitor response panel
Only shown if competitor monitoring is enabled. One card per competitor showing:
- Competitor name
- What they did (published content, tweet, counter-announcement, silence)
- Urgency assessment
- Suggested counter-move
5. Coverage summary
Compact stats row: Total signals ยท Press mentions ยท Community threads ยท Social mentions ยท Mischaracterizations ยท Competitor moves ยท Avg sentiment score
Interaction requirements (JS click handlers โ never CSS hover):
- Signal cards: click to expand/collapse suggested action text
- Velocity chart: click data point to filter feed to that time window
- Filter buttons: all three filter rows stack independently
- Mischaracterization copy button: copies correction text to clipboard
- All filters show live count of matching signals
Styling:
- Background:
var(--color-background-primary) โ transparent outer, inherits host
- Card background:
var(--color-background-primary) with 0.5px solid var(--color-border-tertiary) border
- Section backgrounds:
var(--color-background-secondary)
- Text:
var(--color-text-primary) / var(--color-text-secondary) โ never hardcoded
- Monospace:
'SF Mono', 'Fira Code', monospace for metadata fields
- Urgency red:
#A32D2D ยท amber: #854F0B ยท green: #3B6D11
- Action badge colors: RESPOND/ESCALATE use red tint ยท CORRECT amber tint ยท AMPLIFY green tint ยท WATCH gray tint
- Source links:
color: #185FA5 โ inline <a href> tag, no border or background
- Do NOT use hardcoded dark backgrounds anywhere
Markdown output spec (launch-monitor-{YYYY-MM-DD}.md)
# Launch Monitor โ [Product Name]
**Launch date:** [DATE]
**Monitored window:** [DATE RANGE]
**Generated:** [TIMESTAMP]
**Total signals:** [N]
## TL;DR
[2-3 sentences: overall sentiment read, count of act-now items, single most urgent signal or mischaracterization]
## Summary
- Act now: [N] | Monitor: [N] | Good signals: [N] | Noise: [N]
- Mischaracterizations found: [N]
- Competitor moves: [N]
- Overall sentiment: [Positive / Mixed / Negative / Trending negative]
## Signal Feed
### ๐ด Act Now
- **[RESPOND/CORRECT/ESCALATE]** | [Signal type] | [Headline]
Context: [One sentence]
Source: [outlet] ยท Reach: [estimate] ยท [Time since launch]
Action: [Suggested action]
### ๐ก Monitor
...
### ๐ข Good Signals
...
## Mischaracterizations
| Claim | Source | Reach | Correct version | Status |
|---|---|---|---|---|
| [What was said] | [Source] | [Reach] | [Accurate version] | SPREADING/CONTAINED |
## Competitor Moves
- **[Competitor]:** [What they did] โ [Suggested counter-move]
## Source Index
- [URL] | [Source] | [Date] | [Urgency] | [Action]
## What This Means
[2-3 sentences: what the signal pattern implies for launch trajectory; the single most important action for the team to take right now]
Saved preferences
After onboarding, ask once:
"Would you like me to save your preferences so I skip the questions next time? You can always say 'change settings' to update anything."
Store: product name(s), key competitors, launch window preference, depth setting.
Distribution
After output is rendered inline and files are saved, offer sharing following references/memory-and-distribution.md (connector detection, AskUserQuestion flow, Notion/Slack options).
Skill-specific routing: push launch-monitor-{YYYY-MM-DD}.md to Notion (full report); post Act Now signals only to Slack. Use destination from integrations in ~/.nimble/business-profile.json if set; otherwise ask and save for next time.
Re-run behavior
For date window calculation, follow the Smart Date Windowing pattern in references/nimble-playbook.md โ use last_runs.launch-monitor from the profile.
If the user asks to re-run or refresh monitoring:
"I'll sweep for new signals since [last run timestamp] and update the war room. Anything new to add to the watch list?"
Only surface net-new signals since last run. Carry forward unresolved mischaracterizations and open action items.
Related skills โ next steps
After delivering the war room, suggest relevant next steps in the ## What This Means section:
- Ongoing brand monitoring: Once the active launch window closes (typically 2โ4 weeks post-launch), suggest handing off to
brand-mention-monitor for continuous brand health tracking โ it is optimized for steady-state monitoring rather than launch spikes.
- Competitor follow-up: If competitors made significant moves during the launch window, suggest
competitor-intel for deeper, ongoing competitive intelligence โ it tracks messaging, positioning shifts, and counter-narrative development over time.
- Consumer sentiment: If the product is consumer-facing and early usage data is accumulating, suggest
consumer-sentiment-monitor to track how real users are experiencing the product beyond the launch press cycle.
Materiality threshold
Skip signals that are:
- Clearly about a different product with the same name (filter via context profiling)
- Automated bots or spam accounts
- Duplicate coverage with no new information (syndicated wire copy)
- Single-digit reach with no amplification potential
Flag but don't prioritize:
- Neutral coverage that accurately describes the product
- Positive signals that need no action