The official [Lark/Feishu](https://www.larksuite.com/) CLI tool, maintained by the [larksuite](https://github.com/larksuite) team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Slides, Calendar, Mail, Tasks, Meetings, Markdown, and more, with 200+ commands and 24 AI Agent [Skills](./skills/).
The official [Lark/Feishu](https://www.larksuite.com/) CLI tool, maintained by the [larksuite](https://github.com/larksuite) team — built for humans and AI Agents. Covers core business domains including Messenger, Docs, Base, Sheets, Slides, Calendar, Mail, Tasks, Meetings, Markdown, and more, with 200+ commands and 25 AI Agent [Skills](./skills/).
- **Agent-Native Design** — 24 structured [Skills](./skills/) out of the box, compatible with popular AI tools — Agents can operate Lark with zero extra setup
- **Wide Coverage** — 17 business domains, 200+ curated commands, 24 AI Agent [Skills](./skills/)
- **Agent-Native Design** — 25 structured [Skills](./skills/) out of the box, compatible with popular AI tools — Agents can operate Lark with zero extra setup
- **Wide Coverage** — 17 business domains, 200+ curated commands, 25 AI Agent [Skills](./skills/)
- **AI-Friendly & Optimized** — Every command is tested with real Agents, featuring concise parameters, smart defaults, and structured output to maximize Agent call success rates
- **Open Source, Zero Barriers** — MIT license, ready to use, just `npm install`
- **Up and Running in 3 Minutes** — One-click app creation, interactive login, from install to first API call in just 3 steps
This skill is the natural-language entry point for creating polished presentations. It owns planning, design, template, asset, and quality-validation workflows. It delegates all XML/API execution to [`../lark-slides/SKILL.md`](../lark-slides/SKILL.md).
## When To Use
Use this skill when the user asks for:
- A new complete presentation from a topic, notes, outline, document, meeting, or rough prompt.
- Beautification, restructuring, major rewrite, or formal-report polishing.
- Template selection or a deck based on a theme, scene, industry, or visual style.
3. Read the relevant execution reference, such as `lark-slides-create.md`, `lark-slides-media-upload.md`, `lark-slides-replace-slide.md`, or an `xml_presentation.*` API reference.
Use the execution skill's lint tool from here when XML is available:
Capture topic, audience, page count, source material, language, formality, delivery setting, and any brand/style constraints. If the user gives enough information, proceed with explicit assumptions instead of blocking on questions.
2. Choose template or custom direction.
If the request mentions templates, style, theme, or a common deck scenario, search templates first:
Offer 2-3 concise candidates when user choice matters. If one template is clearly best for a lightweight request, state the default and continue unless the user asked to choose.
3. Plan the deck.
Build a page-by-page outline with title, role, key message, and intended layout for each slide. For formal reports, make the argument flow explicit: context, evidence, analysis, recommendation, next steps.
4. Design the visual system.
Define palette, typography hierarchy, spacing, page rhythm, chart/table treatment, and recurring elements. Keep slides visual and low-density; do not produce document-like pages.
5. Plan assets.
Decide which pages need screenshots, photos, diagrams, icons, or charts. External images must become local files first, then execution uses `+media-upload` or `@./path` placeholders as described in `lark-slides`.
6. Generate XML and execute through `lark-slides`.
Use template summaries or extracted page slices when helpful, but rewrite all placeholder copy into the user's real content. For complex decks, prefer the two-step create flow from `lark-slides`.
7. Validate after creation.
Read the created presentation XML with `xml_presentations get`, confirm page count and expected content, run lint when possible, then fix issues with `+replace-slide` or raw slide APIs.
Do not use this skill as the primary entry for planning, visual design, template selection, asset planning, or full-deck creation. Route those requests to `lark-slides-creator`, then return here only for XML/API execution.
Use `--as bot` only when the user explicitly asks for app/bot identity or the workflow intentionally creates bot-owned resources. If access fails, first check that the command did not accidentally use the wrong identity.
lark-cli wiki spaces get_node --as user --params '{"token":"wiki_token"}'
lark-cli slides xml_presentations get --as user --params '{"xml_presentation_id":"obj_token"}'
```
`+replace-slide` and `+media-upload` can parse slides/wiki URLs. Raw API commands still require the real `xml_presentation_id`.
## Shortcuts
| Shortcut | Reference | Purpose |
| --- | --- | --- |
| `slides +create` | [lark-slides-create.md](references/lark-slides-create.md) | Create a presentation; optionally add pages with `--slides`; supports local image placeholders in `+create --slides`. |
| `slides +media-upload` | [lark-slides-media-upload.md](references/lark-slides-media-upload.md) | Upload a local image to a presentation and return a `file_token`. |
| `slides +replace-slide` | [lark-slides-replace-slide.md](references/lark-slides-replace-slide.md) | Replace or insert blocks on an existing slide without changing page order. |
Prefer shortcuts when they cover the operation, especially `+replace-slide` for existing-slide edits.
## API Commands
Always inspect schema before raw API calls:
```bash
lark-cli schema slides.<resource>.<method>
lark-cli slides <resource> <method> --as user --params '{}' --data '{}'
```
Core resources:
| Resource | Method | Purpose |
| --- | --- | --- |
| `xml_presentations` | `get` | Read full presentation XML and metadata. |
| `xml_presentation.slide` | `create` | Add one slide XML page. |
| `xml_presentation.slide` | `delete` | Delete a slide; a presentation must keep at least one page. |
| `xml_presentation.slide` | `get` | Read one slide XML. |
| `xml_presentation.slide` | `replace` | Low-level block replace/insert API; prefer `+replace-slide` unless you need raw control. |
## Creation Paths
For simple XML, `+create --slides` is concise:
```bash
lark-cli slides +create --as user --title "Demo" --slides '[
> `--slides '[...]'` 的风险点主要在 shell 参数传递,而不是单纯页数。即使只有 1 页,只要 XML 足够复杂,也建议使用两步创建法。
### 模板与脚本优先流程
For complex XML, long text, many special characters, Chinese paragraphs, images, or many pages, create an empty presentation first and add slides one by one. `+create --slides` is not atomic; if a later slide fails, earlier slides may already exist. Record `xml_presentation_id` and read the deck before continuing.
Slides XML image `src` must be a Lark `file_token`; do not use external HTTP(S) URLs.
### 页面布局建议
- New deck with `+create --slides`: `src="@./local.png"` is allowed and the shortcut uploads it.
- Existing deck or raw `slide.create`: run `slides +media-upload` first, then write `src="<file_token>"`.
- Existing slide edit: upload first, then use `+replace-slide` with `block_insert` or `block_replace`.
| 页面类型 | 布局要点 |
|---------|---------|
| 封面页 | 居中大标题 + 副标题 + 底部信息,背景用渐变或深色 |
| 数据概览页 | 指标卡片横排(rect 背景 + 大号数字 + 小号说明),下方列表或图表 |
| 内容页 | 左侧竖线装饰 + 标题,下方分栏或列表 |
| 对比/表格页 | table 元素或并列卡片,表头深色背景白字 |
| 图表页 | chart 元素(column/line/pie),配合文字说明 |
| 结尾页 | 居中感谢语 + 装饰线,风格与封面呼应 |
Local paths must be safe paths under the current working directory. The upload limit is 20 MB.
### 大纲模板
## XML Rules
生成大纲时使用以下格式,交给用户确认:
-`<slide>` direct children are only `<style>`, `<data>`, and `<note>`.
- Text belongs inside `<content><p>...</p></content>`.
- Escape raw text before writing XML: `&` becomes `&`, text `<` becomes `<`, and text `>` becomes `>`.
- Gradient fills require `rgba()` stops with percentages, for example `linear-gradient(135deg,rgba(15,23,42,1) 0%,rgba(56,97,140,1) 100%)`.
- For `xml_presentation.slide.replace`, `block_replace` needs the target block id and text shapes need `<content/>`; `+replace-slide` injects the required wrapper details.
```text
[PPT 标题] — [定位描述],面向 [目标受众]
## Validation
模板:[未使用模板 / <category>/<template>.xml(推荐原因)]
This execution skill validates at the XML/API layer. Before execution, check XML well-formedness, escaping, request body shape, and `lark-cli schema` output. Visual layout quality checks belong to creator workflows, not this execution layer.
页面结构(N 页):
1. 封面页:[标题文案]
2. [页面主题]:[要点1]、[要点2]、[要点3]
3. [页面主题]:[要点描述]
...
N. 结尾页:[结尾文案]
## Troubleshooting
风格:[配色方案],[排版风格]
```
| Symptom | Likely Cause | Next Action |
| --- | --- | --- |
| `400` XML or wrapper error | Bad XML or wrong `--data` shape | Check escaping, tag closure, and `lark-cli schema`. |
| `403` permission denied | Wrong identity or missing scope | Confirm `--as user` vs `--as bot`; re-run auth for slides scope. |
| `404` presentation/slide not found | Wrong token or unresolved wiki URL | Resolve wiki token or re-read current presentation. |
| `1061002` media params error | Raw upload API used incorrectly | Use `slides +media-upload`; slides parent type is `slide_file`. |
| `1061004` forbidden | Current identity cannot edit target deck | Use the owner identity or share the deck with the bot/user. |
| `3350001` catch-all validation failure | XML not well-formed, bad replace wrapper, missing `<content/>`, or unescaped text | Run lint, inspect failed page XML, and prefer `+replace-slide` for block edits. |
| `3350002` stale revision | `revision_id` is newer than current | Use `-1` or re-read the presentation and retry. |
| Created deck has blank/missing pages | Shell/JSON argument truncation or escaping issue | Read back XML, then continue with two-step `slide.create`. |
| Image does not show | `src` is URL or unresolved `@path` | Upload and replace with a `file_token`. |
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.