{"id":"82a4d1cd-dcb2-4060-b63a-cb11998e4efc","shortId":"5m6Qny","kind":"skill","title":"weekly-digest-synthesizer","tagline":"Compile weekly status digests from multiple .md/.txt files. Extracts project updates, action items, and blockers into a structured report. Use when aggregating team status notes into a weekly summary. Triggers: 'compile weekly digest', 'weekly digest', 'составь дайджест', 'скомпи","description":"# Weekly Digest Synthesizer\n\nThis skill compiles status updates from multiple local `.md` and `.txt` files into a structured weekly digest. It groups content by project area, surfaces action items and blockers, and outputs a ready-to-share markdown file named `weekly-digest-YYYY-MM-DD.md`.\n\n**Input:**\n- Folder path or list of `.md` / `.txt` files containing status updates\n- Optional: digest date (defaults to today), output format preference (concise / detailed)\n\n**Output:**\n- `weekly-digest-YYYY-MM-DD.md` — structured digest with Summary, Projects, Action Items table, Risks & Blockers\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---\n\n## Instructions\n\n### Step 1: Validate Input\n\n1. Determine input source from the user's message:\n   - Folder path → scan all `.md` and `.txt` files in that folder\n   - List of files → use those files directly\n   - No path provided → scan the current working directory for `.md` and `.txt` files\n\n2. Verify files exist and are readable:\n   - If no files found: stop. Report \"No .md or .txt files found at [path]. Provide a folder path or list of files to process.\"\n   - If a specific file path does not exist: stop. Report \"File not found: [path]. Check the path and try again.\"\n\n3. Check for unsupported file formats:\n   - If user provides only `.docx`, `.xlsx`, `.pdf`, or similar: stop. Report \"Unsupported file types. This skill processes .md and .txt files only.\"\n\n4. Determine digest date:\n   - If user specifies a date → use that date in output filename\n   - If not specified → use today's date (YYYY-MM-DD format)\n\n### Step 2: Read and Parse Files\n\n1. Read each file in turn and extract:\n   - **Project or area name:** inferred from filename, H1/H2 heading, or leading section header\n   - **Status indicator:** on track / at risk / blocked — detected from keywords (\"blocked\", \"delayed\", \"at risk\", \"completed\", \"done\", \"✅\", \"⚠️\", \"🔴\") or inferred from context\n   - **Key updates:** bullet points, sentences describing progress, decisions, or changes\n   - **Action items:** tasks with any mention of owner name and/or due date\n   - **Blockers:** sentences or bullets mentioning dependencies, blockers, or unresolved issues\n\n2. Handle empty or sparse files:\n   - If a file is empty or contains only headings with no body content: skip it; note in digest footer as \"Files with no updates: [filename]\"\n   - If a file has content but no structured indicators: include as raw notes under the filename; add note \"No structured status found — raw content included\"\n\n### Step 3: Group and Deduplicate\n\n1. Group extracted content by project or area:\n   - Use project name from file heading if available\n   - Use filename (without extension) as fallback project name\n\n2. Identify cross-cutting signals across all files:\n   - Recurring blockers (same blocker mentioned in 2+ files)\n   - Action items with no identified owner\n   - Action items with no due date\n   - Projects with \"blocked\" status\n\n3. Flag possible duplicate projects:\n   - If two file headings look similar (e.g., \"Project Alpha\" and \"Alpha Q2\"): group under a shared section and add note \"[Possible duplicates — verify manually]\"\n   - Do not silently merge\n\n4. Check for large input:\n   - If 20+ files or total content exceeds ~10,000 words: add a note at digest header: \"Large input: [N] files processed. Review for completeness.\"\n\n### Step 4: Check for Existing Output File\n\n1. Check if `weekly-digest-[date].md` already exists in the working directory:\n   - If yes: ask user — \"File weekly-digest-[date].md already exists. Overwrite or save as weekly-digest-[date]-v2.md?\"\n   - Wait for response before writing\n\n### Step 5: Write Digest\n\n1. Write `weekly-digest-YYYY-MM-DD.md` using the Output Format below\n2. Populate all sections; mark any empty section explicitly (e.g., \"No blockers reported\")\n3. Report in chat: \"Digest written: weekly-digest-[date].md — [N] files processed, [N] projects, [N] action items\"\n\n---\n\n## Output Format\n\n```markdown\n# Weekly Digest — [Date]\n\n**Compiled from:** [N] files | **Projects covered:** [N] | **Action items:** [N]\n[Note if large input: \"Large input: N files — review for completeness\"]\n\n---\n\n## Summary\n\n[2–4 sentences: overall week health, key progress, main risks or blockers]\n\n---\n\n## Projects\n\n### [Project / Area Name]\n- **Status:** ✅ On track / ⚠️ At risk / 🔴 Blocked\n- **Updates:** [key progress points, 1–3 bullets]\n- **Action items:** [owner] — [action] by [date or TBD]\n- **Blockers:** [if any; \"None\" if clear]\n\n### [Next Project...]\n\n---\n\n## Cross-Cutting Action Items\n\n| Owner | Action | Due | Source File |\n|-------|--------|-----|-------------|\n| [name or TBD] | [action description] | [date or TBD] | [filename.md] |\n\n---\n\n## Risks & Blockers\n\n- [Blocker or risk description — source: filename.md]\n- [Recurring blocker flagged across N files]\n\n---\n\n## Files Processed\n\nFiles included: [list]\nFiles with no updates: [list, or \"None\"]\n[Possible duplicates: [list, or omit if none]]\n```\n\n**Field rules:**\n- Status: use ✅ / ⚠️ / 🔴 based on detected keywords; default to ✅ if no risk signals found\n- Action items: include owner when mentioned; use \"TBD\" if no owner identified; flag \"No owner\" items in Cross-Cutting section\n- Summary: write from extracted content — do not invent progress or add assumptions\n\n---\n\n## Edge Cases\n\n1. **Empty or heading-only files:** Skip; note in \"Files with no updates\" section\n2. **No structured status indicators:** Include raw content; add note \"No structured status found\"\n3. **Possible duplicate project names:** Group together; add \"[Possible duplicates — verify manually]\" note\n4. **20+ files or 10,000+ words total:** Proceed; add \"Large input\" note at digest header\n5. **Digest file already exists:** Ask user before overwriting\n\n---\n\n## Negative Cases\n\n- **No files found:** Stop. Report \"No .md or .txt files found at [path].\"\n- **Invalid file path:** Stop. Report \"File not found: [path].\"\n- **Only unsupported file formats:** Stop. Report \"Unsupported file types. Convert to .md or .txt first.\"","tags":["weekly","digest","synthesizer","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-weekly-digest-synthesizer","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-digest-synthesizer","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 (6,225 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.752Z","embedding":null,"createdAt":"2026-05-18T13:21:17.863Z","updatedAt":"2026-05-18T19:13:39.752Z","lastSeenAt":"2026-05-18T19:13:39.752Z","tsv":"'000':554,883 '1':162,165,317,451,577,621,715,836 '10':553,882 '2':205,312,390,475,490,629,689,851 '20':547,879 '3':256,447,508,642,716,865 '4':284,541,571,690,878 '5':618,894 'across':481,764 'action':16,70,115,368,492,498,659,674,718,721,737,740,747,801 'add':437,531,556,832,859,872,887 'aggreg':26 'alpha':521,523 'alreadi':585,601,897 'ambigu':150 'and/or':377 'area':68,327,458,703 'ask':593,899 'assumpt':833 'avail':466 'base':790 'block':344,348,506,710 'blocker':19,73,119,380,386,485,487,640,700,726,754,755,762 'bodi':407 'bullet':360,383,717 'case':835,904 'chang':367 'chat':645 'check':250,257,542,572,578 'clear':731 'compil':5,35,48,667 'complet':352,569,687 'concis':106 'contain':94,133,402 'content':65,408,425,444,454,551,826,858 'context':357 'convert':936 'cover':672 'cross':478,735,819 'cross-cut':477,734,818 'current':197 'cut':479,736,820 'cyril':134 'date':99,287,292,295,305,379,503,583,599,610,651,666,723,749 'dd':309 'decis':365 'dedupl':450 'default':100,794 'delay':349 'depend':385 'describ':363 'descript':748,758 'detail':107 'detect':121,122,345,792 'determin':166,285 'digest':3,8,37,39,44,62,98,111,286,413,560,582,598,609,620,646,650,665,892,895 'direct':191 'directori':199,590 'docx':266 'done':353 'due':378,502,741 'duplic':511,534,780,867,874 'e.g':519,638 'edg':834 'empti':392,400,635,837 'english':139,148 'exceed':552 'exist':208,243,574,586,602,898 'explicit':637 'extens':470 'extract':13,324,453,825 'fallback':472 'field':786 'file':12,57,82,93,181,187,190,204,207,214,222,233,239,246,260,274,282,316,320,395,398,416,423,463,483,491,515,548,565,576,595,654,670,684,743,766,767,769,772,842,846,880,896,906,914,919,923,929,934 'filenam':298,331,420,436,468 'filename.md':752,760 'first':941 'flag':509,763,813 'folder':86,174,184,228 'footer':414 'format':104,261,310,627,662,930 'found':215,223,248,442,800,864,907,915,925 'group':64,448,452,525,870 'h1/h2':332 'handl':391 'head':333,404,464,516,840 'header':337,561,893 'heading-on':839 'health':694 'identifi':476,496,812 'includ':430,445,770,803,856 'indic':339,429,855 'infer':329,355 'input':85,164,167,545,563,680,682,889 'instruct':160 'invalid':918 'invent':829 'issu':389 'item':17,71,116,369,493,499,660,675,719,738,802,816 'key':358,695,712 'keyword':347,793 'languag':120,126,145,154 'larg':544,562,679,681,888 'latin':143 'latin-script':142 'lead':335 'list':89,185,231,771,776,781 'local':53 'look':517 'main':697 'manual':536,876 'mark':633 'markdown':81,663 'md':54,91,178,201,219,279,584,600,652,911,938 'md/.txt':11 'mention':373,384,488,806 'merg':540 'messag':129,173 'mm':308 'multipl':10,52 'n':564,653,656,658,669,673,676,683,765 'name':83,328,376,461,474,704,744,869 'negat':903 'next':732 'none':729,778,785 'note':29,411,433,438,532,558,677,844,860,877,890 'omit':783 'option':97 'output':75,103,108,297,575,626,661 'overal':692 'overwrit':603,902 'owner':375,497,720,739,804,811,815 'pars':315 'path':87,175,193,225,229,240,249,252,917,920,926 'pdf':268 'phrase':158 'point':361,714 'popul':630 'possibl':510,533,779,866,873 'prefer':105 'proceed':886 'process':235,278,566,655,768 'progress':364,696,713,830 'project':14,67,114,325,456,460,473,504,512,520,657,671,701,702,733,868 'provid':194,226,264 'q2':524 'raw':432,443,857 'read':313,318 'readabl':211 'readi':78 'ready-to-shar':77 'recur':484,761 'report':23,217,245,272,641,643,909,922,932 'respond':135,146,151 'respons':614 'review':567,685 'risk':118,343,351,698,709,753,757,798 'rule':787 'russian':131,137 'save':605 'scan':176,195 'script':144 'section':336,529,632,636,821,850 'sentenc':362,381,691 'share':80,528 'signal':480,799 'silent':539 'similar':270,518 'skill':47,277 'skill-weekly-digest-synthesizer' 'skip':409,843 'sourc':168,742,759 'source-kirkruglov' 'spars':394 'specif':238 'specifi':290,301 'status':7,28,49,95,338,441,507,705,788,854,863 'step':161,311,446,570,617 'stop':216,244,271,908,921,931 'structur':22,60,110,428,440,853,862 'summari':33,113,688,822 'surfac':69 'synthes':4,45 'tabl':117 'task':370 'tbd':725,746,751,808 'team':27 'today':102,303 'togeth':871 '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':550,885 'track':341,707 'tri':254 'trigger':34,157 'turn':322 'two':514 'txt':56,92,180,203,221,281,913,940 'type':275,935 'unresolv':388 'unsupport':259,273,928,933 'updat':15,50,96,359,419,711,775,849 'use':24,159,188,293,302,459,467,624,789,807 'user':124,171,263,289,594,900 'v2.md':611 'valid':163 'verifi':206,535,875 'wait':612 'week':2,6,32,36,38,43,61,581,597,608,649,664,693 'weekly-digest':580,596,607,648 'weekly-digest-synthes':1 'weekly-digest-yyyy-mm-dd.md':84,109,623 'without':469 'word':555,884 'work':198,589 'write':616,619,622,823 'written':647 'xlsx':267 'yes':592 'yyyi':307 'yyyy-mm-dd':306 'дайджест':41 'скомпи':42 'составь':40","prices":[{"id":"8ce314be-cabf-4430-8830-e577a9009129","listingId":"82a4d1cd-dcb2-4060-b63a-cb11998e4efc","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.863Z"}],"sources":[{"listingId":"82a4d1cd-dcb2-4060-b63a-cb11998e4efc","source":"github","sourceId":"KirKruglov/claude-skills-kit/weekly-digest-synthesizer","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/weekly-digest-synthesizer","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:17.863Z","lastSeenAt":"2026-05-18T19:13:39.752Z"}],"details":{"listingId":"82a4d1cd-dcb2-4060-b63a-cb11998e4efc","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"weekly-digest-synthesizer","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":"89e723cdd3ff4f29be30576ed6200e3b92d16adb","skill_md_path":"skills/weekly-digest-synthesizer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/weekly-digest-synthesizer"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"weekly-digest-synthesizer","description":"Compile weekly status digests from multiple .md/.txt files. Extracts project updates, action items, and blockers into a structured report. Use when aggregating team status notes into a weekly summary. Triggers: 'compile weekly digest', 'weekly digest', 'составь дайджест', 'скомпилируй статусы'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/weekly-digest-synthesizer"},"updatedAt":"2026-05-18T19:13:39.752Z"}}