Skip to content
Development
Skill

/office-artifacts

Generate real DOCX, PPTX, XLSX, PDF, CSV files using python-docx / python-pptx / openpyxl / reportlab by writing them into the dispatch artifacts dir, then explicitly deliver each one with `cloud deliver <abs-path>`. Use whenever the user asks for documents, slides,

BOOST
From plugin
prismercloud
1.6k102 skills
Install
$ npx -y skills add Prismer-AI/PrismerCloud --skill office-artifacts --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/office-artifacts

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generate real DOCX, PPTX, XLSX, PDF, CSV files using python-docx / python-pptx / openpyxl / reportlab by writing them into the dispatch artifacts dir, then explicitly deliver each one with `cloud deliver <abs-path>`. Use whenever the user asks for documents, slides,

SKILL.md

office-artifacts.SKILL.md
name: office-artifacts
scope: persistence
metadata:
  aliases: [document-generation]
  nativeReplaces: [docx, pdf, powerpoint, xlsx]
description: Generate real DOCX, PPTX, XLSX, PDF, CSV files using python-docx / python-pptx / openpyxl / reportlab by writing them into the dispatch artifacts dir, then explicitly deliver each one with `cloud deliver <abs-path>`. Use whenever the user asks for documents, slides, spreadsheets, reports, or PDFs.

Office Artifacts

Format-specific resources

Read [resource limits](references/RESOURCE-LIMITS.md) for dependency tiers, unsupported structures, Unicode fonts and optional extractor licensing.

Read only the guide for the requested format: references/docx/GUIDE.md, references/pdf/GUIDE.md, references/powerpoint/GUIDE.md or references/xlsx/GUIDE.md. Each guide's scripts and references are relative to its own directory, not the workspace or this skill root. Use the installed office Python interpreter below. For CJK text, references/document-generation/GUIDE.md is authoritative for fonts and PDF rendering; do not use ReportLab with unsupported CFF Noto collections. Treat upstream installation suggestions as optional dependency checks, not permission to modify the system. Verify generated files by reopening them and inspect rendered pages/slides when a renderer is available; otherwise report that visual verification was not performed. Always follow this entry's Prismer delivery contract instead of upstream host-specific output conventions.

Produce real binary office files (not markdown-as-PDF) by writing each one into the **artifacts dir** (`$PRISMER_ARTIFACTS_DIR` / `<artifacts_dir>` from `<execution_context>`). Prose-only completions are not valid.

Delivery contract — explicit, two steps (release202/09 P2)

Delivery is **explicit**. Writing a file into the artifacts dir does NOT deliver it — there is no auto-scan. You must run **`cloud deliver`** for every file you want the user to receive.

1. **Write** each deliverable (PDF / DOCX / PPTX / XLSX / CSV / image / archive) into the artifacts dir. Drafts / intermediate scratch → `$PRISMER_SCRATCH_DIR` (never delivered). 2. **Deliver** it with the absolute path:

   cloud deliver "<artifacts_dir>/report.pdf"

This attaches the file to **your current reply** (动作 A — it rides the same message as your text summary). Run it once per file. The command prints the `assetId` on success.

  • **`$PRISMER_ARTIFACTS_DIR`** is injected as an env var by spawn-style

adapters (claude-code / codex / openclaw). **Hermes does not inject the env var** — read the absolute `artifacts/` path from the dispatch prompt's `[Artifacts directive]` block and write there. Either way, pass the **absolute path** to `cloud deliver`.

  • **Hermes also has NO per-dispatch env ids** (`PRISMER_RUN_ID` /

`PRISMER_TASK_ID` / `PRISMER_CONVERSATION_ID` are all unset), so plain `cloud deliver <path>` cannot find the dispatch and exits with an error. On hermes you MUST copy `<run_id>` (or `<task_id>`) and `<conversation_id>` from `<execution_context>` and pass them as flags:

  # Hermes — ids come from <execution_context>, not env:
  cloud deliver "<artifacts_dir>/report.pdf" --run-id "<run_id>" --conversation-id "<conversation_id>"

Spawn-adapter agents (claude-code / codex) do **not** need these flags — their env is already set; plain `cloud deliver "<abs-path>"` works there.

  • **Sending a file as its OWN message** (动作 B — separate from your reply,

e.g. to drop it into the session standalone): use `cloud file send "$PRISMER_CONVERSATION_ID" "<abs-path>"`. On hermes the conversation id comes from `<execution_context><conversation_id>` (pass it as the positional), and you must also add `--run-id "<run_id>"` so the proxy activates. Prefer `cloud deliver` (动作 A) for the normal "here is the document you asked for" case.

  • **Attaching a file to a message you ALREADY sent** (动作 A2 — "I already

replied, now I produced a file I want on THAT message"): `cloud send` / `cloud file send` return a `messageId`; run `cloud attach <messageId> "<abs-path>"` to append the file to that existing message (it does NOT start a new one). On hermes also pass `--run-id "<run_id>"` and `--conversation-id "<conversation_id>"` (both copied from `<execution_context>`). Use this only when the reply already exists; for "this reply carries the file" use `cloud deliver` (动作 A).

  • **Do NOT run `cloud task complete`** to deliver a chat reply — the

platform closes the turn from your final reply (dispatch-reply path).

  • **`cloud task attach` / `cloud task complete` are OPTIONAL** and ONLY

for when you are genuinely working a **kanban TASK** you were assigned (e.g. moving a board card to `review` / `done`). For a normal @-mention chat reply, never touch them — `cloud deliver` is all you need.

  • **Rejections are visible**: if `cloud deliver` prints a non-zero exit /

error (bad MIME, renamed extension, file not found), the file was NOT delivered — fix it and re-run. Do not claim a file you failed to deliver.

HARD RULE — never claim a file you didn't actually write

Lie-guard (`src/im/ws/handler.ts`) **as of release201/30 §8 is warn-only telemetry**, not a destructive interceptor — the audit banner ("Team Manager 声明已生成文件但未真正落盘") that used to render in red is removed. The detector still logs a `[warn] claim/asset disagreement (warn-only, see release201/30 §8)` for ops dashboards when text claims a file but `assetIds` is empty. That signal helps investigate broken adapter wiring; it does NOT change the visible chat. Original 2026-05-22 audit: 25 of 27 office tasks shipped a claim with zero attached files.

Forbidden unless every product was actually written to `$PRISMER_ARTIFACTS_DIR`: "已生成 / 已落盘 / 已附件", "Created report.pdf", "Attached the file", "Generated slides.pptx".

Before claiming a file, **all** must hold:

1. Generator import (`import docx` / `pptx` / `openpy

Read more
Ships withprismercloud

Prismer Cloud

Get the whole plugin
Stats
1,554
Stars
17
Forks
Active
Maintenance
TypeScript
Language
MIT
License
2d ago
Last commit
6mo ago
Created

Repo: Prismer-AI/PrismerCloud

Other skills on prismercloud.