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 platformwrite a customer-facing docx for mecreate a budget excel sheetgenerate a launch imageturn this into slideswrite 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:
initializecapabilities/getsession/opentask/invoketask/respondtask/statustask/cancel
Primary event types:
task.startedtask.progresstask.questiontask.outputtask.completedtask.failedtask.cancelled
Agent Behavior
- Run
fix-officecli-env.shbefore starting any bridge session so the skill bundle is refreshed and any missingofficeclisetup is repaired. - Run
check-officecli-env.shafter the repair step. - Ensure
officecliis installed, configured, and reachable. - Ensure
officecli agent-bridgecan be started locally. - Read
initializeorcapabilities/getbefore invoking generation, and cachedocument_generation.pptx.image_supportand top-levelimage_generation. - Also cache
update; ifavailable=true, useupdate_commandor your own repair flow instead of parsing human CLI update prompts. - Convert the user's natural-language request into:
document_typetopicprompt- optional
mode - optional
lang - optional
style - optional
audience - optional
ratioforimg
- If the user explicitly wants no images for
pptx, setenable_images=false; otherwise follow the bridge capability default instead of hard-coding a client default. - For standalone
img, calloffice.generatewithdocument_type=img; do not calloffice.render, do not setmode=best, and do not use local image provider config. - Use
interactive=trueby default so the chat can handle follow-up questions. - Use
mode=fastby default unless the user explicitly asks for a higher-quality, more iterative workflow and the document type is notimg. - On
task.question, present the question naturally in the channel and forward the answer viatask/respond. - On
task.output, readresult.file_pathand 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 runtimeto inspect the local default runtime mode when the host asks how OfficeCLI is configured - use
officecli config set-runtime hostedwhen the host explicitly wants platform-managed hosted generation by default - use
officecli config set-runtime externalwhen 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 runnpm install -g officeclion top of it
PPT Image Rules
For all OpenClaw agents using this skill:
- inspect
document_generation.pptx.image_support.default_enabledduring capability discovery - inspect
update.availableduring capability discovery - use
document_generation.pptx.image_support.disable_flagwhen explaining how to produce a text-only deck - if
update.available=true, prefer a structured repair/refresh path and showupdate_commandwhen the host asks how to update - use
document_generation.pptx.image_support.config_commandandconfig_fieldswhen the user reports missing images - if
task.output,task.completed, ortask/statusincludesresult_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 checkimage_base_url,image_api_key, andimage_model - do not rely only on free-form warning strings for client decisions; prefer
result_meta - do not parse human update prompts from
officeclistdout; use bridge capability fields
Standalone Image Rules
For standalone img requests:
- inspect top-level
image_generationduring capability discovery - use
office.generatewithdocument_type=img - pass
ratio=square|landscape|portraitwhen the user asks for a shape; default tosquare - pass one
reference_imagelocal path orhttp/httpsURL 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
externalmode one successful standalone image consumes one generation count, while inhostedmode 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=falseonly for local-only output - do not use
office.render, localconfig set-generationimage 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
officeclisetup on every task by runningfix-officecli-env.sh - do not refresh an already installed
officeclibinary unless the host explicitly opts in, for example withOFFICECLI_REFRESH_BINARY=1 - when the user explicitly asks to uninstall
officecli, rununinstall-officecli.sh - if the host previously installed with Homebrew and wants to switch to npm, tell them to run
brew uninstall officecli/homebrew-officecli/officeclifirst; if their formula uses the short name, usebrew uninstall officecli, then runnpm install -g officecli - use
check-officecli-env.shas the single readiness probe for binary, config, and bridge - use
fix-officecli-env.shas 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=1before running the fix script - do not try to start
agent-bridgeuntil the check script returns ready - if refresh or check fails, stop and report the
officeclienvironment 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.scoreautomatically after generation unless the user explicitly asks for scoring, review, validation, or quality checking
Local Requirements
Expected local setup:
officecliavailable inPATH, or repairable byfix-officecli-env.sh- generation and license config already completed, or repairable by the fix script
- standalone
imgrequires 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


