{"id":"5906d379-be02-40d7-ac4f-09916463e0f0","shortId":"KgNGL2","kind":"skill","title":"okr-progress-narrator","tagline":"Transform raw OKR data (metrics, percentages, notes) from files or pasted text into a readable narrative progress update for stakeholders. Use when preparing weekly or quarterly OKR reports, board updates, or team syncs. Triggers: 'okr update', 'narrate okr progress', 'stakeholde","description":"# OKR Progress Narrator\n\nThis skill takes raw OKR data — tables, lists, or free-form notes with objectives, key results, current values, and targets — and converts them into a structured narrative progress update in `okr-update-YYYY-MM-DD.md`. The output is designed to be shared directly with stakeholders: executive summary, per-objective narrative, KR status table, risks, and next steps.\n\n**Input:**\n- OKR data as a file (`.md`, `.txt`, `.csv`) or pasted text in chat\n- Optional: period label (Q1 2026, Sprint 12), audience (CEO, board, team), tone\n\n**Output:**\n- `okr-update-YYYY-MM-DD.md` — narrative update with executive summary, per-objective sections, and risk block\n\n---\n\n## Language Detection\n\nDetect the user's language from their message and OKR data:\n- If Russian (or Cyrillic content): respond and write the output document in Russian, using the output template below with translated section headers (e.g., \"Итоговая сводка\", \"Цели\", \"Ключевые риски\", \"Следующие шаги\")\n- If English: respond and write the output document in English with standard headers\n- If ambiguous: use the language of the trigger phrase\n- Translate objective/KR names to the output language if the source is mixed-language\n\n---\n\n## Instructions\n\n### Step 1: Validate and Parse Input\n\n1. Identify the input source:\n   - **File path provided:** Read the file. Supported formats: `.md`, `.txt`, `.csv`\n   - **Text pasted in chat:** Use the message content directly\n   - **No input provided:** Ask the user via AskUserQuestion to provide OKR data (file or paste)\n\n2. Parse OKR structure — detect one of these layouts:\n   - **Markdown table:** columns map to Objective / Key Result / Current / Target / %Progress / Status / Notes\n   - **Indented list:** `Objective:` or `O1:` as headers, `- KR:` or `KR1.1:` as children\n   - **CSV/TSV:** use header row to identify columns\n   - **Free-form text:** extract Objective/KR pairs using keyword matching (Objective, Goal, KR, Key Result, Target, Цель, КР, Результат)\n\n3. For each Key Result, identify:\n   - Name / description\n   - Current value (numeric or qualitative)\n   - Target value (if present)\n   - Direction: whether higher or lower values are better (default: higher is better)\n     - If metric name contains keywords like \"churn\", \"rate\" (in negative context), \"cost\", \"time\", \"latency\", \"errors\": assume lower is better\n     - Otherwise: higher is better\n   - % progress (compute if current + target present):\n     - If higher is better: `round(current / target * 100)`\n     - If lower is better and current ≤ target: `✅ exceeded (goal met)`\n     - If lower is better and current > target: shortfall percentage = `round(((current - target) / target) * 100)` (used to classify severity, not as actual progress)\n   - Status (on track / at risk / off track) — use provided value, or derive from % (see Step 2)\n   - Notes / context (optional)\n\n4. If file cannot be read or OKR structure is unrecognizable:\n   - Stop. Report: \"Could not recognize OKR structure in [filename / input]. Please provide data with Objective and Key Result fields.\"\n\n5. Capture optional parameters:\n   - Period: from user message or file metadata (e.g., \"Q2 2026\", \"April\")\n   - Audience: CEO / board / team / general (default: general)\n   - Tone: formal / conversational (default: formal)\n   - Focus: all / at-risk-only / highlights-only (default: all)\n\n### Step 2: Classify Status\n\nFor each Key Result:\n\n1. If status is explicitly provided in the data → use it as-is\n2. If status is absent but a qualitative marker is present (e.g., \"done\", \"completed\", \"✅\", \"achieved\"):\n   - Mark as `✅ exceeded` if the description indicates completion or overachievement\n3. If status is absent but notes or context suggest risk (e.g., \"blocked\", \"slipped\", \"at risk\", \"delayed\", \"behind\"):\n   - Mark as `🟡 at risk` (even if percentage is on track)\n   - Exception: if notes clearly describe a temporary issue and the underlying metrics are strong, use percentage-based classification\n4. If status is absent but % progress is computable:\n   - **For \"higher is better\" metrics:**\n     - Determine metric category and apply appropriate threshold:\n       - Business-critical metrics (keywords: \"revenue\", \"MRR\", \"ARR\", \"sales\", \"deal\", \"customer value\", \"engagement\", \"retention\", \"growth\"): ≥ 85% on track\n       - All other operational/technical metrics: ≥ 70% on track\n     - Based on category:\n       - ≥ threshold: `🟢 on track`\n       - 50%–(threshold-1)%: `🟡 at risk`\n       - < 50%: `🔴 off track`\n       - > 100%: `✅ exceeded`\n   - **For \"lower is better\" metrics (e.g., churn, cost, latency):**\n     - If current ≤ target: `✅ exceeded` (goal met)\n     - If current > target: classify by shortfall percentage = `((current - target) / target) * 100`\n       - Shortfall > 20%: `🔴 off track` (significantly worse than target)\n       - Shortfall 10–20%: `🟡 at risk` (moderately worse than target)\n       - Shortfall ≤ 10%: `🟢 on track` (slightly worse but within acceptable margin)\n5. If neither status nor numeric data is available:\n   - Mark as `⬜ no data` — do not invent a status\n\nDerive Objective status:\n- 🟢 if all KRs are on track or exceeded\n- 🟡 if any KR is at risk\n- 🔴 if any KR is off track\n- ⬜ if all KRs have no data\n\n### Step 3: Generate Narrative\n\nFor each Objective:\n\n1. Write a **narrative paragraph** (2–4 sentences):\n   - What has been achieved so far\n   - What the current state implies (momentum, risk, or completion)\n   - If notes/context are available → weave them in naturally\n   - Do NOT repeat exact numbers already shown in the KR table\n   - Do NOT invent reasons for low progress if not provided in data\n\n2. Adapt to audience:\n   - **CEO / board:** \n     - Lead with business impact and strategic implications\n     - Skip implementation details, engineering blockers, tactical issues\n     - Use outcome-focused language: \"revenue target within reach\", \"market opportunity\", \"delivery risk identified\", \"strategic pivot needed\"\n     - Emphasize why each KR matters to the business\n     - For at-risk items: state the business impact and mitigation approach (if known)\n   - **Team:** Include operational detail, blockers, dependencies, and next steps if present\n   - **General (default):** Neutral business tone. Balanced detail — progress + context without excessive implementation specifics\n\n3. Apply focus filter if specified:\n   - `at-risk-only`: include only 🟡 and 🔴 objectives in per-objective sections\n   - `highlights-only`: include only 🟢 and ✅ objectives\n   - `all` (default): include all objectives\n\n**Edge Cases:**\n- KR with % > 100: show as-is, mark `✅ exceeded`, phrase as achievement in narrative (e.g., \"exceeded target by X%\")\n- KR with no numeric data and no notes: write \"Data not yet reported for this period\"\n- All KRs are 🟢 or ✅: omit \"Key Risks\" section entirely; do not force a risk if none exists\n- Only 1 KR with no parent Objective: group under a generic \"Overall Metrics\" (or in Russian: \"Ключевые метрики\") objective header; create a single objective section\n- Mixed languages in data (EN objective names + RU notes): normalize to the output language (use output language setting from Step 1); translate objective/KR names and notes if needed\n\n### Step 4: Generate Executive Summary\n\nWrite 2–4 sentences covering:\n1. How many objectives are on track / at risk / off track (e.g., \"2 of 3 objectives are on track\")\n2. Top highlight: the best-performing KR or achieved milestone\n3. Top risk: the most critical at-risk or off-track item (skip if none)\n\nKeep the summary self-contained — it should make sense without reading the full document.\n\n### Step 5: Compile Document\n\nAssemble the output using the template below. Apply these rules:\n- Omit \"Key Risks\" section if all KRs are on track (🟢) or exceeded (✅); always include it if any KR is 🟡 or 🔴\n- Omit \"Next Steps\" section if no next-step data, action items, or blockers are present in the input or notes\n- Use period label if provided (e.g., \"Q2 2026\", \"April\"); otherwise use \"Current Period\"\n- Round all percentages to nearest whole number\n- If audience is CEO: ensure narrative is outcome-focused and strategic; remove tactical details\n\n### Step 6: Save Output\n\n1. Write file as `okr-update-YYYY-MM-DD.md` (today's date)\n2. Save to:\n   - The folder containing the input file (if file was provided)\n   - The working directory (if text was pasted)\n3. Confirm: \"Saved: okr-update-[date].md — [N] objectives, [N] KRs. [N] at risk.\"\n\n---\n\n## Output Format\n\n```markdown\n# OKR Progress Update — [Period]\n**Prepared:** YYYY-MM-DD\n**Audience:** [if specified]\n\n---\n\n## Executive Summary\n\n[2–4 sentences: overall status, top highlight, top risk]\n\n---\n\n## Objectives\n\n### [Objective 1 Name] — 🟢 On Track\n\n[Narrative paragraph: 2–4 sentences on progress, momentum, notable context]\n\n| Key Result | Current | Target | Progress | Status |\n|------------|---------|--------|----------|--------|\n| [KR 1.1]   | [value] | [value]| [%]      | 🟢     |\n| [KR 1.2]   | [value] | [value]| [%]      | 🟡     |\n\n---\n\n### [Objective 2 Name] — 🔴 Off Track\n\n[Narrative paragraph]\n\n| Key Result | Current | Target | Progress | Status |\n|------------|---------|--------|----------|--------|\n| [KR 2.1]   | [value] | [value]| [%]      | 🔴     |\n\n---\n\n## Key Risks\n\n| Key Result | Objective | Status | Context |\n|------------|-----------|--------|---------|\n| [KR name]  | [O name]  | 🔴     | [note]  |\n\n---\n\n## Next Steps\n\n- [Next planned action if present in data]\n\n---\n*Generated by okr-progress-narrator · [date]*\n```\n\n---\n\n## Negative Cases\n\n- No input provided → ask for OKR data via AskUserQuestion; do not generate a blank document\n- File path provided but file does not exist → stop; report exact path checked; ask user to verify\n- Input file has no recognizable OKR structure → stop; report the file name; suggest format hint\n- All objectives have no data (`⬜`) → generate document but flag in Executive Summary: \"No quantitative data available for this period — narrative based on qualitative notes only\"\n- Period specified but data appears to be from a different period → include a note: \"Note: data timestamps suggest this may be from [inferred period]. Review before sharing.\"","tags":["okr","progress","narrator","claude","skills","kit","kirkruglov","agent-skills","agentic-skills","ai-agents","ai-skills","awesome-list"],"capabilities":["skill","source-kirkruglov","skill-okr-progress-narrator","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/okr-progress-narrator","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 (10,186 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:37.974Z","embedding":null,"createdAt":"2026-05-18T13:21:15.502Z","updatedAt":"2026-05-18T19:13:37.974Z","lastSeenAt":"2026-05-18T19:13:37.974Z","tsv":"'-1':662 '1':224,229,522,777,1000,1044,1062,1218,1289 '1.1':1310 '1.2':1314 '10':705,714 '100':394,418,668,695,949 '12':123 '2':269,442,515,536,782,831,1058,1074,1081,1226,1278,1295,1318 '2.1':1331 '20':697,706 '2026':121,489,1186 '3':329,561,771,914,1076,1092,1246 '4':446,608,783,1053,1059,1279,1296 '5':476,723,1125 '50':660,665 '6':1215 '70':651 '85':644 'absent':540,565,612 'accept':721 'achiev':550,788,958,1090 'action':1168,1350 'actual':425 'adapt':832 'alreadi':813 'alway':1150 'ambigu':200 'appear':1440 'appli':626,915,1135 'approach':887 'appropri':627 'april':490,1187 'arr':636 'as-i':533,951 'ask':257,1367,1392 'askuserquest':261,1372 'assembl':1128 'assum':373 'at-risk':877,1098 'at-risk-on':505,920 'audienc':124,491,834,1200,1273 'avail':731,803,1426 'balanc':906 'base':606,654,1431 'behind':578 'best':1086 'best-perform':1085 'better':353,357,376,380,390,398,408,620,673 'blank':1377 'block':142,573 'blocker':848,894,1171 'board':33,126,493,836 'busi':630,839,875,883,904 'business-crit':629 'cannot':449 'captur':477 'case':946,1363 'categori':624,656 'ceo':125,492,835,1202 'chat':116,248 'check':1391 'children':302 'churn':364,676 'classif':607 'classifi':421,516,688 'clear':592 'column':280,309 'compil':1126 'complet':549,558,799 'comput':382,616 'confirm':1247 'contain':361,1114,1231 'content':160,252 'context':368,444,569,909,1302,1340 'convers':500 'convert':70 'cost':369,677 'could':459 'cover':1061 'creat':1019 'critic':631,1097 'csv':111,244 'csv/tsv':303 'current':65,286,337,384,392,400,410,415,680,686,692,793,1190,1305,1326 'custom':639 'cyril':159 'data':8,53,105,155,265,469,530,729,735,769,830,970,975,1027,1167,1354,1370,1415,1425,1439,1451 'date':1225,1252,1361 'dd':1272 'deal':638 'default':354,496,501,512,902,941 'delay':577 'deliveri':862 'depend':895 'deriv':438,741 'describ':593 'descript':336,556 'design':83 'detail':846,893,907,1213 'detect':144,145,273 'determin':622 'differ':1445 'direct':87,253,346 'directori':1241 'document':166,193,1123,1127,1378,1417 'done':548 'e.g':178,487,547,572,675,961,1073,1184 'edg':945 'emphas':868 'en':1028 'engag':641 'engin':847 'english':187,195 'ensur':1203 'entir':990 'error':372 'even':583 'exact':811,1389 'exceed':402,553,669,682,751,955,962,1149 'except':589 'excess':911 'execut':90,134,1055,1276,1421 'exist':998,1386 'explicit':526 'extract':314 'far':790 'field':475 'file':13,108,234,239,266,448,485,1220,1234,1236,1379,1383,1397,1406 'filenam':465 'filter':917 'flag':1419 'focus':503,854,916,1208 'folder':1230 'forc':993 'form':59,312 'formal':499,502 'format':241,1262,1409 'free':58,311 'free-form':57,310 'full':1122 'general':495,497,901 'generat':772,1054,1355,1375,1416 'generic':1009 'goal':321,403,683 'group':1006 'growth':643 'header':177,198,297,305,1018 'higher':348,355,378,388,618 'highlight':510,934,1083,1284 'highlights-on':509,933 'hint':1410 'identifi':230,308,334,864 'impact':840,884 'implement':845,912 'impli':795 'implic':843 'includ':891,924,936,942,1151,1447 'indent':291 'indic':557 'infer':1458 'input':103,228,232,255,466,1176,1233,1365,1396 'instruct':222 'invent':738,821 'issu':596,850 'item':880,1105,1169 'keep':1109 'key':63,284,323,332,473,520,987,1139,1303,1324,1334,1336 'keyword':318,362,633 'known':889 'kr':96,298,322,754,760,817,871,947,966,1001,1088,1155,1309,1313,1330,1341 'kr1.1':300 'krs':746,766,983,1144,1257 'label':119,1181 'languag':143,149,203,214,221,855,1025,1037,1040 'latenc':371,678 'layout':277 'lead':837 'like':363 'list':55,292 'low':824 'lower':350,374,396,406,671 'make':1117 'mani':1064 'map':281 'margin':722 'mark':551,579,732,954 'markdown':278,1263 'marker':544 'market':860 'match':319 'matter':872 'may':1455 'md':109,242,1253 'messag':152,251,483 'met':404,684 'metadata':486 'metric':9,359,600,621,623,632,650,674,1011 'mileston':1091 'mitig':886 'mix':220,1024 'mixed-languag':219 'mm':1271 'moder':709 'momentum':796,1300 'mrr':635 'n':1254,1256,1258 'name':210,335,360,1030,1047,1290,1319,1342,1344,1407 'narrat':4,20,41,47,75,95,131,773,780,960,1204,1293,1322,1360,1430 'natur':807 'nearest':1196 'need':867,1051 'negat':367,1362 'neither':725 'neutral':903 'next':101,897,1159,1165,1346,1348 'next-step':1164 'none':997,1108 'normal':1033 'notabl':1301 'note':11,60,290,443,567,591,973,1032,1049,1178,1345,1434,1449,1450 'notes/context':801 'number':812,1198 'numer':339,728,969 'o':1343 'o1':295 'object':62,94,138,283,293,320,471,742,776,927,931,939,944,1005,1017,1022,1029,1065,1077,1255,1287,1288,1317,1338,1412 'objective/kr':209,315,1046 'off-track':1102 'okr':2,7,31,39,42,45,52,104,154,264,271,453,462,1250,1264,1358,1369,1401 'okr-progress-narr':1,1357 'okr-upd':1249 'okr-update-yyyy-mm-dd.md':79,130,1222 'omit':986,1138,1158 'one':274 'oper':892 'operational/technical':649 'opportun':861 'option':117,445,478 'otherwis':377,1188 'outcom':853,1207 'outcome-focus':852,1206 'output':81,129,165,171,192,213,1036,1039,1130,1217,1261 'overachiev':560 'overal':1010,1281 'pair':316 'paragraph':781,1294,1323 'paramet':479 'parent':1004 'pars':227,270 'past':15,113,246,268,1245 'path':235,1380,1390 'per':93,137,930 'per-object':92,136,929 'percentag':10,413,585,605,691,1194 'percentage-bas':604 'perform':1087 'period':118,480,981,1180,1191,1267,1429,1436,1446,1459 'phrase':207,956 'pivot':866 'plan':1349 'pleas':467 'prepar':27,1268 'present':345,386,546,900,1173,1352 'progress':3,21,43,46,76,288,381,426,614,825,908,1265,1299,1307,1328,1359 'provid':236,256,263,435,468,527,828,1183,1238,1366,1381 'q1':120 'q2':488,1185 'qualit':341,543,1433 'quantit':1424 'quarter':30 'rate':365 'raw':6,51 'reach':859 'read':237,451,1120 'readabl':19 'reason':822 'recogn':461 'recogniz':1400 'remov':1211 'repeat':810 'report':32,458,978,1388,1404 'respond':161,188 'result':64,285,324,333,474,521,1304,1325,1337 'retent':642 'revenu':634,856 'review':1460 'risk':99,141,431,507,571,576,582,664,708,757,797,863,879,922,988,995,1070,1094,1100,1140,1260,1286,1335 'round':391,414,1192 'row':306 'ru':1031 'rule':1137 'russian':157,168,1014 'sale':637 'save':1216,1227,1248 'section':139,176,932,989,1023,1141,1161 'see':440 'self':1113 'self-contain':1112 'sens':1118 'sentenc':784,1060,1280,1297 'set':1041 'sever':422 'share':86,1462 'shortfal':412,690,696,704,713 'show':950 'shown':814 'signific':700 'singl':1021 'skill':49 'skill-okr-progress-narrator' 'skip':844,1106 'slight':717 'slip':574 'sourc':217,233 'source-kirkruglov' 'specif':913 'specifi':919,1275,1437 'sprint':122 'stakehold':24,44,89 'standard':197 'state':794,881 'status':97,289,427,517,524,538,563,610,726,740,743,1282,1308,1329,1339 'step':102,223,441,514,770,898,1043,1052,1124,1160,1166,1214,1347 'stop':457,1387,1403 'strateg':842,865,1210 'strong':602 'structur':74,272,454,463,1402 'suggest':570,1408,1453 'summari':91,135,1056,1111,1277,1422 'support':240 'sync':37 'tabl':54,98,279,818 'tactic':849,1212 'take':50 'target':68,287,325,342,385,393,401,411,416,417,681,687,693,694,703,712,857,963,1306,1327 'team':36,127,494,890 'templat':172,1133 'temporari':595 'text':16,114,245,313,1243 'threshold':628,657,661 'time':370 'timestamp':1452 'today':1223 'tone':128,498,905 'top':1082,1093,1283,1285 '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' 'track':429,433,588,646,653,659,667,699,716,749,763,1068,1072,1080,1104,1147,1292,1321 'transform':5 'translat':175,208,1045 'trigger':38,206 'txt':110,243 'under':599 'unrecogniz':456 'updat':22,34,40,77,132,1251,1266 'use':25,169,201,249,304,317,419,434,531,603,851,1038,1131,1179,1189 'user':147,259,482,1393 'valid':225 'valu':66,338,343,351,436,640,1311,1312,1315,1316,1332,1333 'verifi':1395 'via':260,1371 'weav':804 'week':28 'whether':347 'whole':1197 'within':720,858 'without':910,1119 'work':1240 'wors':701,710,718 'write':163,190,778,974,1057,1219 'x':965 'yet':977 'yyyi':1270 'yyyy-mm-dd':1269 'итоговая':179 'ключевые':182,1015 'кр':327 'метрики':1016 'результат':328 'риски':183 'сводка':180 'следующие':184 'цели':181 'цель':326 'шаги':185","prices":[{"id":"cf081455-f492-480c-b860-0a358f9cc36c","listingId":"5906d379-be02-40d7-ac4f-09916463e0f0","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:15.502Z"}],"sources":[{"listingId":"5906d379-be02-40d7-ac4f-09916463e0f0","source":"github","sourceId":"KirKruglov/claude-skills-kit/okr-progress-narrator","sourceUrl":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/okr-progress-narrator","isPrimary":false,"firstSeenAt":"2026-05-18T13:21:15.502Z","lastSeenAt":"2026-05-18T19:13:37.974Z"}],"details":{"listingId":"5906d379-be02-40d7-ac4f-09916463e0f0","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"KirKruglov","slug":"okr-progress-narrator","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":"6e4c681d4471d9a77287badfb8230181bcc68774","skill_md_path":"skills/okr-progress-narrator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/KirKruglov/claude-skills-kit/tree/main/skills/okr-progress-narrator"},"layout":"multi","source":"github","category":"claude-skills-kit","frontmatter":{"name":"okr-progress-narrator","description":"Transform raw OKR data (metrics, percentages, notes) from files or pasted text into a readable narrative progress update for stakeholders. Use when preparing weekly or quarterly OKR reports, board updates, or team syncs. Triggers: 'okr update', 'narrate okr progress', 'stakeholder okr update', 'generate okr report', 'okr status update', 'окр апдейт', 'нарратив по OKR', 'прогресс-апдейт для стейкхолдеров', 'оформи OKR', 'прогресс по целям'."},"skills_sh_url":"https://skills.sh/KirKruglov/claude-skills-kit/okr-progress-narrator"},"updatedAt":"2026-05-18T19:13:37.974Z"}}