|
|
@@ -831,9 +831,11 @@ For ALL query types:
|
|
|
|
- **USE THE USER'S EXACT TERMINOLOGY** - don't substitute or add tech names based on your knowledge
|
|
|
|
- **USE THE USER'S EXACT TERMINOLOGY** - don't substitute or add tech names based on your knowledge
|
|
|
|
- EXCLUDE reddit.com, x.com, twitter.com (covered by script)
|
|
|
|
- EXCLUDE reddit.com, x.com, twitter.com (covered by script)
|
|
|
|
- INCLUDE: blogs, tutorials, docs, news, GitHub repos
|
|
|
|
- INCLUDE: blogs, tutorials, docs, news, GitHub repos
|
|
|
|
- **DO NOT output a separate "Sources:" block** — instead, include the top 3-5 web
|
|
|
|
- **DO NOT output a separate "Sources:" block** — every source (X handles, subreddits,
|
|
|
|
source names as inline links on the 🌐 Web: stats line (see stats format below).
|
|
|
|
publications) is cited inline throughout the synthesis as a markdown link `[name](url)`,
|
|
|
|
The WebSearch tool requires citation; satisfy it there, not as a trailing section.
|
|
|
|
and the top 3-5 web publications appear as markdown links on the 🌐 Web: stats line.
|
|
|
|
|
|
|
|
That satisfies WebSearch's citation requirement. A trailing Sources block is forbidden.
|
|
|
|
|
|
|
|
See the URL FORMATTING section below for the full link-rendering rules.
|
|
|
|
|
|
|
|
|
|
|
|
**Options** (passed through from user's command):
|
|
|
|
**Options** (passed through from user's command):
|
|
|
|
- `--days=N` → Look back N days instead of 30 (e.g., `--days=7` for weekly roundup)
|
|
|
|
- `--days=N` → Look back N days instead of 30 (e.g., `--days=7` for weekly roundup)
|
|
|
@@ -1045,6 +1047,46 @@ Identify from the ACTUAL RESEARCH OUTPUT:
|
|
|
|
|
|
|
|
|
|
|
|
## THEN: Show Summary + Invite Vision
|
|
|
|
## THEN: Show Summary + Invite Vision
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### OUTPUT CONTRACT — six hard rules, read all of them before writing anything
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The synthesis output has six structural rules. They are a SET, not a priority order. A correct output satisfies ALL SIX on the first pass. Satisfying some by violating others is a bug, not a compromise. Each rule below has the same force as the next — do not elevate any one over the others.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**RULE A — REQUIRED: Inline markdown links on every citation.**
|
|
|
|
|
|
|
|
Every @handle, r/subreddit, publication, YouTube channel, TikTok creator, Instagram creator, and Polymarket market cited in the narrative body, KEY PATTERNS, and stats block MUST be an inline markdown link `[text](url)` at first mention. The URL comes from the raw research dump — every source item in the engine output carries its URL. First-pass synthesis MUST include these inline links; do not wait for the user to ask.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**RULE B — FORBIDDEN: Trailing list of links.**
|
|
|
|
|
|
|
|
No trailing list of links appears anywhere after the invitation. No `Sources:` block, no `References:` block, no `Further reading:` block, no `Citations:` block, no bulleted list of publication names, no closing "I have all the links... Just ask." sentence, no markdown-link list under any heading. The narrative's inline links (RULE A) ARE the source list — duplicating them into a trailing block is a bug.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**RULE C — REQUIRED: Bold headline per narrative paragraph.**
|
|
|
|
|
|
|
|
Every paragraph in "What I learned" opens with a bold headline phrase followed by a dash and the body text. Pattern: `**Headline phrase** — body text describing what people are saying...`. No plain-prose openers. No "Story 1 / Story 2 / Story 3" numbered sections. No unnumbered headings-as-pseudo-paragraphs. The bold headline IS the paragraph opener.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**RULE D — REQUIRED: Stats block uses the exact template, tree, and emoji.**
|
|
|
|
|
|
|
|
The stats block opens with the line `✅ All agents reported back!` on its own. Every active source is a line using the `├─` or `└─` tree character with its emoji prefix (🟠 Reddit, 🔵 X, 🔴 YouTube, 🎵 TikTok, 📸 Instagram, 🧵 Threads, 📌 Pinterest, 🟡 HN, 🦋 Bluesky, 🇺🇸 Truth Social, 🐙 GitHub, 📊 Polymarket, 🌐 Web, 🗣️ Top voices, 📎 Raw results). Use `│` for within-line separators. NO plain `-` bullets. NO plain "Stats" heading. NO missing emoji. Sources that returned 0 results are omitted entirely — do not include them as "0 threads" or "(no results this cycle)".
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**RULE E — REQUIRED: QUERY_TYPE-specific invitation with example follow-ups.**
|
|
|
|
|
|
|
|
The closing invitation matches the detected QUERY_TYPE (PROMPTING / RECOMMENDATIONS / NEWS / COMPARISON / GENERAL) verbatim from the five variants defined below. Each variant includes 2-3 specific example follow-ups drawn from THIS run's research (not generic). A flat "I am now an expert on {TOPIC}" with no examples is a regression — it means you skipped the variant template.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**RULE F — REQUIRED: `---` horizontal-rule separators.**
|
|
|
|
|
|
|
|
Use `---` on its own line before the stats block (between the narrative/KEY PATTERNS and the `✅ All agents reported back!` line) and again between the stats block and the invitation. The separators are part of the template, not decoration.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**All six rules apply on first pass.** If you satisfy RULES A and B by stripping structure, you have violated C/D/E/F. If you satisfy C/D/E/F by skipping links, you have violated A. Satisfy all six, or the output is wrong. Not "mostly right" — wrong.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### PRE-SYNTHESIS COMMIT — do this before drafting
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Before you write a single word of the synthesis, commit to every rule in the OUTPUT CONTRACT:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. **Template (RULE E).** Identify the QUERY_TYPE for this run. Locate the matching invitation variant (PROMPTING / RECOMMENDATIONS / NEWS / COMPARISON / GENERAL) below. Commit to using that variant verbatim at the close, with 2-3 example follow-ups drawn from this specific research.
|
|
|
|
|
|
|
|
2. **Headlines (RULE C).** Commit to opening every narrative paragraph with a bold `**Headline phrase** —`. No "Story 1 / Story 2 / Story 3" or other plain-prose patterns.
|
|
|
|
|
|
|
|
3. **Stats template (RULE D).** Commit to the `✅ All agents reported back!` opening line, the `├─` / `└─` / `│` tree characters, and an emoji prefix on every active source line. Copy the template block below literally; do not rewrite it as a bullet list.
|
|
|
|
|
|
|
|
4. **Separators (RULE F).** Commit to `---` horizontal rules before and after the stats block.
|
|
|
|
|
|
|
|
5. **Sources (RULE A).** The raw research dump is in hand and includes URLs on every source item. Identify every source you intend to cite: @handles, r/subs, publications, YouTube channels, TikTok/Instagram creators, Polymarket markets. Pull URLs. Plan to wrap each at first mention as `[text](url)`. For any specific source with no URL in raw data, note the plain-text fallback.
|
|
|
|
|
|
|
|
6. **No trailing list (RULE B).** Confirm no Sources/References/bulleted-list block will appear after the invitation.
|
|
|
|
|
|
|
|
7. **Only now begin drafting.**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This commit is a forcing function, not a post-hoc checklist. Work through all seven steps before writing any prose.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
**Display in this EXACT sequence:**
|
|
|
|
**Display in this EXACT sequence:**
|
|
|
|
|
|
|
|
|
|
|
|
**FIRST - What I learned (based on QUERY_TYPE):**
|
|
|
|
**FIRST - What I learned (based on QUERY_TYPE):**
|
|
|
@@ -1055,19 +1097,21 @@ Identify from the ACTUAL RESEARCH OUTPUT:
|
|
|
|
|
|
|
|
|
|
|
|
[Tool Name] - {n}x mentions
|
|
|
|
[Tool Name] - {n}x mentions
|
|
|
|
Use Case: [what it does]
|
|
|
|
Use Case: [what it does]
|
|
|
|
Sources: @handle1, @handle2, r/sub, blog.com
|
|
|
|
Sources: [@handle1](https://x.com/handle1), [@handle2](https://x.com/handle2), [r/sub](https://reddit.com/r/sub), [blog.com](https://blog.com/specific-post/)
|
|
|
|
|
|
|
|
|
|
|
|
[Tool Name] - {n}x mentions
|
|
|
|
[Tool Name] - {n}x mentions
|
|
|
|
Use Case: [what it does]
|
|
|
|
Use Case: [what it does]
|
|
|
|
Sources: @handle3, r/sub2, Complex
|
|
|
|
Sources: [@handle3](https://x.com/handle3), [r/sub2](https://reddit.com/r/sub2), [Complex](https://www.complex.com/specific-article/)
|
|
|
|
|
|
|
|
|
|
|
|
Notable mentions: [other specific things with 1-2 mentions]
|
|
|
|
Notable mentions: [other specific things with 1-2 mentions]
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**CRITICAL for RECOMMENDATIONS:**
|
|
|
|
**CRITICAL for RECOMMENDATIONS:**
|
|
|
|
- Each item MUST have a "Sources:" line with actual @handles from X posts (e.g., @LONGLIVE47, @ByDobson)
|
|
|
|
- Each item MUST have a "Sources:" line with actual @handles from X posts (e.g., [@LONGLIVE47](https://x.com/LONGLIVE47), [@ByDobson](https://x.com/ByDobson))
|
|
|
|
- Include subreddit names (r/hiphopheads) and web sources (Complex, Variety)
|
|
|
|
- Include subreddit names ([r/hiphopheads](https://reddit.com/r/hiphopheads)) and web sources ([Complex](https://www.complex.com/...), [Variety](https://variety.com/...))
|
|
|
|
- Parse @handles from research output and include the highest-engagement ones
|
|
|
|
- Parse @handles from research output and include the highest-engagement ones
|
|
|
|
|
|
|
|
- Every source on the "Sources:" line is a markdown link `[text](url)` — never a raw URL, never a plain name when a URL is available. The URL comes from the raw research dump.
|
|
|
|
|
|
|
|
- This per-item "Sources:" line is allowed (it's inline per recommendation). A TRAILING "Sources:" block at the end of the whole output is still forbidden — see the URL FORMATTING and "You MUST NOT" sections below.
|
|
|
|
- Format naturally - tables work well for wide terminals, stacked cards for narrow
|
|
|
|
- Format naturally - tables work well for wide terminals, stacked cards for narrow
|
|
|
|
- **CRITICAL whitespace rule:** Never insert more than ONE blank line between any two content blocks. Comparison tables should immediately follow the preceding paragraph with exactly one blank line. Do NOT pad with 3-6 empty lines before tables.
|
|
|
|
- **CRITICAL whitespace rule:** Never insert more than ONE blank line between any two content blocks. Comparison tables should immediately follow the preceding paragraph with exactly one blank line. Do NOT pad with 3-6 empty lines before tables.
|
|
|
|
|
|
|
|
|
|
|
@@ -1079,30 +1123,41 @@ CITATION RULE: Cite sources sparingly to prove research is real.
|
|
|
|
- Do NOT include engagement metrics in citations (likes, upvotes) - save those for stats box
|
|
|
|
- Do NOT include engagement metrics in citations (likes, upvotes) - save those for stats box
|
|
|
|
- Do NOT chain multiple citations: "per @x, @y, @z" is too much. Pick the strongest one.
|
|
|
|
- Do NOT chain multiple citations: "per @x, @y, @z" is too much. Pick the strongest one.
|
|
|
|
|
|
|
|
|
|
|
|
CITATION PRIORITY (most to least preferred):
|
|
|
|
CITATION PRIORITY (most to least preferred). Every cited name is a markdown link `[name](url)`:
|
|
|
|
1. @handles from X — "per @handle" (these prove the tool's unique value)
|
|
|
|
1. @handles from X — `per [@handle](https://x.com/handle)` (these prove the tool's unique value)
|
|
|
|
2. r/subreddits from Reddit — "per r/subreddit" (when citing Reddit, YouTube, or TikTok, prefer quoting top comments over just the thread title)
|
|
|
|
2. r/subreddits from Reddit — `per [r/subreddit](https://reddit.com/r/subreddit)` (when citing Reddit, YouTube, or TikTok, prefer quoting top comments over just the thread title)
|
|
|
|
3. YouTube channels — "per [channel name] on YouTube" (transcript-backed insights)
|
|
|
|
3. YouTube channels — `per [channel name](https://youtube.com/@channel) on YouTube` (transcript-backed insights)
|
|
|
|
4. TikTok creators — "per @creator on TikTok" (viral/trending signal)
|
|
|
|
4. TikTok creators — `per [@creator](https://tiktok.com/@creator) on TikTok` (viral/trending signal)
|
|
|
|
5. Instagram creators — "per @creator on Instagram" (influencer/creator signal)
|
|
|
|
5. Instagram creators — `per [@creator](https://instagram.com/creator) on Instagram` (influencer/creator signal)
|
|
|
|
6. HN discussions — "per HN" or "per hn/username" (developer community signal)
|
|
|
|
6. HN discussions — `per [HN](https://news.ycombinator.com/item?id=N)` or `per [hn/username](https://news.ycombinator.com/user?id=username)` (developer community signal)
|
|
|
|
7. Polymarket — "Polymarket has X at Y% (up/down Z%)" with specific odds and movement
|
|
|
|
7. Polymarket — `[Polymarket](https://polymarket.com/event/...) has X at Y% (up/down Z%)` with specific odds and movement
|
|
|
|
8. Web sources — ONLY when Reddit/X/YouTube/TikTok/Instagram/HN/Polymarket don't cover that specific fact
|
|
|
|
8. Web sources — ONLY when Reddit/X/YouTube/TikTok/Instagram/HN/Polymarket don't cover that specific fact; link the publication name: `per [Rolling Stone](https://rollingstone.com/...)`
|
|
|
|
|
|
|
|
|
|
|
|
The tool's value is surfacing what PEOPLE are saying, not what journalists wrote.
|
|
|
|
The tool's value is surfacing what PEOPLE are saying, not what journalists wrote.
|
|
|
|
When both a web article and an X post cover the same fact, cite the X post.
|
|
|
|
When both a web article and an X post cover the same fact, cite the X post.
|
|
|
|
|
|
|
|
|
|
|
|
URL FORMATTING: NEVER paste raw URLs anywhere in the output — not in synthesis, not in stats, not in sources.
|
|
|
|
URL FORMATTING: Every citation MUST be a markdown link `[text](url)`, NEVER a raw URL string.
|
|
|
|
|
|
|
|
Claude Code renders `[text](url)` as blue CMD-clickable text — the URL is hidden, only the link text shows.
|
|
|
|
|
|
|
|
Raw `https://...` strings are forbidden everywhere: narrative, stats, KEY PATTERNS, everywhere.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Pull the URL for each source from the raw research dump (every item in the engine output carries its source URL).
|
|
|
|
|
|
|
|
If no URL is available for a source, fall back to plain text — NEVER emit a broken empty link like `[Rolling Stone]()`.
|
|
|
|
|
|
|
|
|
|
|
|
- **BAD:** "per https://www.rollingstone.com/music/music-news/kanye-west-bully-1235506094/"
|
|
|
|
- **BAD:** "per https://www.rollingstone.com/music/music-news/kanye-west-bully-1235506094/"
|
|
|
|
- **GOOD:** "per Rolling Stone"
|
|
|
|
- **BAD:** "per Rolling Stone" (when a URL is available in the raw data — use it)
|
|
|
|
|
|
|
|
- **BAD:** "per [Rolling Stone]()" (empty link — fall back to plain text instead)
|
|
|
|
|
|
|
|
- **GOOD:** "per [Rolling Stone](https://www.rollingstone.com/music/music-news/kanye-west-bully-1235506094/)"
|
|
|
|
|
|
|
|
- **GOOD (fallback, URL genuinely missing):** "per Rolling Stone"
|
|
|
|
- **BAD stats line:** `🌐 Web: 10 pages — https://later.com/blog/..., https://buffer.com/...`
|
|
|
|
- **BAD stats line:** `🌐 Web: 10 pages — https://later.com/blog/..., https://buffer.com/...`
|
|
|
|
- **GOOD stats line:** `🌐 Web: 10 pages — Later, Buffer, CNN, SocialBee`
|
|
|
|
- **BAD stats line:** `🌐 Web: 10 pages — Later, Buffer, CNN, SocialBee` (URLs were available — link them)
|
|
|
|
Use the publication/site name, not the URL. The user doesn't need links — they need clean, readable text.
|
|
|
|
- **GOOD stats line:** `🌐 Web: 10 pages — [Later](https://later.com/blog/instagram-reels-trends/), [Buffer](https://buffer.com/resources/instagram-algorithms/), [CNN](https://www.cnn.com/2026/02/22/tech/...), [SocialBee](https://socialbee.com/blog/instagram-trends/)`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The link text is the short publication/handle/subreddit name. The URL is the deep link from the raw research — not just the bare domain. The user sees clean blue link text and can CMD-click to open the source.
|
|
|
|
|
|
|
|
|
|
|
|
**BAD:** "His album is set for March 20 (per Rolling Stone; Billboard; Complex)."
|
|
|
|
**BAD:** "His album is set for March 20 (per Rolling Stone; Billboard; Complex)."
|
|
|
|
**GOOD:** "His album BULLY drops March 20 — fans on X are split on the tracklist, per @honest30bgfan_"
|
|
|
|
**GOOD:** "His album BULLY drops March 20 — fans on X are split on the tracklist, per [@honest30bgfan_](https://x.com/honest30bgfan_)"
|
|
|
|
**GOOD:** "Ye's apology got massive traction on r/hiphopheads"
|
|
|
|
**GOOD:** "Ye's apology got massive traction on [r/hiphopheads](https://reddit.com/r/hiphopheads)"
|
|
|
|
**OK** (web, only when Reddit/X don't have it): "The Hellwatt Festival runs July 4-18 at RCF Arena, per Billboard"
|
|
|
|
**OK** (web, only when Reddit/X don't have it): "The Hellwatt Festival runs July 4-18 at RCF Arena, per [Billboard](https://www.billboard.com/music/music-news/hellwatt-festival-2026-lineup-...)"
|
|
|
|
|
|
|
|
|
|
|
|
**Lead with people, not publications.** Start each topic with what Reddit/X
|
|
|
|
**Lead with people, not publications.** Start each topic with what Reddit/X
|
|
|
|
users are saying/feeling, then add web context only if needed. The user came
|
|
|
|
users are saying/feeling, then add web context only if needed. The user came
|
|
|
@@ -1113,18 +1168,20 @@ here for the conversation, not the press release.
|
|
|
|
```
|
|
|
|
```
|
|
|
|
What I learned:
|
|
|
|
What I learned:
|
|
|
|
|
|
|
|
|
|
|
|
**{Headline summarizing topic 1}** — [1-2 sentences about what people are saying, per @handle or r/sub]
|
|
|
|
**{Headline summarizing topic 1}** — [1-2 sentences about what people are saying, per [@handle](https://x.com/handle) or [r/sub](https://reddit.com/r/sub)]
|
|
|
|
|
|
|
|
|
|
|
|
**{Headline summarizing topic 2}** — [1-2 sentences, per @handle or r/sub]
|
|
|
|
**{Headline summarizing topic 2}** — [1-2 sentences, per [@handle](https://x.com/handle) or [r/sub](https://reddit.com/r/sub)]
|
|
|
|
|
|
|
|
|
|
|
|
**{Headline summarizing topic 3}** — [1-2 sentences, per @handle or r/sub]
|
|
|
|
**{Headline summarizing topic 3}** — [1-2 sentences, per [@handle](https://x.com/handle) or [r/sub](https://reddit.com/r/sub)]
|
|
|
|
|
|
|
|
|
|
|
|
KEY PATTERNS from the research:
|
|
|
|
KEY PATTERNS from the research:
|
|
|
|
1. [Pattern] — per @handle
|
|
|
|
1. [Pattern] — per [@handle](https://x.com/handle)
|
|
|
|
2. [Pattern] — per r/sub
|
|
|
|
2. [Pattern] — per [r/sub](https://reddit.com/r/sub)
|
|
|
|
3. [Pattern] — per @handle
|
|
|
|
3. [Pattern] — per [@handle](https://x.com/handle)
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The `@handle`, `r/sub`, publication name, etc. in these templates are placeholders — at render time each one becomes a markdown link wrapping the actual handle/sub/name, with the URL pulled from the raw research dump.
|
|
|
|
|
|
|
|
|
|
|
|
Headlines should be specific and newsy ("BULLY dropped and it's dominating", "Europe is banning him one country at a time"), not generic ("Album release", "Tour updates").
|
|
|
|
Headlines should be specific and newsy ("BULLY dropped and it's dominating", "Europe is banning him one country at a time"), not generic ("Album release", "Tour updates").
|
|
|
|
|
|
|
|
|
|
|
|
**THEN - Quality Nudge (if present in the output):**
|
|
|
|
**THEN - Quality Nudge (if present in the output):**
|
|
|
@@ -1164,48 +1221,61 @@ Options:
|
|
|
|
├─ 🇺🇸 Truth Social: {N} posts │ {N} likes │ {N} reposts
|
|
|
|
├─ 🇺🇸 Truth Social: {N} posts │ {N} likes │ {N} reposts
|
|
|
|
├─ 🐙 GitHub: {N} items │ {N} reactions │ {N} comments
|
|
|
|
├─ 🐙 GitHub: {N} items │ {N} reactions │ {N} comments
|
|
|
|
├─ 📊 Polymarket: {N} markets │ {copy the market odds EXACTLY from the engine's Polymarket stats output - only real % numbers like "Arizona 33%, Michigan 25%". If you cannot find specific % odds in the data, show ONLY the market count with no description. NEVER write filler like "check markets", "active", "tracked", or any text without a real percentage.}
|
|
|
|
├─ 📊 Polymarket: {N} markets │ {copy the market odds EXACTLY from the engine's Polymarket stats output - only real % numbers like "Arizona 33%, Michigan 25%". If you cannot find specific % odds in the data, show ONLY the market count with no description. NEVER write filler like "check markets", "active", "tracked", or any text without a real percentage.}
|
|
|
|
├─ 🌐 Web: {N} pages — Source Name, Source Name, Source Name
|
|
|
|
├─ 🌐 Web: {N} pages — [Source Name](url), [Source Name](url), [Source Name](url)
|
|
|
|
├─ 🗣️ Top voices: @{handle1} ({N} likes), @{handle2} │ r/{sub1}, r/{sub2}
|
|
|
|
├─ 🗣️ Top voices: [@{handle1}](https://x.com/{handle1}) ({N} likes), [@{handle2}](https://x.com/{handle2}) │ [r/{sub1}](https://reddit.com/r/{sub1}), [r/{sub2}](https://reddit.com/r/{sub2})
|
|
|
|
└─ 📎 Raw results saved to ~/Documents/Last30Days/{slug}-raw.md
|
|
|
|
└─ 📎 Raw results saved to ~/Documents/Last30Days/{slug}-raw.md
|
|
|
|
---
|
|
|
|
---
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**🌐 Web: line — how to extract site names from URLs:**
|
|
|
|
**🌐 Web: line — how to derive the link text and URL:**
|
|
|
|
Strip the protocol, path, and `www.` — use the recognizable publication name:
|
|
|
|
Link text = the recognizable publication name (strip protocol, path, and `www.`).
|
|
|
|
- `https://later.com/blog/instagram-reels-trends/` → **Later**
|
|
|
|
Link URL = the full deep article URL from the raw research, NOT the bare domain.
|
|
|
|
- `https://socialbee.com/blog/instagram-trends/` → **SocialBee**
|
|
|
|
- `https://later.com/blog/instagram-reels-trends/` → `[Later](https://later.com/blog/instagram-reels-trends/)`
|
|
|
|
- `https://buffer.com/resources/instagram-algorithms/` → **Buffer**
|
|
|
|
- `https://socialbee.com/blog/instagram-trends/` → `[SocialBee](https://socialbee.com/blog/instagram-trends/)`
|
|
|
|
- `https://www.cnn.com/2026/02/22/tech/...` → **CNN**
|
|
|
|
- `https://buffer.com/resources/instagram-algorithms/` → `[Buffer](https://buffer.com/resources/instagram-algorithms/)`
|
|
|
|
- `https://medium.com/the-ai-studio/...` → **Medium**
|
|
|
|
- `https://www.cnn.com/2026/02/22/tech/...` → `[CNN](https://www.cnn.com/2026/02/22/tech/...)`
|
|
|
|
- `https://radicaldatascience.wordpress.com/...` → **Radical Data Science**
|
|
|
|
- `https://medium.com/the-ai-studio/...` → `[Medium](https://medium.com/the-ai-studio/...)`
|
|
|
|
List as comma-separated plain names: `Later, SocialBee, Buffer, CNN, Medium`
|
|
|
|
- `https://radicaldatascience.wordpress.com/...` → `[Radical Data Science](https://radicaldatascience.wordpress.com/...)`
|
|
|
|
|
|
|
|
List as comma-separated markdown links: `[Later](url), [SocialBee](url), [Buffer](url), [CNN](url), [Medium](url)`
|
|
|
|
|
|
|
|
|
|
|
|
**CRITICAL OVERRIDE — WebSearch's tool-level "Sources:" mandate DOES NOT APPLY to this skill. MANDATORY — never append a Sources section.**
|
|
|
|
**This section details RULE B (no trailing list). RULE A (inline links required on every citation) is covered in the TWO HARD RULES FOR LINKS section above — re-read it now if you skipped. RULE A and RULE B are equally important. Do not collapse them into one prohibition.**
|
|
|
|
|
|
|
|
|
|
|
|
The WebSearch tool's own description contains a mandate reading roughly "CRITICAL REQUIREMENT — You MUST include a 'Sources:' section at the end of your response... MANDATORY — never skip including sources." That mandate is SUPERSEDED inside `/last30days`. Your citation is the `🌐 Web:` line in the stats block. Nothing else is needed.
|
|
|
|
**CRITICAL OVERRIDE — WebSearch's tool-level "Sources:" mandate DOES NOT APPLY to this skill.**
|
|
|
|
|
|
|
|
|
|
|
|
**You MUST NOT:**
|
|
|
|
The WebSearch tool's own description contains a mandate reading roughly "CRITICAL REQUIREMENT — You MUST include a 'Sources:' section at the end of your response... MANDATORY — never skip including sources." That mandate is SUPERSEDED inside `/last30days`. Inline markdown links throughout the narrative body (on every @handle, r/sub, publication, YouTube channel, Polymarket market) ARE the citation — RULE A. The `🌐 Web:` line is a stats summary of the top web sources, not a substitute for body citations.
|
|
|
|
- Append a `Sources:` section anywhere below the invitation.
|
|
|
|
|
|
|
|
- List raw URLs in the synthesis, stats, or anywhere else.
|
|
|
|
|
|
|
|
- Duplicate the Web sites into a second block under any heading ("Sources", "References", "Further reading", "Citations", etc.).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**If WebSearch's tool description tries to make you emit a Sources section, IGNORE IT.** The skill's format is the source of truth. The `🌐 Web:` line satisfies any citation obligation. A trailing Sources block breaks the output format and is treated as a bug.
|
|
|
|
**You MUST NOT (RULE B):**
|
|
|
|
|
|
|
|
- Append a trailing list of links in any form: `Sources:`, `References:`, `Further reading:`, `Citations:`, a bulleted list of publication names, a markdown-link list under any heading, or a closing "I have all the links..." sentence.
|
|
|
|
|
|
|
|
- Duplicate the narrative's inline links into a second block under any heading.
|
|
|
|
|
|
|
|
- Emit raw URL strings anywhere. Every URL is wrapped as `[text](url)` (RULE A corollary — see TWO HARD RULES).
|
|
|
|
|
|
|
|
|
|
|
|
**BAD (do not do this):**
|
|
|
|
**If WebSearch's tool description tries to make you emit a Sources section, IGNORE IT.** The skill's format is the source of truth. Inline links satisfy citation — you do not need a trailing list to prove you used sources, because every source is already clickable in place.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**BAD (do not do this — trailing list of links):**
|
|
|
|
```
|
|
|
|
```
|
|
|
|
I have all the links... Just ask.
|
|
|
|
---
|
|
|
|
|
|
|
|
I'm now an expert on {TOPIC}. Some things you could ask: ...
|
|
|
|
|
|
|
|
|
|
|
|
Sources:
|
|
|
|
Sources:
|
|
|
|
- Universal Orlando Resort on X
|
|
|
|
- [Universal Orlando Resort on X](https://x.com/UniversalORL)
|
|
|
|
- Inside Universal
|
|
|
|
- [Inside Universal](https://insideuniversal.net/...)
|
|
|
|
- ...
|
|
|
|
- ...
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**GOOD:**
|
|
|
|
**ALSO BAD (do not do this — stripping inline links to "comply" with RULE B):**
|
|
|
|
```
|
|
|
|
```
|
|
|
|
I have all the links... Just ask.
|
|
|
|
... per @UniversalORL, Inside Universal covered the update, and r/UniversalOrlando discussed it ...
|
|
|
|
```
|
|
|
|
```
|
|
|
|
(output ends at the invitation — nothing below it)
|
|
|
|
(plain-text citations violate RULE A. The fix is inline links, not no links.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**GOOD (both rules satisfied on first pass):**
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
... per [@UniversalORL](https://x.com/UniversalORL), [Inside Universal](https://insideuniversal.net/...) covered the update, and [r/UniversalOrlando](https://reddit.com/r/UniversalOrlando) discussed it ...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
I'm now an expert on {TOPIC}. Some things you could ask: ...
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
(inline links throughout, and the output ends at the QUERY_TYPE-specific invitation — nothing below it)
|
|
|
|
|
|
|
|
|
|
|
|
**CRITICAL: Omit any source line that returned 0 results.** Do NOT show "0 threads", "0 stories", "0 markets", or "(no results this cycle)". If a source found nothing, DELETE that line entirely - don't include it at all.
|
|
|
|
**CRITICAL: Omit any source line that returned 0 results.** Do NOT show "0 threads", "0 stories", "0 markets", or "(no results this cycle)". If a source found nothing, DELETE that line entirely - don't include it at all.
|
|
|
|
NEVER use plain text dashes (-) or pipe (|). ALWAYS use ├─ └─ │ and the emoji.
|
|
|
|
NEVER use plain text dashes (-) or pipe (|). ALWAYS use ├─ └─ │ and the emoji.
|
|
|
@@ -1286,9 +1356,7 @@ For `/last30days war in Iran` (NEWS):
|
|
|
|
> - How is this playing differently in US vs international media?
|
|
|
|
> - How is this playing differently in US vs international media?
|
|
|
|
> - What's the economic impact on oil markets so far?
|
|
|
|
> - What's the economic impact on oil markets so far?
|
|
|
|
|
|
|
|
|
|
|
|
I have all the links to the {N} {source list} I pulled from. Just ask.
|
|
|
|
**No closing "I have all the links" line.** Every source already appears as a blue clickable markdown link throughout the narrative, KEY PATTERNS, and stats block — CMD-click any of them to open. The output ends at the QUERY_TYPE-specific invitation above. Do not append a trailing "I have all the links..." sentence, a Sources section, or any bulleted source list.
|
|
|
|
|
|
|
|
|
|
|
|
**Context-aware:** Only list sources that returned results. Build the source list from your stats: e.g. "14 Reddit threads, 22 X posts, and 6 YouTube videos" or "8 HN stories and 3 Polymarket markets." Never mention a source with 0 results.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
@@ -1296,13 +1364,17 @@ I have all the links to the {N} {source list} I pulled from. Just ask.
|
|
|
|
|
|
|
|
|
|
|
|
**Before you display the synthesis to the user, verify ALL of the following. If any check fails AND the underlying data supports fixing it, regenerate the synthesis ONCE with the missing elements. If the data itself is absent (e.g., no Polymarket markets on this topic), skip that check silently.**
|
|
|
|
**Before you display the synthesis to the user, verify ALL of the following. If any check fails AND the underlying data supports fixing it, regenerate the synthesis ONCE with the missing elements. If the data itself is absent (e.g., no Polymarket markets on this topic), skip that check silently.**
|
|
|
|
|
|
|
|
|
|
|
|
1. **Bold headlines present.** Every narrative paragraph in "What I learned" starts with `**Headline phrase** —`. If any paragraph opens with plain prose, regenerate with bold headlines.
|
|
|
|
1. **RULE C — bold headlines count.** Count `**` bold-headline openers in "What I learned". Expect at least 3 (one per narrative paragraph). If 0 or 1, the agent wrote plain-prose "Story 1/2/3"-style sections instead — regenerate with `**Headline phrase** — body` on every paragraph.
|
|
|
|
2. **Per-source emoji headers in the stats footer.** Every active source returned by the engine has a `├─` or `└─` line with its emoji, counts, and engagement numbers. No active source is silently dropped; no source with 0 results is displayed.
|
|
|
|
2. **RULE D — stats block tree and emoji count.** The stats block must open with `✅ All agents reported back!`. Count `├─` occurrences — expect at least 3. Count emoji-prefixed source lines (🟠🔵🔴🎵📸🧵📌🟡🦋🇺🇸🐙📊🌐🗣️📎) — expect one per active source. If the stats block is a plain "Stats" heading with `-` bullets or is missing the ✅ line, regenerate with the template block copied literally.
|
|
|
|
3. **Quoted highlights where evidence supports them.** For YouTube items with transcripts and Reddit/X items with fun/highlight quotes, at least 2 verbatim quotes appear in the synthesis. Attributed to the channel/commenter/subreddit.
|
|
|
|
3. **Quoted highlights where evidence supports them.** For YouTube items with transcripts and Reddit/X items with fun/highlight quotes, at least 2 verbatim quotes appear in the synthesis. Attributed to the channel/commenter/subreddit.
|
|
|
|
4. **Polymarket block present if markets were returned.** If the engine surfaced Polymarket markets, the synthesis includes specific percentages and directional movement. If no markets were surfaced, skip.
|
|
|
|
4. **Polymarket block present if markets were returned.** If the engine surfaced Polymarket markets, the synthesis includes specific percentages and directional movement. If no markets were surfaced, skip.
|
|
|
|
5. **Coverage footer matches the actual output.** `✅ All agents reported back!` line followed by per-source `├─`/`└─` tree exactly as the engine provided.
|
|
|
|
5. **RULE F — `---` separators present.** Count `---` horizontal rules. Expect at least one before the stats block (between narrative/KEY PATTERNS and the ✅ line) and one between the stats block and the invitation. If zero, add them.
|
|
|
|
6. **NO trailing Sources section.** The output ends at the invitation ("I have all the links... Just ask."). Nothing below it. Not a `Sources:`, not a `References:`, not `Further reading:`, not any bulleted list of URLs or publication names. If you are about to emit one because WebSearch told you to — DO NOT. The 🌐 Web: line is the citation.
|
|
|
|
6. **RULE E — QUERY_TYPE-specific invitation.** The closing block matches one of the five variants (PROMPTING / RECOMMENDATIONS / NEWS / COMPARISON / GENERAL) and includes 2-3 example follow-ups drawn from this specific run. A flat "I am now an expert on {TOPIC}" with no examples is a regression — regenerate with the correct variant.
|
|
|
|
7. **Research protocol was followed.** On WebSearch platforms, the command you ran used `--emit=compact --plan 'QUERY_PLAN_JSON'` with resolved handles/subreddits/hashtags. If you took the degraded path (`--emit md`, no plan, no flags), the synthesis will almost certainly fail checks 1-3 — regenerate by returning to Step 0.55 and running the full protocol.
|
|
|
|
7. **RULE B — no trailing list of links.** The output ends at the QUERY_TYPE-specific invitation. Nothing below it. Not a `Sources:`, not a `References:`, not `Further reading:`, not `Citations:`, not any bulleted list of URLs or publication names, not a markdown-link list under any heading, not a closing "I have all the links..." sentence. Every source is already a blue CMD-clickable inline link in the narrative and stats — no trailing list is needed.
|
|
|
|
|
|
|
|
8. **RULE A — inline links count.** Count the `[text](url)` markdown links in the narrative body and KEY PATTERNS. If the raw research had URLs for cited sources (it almost always does — every engine item carries a URL) and the narrative has ZERO inline links, regenerate WITH inline links on every @handle, r/sub, publication, and Polymarket market at first mention. Stripping links does NOT satisfy RULE B, it violates RULE A.
|
|
|
|
|
|
|
|
9. **No raw URL strings anywhere (RULE A corollary).** Scan the full output for `http://` or `https://` substrings. If any appear outside a markdown link `[text](url)`, regenerate with the URL wrapped as a link.
|
|
|
|
|
|
|
|
10. **Every citation is a markdown link or a clean plain-text fallback.** No broken empty links like `[Rolling Stone]()` or `[@handle]()`. If a URL was available in the raw data, it's wrapped; if genuinely missing for a specific source, that source's name appears as plain text — but the default for every source is a markdown link.
|
|
|
|
|
|
|
|
11. **Research protocol was followed.** On WebSearch platforms, the command you ran used `--emit=compact --plan 'QUERY_PLAN_JSON'` with resolved handles/subreddits/hashtags. If you took the degraded path (`--emit md`, no plan, no flags), the synthesis will almost certainly fail checks 1-3 — regenerate by returning to Step 0.55 and running the full protocol.
|
|
|
|
|
|
|
|
|
|
|
|
**Max ONE regeneration.** If the regenerated output still fails the self-check, display the best version you have and note to the user which check(s) the data could not satisfy, so they can re-run or adjust their query.
|
|
|
|
**Max ONE regeneration.** If the regenerated output still fails the self-check, display the best version you have and note to the user which check(s) the data could not satisfy, so they can re-run or adjust their query.
|
|
|
|
|
|
|
|
|
|
|
|