OpenClaw OfficeCLI Skill
Purpose
This skill lets an OpenClaw agent generate local pptx, docx, xlsx, report, and standalone img files through officecli agent-bridge, then send the generated file back to the current channel as an attachment.
Trigger Rules
Trigger when the user clearly wants a file artifact, for example:
generate a five-slide PPT about an enterprise collaboration platform
write a customer-facing docx for me
create a budget excel sheet
generate a launch image
turn this into slides
write a docx for customers
Do not trigger for:
- pure explanation
- brainstorming
- outline-only requests
- analysis without a file deliverable
Runtime Contract
The skill must use officecli agent-bridge as the local execution protocol.
Do not treat officecli new ... stdout as a protocol.
Always prefer the structured bridge:
- transport:
stdio
- framing:
Content-Length
- protocol:
JSON-RPC 2.0
- tool:
office.generate
Required bridge methods:
initialize
capabilities/get
session/open
task/invoke
task/respond
task/status
task/cancel
Primary event types:
task.started
task.progress
task.question
task.output
task.completed
task.failed
task.cancelled
Agent Behavior
- Run
fix-officecli-env.sh before starting any bridge session so the skill bundle is refreshed and any missing officecli setup is repaired.
- Run
check-officecli-env.sh after the repair step.
- Ensure
officecli is installed, configured, and reachable.
- Ensure
officecli agent-bridge can be started locally.
- Read
initialize or capabilities/get before invoking generation, and cache document_generation.pptx.image_support and top-level image_generation.
- Also cache
update; if available=true, use update_command or your own repair flow instead of parsing human CLI update prompts.
- Convert the user's natural-language request into:
document_type
topic
prompt
- optional
mode
- optional
lang
- optional
style
- optional
audience
- optional
ratio for img
- If the user explicitly wants no images for
pptx, set enable_images=false; otherwise follow the bridge capability default instead of hard-coding a client default.
- For standalone
img, call office.generate with document_type=img; do not call office.render, do not set mode=best, and do not use local image provider config.
- Use
interactive=true by default so the chat can handle follow-up questions.
- Use
mode=fast by default unless the user explicitly asks for a higher-quality, more iterative workflow and the document type is not img.
- On
task.question, present the question naturally in the channel and forward the answer via task/respond.
- On
task.output, read result.file_path and send the file as an attachment in the current channel.
- On
task.failed, convert the error into a user-friendly message.
- On user cancel, send
task/cancel.
Runtime Mode Rules
- use
officecli config runtime to inspect the local default runtime mode when the host asks how OfficeCLI is configured
- use
officecli config set-runtime hosted when the host explicitly wants platform-managed hosted generation by default
- use
officecli config set-runtime external when the host wants local/external generation by default
- hosted mode requires a platform OfficeCLI API key with hosted credits; do not ask users for aigateway keys because those are created and stored by the platform
- OfficeCLI should be installed through one channel at a time; if the host already has a Homebrew-installed
officecli, do not suggest or run npm install -g officecli on top of it
PPT Image Rules
For all OpenClaw agents using this skill:
- inspect
document_generation.pptx.image_support.default_enabled during capability discovery
- inspect
update.available during capability discovery
- use
document_generation.pptx.image_support.disable_flag when explaining how to produce a text-only deck
- if
update.available=true, prefer a structured repair/refresh path and show update_command when the host asks how to update
- use
document_generation.pptx.image_support.config_command and config_fields when the user reports missing images
- if
task.output, task.completed, or task/status includes result_meta.image_support.attention_required=true, surface that immediately in the chat
- if
result_meta.image_support.reason=image_generation_degraded, tell the user the deck was downgraded to a no-image version and they should check image_base_url, image_api_key, and image_model
- do not rely only on free-form warning strings for client decisions; prefer
result_meta
- do not parse human update prompts from
officecli stdout; use bridge capability fields
Standalone Image Rules
For standalone img requests:
- inspect top-level
image_generation during capability discovery
- use
office.generate with document_type=img
- pass
ratio=square|landscape|portrait when the user asks for a shape; default to square
- pass one
reference_image local path or http/https URL when the user provides a reference image
- require platform/license config and let the OfficeCLI server control the image provider
- treat quota by runtime: in
external mode one successful standalone image consumes one generation count, while in hosted mode it consumes hosted credits; free image usage has a separate 3-per-day bucket from free document generation
- keep preview publishing enabled by default when publishing is configured; pass
publish=false only for local-only output
- do not use
office.render, local config set-generation image settings, mode=best, source files, or local preview
- include returned quota or credit balance metadata in the chat message when present
Environment Repair Rules
- refresh the OpenClaw skill bundle and repair any missing
officecli setup on every task by running fix-officecli-env.sh
- do not refresh an already installed
officecli binary unless the host explicitly opts in, for example with OFFICECLI_REFRESH_BINARY=1
- when the user explicitly asks to uninstall
officecli, run uninstall-officecli.sh
- if the host previously installed with Homebrew and wants to switch to npm, tell them to run
brew uninstall officecli/homebrew-officecli/officecli first; if their formula uses the short name, use brew uninstall officecli, then run npm install -g officecli
- use
check-officecli-env.sh as the single readiness probe for binary, config, and bridge
- use
fix-officecli-env.sh as the single repair entrypoint
- when config is missing, ask only for the missing generation/license values and let the fix script write local config
- online preview config is required by default so generated files can return publish URLs
- if the current request is intentionally local-only, set
OFFICECLI_SKIP_PUBLISH_SETUP=1 before running the fix script
- do not try to start
agent-bridge until the check script returns ready
- if refresh or check fails, stop and report the
officecli environment error; when repair fails, use the fix script's final structured status as the source of truth, and do not fall back to any other PPT/DOC/XLS generation tool without explicit user approval
Attachment Delivery
When generation succeeds:
- read
task.output.payload.result.file_path
- upload that file to the current channel
- include a short note with:
- document type
- document name
- any warnings returned by bridge
- when present,
result_meta.image_support.message
Do not only send a local file path unless attachment upload is impossible on the current channel.
Conversation Policy
- If document type is missing, ask which file type the user wants.
- If topic or goal is missing, ask a concise clarifying question.
- If the bridge emits
task.question, relay it instead of inventing your own replacement question.
- Keep progress updates short and stage-based.
- do not trigger
office.review / office.score automatically after generation unless the user explicitly asks for scoring, review, validation, or quality checking
Local Requirements
Expected local setup:
officecli available in PATH, or repairable by fix-officecli-env.sh
- generation and license config already completed, or repairable by the fix script
- standalone
img requires license config; document/PPT image assets also require generation config
- OpenClaw agent has permission to:
- spawn local commands
- read generated files
- upload attachments to the active channel
1---2name: openclaw-officecli3description: Use when an OpenClaw user clearly wants a local Office or image artifact such as a PPTX, DOCX, XLSX, Report, or IMG, and route the request through officecli agent-bridge instead of parsing human CLI output.4---5
6# OpenClaw OfficeCLI Skill
7
8## Purpose
9
10This skill lets an OpenClaw agent generate local `pptx`, `docx`, `xlsx`, `report`, and standalone `img` files through `officecli agent-bridge`, then send the generated file back to the current channel as an attachment.
11
12## Trigger Rules
13
14Trigger when the user clearly wants a file artifact, for example:
15
16- `generate a five-slide PPT about an enterprise collaboration platform`
17- `write a customer-facing docx for me`
18- `create a budget excel sheet`
19- `generate a launch image`
20- `turn this into slides`
21- `write a docx for customers`
22
23Do not trigger for:
24
25- pure explanation
26- brainstorming
27- outline-only requests
28- analysis without a file deliverable
29
30## Runtime Contract
31
32The skill must use `officecli agent-bridge` as the local execution protocol.
33
34Do not treat `officecli new ...` stdout as a protocol.
35
36Always prefer the structured bridge:
37
38- transport: `stdio`
39- framing: `Content-Length`
40- protocol: `JSON-RPC 2.0`
41- tool: `office.generate`
42
43Required bridge methods:
44
45- `initialize`
46- `capabilities/get`
47- `session/open`
48- `task/invoke`
49- `task/respond`
50- `task/status`
51- `task/cancel`
52
53Primary event types:
54
55- `task.started`
56- `task.progress`
57- `task.question`
58- `task.output`
59- `task.completed`
60- `task.failed`
61- `task.cancelled`
62
63## Agent Behavior
64
651. Run `fix-officecli-env.sh` before starting any bridge session so the skill bundle is refreshed and any missing `officecli` setup is repaired.
662. Run `check-officecli-env.sh` after the repair step.
673. Ensure `officecli` is installed, configured, and reachable.
684. Ensure `officecli agent-bridge` can be started locally.
695. Read `initialize` or `capabilities/get` before invoking generation, and cache `document_generation.pptx.image_support` and top-level `image_generation`.
706. Also cache `update`; if `available=true`, use `update_command` or your own repair flow instead of parsing human CLI update prompts.
717. Convert the user's natural-language request into:
72 - `document_type`
73 - `topic`
74 - `prompt`
75 - optional `mode`
76 - optional `lang`
77 - optional `style`
78 - optional `audience`
79 - optional `ratio` for `img`
808. If the user explicitly wants no images for `pptx`, set `enable_images=false`; otherwise follow the bridge capability default instead of hard-coding a client default.
819. For standalone `img`, call `office.generate` with `document_type=img`; do not call `office.render`, do not set `mode=best`, and do not use local image provider config.
8210. Use `interactive=true` by default so the chat can handle follow-up questions.
8311. Use `mode=fast` by default unless the user explicitly asks for a higher-quality, more iterative workflow and the document type is not `img`.
8412. On `task.question`, present the question naturally in the channel and forward the answer via `task/respond`.
8513. On `task.output`, read `result.file_path` and send the file as an attachment in the current channel.
8614. On `task.failed`, convert the error into a user-friendly message.
8715. On user cancel, send `task/cancel`.
88
89## Runtime Mode Rules
90
91- use `officecli config runtime` to inspect the local default runtime mode when the host asks how OfficeCLI is configured
92- use `officecli config set-runtime hosted` when the host explicitly wants platform-managed hosted generation by default
93- use `officecli config set-runtime external` when the host wants local/external generation by default
94- hosted mode requires a platform OfficeCLI API key with hosted credits; do not ask users for aigateway keys because those are created and stored by the platform
95- OfficeCLI should be installed through one channel at a time; if the host already has a Homebrew-installed `officecli`, do not suggest or run `npm install -g officecli` on top of it
96
97## PPT Image Rules
98
99For all OpenClaw agents using this skill:
100
101- inspect `document_generation.pptx.image_support.default_enabled` during capability discovery
102- inspect `update.available` during capability discovery
103- use `document_generation.pptx.image_support.disable_flag` when explaining how to produce a text-only deck
104- if `update.available=true`, prefer a structured repair/refresh path and show `update_command` when the host asks how to update
105- use `document_generation.pptx.image_support.config_command` and `config_fields` when the user reports missing images
106- if `task.output`, `task.completed`, or `task/status` includes `result_meta.image_support.attention_required=true`, surface that immediately in the chat
107- if `result_meta.image_support.reason=image_generation_degraded`, tell the user the deck was downgraded to a no-image version and they should check `image_base_url`, `image_api_key`, and `image_model`
108- do not rely only on free-form warning strings for client decisions; prefer `result_meta`
109- do not parse human update prompts from `officecli` stdout; use bridge capability fields
110
111## Standalone Image Rules
112
113For standalone `img` requests:
114
115- inspect top-level `image_generation` during capability discovery
116- use `office.generate` with `document_type=img`
117- pass `ratio=square|landscape|portrait` when the user asks for a shape; default to `square`
118- pass one `reference_image` local path or `http/https` URL when the user provides a reference image
119- require platform/license config and let the OfficeCLI server control the image provider
120- treat quota by runtime: in `external` mode one successful standalone image consumes one generation count, while in `hosted` mode it consumes hosted credits; free image usage has a separate 3-per-day bucket from free document generation
121- keep preview publishing enabled by default when publishing is configured; pass `publish=false` only for local-only output
122- do not use `office.render`, local `config set-generation` image settings, `mode=best`, source files, or local preview
123- include returned quota or credit balance metadata in the chat message when present
124
125## Environment Repair Rules
126
127- refresh the OpenClaw skill bundle and repair any missing `officecli` setup on every task by running `fix-officecli-env.sh`
128- do not refresh an already installed `officecli` binary unless the host explicitly opts in, for example with `OFFICECLI_REFRESH_BINARY=1`
129- when the user explicitly asks to uninstall `officecli`, run `uninstall-officecli.sh`
130- if the host previously installed with Homebrew and wants to switch to npm, tell them to run `brew uninstall officecli/homebrew-officecli/officecli` first; if their formula uses the short name, use `brew uninstall officecli`, then run `npm install -g officecli`
131- use `check-officecli-env.sh` as the single readiness probe for binary, config, and bridge
132- use `fix-officecli-env.sh` as the single repair entrypoint
133- when config is missing, ask only for the missing generation/license values and let the fix script write local config
134- online preview config is required by default so generated files can return publish URLs
135- if the current request is intentionally local-only, set `OFFICECLI_SKIP_PUBLISH_SETUP=1` before running the fix script
136- do not try to start `agent-bridge` until the check script returns ready
137- if refresh or check fails, stop and report the `officecli` environment error; when repair fails, use the fix script's final structured status as the source of truth, and do not fall back to any other PPT/DOC/XLS generation tool without explicit user approval
138
139## Attachment Delivery
140
141When generation succeeds:
142
143- read `task.output.payload.result.file_path`
144- upload that file to the current channel
145- include a short note with:
146 - document type
147 - document name
148 - any warnings returned by bridge
149 - when present, `result_meta.image_support.message`
150
151Do not only send a local file path unless attachment upload is impossible on the current channel.
152
153## Conversation Policy
154
155- If document type is missing, ask which file type the user wants.
156- If topic or goal is missing, ask a concise clarifying question.
157- If the bridge emits `task.question`, relay it instead of inventing your own replacement question.
158- Keep progress updates short and stage-based.
159- do not trigger `office.review` / `office.score` automatically after generation unless the user explicitly asks for scoring, review, validation, or quality checking
160
161## Local Requirements
162
163Expected local setup:
164
165- `officecli` available in `PATH`, or repairable by `fix-officecli-env.sh`
166- generation and license config already completed, or repairable by the fix script
167- standalone `img` requires license config; document/PPT image assets also require generation config
168- OpenClaw agent has permission to:
169 - spawn local commands
170 - read generated files
171 - upload attachments to the active channel