{"id":"ababf70f-2b43-4fd6-8c33-555a2baef4f0","shortId":"yfW52G","kind":"skill","title":"team-update-aggregator","tagline":"Aggregate weekly team member updates from local .md/.txt files into a people-centric status report for managers. Organizes content by person (not by project): progress, plans, blockers, capacity, and manager flags. Use when preparing for 1-on-1s, weekly team reviews, or building ","description":"# Team Update Aggregator\n\nThis skill reads weekly update files from your team members and compiles them into a single **people-centric** status report — organized by person, not by project. Each team member gets a dedicated section with progress, next-week plans, blockers, capacity notes, and manager attention flags. Output: `team-status-YYYY-MM-DD.md`.\n\n**Key difference from weekly-digest-synthesizer:** This skill answers \"How is each person doing?\" — not \"What's happening on each project?\"\n\n**Input:**\n- Folder path or list of `.md` / `.txt` files with team member updates\n- One file per person, or one file with multiple H2/H3 sections per person\n- Optional: report date (defaults to today)\n\n**Output:**\n- `team-status-YYYY-MM-DD.md` — structured people-centric team report\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. Check if all files are empty:\n   - If all files have no readable content: stop. Report \"All files are empty. No report generated.\"\n\n5. Determine report 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: Identify Team Members\n\nFor each file, determine the **owner** (team member name):\n\n1. **From filename:** `anna.md`, `ivan-petrov.md`, `john_smith.md` → extract name, normalise to \"Anna\", \"Ivan Petrov\", \"John Smith\"\n2. **From H1 heading:** first `# Name` in the file body → use as owner\n3. **From explicit field:** line starting with `Name:`, `Who:`, `Person:`, `От:`, `Автор:` → use value as owner\n4. **Multi-person file:** if file contains multiple `## Name` or `### Name` sections → split into one owner per section\n5. **Not identified:** if none of the above applies → assign owner as \"Unknown — [filename]\"; add flag \"Owner not identified\"\n\n### Step 3: Extract Content per Person\n\nFor each identified owner, extract:\n\n1. **Progress:** completed tasks, shipped items, closed tickets, decisions made — bullets or prose\n2. **Next week plans:** what they plan to work on next (if mentioned); mark \"Not mentioned\" if absent\n3. **Blockers:** anything described as blocking, waiting-on, stuck, or unresolved\n4. **Capacity / OOO:** explicit mentions of being overloaded, on leave, sick, or at partial capacity\n5. **Manager flags:** mark ⚠️ when any of these signals appear:\n   - Stress, burnout, frustration, or morale language\n   - Overload without mitigation\n   - Blocker unresolved for implied 1+ week\n   - Explicit request for help or escalation\n   - Out of office / sick (for visibility)\n\nHandle sparse content:\n- Empty section: include person with empty progress; add note \"No updates provided\"\n- Only blockers, no progress: include both; add flag \"No progress reported\"\n\n### Step 4: Detect Cross-Team Signals\n\nAcross all extracted content:\n\n1. **Shared blockers:** same blocker mentioned by 2+ people → flag in Cross-Team section\n2. **Dependencies:** person A is waiting on person B → capture as dependency pair\n3. **Unowned action items:** action items without a named owner → collect in Cross-Team table\n4. **Large team:** if 10+ people in report → add note \"Large team: [N] members — review for completeness\"\n\n### Step 5: Check for Existing Output File\n\n1. Check if `team-status-[date].md` already exists in the working directory:\n   - If yes: ask user — \"File team-status-[date].md already exists. Overwrite or save as team-status-[date]-v2.md?\"\n   - Wait for response before writing\n\n### Step 6: Write Report\n\n1. Write `team-status-YYYY-MM-DD.md` using the Output Format below\n2. Populate all sections; mark any empty field explicitly (e.g., \"None\", \"Not mentioned\")\n3. Report in chat: \"Report saved: team-status-[date].md — [N] members, [N] blockers, [N] flags\"\n\n---\n\n## Output Format\n\n```markdown\n# Team Status — [Date]\n\n**Members:** [N] | **Updates compiled:** [N] files | **Flags:** [N]\n[Note if large team: \"Large team: N members — review for completeness\"]\n\n---\n\n## Summary\n\n[2–4 sentences: overall team health, key achievements, main blockers, who needs manager attention]\n\n**Flags requiring attention:** [Name — reason, or \"None\"]\n\n---\n\n## Team Members\n\n### [Full Name]\n- **Progress:** [completed work, 1–3 bullets]\n- **Next week:** [plans or \"Not mentioned\"]\n- **Blockers:** [blockers or \"None\"]\n- **Capacity:** [Normal / Overloaded / Partial / OOO — if mentioned; omit if not]\n- **Manager flags:** [⚠️ flag description or \"—\"]\n\n### [Next Person...]\n\n---\n\n## Cross-Team\n\n### Shared Blockers\n- [Blocker mentioned by 2+ people — names]\n\n### Dependencies\n- [Person A] waiting on [Person B] — [what for]\n\n### Unowned Action Items\n\n| Action | Mentioned by | Source File |\n|--------|-------------|-------------|\n| [action] | [name] | [filename] |\n\n---\n\n## Files Processed\n\nFiles included: [list]\nFiles with no updates: [list or \"None\"]\nUnknown owners: [list of files where owner was not identified, or \"None\"]\n```\n\n**Field rules:**\n- Manager flags: apply ⚠️ only to explicit signals from the text; do not infer from absence of updates alone\n- Capacity: use explicit markers only (overloaded, can't keep up, on leave, sick); do not interpret implicitly\n- Summary: write from extracted content — do not invent progress or add assumptions\n\n---\n\n## Edge Cases\n\n1. **One file, multiple people (H2/H3 sections with names):** Split by section, create one entry per person\n2. **File with no identifiable owner:** Assign \"Unknown — [filename]\"; add flag \"Owner not identified\"\n3. **Person sent only a blocker, no progress:** Include both; add flag \"No progress reported\"\n4. **Out of office / sick mentioned:** Add ⚠️ flag \"OOO\" and note in Summary\n5. **10+ members:** Add \"Large team\" note at report header; proceed normally\n\n---\n\n## Negative Cases\n\n- **No files found:** Stop. Report \"No .md or .txt files found at [path].\"\n- **Unsupported file types only:** Stop. Report \"Unsupported file types. Convert to .md or .txt first.\"\n- **All files empty:** Stop. Report \"All files are empty. No report generated.\"\n- **Output file already exists:** Ask before overwriting; offer `-v2` alternative","tags":["team","update","aggregator","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-team-update-aggregator","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/team-update-aggregator","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 (7,013 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.234Z","embedding":null,"createdAt":"2026-05-18T13:21:17.297Z","updatedAt":"2026-05-18T19:13:39.234Z","lastSeenAt":"2026-05-18T19:13:39.234Z","tsv":"'1':41,206,209,392,485,566,617,685,729,821,957 '10':665,1017 '1s':44 '2':249,379,407,498,624,632,737,793,859,974 '3':300,420,475,516,645,750,822,988 '4':328,436,528,607,661,794,1003 '5':351,455,543,679,1016 '6':726 'absenc':922 'absent':515 'achiev':800 'across':613 'action':647,649,872,874,879 'add':469,590,601,669,953,983,998,1009,1019 'aggreg':4,5,52 'alon':925 'alreadi':693,709,1072 'altern':1079 'ambigu':194 'anna':402 'anna.md':395 'answer':111 'anyth':518 'appear':552 'appli':463,910 'ask':701,1074 'assign':464,980 'assumpt':954 'attent':98,806,809 'b':640,868 'block':521 'blocker':32,93,517,562,596,619,621,764,802,830,831,855,856,993 'bodi':416 'build':49 'bullet':495,823 'burnout':554 'capac':33,94,529,542,834,926 'captur':641 'case':956,1029 'centric':18,71,161 'chat':753 'check':294,301,329,680,686 'close':491 'collect':655 'compil':64,776 'complet':487,677,791,819 'contain':177,443 'content':24,341,477,582,616,947 'convert':1052 'creat':969 'cross':610,629,658,852 'cross-team':609,628,657,851 'current':241 'cyril':178 'date':152,354,359,362,372,691,707,718,759,772 'dd':376 'decis':493 'dedic':85 'default':153 'depend':633,643,862 'describ':519 'descript':847 'detect':165,166,608 'determin':210,352,386 'differ':103 'digest':107 'direct':235 'directori':243,698 'docx':310 'e.g':746 'edg':955 'empti':334,347,583,588,743,1060,1066 'english':183,192 'entri':971 'escal':573 'exist':252,287,682,694,710,1073 'explicit':422,531,568,745,913,928 'extract':398,476,484,615,946 'field':423,744,906 'file':13,58,132,138,143,225,231,234,248,251,258,266,277,283,290,304,318,326,332,337,345,385,415,440,442,684,703,778,878,882,884,887,898,959,975,1031,1039,1044,1050,1059,1064,1071 'filenam':365,394,468,881,982 'first':411,1057 'flag':36,99,470,545,602,626,766,779,807,845,846,909,984,999,1010 'folder':125,218,228,272 'format':305,377,735,768 'found':259,267,292,1032,1040 'frustrat':555 'full':816 'generat':350,1069 'get':83 'h1':409 'h2/h3':146,962 'handl':580 'happen':120 'head':410 'header':1025 'health':798 'help':571 'identifi':380,457,473,482,903,978,987 'impli':565 'implicit':942 'includ':585,599,885,996 'infer':920 'input':124,208,211 'instruct':204 'interpret':941 'invent':950 'item':490,648,650,873 'ivan':403 'ivan-petrov.md':396 'john':405 'john_smith.md':397 'keep':934 'key':102,799 'languag':164,170,189,198,558 'larg':662,671,783,785,1020 'latin':187 'latin-script':186 'leav':537,937 'line':424 'list':128,229,275,886,891,896 'local':11 'made':494 'main':801 'manag':22,35,97,544,805,844,908 'mark':511,546,741 'markdown':769 'marker':929 'md':130,222,245,263,323,692,708,760,1036,1054 'md/.txt':12 'member':8,62,82,135,382,390,674,762,773,788,815,1018 'mention':510,513,532,622,749,829,840,857,875,1008 'messag':173,217 'mitig':561 'mm':375 'moral':557 'multi':438 'multi-person':437 'multipl':145,444,960 'n':673,761,763,765,774,777,780,787 'name':391,399,412,427,445,447,653,810,817,861,880,965 'need':804 'negat':1028 'next':90,499,508,824,849 'next-week':89 'none':459,747,813,833,893,905 'normal':835,1027 'normalis':400 'note':95,591,670,781,1013,1022 'offer':1077 'offic':576,1006 'omit':841 'on-1s':42 'one':137,142,451,958,970 'ooo':530,838,1011 'option':150 'organ':23,74 'output':100,156,364,683,734,767,1070 'overal':796 'overload':535,559,836,931 'overwrit':711,1076 'owner':388,419,435,452,465,471,483,654,895,900,979,985 'pair':644 'partial':541,837 'path':126,219,237,269,273,284,293,296,1042 'pdf':312 'peopl':17,70,160,625,666,860,961 'people-centr':16,69,159 'per':139,148,453,478,972 'person':26,76,115,140,149,429,439,479,586,634,639,850,863,867,973,989 'petrov':404 'phrase':202 'plan':31,92,501,504,826 'popul':738 'prepar':39 'proceed':1026 'process':279,322,883 'progress':30,88,486,589,598,604,818,951,995,1001 'project':29,79,123 'prose':497 'provid':238,270,308,594 'read':55 'readabl':255,340 'reason':811 'report':20,73,151,163,261,289,316,343,349,353,605,668,728,751,754,1002,1024,1034,1048,1062,1068 'request':569 'requir':808 'respond':179,190,195 'respons':722 'review':47,675,789 'rule':907 'russian':175,181 'save':713,755 'scan':220,239 'script':188 'section':86,147,448,454,584,631,740,963,968 'sent':990 'sentenc':795 'share':618,854 'ship':489 'sick':538,577,938,1007 'signal':551,612,914 'similar':314 'singl':68 'skill':54,110,321 'skill-team-update-aggregator' 'smith':406 'sourc':212,877 'source-kirkruglov' 'spars':581 'specif':282 'specifi':357,368 'split':449,966 'start':425 'status':19,72,690,706,717,758,771 'step':205,378,474,606,678,725 'stop':260,288,315,342,1033,1047,1061 'stress':553 'structur':158 'stuck':525 'summari':792,943,1015 'synthes':108 'tabl':660 'task':488 'team':2,7,46,50,61,81,134,162,381,389,611,630,659,663,672,689,705,716,757,770,784,786,797,814,853,1021 'team-status':688,704,715,756 'team-status-yyyy-mm-dd.md':101,157,731 'team-update-aggreg':1 'text':917 'ticket':492 'today':155,370 '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' 'tri':298 'trigger':201 'txt':131,224,247,265,325,1038,1056 'type':319,1045,1051 'unknown':467,894,981 'unown':646,871 'unresolv':527,563 'unsupport':303,317,1043,1049 'updat':3,9,51,57,136,593,775,890,924 'use':37,203,232,360,369,417,432,732,927 'user':168,215,307,356,702 'v2':1078 'v2.md':719 'valid':207 'valu':433 'verifi':250 'visibl':579 'wait':523,637,720,865 'waiting-on':522 'week':6,45,56,91,106,500,567,825 'weekly-digest-synthes':105 'without':560,651 'work':242,506,697,820 'write':724,727,730,944 'xlsx':311 'yes':700 'yyyi':374 'yyyy-mm-dd':373 'автор':431 'от':430","prices":[{"id":"f1e204b6-d9d4-481d-9635-0be8e36aac40","listingId":"ababf70f-2b43-4fd6-8c33-555a2baef4f0","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.297Z"}],"sources":[{"listingId":"ababf70f-2b43-4fd6-8c33-555a2baef4f0","source":"github","sourceId":"KirKruglov/claude-skills-kit/team-update-aggregator","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/team-update-aggregator","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:17.297Z","lastSeenAt":"2026-05-18T19:13:39.234Z"}],"details":{"listingId":"ababf70f-2b43-4fd6-8c33-555a2baef4f0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"team-update-aggregator","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":"967a0df95a47710fbffddf8a31bee58d68c35d67","skill_md_path":"skills/team-update-aggregator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/team-update-aggregator"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"team-update-aggregator","description":"Aggregate weekly team member updates from local .md/.txt files into a people-centric status report for managers. Organizes content by person (not by project): progress, plans, blockers, capacity, and manager flags. Use when preparing for 1-on-1s, weekly team reviews, or building a team tracker. Triggers: 'aggregate team updates', 'compile team status', 'team weekly report', 'агрегируй обновления команды', 'статус команды', 'составь отчёт по команде'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/team-update-aggregator"},"updatedAt":"2026-05-18T19:13:39.234Z"}}