用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/tabtin-ai/TabTin --skill tabslide-operator命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | tabslide-operator |
| description | 演示文稿操作——创建、编辑、放映、导出可继续协作的 PPT / 幻灯片 / 演示文稿。用户要做 / 改演示时使用; 正文覆盖大纲生成、页面管理和 AI 辅助创建。 |
| metadata | {"version":"0.1.0","tabtin":{"category":"doc","displayName":"TabSlide Operator","autoActivateFor":["tabslide"],"tags":["slide","presentation"]}} |
通过 tabtin slide CLI 生成演示文稿并交付为工作目录内的本地 .pptx 文件。
当前版本 TabSlide App UI 已对用户隐藏,也不要产生云演示文稿项目:TabSlide 只作为
「隐形渲染引擎」把 HTML 排版成高质量幻灯片,最终产物是工作目录里的本地 .pptx 文件
+ 聊天文件卡片。因此 用户说「做 / 生成一份 PPT / 幻灯片 / 演示文稿」时,用一步命令
直出本地文件:
tabtin slide render --html "@./deck.html" --save-to <名称>.pptx
(内部自动 create → export → 下载 → 删除临时云项目,全程不留用户可见的云演示文稿)present_to_user({summary:"演示文稿", items:[{kind:"local_file", relative_path:"<名称>.pptx"}]}) 发布成聊天卡片(render 输出的
next_step 里有现成提示)slide create → export 的多步流程——那会留下用户不可见的云项目;要改内容
就改 HTML 重新 render(产物就是本地文件,幂等覆盖)与 file-generation skill 的分工:做 PPT / 幻灯片 / 演示文稿(要设计感 / 复杂版式)用
本 skill 的 slide render;xlsx / docx / pdf 等其他 office 文件,或纯数据罗列的极简 pptx,
才走 tabtin file create。
所有 tabtin slide * 命令都需要 TabTin 桌面端 或 tabtin-daemon 正在运行(命令走本地 cli-server 路由)。直连 API 模式下会得到 UNAVAILABLE: '<cmd>' 需要 TabTin 桌面端或 Daemon 运行。
| 场景 | 怎么启动 |
|---|---|
| 桌面用户 | 打开 TabTin Electron App(最常见,无需额外操作) |
| 无头服务器 | npm i -g @tabtin/daemon && tabtin-daemon init --token <t> && tabtin-daemon start |
| 本地开发 | tabtin daemon start(已桥接到 monorepo apps/tabtin-daemon/dist/index.js) |
每条命令章节顶部都会再标 **运行时**:桌面端 / Daemon——看到就提示自己确认 daemon 在跑。
每个子命令的完整参数、返回与示例(create / list / outline / page / grep / generate / update / batch-update / add-page / delete-page / reorder / preview / lint / export)见
references/command-reference.md。
| 目标 | CLI 命令 |
|---|---|
| 列出演示文稿 | tabtin slide list |
| 按关键词搜幻灯片内容 | tabtin slide grep --project-id <id> --query "<关键词>"(有搜索词时必须用它,别用 outline 逐页翻冒充 search;支持 --page-id 限定单页、--element-types 限定元素类型、--max-results 控制返回数) |
| 查看单页详情 | tabtin slide page --project-id <id> --page-id <id> |
| 查看大纲(页面结构) | tabtin slide outline --project-id <id> |
references/command-reference.md:当你需要查具体 flag、返回字段、命令差异(如 update vs batch-update)时读取;常见流程先按本文件「典型工作流」走。tabtin slide create --html / tabtin slide add-page --html 会把 HTML 转成可编辑的 PPTElement,但不是所有 HTML 都能转。生成前请记住这两条契约:
白名单内的 HTML 模式 → 转成可编辑 PPTElement(用户能拖、能改文字、能改色)
<p> / <h1-6> / <div> / <span> / <li><div> 含 background / border / box-shadow / border-radiuslinear-gradient(多 stop、含 alpha)<img> 或 background-image: url();真实图片(截图/产品图/logo)先下载到本地再以 data:image/*;base64 内嵌,图数据才会落到 slide 自己的存储、不掉图(别只贴第三方外链,别用文字/色块假装)<svg> 整块 → image<canvas> → image;图表容器必须显式声明非零 width / height,初始化后在布局完成时调用 chart.resize()<table> → 原生 table(不是图片)白名单外的视觉 → 必须用 <div data-tabslide-rasterize>...</div> 包起来,整块截图为 image
<i class="fa-*"> 隐藏,直接写不会出现在 PPT 里)clip-path、mask、mix-blend-mode详细规范、对照表、模板见 skills_read("app:tabslide/html-spec"),生成 HTML 前必须先加载。
skills_read("app:tabslide/html-spec") 加载 HTML 规范,
skills_read("app:tabslide/design-guide") 加载设计规范——两个都必读tabtin slide render --html "@./deck.html" --save-to artifacts/<名称>.pptx
—— 一步完成渲染 → 导出 → 下载落地 → 删除临时云项目。
默认拦截 html_overflow(severity=error,越界 >24px):撑破时 render 拒绝导出
(exit≠0),必须改 HTML / 拆页后重跑。禁止用 --allow-html-overflow 交付(仅本地调试)。lint_problems / 错误 detail:
html_overflow error → 必须精简 / 拆页后重新 renderhtml_overflow warning(微量越界)→ 建议修,不阻断导出html_clipped_text → 有裁字样例时按页精简out_of_canvas(抽取后元素越界)→ 精简文字 / 调整布局后重新 rendersparse_page_bottom(下半页大面积空白)→ 用主题骨架的 *-body flex 撑满版心present_to_user({summary:"演示文稿", items:[{kind:"local_file", relative_path:"artifacts/<名称>.pptx"}]}) 发布成聊天文件卡片交付render 覆盖同名文件 → 再用 present_to_user local_file 发布(不要引导打开编辑器)以下命令面向已存在的云项目。当前版本不要为新的 PPT 需求主动创建云项目——新需求走上面的 render。
grep / page 看返回的 type)——决定能不能 update:
type: "text" → 文字真存在结构里,用 update --patch '{"props":{"content":"<p>...</p>"}}' 改type: "image" → ⚠️ 文字已被栅格化进 PNG,update 改 props.content 改不动(图里画的不是 DOM 文字)。要换文案就重新生成整页 HTML:写新 HTML → tabtin slide delete-page 旧页 → tabtin slide add-page --html @./slide.html 追加新页;只有明确要覆盖整份 deck 时才用 tabtin slide generate --replacetype: "shape" 含 props.text → 用 update --patch '{"props":{"text":{"content":"<p>...</p>"}}}' 改tabtin slide grep --project-id <id> --query '<片段>' 一次拿到 page_id + element_id + type;不知道目标时 → tabtin slide outline --project-id <id> 先看结构tabtin slide page --project-id <id> --page-id <id> 查看目标页上下文(确认元素 props、相邻关系)tabtin slide update/batch-update ... 修改元素(按第 0 步分流,别对 image 强行 update props.content)tabtin slide preview --project-id <id> 验证效果tabtin slide export --project-id <id> --save-to artifacts/<名称>.pptx 导出本地文件,再 present_to_user 的 local_file item 发布(用户侧交付物始终是本地 .pptx,不是应用内可编辑项目)tabtin slide add-page --project-id <id>tabtin slide delete-page --project-id <id> --page-id <id>tabtin slide reorder --project-id <id> id1 id2 id3生成 HTML 前,必须加载 TabSlide App 级设计规范:
skills_read("app:tabslide/html-spec") — HTML 容器结构、可用组件、配色变量、页面模板skills_read("app:tabslide/design-guide") — 视觉设计原则、布局策略、质量检查清单slide grep,不要用 outline 逐页翻冒充:用户说「找 / 搜 / 查一下 XX 文字/元素」时必须走 tabtin slide grep --project-id <id> --query "<关键词>"——它是专门的全文本搜索端点(/slide/grep,不区分大小写、不需正则),一次拿到 page_id + element_id + type + 匹配上下文。outline 只看页面标题结构、不搜元素正文内容,不要用它冒充搜索。需要限定范围时加 --page-id(单页)或 --element-types(元素类型),控制返回数加 --max-results。slide_id 和 title 时,直接使用,不要重复查询outline 了解全部页面,一次性规划再逐页执行--html "@./deck.html" 读取,避免 shell 管道在不同系统上转换文本编码preview 截图确认,再 lint 诊断问题