Install
$ agentstack add skill-zhu1090093659-deepseek-pp-officecli-pptx Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.
Security review
⚠ Flagged1 finding(s); flagged for manual review. · v0.1.0 How review works →
- • Prompt-injection patterns
- • Secret / credential exfiltration
- • Dangerous shell & filesystem operations
- • Untrusted network calls
- • Known-malicious package signatures
- high Pipes remote content directly into a shell (remote code execution).
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
OfficeCLI PPTX Skill
Setup
If officecli is missing:
- macOS / Linux:
curl -fsSL https://d.officecli.ai/install.sh | bash - Windows (PowerShell):
irm https://d.officecli.ai/install.ps1 | iex
Verify with officecli --version (open a new terminal if PATH hasn't picked up). If install fails, download a binary from https://github.com/iOfficeAI/OfficeCLI/releases.
⚠️ Help-First Rule
This skill teaches what good slides look like, not every command flag. When a property name, enum value, or alias is uncertain, consult help BEFORE guessing.
officecli help pptx # List all pptx elements
officecli help pptx # Full element schema (e.g. shape, chart, animation, connector, zoom, group, background)
officecli help pptx # Verb-scoped (e.g. add shape, set slide)
officecli help pptx --json # Machine-readable schema
Help reflects the installed CLI version. When skill and help disagree, help is authoritative. Triggers to run help immediately: UNSUPPORTED props: warning, unknown animation preset, connector.shape= enum drifts, prop-vs-alias (lineWidth vs line.width, color vs font.color).
Shell & Execution Discipline
Shell quoting (zsh / bash). ALWAYS quote element paths ("/slide[1]/...") — zsh globs unquoted [1] to no matches found. Escapes happen at two layers; the CLI handles one for you:
- Shell.
$in a value still belongs to the shell — single-quote the whole value:--prop text='$15M'. Double-quoted"$15M"gets expanded toM. The CLI does NOT unescape\$for you. - CLI (
text=). The two-char escapes\nand\tARE interpreted, consistently across pptx / docx / xlsx —\nis a line / paragraph break,\tis a tab. To produce a literal backslash-n in text, double it (\\n); this is rarely what you want. - JSON (batch). Real newlines / tabs can also be passed as
"\n"/"\t"inside a `,lorem,xxxx, empty()/[]` in chart titles never appear.
- No overflow past slide edges. For 16:9 (33.87 × 19.05cm), every shape satisfies
x + width ≤ 33.87cmANDy + height ≤ 19.05cm.getand check — don't eyeball. - No text overflow inside shapes. A 72pt KPI in a 4cm-tall box clips. Shrink the number, enlarge the box, or shorten the text — never trim content to fit.
- Cover slide is content-rich. Title + subtitle + presenter/client block + date + a brand band or key-takeaway strap. A cover with 80% whitespace reads as a stub.
- Contrast. On fills with brightness 80%. Mid-gray (
6B7B8D≈ 44%) reads fine on a laptop and vanishes on projection. Verify viaview htmlafter the dark-fill pass. - No
\$literals in slide text. Ifview textshows a literal\$, the shell didn't unescape it (the CLI does NOT interpret\$). Single-quote the value:--prop text='$15M'. Note:\nand\tARE interpreted as a real paragraph break / tab; seeing those as literals means the value was double-escaped (\\n).
If any fails, STOP and fix before declaring done.
KPI fit math
KPI text must fit the card — pre-compute, don't eyeball. In a 7cm-wide card at 60pt Georgia bold, values with $ and . (wide glyphs) wrap at 4 characters. $9.4M breaks the card; use $9M + "USD millions" sublabel, or move to the 3-card 9.78cm layout. Upper bound: max_size_pt ≈ card_width_cm × denom, where denom = 10 for 1–2 chars, 7 for 3–4 chars, 5 for 5+ chars.
layout=blank and alt text
layout=blankis the default for custom designs. Titles become plainshapeelements, not placeholders.view outline/view issuesreporting(untitled)/Slide has no titleis expected, not a defect. Uselayout=title+placeholder[title]only when screen-reader outline compatibility matters.- Alt text verification.
view stats "Pictures without alt text: 0"is a false-positive zero (alt auto-fills to filename) — verify viaview annotated.
Design Principles
A deck is not a document. The audience has 3 seconds to get each slide. Before adding anything, ask: "If the audience reads only the biggest element and glances once, do they get the point?" If they have to read the bullets, the biggest element is wrong.
Grid, margins, negative space
Standard widescreen is 33.87 × 19.05cm. Treat it as a 12-column grid internally:
- Edge margin ≥ 1.27cm (0.5") on all sides.
- Inter-block gap ≥ 0.76cm (0.3") between cards / columns / rows.
- ≥ 20% negative space per slide. Filling every pixel reads as amateur.
- For card grids:
usable = 33.87 − 2·margin − (N−1)·gap, thencol_width = usable / N. Don't hand-pick x coordinates.
Font pairings
Two fonts max — one for headings, one for body. Pair by document register, not by novelty. "Best For" is a prompt, not a decree; if the topic matches a row, use it as the default and move on.
| Header | Body | Best For | |---|---|---| | Georgia | Calibri | Formal business, finance, executive reports | | Arial Black | Arial | Bold marketing, product launches | | Calibri | Calibri Light | Clean corporate, minimal design | | Cambria | Calibri | Traditional professional, legal, academic | | Trebuchet MS | Calibri | Friendly tech, startups, SaaS | | Impact | Arial | Bold headlines, event decks, keynotes | | Palatino | Garamond | Elegant editorial, luxury, nonprofit | | Consolas | Calibri | Developer tools, technical / engineering |
Set both fonts explicitly on every shape (--prop font=Georgia on title shapes, --prop font=Calibri on body shapes) — theme-default inheritance drifts between masters.
Color and contrast
One dominant color does 60–70% of visual weight, two supporting tones, one accent used sparingly. Never use 4+ colors in body content. Columns are: Primary (dominant — the one color you see first), Secondary (the supporting tone), Accent (sparing, one-hit emphasis), Text (body on light fills), Muted (captions / axis labels / footer).
| Theme | Primary | Secondary | Accent | Text | Muted | |---|---|---|---|---|---| | Coral Energy | F96167 | F9E795 | 2F3C7E | 333333 | 8B7E6A | | Midnight Executive | 1E2761 | CADCFC | FFFFFF | 333333 | 8899BB | | Forest & Moss | 2C5F2D | 97BC62 | F5F5F5 | 2D2D2D | 6B8E6B | | Charcoal Minimal | 36454F | F2F2F2 | 212121 | 333333 | 7A8A94 | | Warm Terracotta | B85042 | E7E8D1 | A7BEAE | 3D2B2B | 8C7B75 | | Berry & Cream | 6D2E46 | A26769 | ECE2D0 | 3D2233 | 8C6B7A | | Ocean Gradient | 065A82 | 1C7293 | 21295C | 2B3A4E | 6B8FAA | | Teal Trust | 028090 | 00A896 | 02C39A | 2D3B3B | 5E8C8C | | Sage Calm | 84B59F | 69A297 | 50808E | 2D3D35 | 7A9488 | | Cherry Bold | 990011 | FCF6F5 | 2F3C7E | 333333 | 8B6B6B |
Pick by topic, not by default — finance reads Midnight Executive, a product launch reads Coral Energy, safety / LOTO reads Cherry Bold. If the closest named theme is not quite right, blend (e.g. Forest primary + gold D4A843 accent). Use Text on light fills, Muted for captions / axis / footer, FFFFFF or Secondary for body on dark fills.
On dark backgrounds, text and chart series follow the Hard rules contrast floor above.
Chart-choice decision table
Wrong chart type kills the 3-second test:
| Data shape | Use | Avoid | |---|---|---| | Category comparison (A vs B vs C) | column (vertical) / bar (≥ 6 categories, horizontal) | pie (slices merge), line (no time axis) | | Time series, 1–3 series | line | area (occlusion), bar (implies discrete) | | Part-of-whole, 2–5 slices | pie / doughnut | pie with 8+ slices (unreadable) | | Correlation / distribution | scatter | line (implies ordering) | | Multiple categories × metrics, dense | stacked column or heatmap | one chart per metric — consolidate | | KPI snapshot (single big number) | Large-text shape (60–72pt + ≤ 5-word sublabel), NOT a chart | gauge chart, tiny bar |
Rule of thumb: if > 3 series and > 8 categories, split into two charts or switch to a table.
Animation restraint
Each animation is a cognitive interrupt. Limits:
- ≤ 1 animation per slide, duration ≤ 600ms.
- Use only
fade,appear, or a singlezoom-entranceon a hero slide. - Never:
bounce,swivel,fly-from-edge,spin, multi-object choreography. - Animation is runtime-only — verify in a live presentation viewer.
Layout patterns & data display
Vary layout across slides — repeating the same pattern makes every slide feel identical. Pick one per slide from these building blocks:
| Pattern | When to use | Key measurement | |---|---|---| | Two-column (text left, visual right) | Concept + evidence; feature + screenshot | Each col ≈ 14-15cm; gap 1cm | | Icon rows (icon in filled circle + bold header + description) | Feature lists, benefits, team roles | Icon circle 1.5-2cm; 3-4 rows max | | 2×2 or 2×3 grid (card tiles) | Quadrant analysis, SWOT, option comparison | Gap ≥ 0.76cm; consistent card height | | Half-bleed image (full left or right half, content overlay on other side) | Hero moments, case study openers | Image 16-17cm wide; content column ≥ 14cm | | Large stat callout (60-72pt number + ≤5-word sublabel below) | Single KPI, milestone, market size | Use shape, NOT a chart; sublabel 14-16pt muted |
Data display quick rules:
- One big number reads faster than a chart — use a
shapewith 60-72pt bold for a single KPI. - Comparison columns (before/after, A vs B) beat a table for 2-3 options.
- Timelines and process flows: numbered step shapes + connectors, not a bullet list.
Visual motif commitment
Pick ONE distinctive element (rounded image frames, section numbers in filled circles, single-side border band, diagonal accent strips) and carry it to every slide. Declare it in your build plan first: ## Motif: numbered circles in brand color.
What to avoid (common design mistakes)
These are the patterns that make a deck look AI-generated or amateur:
- NEVER place a decorative line under slide titles. Underline stripes below headings are the single most common AI-slide tell. Use whitespace or background color change instead.
- Don't repeat the same layout across consecutive slides. Alternate between two-column, callout, grid, and half-bleed patterns. Same layout = same visual rhythm = audience tunes out.
- Don't center body text. Left-align all paragraphs, lists, card descriptions. Center only slide titles and hero numbers.
- Don't default to blue because it feels "professional." Pick the palette that fits the topic — finance reads navy, sustainability reads forest, energy reads coral.
- Don't use inconsistent spacing. Choose either 0.76cm or 1.27cm as your inter-block gap and use it everywhere. Mixed gaps look unfinished.
- Don't create text-only slides. If a slide has only a title and bullets, add a supporting shape, chart, icon, or image. A purely textual slide is a Word paragraph.
- Don't style one slide and leave the rest plain. Commit fully or keep it simple throughout — partial styling reads as abandoned.
Common Workflow
- Open/close mode. Always
officecli openat start +officecli closeat end. Resident is the default, not an optimization. Usebatchfor repetitive shape grids. - Orient. New deck:
officecli create "$FILE". Existing:officecli view "$FILE" outlinefirst. Never edit blind. - Build in display order. Add slides in audience-view order: cover → agenda → section-1 divider → section-1 content → section-2 divider → … → closing.
--indexon slide add works, but linear append keeps the build script readable and avoids index-arithmetic bugs. Before final delivery, confirm slide count + narrative arc match your build plan. Gate 3's order-sanity check catches cases where the cover ends up as slide 11 of 14 instead of slide 1. - Incremental per slide. Create slide + background, then title, then supporting shapes / charts / connectors. Always
layout=blankfor custom designs. After each structural op,get /slide[N] --depth 1to confirm shape IDs. - Format to spec. Per the Requirements table; formatting is deliverable, not polish.
- Close + verify.
officecli closewrites the ZIP. Always open in the target presentation viewer before shipping — chart colors, animations, fonts, and zoom are runtime featuresview htmlcan't render. Full verification in QA below. - QA — assume there are problems. Fix-and-verify until a cycle finds zero new issues.
Quick Start
Minimal viable deck: cover + one content slide + notes. $FILE stands in for your filename.
FILE="deck.pptx"
officecli create "$FILE"
officecli open "$FILE"
# Cover — dark fill, centered title
officecli add "$FILE" / --type slide --prop layout=blank --prop background=1E2761
officecli add "$FILE" /slide[1] --type shape --prop text="FY26 Strategic Review" \
--prop x=2cm --prop y=7cm --prop width=29.87cm --prop height=3cm \
--prop font=Georgia --prop size=44 --prop bold=true --prop color=FFFFFF --prop align=center
# Content — white fill, title + body + notes
officecli add "$FILE" / --type slide --prop layout=blank --prop background=FFFFFF
officecli add "$FILE" /slide[2] --type shape --prop text="Revenue grew 18% YoY" \
--prop x=1.5cm --prop y=1.2cm --prop width=30cm --prop height=2cm \
--prop font=Georgia --prop size=36 --prop bold=true --prop color=1E2761
officecli add "$FILE" /slide[2] --type shape --prop text="Enterprise renewals + new EMEA region drove the beat; NRR held at 118%." \
--prop x=1.5cm --prop y=4cm --prop width=30cm --prop height=3cm \
--prop font=Calibri --prop size=20 --prop color=333333
officecli add "$FILE" /slide[2] --type notes --prop text="Lead with the 18% beat, preview EMEA."
officecli close "$FILE"
officecli validate "$FILE"
Shape of every build: open → slide+background → title → body → notes → close → validate.
Reading & Analysis
Start wide, then narrow. outline first, view text / get / query once you know where to look.
officecli view "$FILE" outline # slide count + titles
officecli view "$FILE" annotated # complete per-slide breakdown with fonts, sizes, tables, charts
officecli view "$FILE" text --start 1 --end 5 # text dump (does NOT extract table cells — use get)
officecli view "$FILE" issues # empty slides, overflow hints
officecli view "$FILE" stats # counts + missing alt (false-positive zero — verify via view annotated)
Inspect one element. XPath-style paths, 1-based. ALWAYS quote. Prefer @name= / @id= selectors over positional [N] (stable across reorderings). [last()] works. Add --json for machine output.
officecli get "$FILE" "/slide[1]" --depth 1 # shape list with IDs and names
officecli get "$FILE" "/slide[1]/shape[@name=Title]"
officecli get "$FILE" "/slide[1]/table[1]" --depth 3 # table rows / cells
Query across the deck. CSS-like selectors; operators =, !=, ~=, >=, `=10cm]' # numeric
**`query --json` output schema.** Results wrap in `.data.results[]` — `jq -r '.data.results[0].format.id'`, NOT `.[0].id`. Shape name is `.name`; fill is `.format.fill`; textColor is `.format.textColor`.
**Visual preview (LEAD).**
```bash
officecli view "$FILE" html # prints an HTML preview path; Read it for per-slide visual audit (best structural ground truth)
officecli view "$FILE" svg --start 3 --end 3 # single slide SVG (charts + gradients do NOT render in SVG)
Creating & Editing
Verbs: add / set / remove / move / swap / batch / raw-set. Ninety percent of a deck is slides, shapes, text, a few charts, pictures, connectors.
Slides and backgrounds
A slide is /slide[N]. Always pass layout=blank for custom designs. Background: solid, gradient, or image.
officecli add "$FILE" / --type slide --prop layou
…
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [zhu1090093659](https://github.com/zhu1090093659)
- **Source:** [zhu1090093659/deepseek-pp](https://github.com/zhu1090093659/deepseek-pp)
- **License:** Apache-2.0
- **Homepage:** https://chromewebstore.google.com/detail/deepseek++/kdmpkkahkhdmdhfkdihkopikgcocbpbf?hl=zh-CN&authuser=0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.