>- Create professional, consultant-grade PowerPoint presentations from scratch using MckEngine (python-pptx wrapper) with McKinsey-style design. Use when user asks to create slides, pitch decks, business presentations, strategy decks, quarterly reviews, board meeting slides, or any professional PPTX. AI calls eng.cover(), eng.donut(), eng.timeline() etc — 67 high-level methods across 12 categories (structure, data, framework, comparison, narrative, timeline, team, charts, images, advanced viz, dashboards, visual storytelling), consistent typography, zero file-corruption issues, BLOCK_ARC native shapes for circular charts (donut, pie, gauge), production-hardened guard rails for spacing, overflow, legend consistency, title style uniformity, dynamic sizing for variable-count layouts, horizontal item overflow protection, chart rendering, and AI-generated cover images via Tencent Hunyuan 2.0 with professional cutout, cool grey-blue tint, and McKinsey-style Bézier ribbon decoration.
npx skills add https://github.com/likaku/Mck-ppt-design-skill --skill mck-ppt-design
> Version: 2.3.3-harness-v2 · Engine: MckEngine (python-pptx) · Author: likaku
>
> Required tools: Read, Write, Bash · Requires: pip install python-pptx lxml
> 告诉 AI 要做什么效果一般,告诉它前人最容易在哪里塌效果更好。
> 以下三种反模式均已在真实执行中被验证,每次必须主动警惕。
错误做法:
> 「S4 QA 共 7 个 errors,判断均为 engine 设计行为,门禁通过,进入 S5」
问题所在:passed 是由 AI 口头判断的,不是由程序派生的。无论理由多充分,这句话都是 AI 在给自己写完成证书。
正确做法:
python references/scripts/gate_check.py <pptx路径> <项目目录><项目目录>/gate_result.jsongate_result.json 中 "passed": true 时,才能进入 S5"passed": false,修复 user_code_errors 列表中的问题,重新渲染,再次执行 gate_check错误做法:
> 「S3 内容门禁预检:API 格式正确,字数在限制内,通过,进入 S4」(没有执行任何代码)
问题所在:今天真实发生的 3 个 API 格式错误(four_column/matrix_2x2/executive_summary 参数格式),靠脑子过是过不出来的,必须靠代码检查。
正确做法:
python references/scripts/gate_check_s3.py <content.json路径> <项目目录><项目目录>/gate_s3.json"passed": true 时,才能进入 S4fail 项,修正 content.json,重新执行 gate_check_s3错误做法:
> 「peer_font_inconsistency 是 engine 内部设计行为,不是用户代码问题,可以放行」
问题所在:这个分类本身是正确的,但由 AI 在对话里口头做出,等于把豁免权交给了 AI 自己——而 AI 有动机让自己通过。
正确做法:
gate_check.py 里有硬编码的 ENGINE_BUG_WHITELIST 枚举。只有在白名单里的 error category,才会被豁免。白名单是代码,不是 AI 的判断。如果你认为某类 error 应该加入白名单,修改 gate_check.py 里的枚举,而不是口头声明豁免。
experiences/ 对应文件sys.path.insert(0, os.path.expanduser('~/.workbuddy/skills/mck-ppt-design'))> 在每个阶段开始时,读对应文件。不要一次性全读。
| 阶段 | 必须读 | 说明 |
|------|--------|------|
| S1 需求 | references/team/brand-guide.md | 了解设计约束 |
| S2 结构 | references/framework/engine-api.md + references/layout-matrix.yaml | 版式选择和能力边界 |
| S3 内容 | references/framework/guard-rails.md + experiences/*.md(存在时)| 防溢出规则 + 历史踩坑 |
| S4 渲染 | 用到的 references/layouts/*.md(只读实际用到的版式)| 版式实现细节 |
| S5 交付 | 无 | — |
完整路由表:references/INDEX.md
┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐ ┌──────────┐
│ S1 需求 │──▶│ S2 结构 ⭐ │──▶│ S3 内容 ⭐ │──▶│ S4 渲染+QA ⭐⭐│──▶│ S5 交付 │
│ brief.md│ │ outline.json│ │content.json │ │ .pptx │ │ + 沉淀 │
└─────────┘ └─────────────┘ └─────────────┘ └──────────────┘ └──────────┘
⭐ = 门禁(FAIL 则在本阶段修正,不得跳过)
S3/S4 门禁必须运行 gate_check 脚本,读 JSON 结果 — 不得口头宣布通过
读文件:references/team/brand-guide.md
收集信息:
产出:在工作目录创建 ppt-project-{slug}/brief.md
门禁:audience + goal + key_messages 三项非空(AI 自评即可)
读文件:references/framework/engine-api.md, references/layout-matrix.yaml
任务:
layout(查 engine-api.md 速查表)key_point(完整句子,不是标签)产出:ppt-project-{slug}/outline.json
{
"brief": {"audience": "董事会", "goal": "战略汇报", "duration_minutes": 15},
"slides": [
{"idx": 1, "layout": "cover", "title": "Q1 2026 战略回顾", "key_point": ""},
{"idx": 2, "layout": "toc", "title": "目录", "key_point": ""},
{"idx": 3, "layout": "table_insight", "title": "市场格局三大转变驱动战略重构", "key_point": ""}
]
}
⭐ 门禁 S2(AI 自评):
cover 幻灯片存在count <= duration_minutes * 1.2)layout-matrix.yaml 中有定义two_column_text 数量 ≤ 1读文件:references/framework/guard-rails.md, experiences/*.md(全部存在的文件)
任务:
source 出处layout-matrix.yaml 的 char_budget 控制文字量产出:ppt-project-{slug}/content.json
⭐ 门禁 S3(必须机读化,不得 AI 自评):
python ~/.workbuddy/skills/mck-ppt-design/references/scripts/gate_check_s3.py \
<项目目录>/content.json <项目目录>
读取 <项目目录>/gate_s3.json:
"passed": true → 进入 S4"passed": false → 修正 content.json 中 fail_items 列出的问题,重新执行读文件:用到的版式对应的 references/layouts/*.md
任务:
content.json 生成 Python 渲染脚本.pptx⭐⭐ 门禁 S4(必须机读化,不得口头宣布通过):
python ~/.workbuddy/skills/mck-ppt-design/references/scripts/gate_check.py \
<pptx路径> <项目目录>
读取 <项目目录>/gate_result.json:
"passed": true → 进入 S5"passed": false → 查看 user_code_errors,修复渲染代码,重新渲染,再次执行注意:engine_bug 类 errors(peer_font_inconsistency 等白名单条目)由脚本自动豁免,不需要 AI 口头判断。
产出:<项目目录>/gate_result.json + .pptx
任务:
gate_result.json 确认 passed: true(不得在无此文件时声称通过).pptx 文件⭐ Self-Refinement 协议:
修正后判断:
ONE-TIME(单次特定调整)→ 不需要沉淀
PATTERN(跨 deck 可重现的问题)→ 必须写入 experiences/
- 溢出类 → experiences/overflow.md
- 图表限制 → experiences/chart-limits.md
- 版式踩坑 → experiences/layout-pitfalls.md
- 中文渲染 → experiences/cjk-issues.md
格式:
## Experience NNN: {title}
**Date**: YYYY-MM-DD
**Problem**: ...
**Root Cause**: ...
**Fix**: ...
**Rule**: ...(门禁层面如何预防)
满足全部条件时,AI 可跳过 S2 结构评审和 S3 内容审查:
仍然必须:S1 需求收集 + S4 QA 门禁(gate_check.py 脚本执行)+ S5 交付
当用户说"继续做那个 PPT"时:
import os, json, glob
projects = glob.glob('ppt-project-*/')
for proj in projects:
brief = os.path.exists(f'{proj}brief.md')
outline = os.path.exists(f'{proj}outline.json')
content = os.path.exists(f'{proj}content.json')
gate_s3 = os.path.exists(f'{proj}gate_s3.json')
gate_s4 = os.path.exists(f'{proj}gate_result.json')
pptx = bool(glob.glob(f'{proj}*.pptx'))
if not brief: stage = 1
elif not outline: stage = 2
elif not content: stage = 3
elif not gate_s3: stage = '3-gate' # content 有了但 gate 还没跑
elif not pptx: stage = 4
elif not gate_s4: stage = '4-gate' # pptx 有了但 gate 还没跑
else: stage = 5
print(f"项目 {proj}: 当前处于 Stage {stage}")
import sys, os
sys.path.insert(0, os.path.expanduser('~/.workbuddy/skills/mck-ppt-design'))
from mck_ppt import MckEngine
from mck_ppt.constants import *
eng = MckEngine(total_slides=12)
eng.cover(title='标题', subtitle='副标题', author='作者', date='2026年')
eng.toc(items=[('1', '章节一', '一句话描述'), ('2', '章节二', '一句话描述')])
# ... 内容页 ...
eng.closing(title='谢谢', message='期待进一步交流')
eng.save('output/deck.pptx') # 自动 full_cleanup
详细 API:references/framework/engine-api.md
版式规范:references/layouts/
10条护栏:references/framework/guard-rails.md
版式能力边界:references/layout-matrix.yaml
历史踩坑:experiences/
S3 门禁脚本:references/scripts/gate_check_s3.py
S4 门禁脚本:references/scripts/gate_check.py
Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally.
Frontend development guidelines for React/TypeScript applications. Modern patterns including Suspense, lazy loading, useSuspenseQuery, file organization with features directory, MUI v7 styling, TanStack Router, performance optimization, and TypeScript best practices. Use when creating components, pages, features, fetching data, styling, routing, or working with frontend code.
Next.js 16 Cache Components - PPR, use cache directive, cacheLife, cacheTag, updateTag
| Build Shopify apps, extensions, themes using GraphQL Admin API, Shopify CLI, Polaris UI, and Liquid. "shopify theme", "liquid template", "polaris", "shopify graphql", "shopify webhook", "shopify billing", "app subscription", "metafields", "shopify functions"
Build Gradio web UIs and demos in Python. Use when creating or editing Gradio apps, components, event listeners, layouts, or chatbots.
MANDATORY prerequisite — load this skill BEFORE every `generate_diagram` tool call. NEVER call `generate_diagram` directly without loading this skill first. Trigger whenever the user asks to create, generate, draw, render, sketch, or build a diagram — flowchart, architecture diagram, sequence diagram, ERD or entity-relationship diagram, state diagram or state machine, gantt chart, or timeline. Also trigger when the user mentions Mermaid syntax or wants a system architecture, decision tree, dependency graph, API call flow, auth handshake, schema, or pipeline visualized in FigJam. Routes to type-specific guidance, sets universal Mermaid constraints, and tells you when to use a different diagram type or skip the tool entirely (mindmaps, pie charts, class diagrams, etc.).
Analyzes web performance using Chrome DevTools MCP. Measures Core Web Vitals (LCP, INP, CLS) and supplementary metrics (FCP, TBT, Speed Index), identifies render-blocking resources, network dependency chains, layout shifts, caching issues, and accessibility gaps. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed. Biases towards retrieval from current documentation over pre-trained knowledge.
Algorithmic philosophies are computational aesthetic movements that are then expressed through code. Output .md files (philosophy), .html files (interactive viewer), and .js files (generative algorithms).
Take likaku/mck-ppt-design from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip.
Without those the skill loads but fails at the first command.