{"id":"2979de2c-dab7-4bec-9293-d591efee2ee5","shortId":"LDnaP9","kind":"skill","title":"weekly-competitor-tracker","tagline":"Track weekly competitor changes and generate a delta-report from your markdown notes. Compares current files vs. last-week snapshot — no APIs, no code required. Use for Monday reviews, roadmap prep, or strategy meetings. Triggers: 'track competitor changes', 'weekly competitor re","description":"# Weekly Competitor Tracker\n\nThis skill tracks weekly competitor changes by comparing your current markdown competitor notes against a saved snapshot from the previous week. It generates a structured delta-report showing what changed, what's new, and what was removed — with no APIs, no code, and no external services required.\n\n**Input:**\n- `competitors/` folder with one `.md` file per competitor (e.g., `competitors/acme.md`)\n- Optional: `competitors/snapshot/` subfolder with previous-week versions of the same files\n\n**Output:**\n- `competitor-delta-YYYY-MM-DD.md` — structured delta-report saved to the `competitors/` folder\n\n---\n\n## Language Detection\n\nDetect the user's language from their message:\n- If Russian (or contains Cyrillic): respond in Russian\n- If English (or other Latin-script language): respond in English\n- If ambiguous: respond in the language of the trigger phrase used\n\n**Important:** All error messages, warnings, and instructions in subsequent steps must be output in the detected language.\n\n---\n\n## Instructions\n\n### Step 1: Validate Input\n\n1. Check that the user has provided a path to a `competitors/` folder.\n   - If no folder provided:\n     - EN: \"No competitors folder provided. Create a `competitors/` folder with one .md file per competitor and try again.\"\n     - RU: \"Папка конкурентов не предоставлена. Создайте папку `competitors/` с одним файлом .md на каждого конкурента и повторите попытку.\"\n   - If folder is empty (no .md files):\n     - EN: \"No competitor files found in the folder. Add at least one .md file and retry.\"\n     - RU: \"В папке не найдены файлы конкурентов. Добавьте хотя бы один файл .md и повторите попытку.\"\n\n2. List all `.md` files in the `competitors/` folder (excluding the `snapshot/` subfolder).\n   - These are the current-week competitor notes.\n   - If only non-.md files are found:\n     - EN: \"Warning: only non-markdown files found. Proceed only if .md files exist.\"\n     - RU: \"Внимание: найдены только файлы не-Markdown. Продолжайте только если существуют файлы .md.\"\n\n3. Check for `competitors/snapshot/` subfolder.\n   - If it exists: load snapshot files for comparison (Step 3).\n   - If it does not exist: this is a first run — proceed to baseline mode (Step 4).\n\n### Step 2: Read Current Competitor Files\n\n1. For each `.md` file in `competitors/`:\n   - Extract the competitor name from the filename (e.g., `acme.md` → \"Acme\").\n   - Read the file content.\n   - Parse into sections by H2 headers (`## Section Name`).\n   - If no H2 headers found: treat the entire file as one section called \"General\".\n   - Extract key facts per section (bullet points, sentences with factual content).\n\n2. Build a data structure: `{competitor_name: {section_name: [fact_list]}}` for all current files.\n\n### Step 3: Compare Against Snapshot (if snapshot exists)\n\n1. For each current competitor file, look for a matching file in `competitors/snapshot/`.\n   - Match by filename (case-insensitive).\n   - If current file has no snapshot counterpart: mark as \"NEW — first appearance\".\n   - If snapshot has a file with no current counterpart: mark as \"REMOVED from tracking\".\n\n2. For each matched competitor, compare section by section:\n   - **Changed:** content differs between current and snapshot version.\n   - **New:** section or fact present in current but not in snapshot.\n   - **Removed:** section or fact present in snapshot but not in current.\n   - **Unchanged:** content identical or semantically equivalent.\n\n3. Assign significance rating to each change based on section type:\n   - **High:** Pricing, Product, Features, Plans, Roadmap\n   - **Medium:** Messaging, Homepage, UX, Positioning\n   - **Low:** News, Blog, Social, About, Team\n\n4. Determine overall status per competitor:\n   - 🔴 Significant: at least one High-significance change found\n   - 🟡 Minor: only Medium or Low changes found\n   - 🟢 No changes: no differences detected\n\n**Edge Cases:**\n- If section names differ between current and snapshot: match by similarity (e.g., \"Pricing\" matches \"Price\"); note unmatched sections as \"Structure changed\".\n- If snapshot file is empty or unreadable: treat as missing snapshot for that competitor; note in report.\n- If competitor file has no sections (plain text only): perform paragraph-level diff; add note in detected language:\n  - EN: \"Diff quality limited — consider adding ## section headers.\"\n  - RU: \"Качество сравнения ограничено — рассмотрите добавление заголовков ## для секций.\"\n\n### Step 4: Baseline Mode (no snapshot exists)\n\n1. Generate a baseline summary (not a diff) for each competitor:\n   - List all sections found.\n   - Summarize key facts per section.\n   - Do not attempt diff comparisons.\n\n2. Add a prominent note at the top of the report (in detected language):\n   - EN: > ⚠️ **First Run — No Snapshot Found**\n   >    > This is your baseline report. To enable delta tracking next week, copy all files from `competitors/` to `competitors/snapshot/`.\n   - RU: > ⚠️ **Первый запуск — снимок не найден**\n   >    > Это базовый отчёт. Чтобы включить отслеживание изменений на следующей неделе, скопируйте все файлы из `competitors/` в `competitors/snapshot/`.\n\n### Step 5: Generate Delta Report\n\n1. Create the output file: `competitor-delta-YYYY-MM-DD.md` (use today's date).\n\n2. Write report header:\n   - Period: last snapshot date (from snapshot file metadata or \"unknown\") → today's date\n   - Competitors tracked: count\n   - Changes detected: total count of High + Medium changes\n\n3. For each competitor, write a section following the Output Format below.\n\n4. Write a Summary table at the end covering all competitors.\n\n5. Add a reminder at the bottom (in detected language):\n   - EN: > **Next step:** Copy current files from `competitors/` to `competitors/snapshot/` to update your baseline for next week.\n   - RU: > **Следующий шаг:** Скопируйте текущие файлы из `competitors/` в `competitors/snapshot/` для обновления вашей базовой линии на следующую неделю.\n\n6. Save file to `competitors/` folder.\n\n### Negative Cases\n\n- **No folder provided or folder empty:** Stop. Return error message with instructions (see Step 1, with language-appropriate messages).\n- **User provides a single file path instead of a folder:** \n  - EN: \"Expected a folder path, not a single file. Point to the `competitors/` folder.\"\n  - RU: \"Ожидается путь к папке, а не к одному файлу. Укажите путь к папке `competitors/`.\"\n- **All competitor files are empty:** \n  - EN: \"All competitor files appear to be empty. Add content to each file and retry.\"\n  - RU: \"Все файлы конкурентов пусты. Добавьте содержание в каждый файл и повторите попытку.\"\n\n---\n\n## Output Format\n\n```markdown\n# Competitor Delta Report — YYYY-MM-DD\n\n**Period:** [last snapshot date or \"First run (baseline)\"] → [today's date]\n**Competitors tracked:** N\n**Changes detected:** N (High: N, Medium: N, Low: N)\n\n---\n\n## [Competitor Name]\n\n**Overall:** 🔴 Significant changes / 🟡 Minor changes / 🟢 No changes\n\n### What Changed\n| Section | Change | Significance |\n|---------|--------|-------------|\n| Pricing | New Starter plan added at $49/mo | High |\n| Messaging | Homepage headline updated | Medium |\n\n### What's New\n- [new fact not present in snapshot]\n\n### What Was Removed\n- [fact present in snapshot but gone now]\n\n### Unchanged\n- Product core features: no changes detected\n\n---\n\n## Summary\n\n| Competitor | Status | Key Change |\n|------------|--------|------------|\n| Acme | 🔴 Significant | New pricing tier |\n| Rival | 🟢 No changes | — |\n\n---\n\n> **Next step:** Copy current files from `competitors/` to `competitors/snapshot/` to update your baseline for next week.\n```\n\n**Field rules:**\n- Significance: High (Pricing/Product/Features), Medium (Messaging/UX/Positioning), Low (News/Blog/Social)\n- Emoji status: 🔴 = at least one High change; 🟡 = only Medium/Low changes; 🟢 = no changes\n- \"What Changed\" table: only include actual changes, not stable items\n- \"Unchanged\" section: brief summary only (not a full list of all stable facts)\n- If first run (no snapshot): replace What Changed/New/Removed sections with \"Baseline Summary\" section listing current state","tags":["weekly","competitor","tracker","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-weekly-competitor-tracker","topic-agent-skills","topic-agentic-skills","topic-ai-agents","topic-ai-skills","topic-awesome-list","topic-claude","topic-claude-ai","topic-claude-ai-skills","topic-claude-code","topic-claude-cowork","topic-claude-memory","topic-claude-skills"],"categories":["claude-skills-kit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/KirKruglov/claude-skills-kit/weekly-competitor-tracker","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add KirKruglov/claude-skills-kit","source_repo":"https://github.com/KirKruglov/claude-skills-kit","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 7 github stars · SKILL.md body (8,099 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:13:39.670Z","embedding":null,"createdAt":"2026-05-18T13:21:17.765Z","updatedAt":"2026-05-18T19:13:39.670Z","lastSeenAt":"2026-05-18T19:13:39.670Z","tsv":"'1':192,195,380,457,685,776,904 '2':287,375,434,502,710,786 '3':343,357,450,547,814 '4':373,575,679,826 '49/mo':1035 '5':772,837 '6':882 'acm':396,1073 'acme.md':395 'actual':1123 'ad':666,1033 'add':263,656,711,838,962 'ambigu':163 'api':28,91 'appear':487,958 'appropri':908 'assign':548 'attempt':707 'base':554 'baselin':370,680,688,733,860,999,1093,1151 'blog':571 'bottom':843 'brief':1130 'build':435 'bullet':428 'call':421 'case':474,603,889 'case-insensit':473 'chang':8,44,56,81,511,553,588,595,598,624,806,813,1006,1019,1021,1023,1025,1027,1066,1072,1080,1112,1115,1117,1119,1124 'changed/new/removed':1148 'check':196,344 'code':30,93 'compar':19,58,451,507 'comparison':355,709 'competitor':3,7,43,46,49,55,62,100,107,131,206,214,219,226,237,257,294,306,378,386,389,439,461,506,580,638,643,695,745,768,803,817,836,854,871,886,932,948,950,956,985,1003,1015,1069,1087 'competitor-delta-yyyy-mm-dd.md':123,781 'competitors/acme.md':109 'competitors/snapshot':111,346,469,747,770,856,873,1089 'consid':665 'contain':146 'content':400,433,512,542,963 'copi':741,850,1083 'core':1063 'count':805,809 'counterpart':482,496 'cover':834 'creat':217,777 'current':20,60,304,377,447,460,477,495,515,525,540,609,851,1084,1155 'current-week':303 'cyril':147 'data':437 'date':785,793,802,995,1002 'dd':991 'delta':13,77,126,737,774,986 'delta-report':12,76,125 'detect':134,135,188,601,659,722,807,845,1007,1067 'determin':576 'diff':655,662,692,708 'differ':513,600,607 'e.g':108,394,615 'edg':602 'emoji':1106 'empti':251,629,895,953,961 'en':212,255,315,661,724,847,920,954 'enabl':736 'end':833 'english':152,161 'entir':416 'equival':546 'error':175,898 'exclud':296 'exist':328,350,362,456,684 'expect':921 'extern':96 'extract':387,423 'fact':425,443,522,533,702,1046,1054,1140 'factual':432 'featur':561,1064 'field':1097 'file':21,105,121,224,254,258,268,291,312,321,327,353,379,384,399,417,448,462,467,478,492,627,644,743,780,796,852,884,914,928,951,957,966,1085 'filenam':393,472 'first':366,486,725,997,1142 'folder':101,132,207,210,215,220,249,262,295,887,891,894,919,923,933 'follow':821 'format':824,983 'found':259,314,322,413,589,596,699,729 'full':1135 'general':422 'generat':10,73,686,773 'gone':1059 'h2':405,411 'header':406,412,668,789 'headlin':1039 'high':558,586,811,1009,1036,1100,1111 'high-signific':585 'homepag':566,1038 'ident':543 'import':173 'includ':1122 'input':99,194 'insensit':475 'instead':916 'instruct':179,190,901 'item':1127 'key':424,701,1071 'languag':133,139,158,167,189,660,723,846,907 'language-appropri':906 'last':24,791,993 'last-week':23 'latin':156 'latin-script':155 'least':265,583,1109 'level':654 'limit':664 'list':288,444,696,1136,1154 'load':351 'look':463 'low':569,594,1013,1104 'mark':483,497 'markdown':17,61,320,336,984 'match':466,470,505,612,617 'md':104,223,241,253,267,283,290,311,326,342,383 'medium':564,592,812,1011,1041,1102 'medium/low':1114 'meet':40 'messag':142,176,565,899,909,1037 'messaging/ux/positioning':1103 'metadata':797 'minor':590,1020 'miss':634 'mm':990 'mode':371,681 'monday':34 'must':183 'n':1005,1008,1010,1012,1014 'name':390,408,440,442,606,1016 'negat':888 'new':84,485,519,1030,1044,1045,1075 'news':570 'news/blog/social':1105 'next':739,848,862,1081,1095 'non':310,319 'non-markdown':318 'note':18,63,307,619,639,657,714 'one':103,222,266,419,584,1110 'option':110 'output':122,185,779,823,982 'overal':577,1017 'paragraph':653 'paragraph-level':652 'pars':401 'path':203,915,924 'per':106,225,426,579,703 'perform':651 'period':790,992 'phrase':171 'plain':648 'plan':562,1032 'point':429,929 'posit':568 'prep':37 'present':523,534,1048,1055 'previous':70,115 'previous-week':114 'price':559,616,618,1029,1076 'pricing/product/features':1101 'proceed':323,368 'product':560,1062 'promin':713 'provid':201,211,216,892,911 'qualiti':663 'rate':550 're':47 'read':376,397 'remind':840 'remov':88,499,530,1053 'replac':1146 'report':14,78,127,641,720,734,775,788,987 'requir':31,98 'respond':148,159,164 'retri':270,968 'return':897 'review':35 'rival':1078 'roadmap':36,563 'ru':230,271,329,669,748,864,934,969 'rule':1098 'run':367,726,998,1143 'russian':144,150 'save':66,128,883 'script':157 'section':403,407,420,427,441,508,510,520,531,556,605,621,647,667,698,704,820,1026,1129,1149,1153 'see':902 'semant':545 'sentenc':430 'servic':97 'show':79 'signific':549,581,587,1018,1028,1074,1099 'similar':614 'singl':913,927 'skill':52 'skill-weekly-competitor-tracker' 'snapshot':26,67,298,352,453,455,481,489,517,529,536,611,626,635,683,728,792,795,994,1050,1057,1145 'social':572 'source-kirkruglov' 'stabl':1126,1139 'starter':1031 'state':1156 'status':578,1070,1107 'step':182,191,356,372,374,449,678,771,849,903,1082 'stop':896 'strategi':39 'structur':75,124,438,623 'subfold':112,299,347 'subsequ':181 'summar':700 'summari':689,829,1068,1131,1152 'tabl':830,1120 'team':574 'text':649 'tier':1077 'today':783,800,1000 'top':717 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agents' 'topic-ai-skills' 'topic-awesome-list' 'topic-claude' 'topic-claude-ai' 'topic-claude-ai-skills' 'topic-claude-code' 'topic-claude-cowork' 'topic-claude-memory' 'topic-claude-skills' 'total':808 'track':5,42,53,501,738,804,1004 'tracker':4,50 'treat':414,632 'tri':228 'trigger':41,170 'type':557 'unchang':541,1061,1128 'unknown':799 'unmatch':620 'unread':631 'updat':858,1040,1091 'use':32,172,782 'user':137,199,910 'ux':567 'valid':193 'version':117,518 'vs':22 'warn':177,316 'week':2,6,25,45,48,54,71,116,305,740,863,1096 'weekly-competitor-track':1 'write':787,818,827 'yyyi':989 'yyyy-mm-dd':988 'а':939 'базовой':877 'базовый':755 'бы':280 'в':272,769,872,976 'вашей':876 'включить':758 'внимание':330 'все':765,970 'для':676,874 'добавление':674 'добавьте':278,974 'если':339 'заголовков':675 'запуск':750 'и':245,284,979 'из':767,870 'изменений':760 'к':937,941,946 'каждого':243 'каждый':977 'качество':670 'конкурента':244 'конкурентов':232,277,972 'линии':878 'на':242,761,879 'найден':753 'найдены':275,331 'не':233,274,335,752,940 'не-markdown':334 'неделе':763 'неделю':881 'обновления':875 'ограничено':672 'один':281 'одним':239 'одному':942 'ожидается':935 'отслеживание':759 'отчёт':756 'папка':231 'папке':273,938,947 'папку':236 'первый':749 'повторите':246,285,980 'попытку':247,286,981 'предоставлена':234 'продолжайте':337 'пусты':973 'путь':936,945 'рассмотрите':673 'с':238 'секций':677 'скопируйте':764,867 'следующей':762 'следующий':865 'следующую':880 'снимок':751 'содержание':975 'создайте':235 'сравнения':671 'существуют':340 'текущие':868 'только':332,338 'укажите':944 'файл':282,978 'файлом':240 'файлу':943 'файлы':276,333,341,766,869,971 'хотя':279 'чтобы':757 'шаг':866 'это':754","prices":[{"id":"611c7b93-4bf0-4ce7-a818-5a5dd067868a","listingId":"2979de2c-dab7-4bec-9293-d591efee2ee5","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"KirKruglov","category":"claude-skills-kit","install_from":"skills.sh"},"createdAt":"2026-05-18T13:21:17.765Z"}],"sources":[{"listingId":"2979de2c-dab7-4bec-9293-d591efee2ee5","source":"github","sourceId":"KirKruglov/claude-skills-kit/weekly-competitor-tracker","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/weekly-competitor-tracker","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:17.765Z","lastSeenAt":"2026-05-18T19:13:39.670Z"}],"details":{"listingId":"2979de2c-dab7-4bec-9293-d591efee2ee5","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"weekly-competitor-tracker","github":{"repo":"KirKruglov/claude-skills-kit","stars":7,"topics":["agent-skills","agentic-skills","ai","ai-agents","ai-skills","awesome-list","claude","claude-ai","claude-ai-skills","claude-code","claude-cowork","claude-memory","claude-skills","memory-management","productivity","productivity-tools","project-management"],"license":"mit","html_url":"https://github.com/KirKruglov/claude-skills-kit","pushed_at":"2026-05-18T04:27:46Z","description":"40+ curated agent skills for Claude Cowork and Claude.ai — ready-to-use tools for non-technical users: project management, productivity, and AI workflow automation","skill_md_sha":"728200af68a7f9142a1653e26b89935c5037906b","skill_md_path":"skills/weekly-competitor-tracker/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/weekly-competitor-tracker"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"weekly-competitor-tracker","description":"Track weekly competitor changes and generate a delta-report from your markdown notes. Compares current files vs. last-week snapshot — no APIs, no code required. Use for Monday reviews, roadmap prep, or strategy meetings. Triggers: 'track competitor changes', 'weekly competitor report', 'что изменилось у конкурентов', 'отследи изменения конкурентов', 'дельта-отчёт по конкурентам'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/weekly-competitor-tracker"},"updatedAt":"2026-05-18T19:13:39.670Z"}}