[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M78ZGSZMEVMK9769B5KW01S4":3,"skill-same:01M78ZGSZMEVMK9769B5KW01S4":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":44,"ownerHtmlUrl":45,"ownerBlogUrl":46,"ownerDescription":47,"updatedAt":48,"install":49,"resources":62},"01M78ZGSZMEVMK9769B5KW01S4","pptx-author",null,"Build PowerPoint decks headless with python-pptx. Pairs with excel-author for model-backed decks where every number traces to a workbook cell. Use for pitch decks, IC memos, earnings notes.","ZDStudios\u002FAIOS","ZDStudios","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121779558?v=4","01M788P61KMHSJ87R41BH4MSQM","01M788P627Y27KK5MQ1KG3TW5H",7,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fhermes-agent-main\u002Fhermes-agent-main\u002Foptional-skills\u002Ffinance\u002Fpptx-author\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: pptx-author\ndescription: Build PowerPoint decks headless with python-pptx. Pairs with excel-author for model-backed decks where every number traces to a workbook cell. Use for pitch decks, IC memos, earnings notes.\nversion: 1.0.0\nauthor: Anthropic (adapted by Nous Research)\nlicense: Apache-2.0\nplatforms: [linux, macos, windows]\nmetadata:\n  hermes:\n    tags: [powerpoint, pptx, python-pptx, presentation, finance]\n    related_skills: [excel-author, powerpoint]\n---\n\n# pptx-author\n\nProduce a .pptx file on disk using `python-pptx`. Use when you need to deliver a deck as a file artifact, not drive a live PowerPoint session.\n\nAdapted from Anthropic's `pptx-author` and `pitch-deck` skills in [anthropics\u002Ffinancial-services](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services). The MCP \u002F Office-JS branches of the originals are dropped — this assumes headless Python.\n\nFor the broader, already-shipped PowerPoint authoring skill (slides, speaker notes, embeds, media), see the built-in `powerpoint` skill. This skill is a lighter-weight pattern tuned for model-backed decks (pitch decks, IC memos, earnings notes) where every number must trace to a source workbook.\n\n## Output contract\n\n- Write to `.\u002Fout\u002F\u003Cname>.pptx`. Create `.\u002Fout\u002F` if it does not exist.\n- Return the relative path in your final message.\n\n## Setup\n\n```bash\npip install \"python-pptx>=0.6\"\n```\n\n## Core conventions\n\n### One idea per slide\nTitle states the takeaway; body supports it. A slide titled \"Q3 Revenue\" is weak; \"Revenue growth accelerated to 14% Y\u002FY in Q3\" is strong.\n\n### Every number traces to the model\nIf a figure on a slide came from `.\u002Fout\u002Fmodel.xlsx`, footnote the sheet and cell.\n\n```\nRevenue: $1,250M  (Source: model.xlsx, Inputs!C3)\n```\n\nNever transcribe numbers from memory or from a summary — open the workbook, read the named range, and bind the deck value to it programmatically when you can.\n\n### Use the firm template when one is mounted\nIf `.\u002Ftemplates\u002Ffirm-template.pptx` exists, load it so the deck inherits branded colors, fonts, and master layouts.\n\n```python\nfrom pptx import Presentation\nfrom pathlib import Path\n\ntemplate = Path(\".\u002Ftemplates\u002Ffirm-template.pptx\")\nprs = Presentation(str(template)) if template.exists() else Presentation()\n```\n\n### Charts: PNG-from-model beats native pptx charts\nWhen fidelity matters (the model's chart styling must match the deck exactly), render the chart to PNG from the source workbook and embed the image. Native `pptx.chart` charts are fragile and often don't match firm conventions.\n\n```python\nfrom pptx.util import Inches\nslide.shapes.add_picture(\".\u002Fout\u002Fcharts\u002Ffootball_field.png\",\n                         Inches(1), Inches(2),\n                         width=Inches(8))\n```\n\n### No external sends\nThis skill writes a file. It never emails, uploads, or posts. Orchestration layers handle delivery.\n\n## Skeleton\n\n```python\nfrom pptx import Presentation\nfrom pptx.util import Inches, Pt\nfrom pptx.dml.color import RGBColor\nfrom pathlib import Path\n\ntemplate = Path(\".\u002Ftemplates\u002Ffirm-template.pptx\")\nprs = Presentation(str(template)) if template.exists() else Presentation()\n\n# Title slide\nslide = prs.slides.add_slide(prs.slide_layouts[0])\nslide.shapes.title.text = \"Project Aurora — Strategic Alternatives\"\nslide.placeholders[1].text = \"Preliminary Discussion Materials\"\n\n# Valuation summary slide (title-only layout)\nslide = prs.slides.add_slide(prs.slide_layouts[5])\nslide.shapes.title.text = \"Valuation implies $38–$52 per share across methodologies\"\n\n# Add a table bound to model outputs\nrows, cols = 5, 4\ntbl_shape = slide.shapes.add_table(rows, cols,\n                                   Inches(0.5), Inches(1.5),\n                                   Inches(9), Inches(3))\ntbl = tbl_shape.table\nheaders = [\"Methodology\", \"Low ($)\", \"Mid ($)\", \"High ($)\"]\nfor c, h in enumerate(headers):\n    tbl.cell(0, c).text = h\n\n# In a real deck, read these from the model workbook with openpyxl\ndata = [\n    (\"Trading comps\",     \"35\", \"41\", \"48\"),\n    (\"Precedent M&A\",     \"39\", \"45\", \"52\"),\n    (\"DCF (base)\",        \"36\", \"43\", \"51\"),\n    (\"LBO (10% IRR)\",     \"33\", \"38\", \"44\"),\n]\nfor r, row in enumerate(data, start=1):\n    for c, val in enumerate(row):\n        tbl.cell(r, c).text = val\n\n# Embed a chart rendered from the model\nslide = prs.slides.add_slide(prs.slide_layouts[5])\nslide.shapes.title.text = \"Football field — current price $42\"\nslide.shapes.add_picture(\".\u002Fout\u002Fcharts\u002Ffootball_field.png\",\n                         Inches(1), Inches(1.8), width=Inches(8))\n\nPath(\".\u002Fout\").mkdir(exist_ok=True)\nprs.save(\".\u002Fout\u002Fpitch-aurora.pptx\")\n```\n\n## Binding deck numbers to the source workbook\n\nRead named ranges or specific cells from your Excel model so deck numbers never drift.\n\n```python\nfrom openpyxl import load_workbook\n\nwb = load_workbook(\".\u002Fout\u002Fmodel.xlsx\", data_only=True)\ndef nr(name):\n    \"\"\"Resolve a named range to its current computed value.\"\"\"\n    rng = wb.defined_names[name]\n    sheet, coord = next(rng.destinations)\n    return wb[sheet][coord].value\n\nrevenue_fy24 = nr(\"RevenueFY24\")\nimplied_mid  = nr(\"ImpliedSharePriceBase\")\n```\n\nThen build deck content using those values:\n```python\nslide.shapes.title.text = f\"Implied share price of ${implied_mid:.2f} (base case)\"\n```\n\nRemember to recalculate the workbook before reading it — openpyxl only sees computed values if something has already calculated the sheet. Run the recalc helper in the `excel-author` skill first, or open\u002Fsave through a real Excel session.\n\n## Slide-type checklist for pitch decks\n\nA typical banking pitch deck follows this structure. Not prescriptive, but useful as a starting skeleton:\n\n1. Cover \u002F title\n2. Disclaimer\n3. Table of contents\n4. Situation overview\n5. Company snapshot (the target)\n6. Market \u002F sector context\n7. Valuation summary (football field) — the money slide\n8. Trading comps detail\n9. Precedent transactions detail\n10. DCF summary\n11. Illustrative LBO \u002F sponsor case\n12. Process considerations\n13. Appendix\n\n## When NOT to use this skill\n\n- Users in a live PowerPoint session with an Office MCP available — drive their live doc instead.\n- Non-financial slideware (quarterly all-hands, marketing decks) — use the broader `powerpoint` skill.\n- Decks with heavy animation, transitions, or speaker notes — use the broader `powerpoint` skill.\n\n## Attribution\n\nConventions adapted from Anthropic's Claude for Financial Services plugin suite, Apache-2.0 licensed. Original: https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services\u002Ftree\u002Fmain\u002Fplugins\u002Fagent-plugins\u002Fpitch-agent\u002Fskills\u002Fpptx-author\n","# pptx-author\n\nProduce a .pptx file on disk using `python-pptx`. Use when you need to deliver a deck as a file artifact, not drive a live PowerPoint session.\n\nAdapted from Anthropic's `pptx-author` and `pitch-deck` skills in [anthropics\u002Ffinancial-services](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services). The MCP \u002F Office-JS branches of the originals are dropped — this assumes headless Python.\n\nFor the broader, already-shipped PowerPoint authoring skill (slides, speaker notes, embeds, media), see the built-in `powerpoint` skill. This skill is a lighter-weight pattern tuned for model-backed decks (pitch decks, IC memos, earnings notes) where every number must trace to a source workbook.\n\n## Output contract\n\n- Write to `.\u002Fout\u002F\u003Cname>.pptx`. Create `.\u002Fout\u002F` if it does not exist.\n- Return the relative path in your final message.\n\n## Setup\n\n```bash\npip install \"python-pptx>=0.6\"\n```\n\n## Core conventions\n\n### One idea per slide\nTitle states the takeaway; body supports it. A slide titled \"Q3 Revenue\" is weak; \"Revenue growth accelerated to 14% Y\u002FY in Q3\" is strong.\n\n### Every number traces to the model\nIf a figure on a slide came from `.\u002Fout\u002Fmodel.xlsx`, footnote the sheet and cell.\n\n```\nRevenue: $1,250M  (Source: model.xlsx, Inputs!C3)\n```\n\nNever transcribe numbers from memory or from a summary — open the workbook, read the named range, and bind the deck value to it programmatically when you can.\n\n### Use the firm template when one is mounted\nIf `.\u002Ftemplates\u002Ffirm-template.pptx` exists, load it so the deck inherits branded colors, fonts, and master layouts.\n\n```python\nfrom pptx import Presentation\nfrom pathlib import Path\n\ntemplate = Path(\".\u002Ftemplates\u002Ffirm-template.pptx\")\nprs = Presentation(str(template)) if template.exists() else Presentation()\n```\n\n### Charts: PNG-from-model beats native pptx charts\nWhen fidelity matters (the model's chart styling must match the deck exactly), render the chart to PNG from the source workbook and embed the image. Native `pptx.chart` charts are fragile and often don't match firm conventions.\n\n```python\nfrom pptx.util import Inches\nslide.shapes.add_picture(\".\u002Fout\u002Fcharts\u002Ffootball_field.png\",\n                         Inches(1), Inches(2),\n                         width=Inches(8))\n```\n\n### No external sends\nThis skill writes a file. It never emails, uploads, or posts. Orchestration layers handle delivery.\n\n## Skeleton\n\n```python\nfrom pptx import Presentation\nfrom pptx.util import Inches, Pt\nfrom pptx.dml.color import RGBColor\nfrom pathlib import Path\n\ntemplate = Path(\".\u002Ftemplates\u002Ffirm-template.pptx\")\nprs = Presentation(str(template)) if template.exists() else Presentation()\n\n# Title slide\nslide = prs.slides.add_slide(prs.slide_layouts[0])\nslide.shapes.title.text = \"Project Aurora — Strategic Alternatives\"\nslide.placeholders[1].text = \"Preliminary Discussion Materials\"\n\n# Valuation summary slide (title-only layout)\nslide = prs.slides.add_slide(prs.slide_layouts[5])\nslide.shapes.title.text = \"Valuation implies $38–$52 per share across methodologies\"\n\n# Add a table bound to model outputs\nrows, cols = 5, 4\ntbl_shape = slide.shapes.add_table(rows, cols,\n                                   Inches(0.5), Inches(1.5),\n                                   Inches(9), Inches(3))\ntbl = tbl_shape.table\nheaders = [\"Methodology\", \"Low ($)\", \"Mid ($)\", \"High ($)\"]\nfor c, h in enumerate(headers):\n    tbl.cell(0, c).text = h\n\n# In a real deck, read these from the model workbook with openpyxl\ndata = [\n    (\"Trading comps\",     \"35\", \"41\", \"48\"),\n    (\"Precedent M&A\",     \"39\", \"45\", \"52\"),\n    (\"DCF (base)\",        \"36\", \"43\", \"51\"),\n    (\"LBO (10% IRR)\",     \"33\", \"38\", \"44\"),\n]\nfor r, row in enumerate(data, start=1):\n    for c, val in enumerate(row):\n        tbl.cell(r, c).text = val\n\n# Embed a chart rendered from the model\nslide = prs.slides.add_slide(prs.slide_layouts[5])\nslide.shapes.title.text = \"Football field — current price $42\"\nslide.shapes.add_picture(\".\u002Fout\u002Fcharts\u002Ffootball_field.png\",\n                         Inches(1), Inches(1.8), width=Inches(8))\n\nPath(\".\u002Fout\").mkdir(exist_ok=True)\nprs.save(\".\u002Fout\u002Fpitch-aurora.pptx\")\n```\n\n## Binding deck numbers to the source workbook\n\nRead named ranges or specific cells from your Excel model so deck numbers never drift.\n\n```python\nfrom openpyxl import load_workbook\n\nwb = load_workbook(\".\u002Fout\u002Fmodel.xlsx\", data_only=True)\ndef nr(name):\n    \"\"\"Resolve a named range to its current computed value.\"\"\"\n    rng = wb.defined_names[name]\n    sheet, coord = next(rng.destinations)\n    return wb[sheet][coord].value\n\nrevenue_fy24 = nr(\"RevenueFY24\")\nimplied_mid  = nr(\"ImpliedSharePriceBase\")\n```\n\nThen build deck content using those values:\n```python\nslide.shapes.title.text = f\"Implied share price of ${implied_mid:.2f} (base case)\"\n```\n\nRemember to recalculate the workbook before reading it — openpyxl only sees computed values if something has already calculated the sheet. Run the recalc helper in the `excel-author` skill first, or open\u002Fsave through a real Excel session.\n\n## Slide-type checklist for pitch decks\n\nA typical banking pitch deck follows this structure. Not prescriptive, but useful as a starting skeleton:\n\n1. Cover \u002F title\n2. Disclaimer\n3. Table of contents\n4. Situation overview\n5. Company snapshot (the target)\n6. Market \u002F sector context\n7. Valuation summary (football field) — the money slide\n8. Trading comps detail\n9. Precedent transactions detail\n10. DCF summary\n11. Illustrative LBO \u002F sponsor case\n12. Process considerations\n13. Appendix\n\n## When NOT to use this skill\n\n- Users in a live PowerPoint session with an Office MCP available — drive their live doc instead.\n- Non-financial slideware (quarterly all-hands, marketing decks) — use the broader `powerpoint` skill.\n- Decks with heavy animation, transitions, or speaker notes — use the broader `powerpoint` skill.\n\n## Attribution\n\nConventions adapted from Anthropic's Claude for Financial Services plugin suite, Apache-2.0 licensed. Original: https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services\u002Ftree\u002Fmain\u002Fplugins\u002Fagent-plugins\u002Fpitch-agent\u002Fskills\u002Fpptx-author\n",{"name":5,"author":23,"license":14,"version":24,"metadata":25,"platforms":35,"description":7},"Anthropic (adapted by Nous Research)","1.0.0",{"hermes":26},{"tags":27,"related_skills":33},[28,29,30,31,32],"powerpoint","pptx","python-pptx","presentation","finance",[34,28],"excel-author",[36,37,38],"linux","macos","windows","main","4faa79f92720631ffd00755d9a1018f8c68d3619","hermes-agent-main\u002Fhermes-agent-main\u002Foptional-skills\u002Ffinance\u002Fpptx-author",1,"https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS","https:\u002F\u002Fzdstudios.github.io\u002FAIOS\u002F","https:\u002F\u002Fgithub.com\u002FZDStudios","zdstudios.network","Hacker, Coder and Machine Learning Engineer \r\n","2026-10-06 21:45:38",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add ZDStudios\u002FAIOS --skill pptx-author",{"tool":55,"command":56},"bunx","bunx skills add ZDStudios\u002FAIOS --skill pptx-author",{"tool":58,"command":59},"pnpm","pnpm dlx skills add ZDStudios\u002FAIOS --skill pptx-author","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fhermes-agent-main\u002Fhermes-agent-main\u002Foptional-skills\u002Ffinance\u002Fpptx-author\u002FSKILL.md",true,[],[64,73,80,86,93,100],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":68,"licenseFileUrl":69,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":18},"01M7910QACPXVF8QY3ZMK6MD2M","ruflo","Ruflo is a multi-agent orchestration platform for AI coding agents (Claude Code, Cursor, Codex, Copilot, Gemini, Amp, +12 more). Use this skill when the user wants to (1) install\u002Finit ruflo in a project, (2) run multi-agent swarms with hierarchical coordination, (3) use ruflo's 314+ MCP tools for memory, routing, hooks, sub-agents, or workflows, (4) check ruflo status\u002Fversion\u002Fdoctor health, or (5) discover which of ruflo's 30+ plugins fits their task.","MIT","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fruflo-main\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fruflo-main\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":18},"01M790G7AX480HX5959531CWBK","ponytail","Forces the laziest solution that actually works, simplest, shortest, most minimal. Channels a senior dev who has seen everything: question whether the task needs to exist at all (YAGNI), reach for the standard library before custom code, native platform features before dependencies, one line before fifty. Supports intensity levels: lite, full (default), ultra. Use on ANY coding task: writing, adding, refactoring, fixing, reviewing, or designing code, and choosing libraries or dependencies. Also use whenever the user says \"ponytail\", \"be lazy\", \"lazy mode\", \"simplest solution\", \"minimal solution\", \"yagni\", \"do less\", or \"shortest path\", or complains about over-engineering, bloat, boilerplate, or unnecessary dependencies. Do NOT use for non-coding requests (general knowledge, prose, translation, summaries, recipes).","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fponytail-main\u002Fskills\u002Fponytail\u002FSKILL.md",[],[],{"skillNo":81,"name":75,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":18},"01M790FD2BC49T1M774T6NND33","Lazy senior dev mode for any coding task (write, refactor, fix, review): YAGNI, stdlib first, no unrequested abstractions. Not for non-coding requests.","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fponytail-main\u002F.openclaw\u002Fskills\u002Fponytail\u002FSKILL.md",[],[],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":18},"01M790FANKMMJJQK23GQEESEXP","ponytail-review","Review a diff for over-engineering. Finds what to delete: reinvented stdlib, needless deps, speculative abstractions. One line per finding.","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fponytail-main\u002F.openclaw\u002Fskills\u002Fponytail-review\u002FSKILL.md",[],[],{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":18},"01M790F7Q3SJZCR6BYQ97TVFEJ","ponytail-help","Quick reference for ponytail's modes, skills, and commands. One-shot display.","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fponytail-main\u002F.openclaw\u002Fskills\u002Fponytail-help\u002FSKILL.md",[],[],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":18},"01M790F3TX7VZG0J4VVXE9BSNT","ponytail-gain","Show ponytail measured impact as a scoreboard: less code, less cost, more speed, from the benchmark medians. One-shot display.","https:\u002F\u002Fgithub.com\u002FZDStudios\u002FAIOS\u002Fblob\u002Fmain\u002Fponytail-main\u002F.openclaw\u002Fskills\u002Fponytail-gain\u002FSKILL.md",[],[]]