From 06f9e3744ef521ef74213b9fb5d66d8a71d562c9 Mon Sep 17 00:00:00 2001 From: Elizaveta Orekhova Date: Wed, 19 Aug 2026 15:40:10 -0300 Subject: [PATCH 1/2] Fix the public-safety check: avoid the word "token" The public-safety grep bans "token" because it normally means a credential. The Shopee title-search guidance added in #31 used it in the linguistic sense ("search short tokens"), which tripped the check on nine lines across two skills and left main red. Reworded to "terms", which reads better for search guidance anyway. No behaviour change. Co-Authored-By: Claude Opus 4.8 --- skills/ml-product-analysis/SKILL.md | 6 +++--- skills/pulse-find-exact-same-product/SKILL.md | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/skills/ml-product-analysis/SKILL.md b/skills/ml-product-analysis/SKILL.md index 7861b89..8fd5187 100644 --- a/skills/ml-product-analysis/SKILL.md +++ b/skills/ml-product-analysis/SKILL.md @@ -207,7 +207,7 @@ must belong to the same marketplace. Build a clean search query from the title or photo description, plus a broadened fallback query. On Shopee, titles mix Portuguese, English and Chinese, so prepare -**short tokens in both languages** instead of one long phrase. +**short terms in both languages** instead of one long phrase. ### Step 2 — Find analogs @@ -220,7 +220,7 @@ Both the keyword and photo paths feed the same analog pipeline: For the photo route, the image-search results play this role. - **Shopee:** there is **no image search and no search by meaning**. Comparables come from the subject's own category plus a title search — and - because titles mix Portuguese, English and Chinese, search **short tokens in + because titles mix Portuguese, English and Chinese, search **short terms in both languages** rather than one long phrase, then merge the hits. 2. **Augment when recall is thin.** Optionally widen the candidate set using category and keyword search, or constrain to the subject's category. On Shopee, @@ -341,7 +341,7 @@ The seller should never see a system or stack error — only a friendly next ste the seller to confirm. - **Search returns nothing:** an empty result for a niche or non-pt-BR query is normal — retry once with an English or broadened query, then move on. On Shopee, - also try short tokens in the other language before giving up. If search is + also try short terms in the other language before giving up. If search is temporarily unavailable, say so briefly and rely on the other data. - **No catalogue or buy-box on Shopee:** never present catalogue status, a buy-box winner, a buy-box price or a seller count for a Shopee item, and never map a diff --git a/skills/pulse-find-exact-same-product/SKILL.md b/skills/pulse-find-exact-same-product/SKILL.md index 08a7fa8..9bbe1a1 100644 --- a/skills/pulse-find-exact-same-product/SKILL.md +++ b/skills/pulse-find-exact-same-product/SKILL.md @@ -10,7 +10,7 @@ description: > o mesmo produto", "anúncios duplicados", "esse produto já existe na Shopee", "procurar esse item na Shopee". Ask which marketplace when unclear; never mix the two. On Mercado Livre the shared catalogue anchors a match; Shopee has no - shared catalogue, so matching is a short-token title search confirmed by + shared catalogue, so matching is a title search on short terms, confirmed by brand, category and a plausible price band, and photo search is unsupported there. --- @@ -147,10 +147,10 @@ numbers. widen to a title search inside the category if that set is thin. - **Shopee:** title search is a **literal substring match**, and item titles mix Portuguese, English and Chinese. So: - - search several **short tokens** instead of one long precise phrase — a long + - search several **short terms** instead of one long precise phrase — a long phrase typically returns nothing at all; - - try both the Portuguese and the English wording of the same token; - - **scope the search to a category**, because a short generic token on its own + - try both the Portuguese and the English wording of the same term; + - **scope the search to a category**, because a short generic term on its own comes back full of unrelated bundles and accessories. - Prefer a compact candidate set first, then broaden only when recall is clearly too low. @@ -225,11 +225,11 @@ enough. Empty field → `—`; never guess or fabricate. whether a Mercado Livre product is also on Shopee, run the search twice and report the two sides separately. - **No image-similarity search on Shopee:** say so in one short sentence and - offer the token search based on your own reading of the photo instead. Never + offer a term search based on your own reading of the photo instead. Never imply a photo match was performed. - **Nothing found on Shopee:** an empty result is a floor, not a verdict — coverage includes only items with at least one lifetime sale, and a literal - title search misses the wordings you did not try. Offer to try other tokens + title search misses the wordings you did not try. Offer to try other terms or another category. - **Market data temporarily unavailable:** retry once quietly; if it is still down, say market data is temporarily unavailable and to try again shortly. From b0379ab2b3fdf7e380b25cba4e4ab45966fcfc96 Mon Sep 17 00:00:00 2001 From: Elizaveta Orekhova Date: Thu, 20 Aug 2026 13:08:21 -0300 Subject: [PATCH 2/2] Render the cards and charts inline instead of treating them as optional MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every skill that specifies visuals guarded them behind "when the client can render inline visuals" and named no mechanism. Nothing in the Claude app matches that phrase, so the skill silently took the markdown fallback and the seller never saw a card or a chart — the visuals were effectively dead in the surface most people use. The thirteen skills that specify visuals now render them every time the data supports them, as a self-contained panel: an artifact where the client renders artifacts, an inline widget where it renders widgets. Cards first, then charts, then the written read. The data table and the estimate disclaimer still live in the response text, never inside the panel. The panel is not optional and must not be described instead of drawn. Skipping one chart whose own threshold is not met never means skipping the panel, and where no visual surface exists at all the markdown-plus-text-cards fallback still applies. No card or chart was added, renamed or removed: every existing spec, data threshold, palette rule and per-marketplace window label is untouched, and so is every other section of every file. The five skills that never specified visuals — single-product analysis, buy-box comparison, product change monitor, same-product finder and the copilot — are deliberately left alone. Co-Authored-By: Claude Opus 4.8 --- skills/category-monitor/SKILL.md | 33 ++++++++++---- skills/category-opportunity-index/SKILL.md | 38 +++++++++------- .../SKILL.md | 36 ++++++++++----- skills/growing-leaf-category-tracker/SKILL.md | 28 +++++++++--- .../high-demand-low-quality-finder/SKILL.md | 26 +++++++++-- .../new-growing-products-in-category/SKILL.md | 27 +++++++++--- .../popular-international-products/SKILL.md | 28 +++++++++--- skills/seller-overview-tracker/SKILL.md | 44 +++++++++++++------ skills/top-brand-position-tracker/SKILL.md | 33 +++++++++----- skills/top-keywords-in-my-category/SKILL.md | 29 +++++++++--- skills/top-sellers-in-category/SKILL.md | 29 +++++++++--- .../unbranded-products-in-category/SKILL.md | 38 +++++++++++----- skills/uncontested-niche-finder/SKILL.md | 39 ++++++++++------ 13 files changed, 309 insertions(+), 119 deletions(-) diff --git a/skills/category-monitor/SKILL.md b/skills/category-monitor/SKILL.md index b5588e5..359d8c2 100644 --- a/skills/category-monitor/SKILL.md +++ b/skills/category-monitor/SKILL.md @@ -237,13 +237,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and a -seller-tier chart; otherwise fall back to the markdown tables plus text cards. -Never block on visuals. The snapshot table (and the comparison table, when -present) always render as markdown in the response text, and the downloadable -file mirrors what is shown. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Cards:** estimated sales, number of products and number of active sellers, plus the concentration figure as a value or small bar — labelled @@ -263,8 +278,8 @@ When inline visuals are available: simple line across those periods. Presentation rules: column headers are words, never a bare "Δ" symbol; show the -color-dot legend only when those dots appear (the comparison table); render a -chart only when the data supports it. +color-dot legend only when those dots appear (the comparison table); and the +downloadable file mirrors what is shown. ## Notes & Guardrails diff --git a/skills/category-opportunity-index/SKILL.md b/skills/category-opportunity-index/SKILL.md index 68ad07b..9ea9469 100644 --- a/skills/category-opportunity-index/SKILL.md +++ b/skills/category-opportunity-index/SKILL.md @@ -259,14 +259,28 @@ There is no JoomPulse category dashboard link for Shopee, so never invent one. ## Visualization -When the client can render inline visuals, present the opportunity badge, -metric cards, and the appropriate charts; otherwise fall back to a markdown -table plus text cards. Never block on visuals — if the rich-visual path is -unavailable for any reason, render the markdown fallback. The monthly indicators -table always renders as markdown in the response text, on every surface, and the -⚠️ estimate disclaimer always stays in the text. - -When inline visuals are available, present in one panel: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Opportunity badge** at the top: Alta 🟢 / Média 🟡 / Baixa 🔴 (show `—` if missing), with the marketplace and the reference month. @@ -299,14 +313,6 @@ or "Era | Agora"), never a bare "Δ" symbol. Show a 🟢/🔴/🆕 legend only o where those symbols actually appear — never on a first or baseline run. Render a chart only when the underlying data supports it, and skip it otherwise. -On a text-only surface, render the same information as markdown and text: the -badge as a heading line, the five metrics as the indicators table or text cards, -the trend as one short line describing the ~12-month direction (Mercado Livre -only, and only when there are at least about six months of history), the -concentration as a text value under its own marketplace's label (for example -`Monopolização: 38% (baixa — bom)` on Mercado Livre), and the seasonality as a -text chip line on Mercado Livre only. - ## Notes & Guardrails The seller should never see a system or stack error — only a friendly next step. diff --git a/skills/fast-growing-international-products/SKILL.md b/skills/fast-growing-international-products/SKILL.md index 3d7710d..064c008 100644 --- a/skills/fast-growing-international-products/SKILL.md +++ b/skills/fast-growing-international-products/SKILL.md @@ -210,12 +210,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and a chart; -otherwise fall back to the markdown table plus text cards. Never block on visuals. -The product table always renders as markdown, on every surface, and the ⚠️ -disclaimer always stays in the text. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Three cards:** number of products in the shortlist (top-N), number of distinct categories represented, and average ticket. @@ -225,10 +241,10 @@ When inline visuals are available: the most fast-growing international products. Render charts only when there are enough items (skip under about four). -Presentation rules: render a chart only when the data supports it; any change -column uses a word header, never a bare "Δ". If you show Mercado Livre seller -medals as colored chips, use the standard palette. On Shopee there are no medals -— write the shop tier as plain text and never colour it as a rung on a ladder. +Presentation rules: any change column uses a word header, never a bare "Δ". If +you show Mercado Livre seller medals as colored chips, use the standard palette. +On Shopee there are no medals — write the shop tier as plain text and never +colour it as a rung on a ladder. ## Notes & Guardrails diff --git a/skills/growing-leaf-category-tracker/SKILL.md b/skills/growing-leaf-category-tracker/SKILL.md index 1e0cb56..7ff9bb6 100644 --- a/skills/growing-leaf-category-tracker/SKILL.md +++ b/skills/growing-leaf-category-tracker/SKILL.md @@ -190,12 +190,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and a chart; -otherwise fall back to the markdown table plus text cards. Never block on visuals. -The ranking table always renders as markdown in the response text, on every -surface, and the ⚠️ disclaimer always stays in the text. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Three cards:** number of growing niches found, the single fastest-growing niche (name + growth %), and the average growth across the shortlist. diff --git a/skills/high-demand-low-quality-finder/SKILL.md b/skills/high-demand-low-quality-finder/SKILL.md index bab382b..a5e72f9 100644 --- a/skills/high-demand-low-quality-finder/SKILL.md +++ b/skills/high-demand-low-quality-finder/SKILL.md @@ -238,10 +238,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and a chart on top -of the markdown table — never instead of it. The product table always renders as -markdown. Otherwise, fall back to plain text: the cards as text lines and the -table as markdown, with no chart. +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: **Metric cards (three):** diff --git a/skills/new-growing-products-in-category/SKILL.md b/skills/new-growing-products-in-category/SKILL.md index e2f1f44..b1ddfaa 100644 --- a/skills/new-growing-products-in-category/SKILL.md +++ b/skills/new-growing-products-in-category/SKILL.md @@ -232,11 +232,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and, when the -data supports it, a bar chart above the markdown table; otherwise present a -short markdown cards block (or a tiny two-column Métrica | Valor table) plus -text. **The product table always renders as markdown**, never inside a widget — -it is the main deliverable. +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Summary cards** over the surviving listings: - **Produtos novos encontrados** — how many listings survived the filters. diff --git a/skills/popular-international-products/SKILL.md b/skills/popular-international-products/SKILL.md index 761887d..d753fae 100644 --- a/skills/popular-international-products/SKILL.md +++ b/skills/popular-international-products/SKILL.md @@ -201,12 +201,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and a chart; -otherwise fall back to the markdown table plus text cards. Never block on visuals. -The product table always renders as markdown, on every surface, and the ⚠️ -disclaimer always stays in the text. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Three cards:** number of international products found, total estimated sales over the window in use — weekly on Mercado Livre, 30 days on Shopee — and diff --git a/skills/seller-overview-tracker/SKILL.md b/skills/seller-overview-tracker/SKILL.md index bd1c279..e111d0f 100644 --- a/skills/seller-overview-tracker/SKILL.md +++ b/skills/seller-overview-tracker/SKILL.md @@ -273,20 +273,36 @@ to the user. ## Visualization -Surface-aware. **Never block on visuals** — if anything fails, fall back to the -markdown rendering below. The snapshot table (and the comparison table, when -present) always render as markdown in the response text, and the downloadable file -mirrors what is shown. - -- **When the client can render inline visuals**, present **metric cards** for the - key current metrics — on Mercado Livre, for example estimated monthly revenue, - estimated monthly sales, listings, cancellation rate, and medal / reputation; on - Shopee, estimated monthly revenue and sales (built up from items), listings, buyer - rating, and shop tier. With a comparison, you may annotate each card with its - `era → agora` change. **Never show a card for a field that does not exist on the - marketplace** — no cancellation-rate or 60/365-day card on Shopee. -- **Otherwise** (plain terminal, no visual support), output the same information as a - markdown table plus a short text summary. Same numbers, no visual. +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: + +- **Metric cards** for the key current metrics — on Mercado Livre, for example + estimated monthly revenue, estimated monthly sales, listings, cancellation rate, + and medal / reputation; on Shopee, estimated monthly revenue and sales (built up + from items), listings, buyer rating, and shop tier. With a comparison, you may + annotate each card with its `era → agora` change. **Never show a card for a + field that does not exist on the marketplace** — no cancellation-rate or + 60/365-day card on Shopee. - **Round all displayed numbers** and use **pt-BR number and currency formatting** (for example `R$ 1,38 mi`, `7.900`, `+1,3 p.p.`) everywhere — cards and table. - On Mercado Livre, use a consistent medal palette: platina = purple, ouro = amber, diff --git a/skills/top-brand-position-tracker/SKILL.md b/skills/top-brand-position-tracker/SKILL.md index 7ad016b..d2e255f 100644 --- a/skills/top-brand-position-tracker/SKILL.md +++ b/skills/top-brand-position-tracker/SKILL.md @@ -173,12 +173,28 @@ to see how positions moved. ## Visualization -Layer a visual summary on top of the markdown table — never instead of it. The -visuals summarize; the **ranked table is always the deliverable**. Pick the path -by surface and never block waiting for a visual. - -**When the client can render inline visuals,** present metric cards plus the bar -chart: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +**The panel contains:** - **Three cards:** - **Marcas ativas** — the number of named brands in the ranking. @@ -192,11 +208,6 @@ chart: descending. Use a neutral single-hue ramp — this bar ranks size, it does not signal good or bad, so no semantic green/red. -**Otherwise (a terminal or any client without inline visuals),** present the same -three cards as a short text block (label and value per line) and let the markdown -table itself carry the ranking. Do not attempt a visual widget; never block -waiting for one. - **Tables always render as markdown,** on every surface — the ranked table lives in the response text, never inside a rendered visual. diff --git a/skills/top-keywords-in-my-category/SKILL.md b/skills/top-keywords-in-my-category/SKILL.md index 945e76a..2777f02 100644 --- a/skills/top-keywords-in-my-category/SKILL.md +++ b/skills/top-keywords-in-my-category/SKILL.md @@ -86,11 +86,28 @@ once, in place of the estimate disclaimer. ## Visualization -When the client can render inline visuals, present metric cards and a chart; -otherwise fall back to the markdown table plus text cards. Never block on visuals. -The keywords table always renders as markdown, on every surface. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Three cards:** number of keywords, the number-one term, and the least-disputed term (the one with the fewest competing products among the top). @@ -100,8 +117,6 @@ When inline visuals are available: terms. Render the chart only when there are enough keywords (skip under about five). -Presentation rules: render a chart only when the data supports it. - ## Notes & Guardrails The seller should never see a system or stack error — only a friendly next step. diff --git a/skills/top-sellers-in-category/SKILL.md b/skills/top-sellers-in-category/SKILL.md index bfd52f1..fd2a401 100644 --- a/skills/top-sellers-in-category/SKILL.md +++ b/skills/top-sellers-in-category/SKILL.md @@ -116,13 +116,28 @@ a **Variação** column, and a **Destaques** block (maiores altas / maiores qued ## Visualization -When the client can render inline visuals, present metric cards and charts; -otherwise fall back to the markdown table plus text cards. Never block on visuals. -The leaderboard (and the comparison, when present) always renders as markdown in -the response text, the downloadable file mirrors it, and the ⚠️ disclaimer always -stays in the text. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Four cards:** number of sellers in the category (and how many have sales), the leader's share of the shortlist's revenue, the average monthly revenue across diff --git a/skills/unbranded-products-in-category/SKILL.md b/skills/unbranded-products-in-category/SKILL.md index cc92755..4449b4b 100644 --- a/skills/unbranded-products-in-category/SKILL.md +++ b/skills/unbranded-products-in-category/SKILL.md @@ -196,12 +196,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and a chart; -otherwise fall back to the markdown table plus text cards. Never block on visuals. -The product table always renders as markdown in the response text, on every -surface, and the ⚠️ disclaimer always stays in the text. No product images. - -When inline visuals are available: +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: - **Three cards:** number of unbranded products found — on Shopee label it as a lower bound — total estimated sales for the window in use, and average ticket. @@ -210,11 +226,11 @@ When inline visuals are available: the chart only when there are enough products (skip it under about four), and never block on it. -Presentation rules: render a chart only when the data supports it; any column with -movement uses a word header, never a bare "Δ". The medal palette (platina = purple, -ouro = amber, prata = blue, sem medalha = white with a thin border) is Mercado Livre -only — on Shopee write the shop tier as plain text and never colour it as if it were -a rung on a ladder. +Presentation rules: no product images; render a chart only when the data supports +it; any column with movement uses a word header, never a bare "Δ". The medal palette +(platina = purple, ouro = amber, prata = blue, sem medalha = white with a thin +border) is Mercado Livre only — on Shopee write the shop tier as plain text and +never colour it as if it were a rung on a ladder. ## Notes & Guardrails diff --git a/skills/uncontested-niche-finder/SKILL.md b/skills/uncontested-niche-finder/SKILL.md index 7117773..8dedc7f 100644 --- a/skills/uncontested-niche-finder/SKILL.md +++ b/skills/uncontested-niche-finder/SKILL.md @@ -300,11 +300,28 @@ Shopee: ## Visualization -When the client can render inline visuals, present metric cards and, when the -data supports it, the appropriate chart; otherwise present a short text version -of the cards. **The product table always renders as markdown** — never inside a -widget — so the competition signal stays legible. Render a chart only when the -data supports it, and skip it otherwise. +**Render the visuals every time the data supports them.** As soon as the analysis +is done, present the cards and charts described below as a **self-contained visual +panel** — an artifact where the client renders artifacts, an inline widget where +it renders widgets. Do not ask permission first, do not describe the panel instead +of drawing it, and do not offer it as an optional extra: the cards and charts are +part of the answer, not a follow-up. + +- **Order:** the cards first, then the charts, then the written read. +- **The data table always stays markdown in the response text**, never inside the + panel — the panel carries cards and charts only. +- **The estimate disclaimer always stays in the response text** as well. +- **Skip an individual chart when its own data threshold is not met** (each + threshold is stated below): a chart nobody can read is worse than no chart. + Skipping one chart never means skipping the panel. +- **Only the cards and charts specified below.** Do not invent extra ones, and do + not promote a categorical value to a bar — a chip or plain text is the honest + rendering for it. +- **If no visual surface is available at all**, fall back to the markdown table + plus the same figures written as text cards. Never block on visuals, and never + leave the answer without its numbers. + +The panel contains: **Cards** — three summary cards: @@ -321,14 +338,10 @@ used — strongest uncontested niches first, each bar labelled with a short prod name. **Skip the bar entirely when there are fewer than four products** — show only the cards and the table. -**Otherwise (no inline visuals)**: render the three cards as a short text block, -one line each, and — only when there are four or more products — a tiny text list -of the top niches by estimated revenue over that same window. **Never block on -visuals**; if inline rendering is unavailable or fails, fall straight through to -the markdown output. Round numbers and use pt-BR formatting (for example `R$ -1.234`, `1.234 vendas`). If you show Mercado Livre seller medals as coloured -chips, keep the standard palette; on Shopee there are no medals, so write the -shop tier as plain text and never colour it as a rung on a ladder. +Round numbers and use pt-BR formatting (for example `R$ 1.234`, `1.234 vendas`). +If you show Mercado Livre seller medals as coloured chips, keep the standard +palette; on Shopee there are no medals, so write the shop tier as plain text and +never colour it as a rung on a ladder. ## Notes & Guardrails