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
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
- 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---56# OpenClaw OfficeCLI Skill78## Purpose910This 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.1112## Trigger Rules1314Trigger when the user clearly wants a file artifact, for example:1516- `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`2223Do not trigger for:2425- pure explanation26- brainstorming27- outline-only requests28- analysis without a file deliverable2930## Runtime Contract3132The skill must use `officecli agent-bridge` as the local execution protocol.3334Do not treat `officecli new ...` stdout as a protocol.3536Always prefer the structured bridge:3738- transport: `stdio`39- framing: `Content-Length`40- protocol: `JSON-RPC 2.0`41- tool: `office.generate`4243Required bridge methods:4445- `initialize`46- `capabilities/get`47- `session/open`48- `task/invoke`49- `task/respond`50- `task/status`51- `task/cancel`5253Primary event types:5455- `task.started`56- `task.progress`57- `task.question`58- `task.output`59- `task.completed`60- `task.failed`61- `task.cancelled`6263## Agent Behavior64651. 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`.8889## Runtime Mode Rules9091- use `officecli config runtime` to inspect the local default runtime mode when the host asks how OfficeCLI is configured92- use `officecli config set-runtime hosted` when the host explicitly wants platform-managed hosted generation by default93- use `officecli config set-runtime external` when the host wants local/external generation by default94- 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 platform9596## PPT Image Rules9798For all OpenClaw agents using this skill:99100- inspect `document_generation.pptx.image_support.default_enabled` during capability discovery101- inspect `update.available` during capability discovery102- use `document_generation.pptx.image_support.disable_flag` when explaining how to produce a text-only deck103- if `update.available=true`, prefer a structured repair/refresh path and show `update_command` when the host asks how to update104- use `document_generation.pptx.image_support.config_command` and `config_fields` when the user reports missing images105- if `task.output`, `task.completed`, or `task/status` includes `result_meta.image_support.attention_required=true`, surface that immediately in the chat106- 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`107- do not rely only on free-form warning strings for client decisions; prefer `result_meta`108- do not parse human update prompts from `officecli` stdout; use bridge capability fields109110## Standalone Image Rules111112For standalone `img` requests:113114- inspect top-level `image_generation` during capability discovery115- use `office.generate` with `document_type=img`116- pass `ratio=square|landscape|portrait` when the user asks for a shape; default to `square`117- pass one `reference_image` local path or `http/https` URL when the user provides a reference image118- require platform/license config and let the OfficeCLI server control the image provider119- 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 generation120- keep preview publishing enabled by default when publishing is configured; pass `publish=false` only for local-only output121- do not use `office.render`, local `config set-generation` image settings, `mode=best`, source files, or local preview122- include returned quota or credit balance metadata in the chat message when present123124## Environment Repair Rules125126- refresh the OpenClaw skill bundle and repair any missing `officecli` setup on every task by running `fix-officecli-env.sh`127- do not refresh an already installed `officecli` binary unless the host explicitly opts in, for example with `OFFICECLI_REFRESH_BINARY=1`128- when the user explicitly asks to uninstall `officecli`, run `uninstall-officecli.sh`129- use `check-officecli-env.sh` as the single readiness probe for binary, config, and bridge130- use `fix-officecli-env.sh` as the single repair entrypoint131- when config is missing, ask only for the missing generation/license values and let the fix script write local config132- online preview config is required by default so generated files can return publish URLs133- if the current request is intentionally local-only, set `OFFICECLI_SKIP_PUBLISH_SETUP=1` before running the fix script134- do not try to start `agent-bridge` until the check script returns ready135- 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 approval136137## Attachment Delivery138139When generation succeeds:140141- read `task.output.payload.result.file_path`142- upload that file to the current channel143- include a short note with:144 - document type145 - document name146 - any warnings returned by bridge147 - when present, `result_meta.image_support.message`148149Do not only send a local file path unless attachment upload is impossible on the current channel.150151## Conversation Policy152153- If document type is missing, ask which file type the user wants.154- If topic or goal is missing, ask a concise clarifying question.155- If the bridge emits `task.question`, relay it instead of inventing your own replacement question.156- Keep progress updates short and stage-based.157- do not trigger `office.review` / `office.score` automatically after generation unless the user explicitly asks for scoring, review, validation, or quality checking158159## Local Requirements160161Expected local setup:162163- `officecli` available in `PATH`, or repairable by `fix-officecli-env.sh`164- generation and license config already completed, or repairable by the fix script165- standalone `img` requires license config; document/PPT image assets also require generation config166- OpenClaw agent has permission to:167 - spawn local commands168 - read generated files169 - upload attachments to the active channel