# pptx

Adopt this skill: https://proskills.md/skills/other/metadist-synaplan-desktop-skills-bundled-pptx

Page: https://proskills.md/skills/other/metadist-synaplan-desktop-skills-bundled-pptx
This document is the public skill bundle for that page. It contains SKILL.md and every helper file the catalog carries. No login is required.

## File: skills/bundled/pptx/SKILL.md
size: 2125
sha: edf22718653770f8fbd36cf019f75a5699dbc7b4
upstream: https://github.com/metadist/synaplan-desktop/blob/main/skills/bundled/pptx/SKILL.md

`````text
---
name: pptx
description: Write a real PowerPoint deck (.pptx) from a Markdown outline — title slide, bullet slides, pictures and native editable charts — or read a .pptx back to Markdown. Standard library only, no PowerPoint needed.
license: Apache-2.0
compatibility:
  python: true
---

# pptx

Create a `.pptx` that opens in PowerPoint, Keynote, LibreOffice Impress and
Google Slides, or read an existing deck so its content can be summarised or
reused. No extra packages: the script builds the OOXML package itself.

This skill is original to Synaplan Desktop (Apache-2.0). It is not Anthropic's
document skill.

## When to use

- The user asks for a PowerPoint deck, `.pptx`, or slides that open in
  PowerPoint.
- For a browser slideshow instead, use the **slides** skill.
- The user has `.pptx` files in an allowed folder and wants their text
  (read them first, then write the new deck or document).

## How to run

Write: first save the outline with `write_file` into the out-box, then

```
python3 <skill_dir>/run.py write <outline.md> <output.pptx>
```

Read (Markdown out, so you can `read_file` it):

```
python3 <skill_dir>/run.py read <input.pptx> <output.md>
```

- `<output.pptx>` / `<output.md>` — paths **inside the out-box**.
- `<input.pptx>` — a deck in an allowed folder or in the out-box.

## Outline the writer understands

```
# Deck title
One line under it becomes the subtitle.   (this IS the title slide — do not
                                            add a slide called "Title slide")

## Slide title
- bullet (keep to about six per slide)
  - sub-bullet
| Region | Units |         a Markdown table becomes a native PowerPoint table
| --- | --- |
| North | 1,320 |
![](figure.png)          picture on the right half, path relative to the .md
```

A chart on the right half of a slide (same block as the docx skill):

````
```chart
type: bar            (bar | line | pie)
title: Organisations using AI (%)
categories: Finance, Health, Retail
series: 2024: 38, 22, 30
series: 2026: 61, 41, 52
```
````

Standard library only. After the script exits 0, tell the user the full path.
`````

## File: skills/bundled/pptx/run.py
size: 34148
sha: 9c1ac4553151d03addbb7553ccd25913b69c1771
upstream: https://github.com/metadist/synaplan-desktop/blob/main/skills/bundled/pptx/run.py

Content is not inlined in the catalog. Read the upstream file: https://github.com/metadist/synaplan-desktop/blob/main/skills/bundled/pptx/run.py

## File: README.md
upstream: https://github.com/metadist/synaplan-desktop/blob/main/README.md

````text
<div align="center">

# Synaplan Desktop

**Pair a computer with your Synaplan workspace and run Agent Skills locally.**

[Synaplan](https://github.com/metadist/synaplan) &nbsp;·&nbsp; [Website](https://www.synaplan.com) &nbsp;·&nbsp; [Live app](https://web.synaplan.com) &nbsp;·&nbsp; [Docs](https://docs.synaplan.com/desktop) &nbsp;·&nbsp; [Discord](https://discord.com/invite/kQB3eDjWfF) &nbsp;·&nbsp; [Synamail](https://github.com/metadist/Synamail)

[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
[![GitHub](https://img.shields.io/badge/GitHub-metadist%2Fsynaplan--desktop-181717?logo=github&logoColor=white)](https://github.com/metadist/synaplan-desktop)
[![Docs](https://img.shields.io/badge/docs-docs.synaplan.com%2Fdesktop-6BA539)](https://docs.synaplan.com/desktop)

<br />

<img
  src="docs/screenshot.png"
  alt="Synaplan Desktop: a project home with chat, notes, files and the composer"
  width="920"
/>

</div>

---

A small native app for **Windows, macOS, and Linux**. It pairs with your
[Synaplan](https://github.com/metadist/synaplan) workspace, chats through your
existing account, and runs installed [Agent Skills](https://agentskills.io/specification)
on this computer — under a folder allowlist, with no shell and no network.

It uses **only your Synaplan account**. There is no second AI subscription and
no vendor dashboard. The API key lives in the OS secret store (Windows Credential
Manager, macOS Keychain, Linux Secret Service), never in a config file.

> **Unsigned 1.0 preview.** Pair, chat, install or remove skills, check local
> tools, and run web-queued jobs on a running (optionally autostarted) app.
> **Build from source.** Signed public download comes after signing
> (notarization is still deferred). Unsigned installers are for internal
> testing only.

## What it is (and is not)

**It is** a Tauri 2 + Vue 3 desktop client. It talks to Synaplan over the
Anthropic-compatible Messages gateway (`/v1/messages`) and the desktop pairing
API. Enabled skills run locally as `{program, args[]}` against allowlisted
interpreters (Python, Node, LibreOffice). A message that names a file or the
project folder can list, read and write files without a skill. Running a
program still needs an enabled skill and your consent.

**It is not** an Electron wrap of the Synaplan web app, and it never embeds
`web.synaplan.com` in a WebView. It is not a general-purpose shell host: skills
that need `bash`, `curl`, or the network are refused.

## Pair this computer

1. In Synaplan, open **Manage → Channels → Synaplan Desktop** and choose
   *Pair this computer* (the instance needs **Desktop access** on —
   `DESKTOP_AGENT.ENABLED`).
2. In the app, paste the **server address** from that dialog (for a local
   install that is the API, for example `http://localhost:8000`, not the web
   page port) and the short code.
3. The app stores a **scoped** key in the OS secret store. Disconnect the
   computer from the web UI at any time to revoke it.

## Docs

| Topic | Link |
| ----- | ---- |
| Overview and pairing | [docs.synaplan.com/desktop](https://docs.synaplan.com/desktop) |
| Skills | [docs.synaplan.com/desktop-skills](https://docs.synaplan.com/desktop-skills) |
| Folders and the out-box | [docs.synaplan.com/desktop-folders](https://docs.synaplan.com/desktop-folders) |
| Local tools (doctor) | [docs.synaplan.com/desktop-tools](https://docs.synaplan.com/desktop-tools) |
| In-repo skills catalog | [`docs/SKILLS.md`](docs/SKILLS.md) |
| Business use-case films | [`docs/demos/README.md`](docs/demos/README.md) |

## Bundled skills

These ship with the app (`skills/bundled/`). Eleven need **Python 3** (standard
library only). **pptx** needs `python-pptx` and stays blocked until that
import works — the app never runs `pip`. See [`docs/BUNDLED_SKILLS.md`](docs/BUNDLED_SKILLS.md).

| Skill | What it creates |
| ----- | --------------- |
| **csv-insights** | Markdown profile of a CSV (rows, fill rates, numeric and category summaries) |
| **email-draft** | Unsent `.eml` draft for Outlook, Apple Mail, or Thunderbird |
| **web-report** | Standalone HTML page from Markdown or plain text |
| **slides** | Self-contained HTML presentation (arrow keys; no PowerPoint) |
| **chart** | Bar or line chart from a CSV, as SVG inside a standalone HTML page |
| **data-table** | Searchable, sortable HTML table from a CSV |
| **calendar-event** | `.ics` invite for Outlook, Apple Calendar, or Google Calendar |
| **vcard** | `.vcf` contact card for any address book |
| **json-csv** | JSON array of objects ⇄ CSV |
| **invoice** | Print-ready HTML invoice from a JSON spec |
| **hello-files** | Tiny example that writes `hello.txt` into the out-box |
| **pptx** | PowerPoint deck (blocked until `python-pptx` is installed) |

## Install extra skills

On **Skills**, choose **From a folder**, **From a zip**, or **From a GitHub
address**, review the file list, then confirm. Many community Agent Skills
assume an unrestricted shell or network — Synaplan Desktop will refuse those.
See [`docs/SKILLS.md`](docs/SKILLS.md).

| OS | Skills directory |
| -- | ---------------- |
| Windows | `%LOCALAPPDATA%\Synaplan\Desktop\skills\` |
| macOS | `~/Library/Application Support/com.synaplan.desktop/skills/` |
| Linux | `$XDG_DATA_HOME/synaplan-desktop/skills/` or `~/.local/share/synaplan-desktop/skills/` |

## Developer quick start

Prerequisites are installed by the setup script for your OS:

```bash
# Linux
bash scripts/setup-linux.sh

# macOS
bash scripts/setup-macos.sh

# Windows (PowerShell)
./scripts/setup-windows.ps1
```

Then run the app with the start script for your OS — it checks the toolchain
(Node 22+, Rust, the platform libraries, `node_modules`) and names anything
missing before it launches `npm run tauri dev`:

```bash
./start-linux.sh            # Linux
./start-macos.command       # macOS (also double-clickable in Finder)
./start-windows.ps1         # Windows (PowerShell)
```

Add `--check` (Windows: `-Check`) to run only the checks. On headless Linux or
WSL there is no system keyring; `./start-linux.sh --plaintext-key` opts into the
dev-only key file (see `docs/DEVELOPMENT.md`). `npm run tauri dev` still works
directly once everything is installed.

### Try it offline (no Synaplan server)

```bash
npm run mock-server          # starts http://localhost:8788
npm run tauri dev            # pair against http://localhost:8788 with any code
```

The mock accepts pairing, lists a mock model, and streams a short chat reply.

See [`docs/DEVELOPMENT.md`](docs/DEVELOPMENT.md) for the dev loop and
[`docs/PLATFORMS.md`](docs/PLATFORMS.md) for per-OS build prerequisites.

Run the full local gate (mirrors CI) before every commit:

```bash
make ci-local
```

## Architecture

- **`src/`** — Vue 3 + TypeScript UI. Talks to Rust only through
  `src/services/tauri.ts`.
- **`src-tauri/synaplan-core/`** — platform-independent, unit-tested Rust core
  (paths, secret store, pairing, SSE parsing, config, frozen contract types).
- **`src-tauri/synaplan-core/src/platform/`** — the only place OS differences
  live (`app_dirs`, `secret_store`).
- **`src-tauri/src/`** — the thin Tauri shell (commands + events).
- **`skills/bundled/`** — the twelve Agent Skills that ship with the app
  (eleven stdlib + a blocked-until-ready `pptx`).

## License

Apache License 2.0 — see [`LICENSE`](LICENSE). Copyright 2026 metadist GmbH.

## Status

Unsigned 1.0. Pairing, chat, skill install, doctor, tray, and the poll loop
work. **Build from source** with the setup scripts above. Signed public
installers are not published yet. On unsigned macOS, turning on “Start when I
sign in” may show a Login Items warning — that is expected.
````
