$npx -y skills add genli-ai/market-research-skills --skill topic-briefGenerate a topic-focused briefing in HTML from public news sources. Use when user asks for a briefing / observation / digest / 简报 / 观察 on any subject — region (Middle East, ASEAN, India), industry (semiconductors, EV supply chain, AI), policy issue (AI regulation, critical minera
| 1 | # Topic Brief — Thematic Observation Briefing Generator |
| 2 | |
| 3 | Generate a public-news-based information briefing for any subject (region / industry / policy issue / institution) and produce a single self-contained HTML file ready to paste into the 微信公众号 / WeChat Official Account editor. |
| 4 | |
| 5 | > Bilingual skill. Chinese version: `SKILL.zh.md`. English is the single source of truth; the `.zh.md` is a synchronized translation — always edit the English first, then mirror the change into `.zh.md` in the same change-set, never edit only the Chinese. |
| 6 | |
| 7 | ## Trigger phrases |
| 8 | |
| 9 | User says something like: |
| 10 | - "做一份 5 月下半月的中东观察" |
| 11 | - "Generate a semiconductor industry briefing for the past month" |
| 12 | - "做一期 AI 立法主题观察,时间是 2026 年 Q2" |
| 13 | - "/topic-brief" |
| 14 | - "用 topic-brief 跑一份 ..." |
| 15 | |
| 16 | Any descriptive request such as "make a briefing / observation / digest on XX" should activate this skill. |
| 17 | |
| 18 | ## Scope exclusions |
| 19 | |
| 20 | Before producing any briefing, check whether the subject falls into a refused category. The following are out of scope regardless of phrasing: |
| 21 | |
| 22 | - **Political issues** — elections, parties, political figures' positions, government legitimacy debates |
| 23 | - **Military issues** — operations, force composition, equipment counts, conflict details, defense policy |
| 24 | - **Religious issues** — doctrines, denominational disputes, religious leaders' statements |
| 25 | - **Entertainment celebrity gossip** — personal life, scandals, fan disputes |
| 26 | - **Other inherently controversial topics** — culture wars, identity disputes, value-judgement debates |
| 27 | |
| 28 | If the requested subject is one of the above, reply with exactly one line and stop: |
| 29 | |
| 30 | ``` |
| 31 | Out of scope. (超出能力范围) |
| 32 | ``` |
| 33 | |
| 34 | Do not run search, do not draft anything, do not negotiate the scope. |
| 35 | |
| 36 | ## Response language |
| 37 | |
| 38 | Reply in the language of the user's request. Chinese question → Chinese reply; English question → English reply; mixed input → follow the dominant language. The generated HTML itself follows the language of the source materials and the `subject_name` (Chinese subjects produce Chinese briefings, English subjects produce English briefings). Field labels in user-facing reports (e.g., 来源 / Source) should match the briefing's body language. |
| 39 | |
| 40 | ## 5-step workflow |
| 41 | |
| 42 | ### Step 1 — Collect parameters (one user-facing question prompt, 4 questions) |
| 43 | |
| 44 | If the user did not provide all parameters in the trigger, ask everything in **one batched user-question prompt**: |
| 45 | |
| 46 | | Question | Header | Options | |
| 47 | |---|---|---| |
| 48 | | What is this issue's subject? | 主题 / Subject | free text (region / industry / issue / institution name) | |
| 49 | | Time window? | 时间 / Period | "past two weeks / past month / past quarter / custom range". **Immediately normalize the answer to two ISO dates `[period_start, period_end]`** (YYYY-MM-DD). Example: if today is 2026-05-13 and the user says "past month" → period_start=2026-04-13, period_end=2026-05-13 | |
| 50 | | Source preference? | 信息源 / Sources | "A default authoritative whitelist / B my own whitelist / C block certain sources" | |
| 51 | | Author byline? | 作者 / Author | Prompt: "The cover bottom-left author slot defaults to 'developed by Gen' — what should it show?" Explicit options: "A keep default / B leave blank". The user-question prompt's built-in `Other` option lets the user type a custom byline. | |
| 52 | |
| 53 | - The **subject** field lands in JSON as `subject_name` (e.g., "中东", "半导体", "AI 立法") |
| 54 | - The **author** field lands in JSON as `author`, rendered at the cover bottom-left. Three user options map to three JSON states: |
| 55 | |
| 56 | | User choice | JSON action | Rendered effect | |
| 57 | |---|---|---| |
| 58 | | A keep default | omit `author` field | shows "developed by Gen" (schema default) | |
| 59 | | B leave blank | write `"author": ""` | blank | |
| 60 | | Other custom (e.g., "张三 · 研究院") | write `"author": "张三 · 研究院"` | custom text | |
| 61 | |
| 62 | - Within the same session, if the user has already answered the author question, reuse the last value for subsequent runs (unless they change it). |
| 63 | |
| 64 | If the trigger already specifies every parameter ("做 5.1–5.12 的中东观察,作者署名 '张三'"), skip the question prompt and proceed. |
| 65 | |
| 66 | ### Step 2 — Parallel material gathering |
| 67 | |
| 68 | **Every search query must include a time filter.** For Google / Bing: `after:YYYY-MM-DD before:YYYY-MM-DD` (using the period_start / period_end normalized in Step 1); for other engines, use the equivalent syntax |