with one click
onlyoffice
// 132-command CLI for Documents (.docx), Spreadsheets (.xlsx), Presentations (.pptx), PDFs, and RDF Knowledge Graphs
// 132-command CLI for Documents (.docx), Spreadsheets (.xlsx), Presentations (.pptx), PDFs, and RDF Knowledge Graphs
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | onlyoffice |
| version | 4.4.19 |
| author | SLOANE OS |
| description | 132-command CLI for Documents (.docx), Spreadsheets (.xlsx), Presentations (.pptx), PDFs, and RDF Knowledge Graphs |
| tags | ["productivity","documents","office","onlyoffice","charts","spreadsheets","rdf","apa","pdf","image-extraction","spatial","data-validation"] |
Programmatic control over Office documents designed for AI agents. Full JSON output. Production-safe with atomic writes, two-layer file locking, and automatic backups.
pdf-sanitize can remove annotations, embedded files/attachments, and flatten form fields only when explicitly requestedpdf-map-page renders block-id overlays and pdf-redact-block redacts a selected native block without OCRdoc-citation-audit checks APA-like in-text citations against the DOCX References section without network/source verificationpdf-redact --text uses character-level match rectangles so it does not redact the whole surrounding text spanpdf-compact, pdf-merge, pdf-split, pdf-reorder, pdf-add-text, pdf-add-image, and pdf-redact add explicit PDF compaction/stitching/editing commandspdf-compact; it is not a default step in doc-to-pdf, pdf-sanitize, or doc-submission-packdoc-submission-pack creates a cleaned DOCX/PDF bundle with hidden-data checks, rendered layout/font evidence, text-preservation fingerprint, and a JSON manifestdoc-normalize-format applies academic formatting across styles, runs, headers/footers, and References hanging indents without treating DOCX as textdoc-font-audit --rendered compares declared DOCX fonts with actual PDF span fonts after OnlyOffice conversiondoc-render-audit filters repeated DOCX/PDF header-footer artifacts before checking body/reference margins and hanging indentssetup-check (update-check/doctor aliases) validates required Python packages plus Docker/OnlyOffice x2t after clone, install, or git pull; setup-check --live-smoke can run a real DOCX-to-PDF smoke when requested--alldoc-sanitize --canonicalize-ooxml rewrites legacy ns0: WordprocessingML parts back to canonical w: XML so OnlyOffice/x2t can honor DOCX layout without Microsoft Word repairdoc-render-audit, doc-preflight --rendered-layout, and doc-to-pdf --layout-warnings to catch PDF-rendered hanging-indent, margin, horizontal-shift, and References page-break mismatchesdoc-formatting-info now supports --all, --start, and --limit, and reports paragraph indents, raw w:ind, tab stops, line spacing, page-break-before, inline page breaks, and OOXML prefix warningsw: prefixes when rewriting story/settings parts because OnlyOffice x2t can ignore layout properties in ns0:-round-tripped WordprocessingML# Via SLOANE skill router (preferred for subject agents):
cli_anything_run --app onlyoffice <command> [args] --json
# Direct binary (Claude Code / shell):
/home/benbi/cli-anything/onlyoffice/agent-harness/.venv/bin/cli-anything-onlyoffice <command> [args] --json
NEVER do any of these — they will fail:
which onlyoffice-cli — wrong namepip install python-pptx / pip3 install — already in venv, don't touch system pythonpython3 -c "import pptx" — wrong interpreter, use venv pythonVerify the tool is working:
cli_anything_run --app onlyoffice setup-check --json
cli_anything_run --app onlyoffice status --json
Check the python field in the response — it must point to .venv/bin/python3.
.docx, .xlsx, and .pptx are OOXML containers (zip/XML packages), so generic text Read/Write tools will often fail or report them as binary.
Do not treat that as a capability gap. Use this tool's semantic commands instead:
doc-read, doc-append, doc-replace, doc-search, doc-read-tables, doc-citation-audit, doc-add-image, doc-to-pdf, doc-preview, doc-render-map, doc-render-auditxlsx-read, xlsx-cell-read, xlsx-range-read, xlsx-write, xlsx-cell-write, xlsx-previewpptx-read, pptx-add-slide, pptx-update-text, pptx-previewIf you need the rendered visual layout, use preview/export commands rather than raw file reads.
| Setting | Value |
|---|---|
| Page size | A4 (210 x 297 mm) |
| Margins | 1.0" all sides |
| Font | Calibri 11pt |
| Line spacing | Double (APA 7th) |
| Space after | 0pt |
doc-create <file> <title> <content>doc-read <file>doc-append <file> <content>doc-replace <file> <search> <replace>doc-search <file> <text> [--case-sensitive]doc-insert <file> <text> <index> [--style <name>]doc-delete <file> <index>doc-word-count <file>doc-format <file> <paragraph_index> [--bold] [--italic] [--underline] [--font-name <n>] [--font-size <n>] [--color <hex>] [--align <left|center|right|justify>]doc-set-style <file> <index> <style>doc-list-styles <file>doc-highlight <file> <text> [--color yellow|cyan|green|pink]doc-normalize-format <file> [output_path] [--font <name>] [--body-size <pt>] [--title-size <pt>] [--line-spacing <single|1.5|double>] [--paragraph-after <pt>] [--clear-theme-fonts] [--skip-header-footer] [--remove-style-borders] [--reference-hanging <in>]doc-formatting-info <file> [--all] [--start <n>] [--limit <n>]doc-font-audit <file> [--expected-font <name>] [--expected-font-size <pt>] [--rendered] [--pdf <path>]doc-layout <file> [--size A4|Letter] [--orientation portrait|landscape] [--margin-top <in>] [--margin-bottom <in>] [--margin-left <in>] [--margin-right <in>] [--header <text>] [--page-numbers]doc-add-table <file> <headers_csv> <data_csv> — rows separated by ;doc-read-tables <file>doc-add-image <file> <image_path> [--width <inches>] [--caption <text>]doc-add-hyperlink <file> <text> <url> [--paragraph <index>]doc-add-page-break <file>doc-add-list <file> <items> [--type bullet|number] — items separated by ;doc-extract-images <file> <output_dir> [--format png|jpg] [--prefix <name>] — extract all embedded imagesdoc-set-metadata <file> [--author] [--title] [--subject] [--keywords] [--comments] [--category]doc-get-metadata <file>doc-inspect-hidden-data <file>doc-preflight <file> [--expected-page-size <A4|Letter>] [--expected-font <name>] [--expected-font-size <pt>] [--rendered-layout] [--profile auto|generic|apa-references]doc-submission-pack <file> <output_dir> [--basename <name>] [--expected-page-size <A4|Letter>] [--expected-font <name>] [--expected-font-size <pt>] [--profile auto|generic|apa-references]doc-sanitize <file> [output_path] [--remove-comments] [--accept-revisions] [--clear-metadata] [--remove-custom-xml] [--canonicalize-ooxml] [--author <a>]doc-comment <file> <comment> [--paragraph <index>]doc-add-reference <file> <ref_json> — types: journal, book, website, report, chapterdoc-build-references <file>doc-citation-audit <file> [--include-sidecar]doc-to-pdf <file> [output_path] [--layout-warnings] [--profile auto|generic|apa-references]doc-preview <file> <output_dir> [--pages <range>] [--dpi <n>] [--format png|jpg]doc-render-map <file>doc-render-audit <file> [--pdf <path>] [--tolerance-points <n>] [--profile auto|generic|apa-references]xlsx-create <file> [sheet_name]xlsx-write <file> <headers_csv> <data_csv> [--sheet <name>] [--overwrite] [--coerce-rows] [--text-columns <csv>]xlsx-read <file> [sheet_name]xlsx-append <file> <row_data_csv> [--sheet <name>]xlsx-search <file> <text> [--sheet <name>]xlsx-cell-read <file> <cell> [--sheet <name>]xlsx-cell-write <file> <cell> <value> [--sheet <name>] [--text]xlsx-range-read <file> <range> [--sheet <name>]xlsx-delete-rows <file> <start_row> [count] [--sheet <name>]xlsx-delete-cols <file> <start_col> [count] [--sheet <name>]xlsx-sort <file> <column> [--sheet <name>] [--desc] [--numeric]xlsx-filter <file> <column> <op> <value> [--sheet <name>] — ops: eq|ne|gt|lt|ge|le|contains|startswith|endswithxlsx-formula <file> <cell> <formula> [--sheet <name>]xlsx-calc <file> <column> <op> [--sheet <name>] [--include-formulas] [--strict-formulas] — ops: sum|avg|min|max|allxlsx-formula-audit <file> [--sheet <name>]xlsx-freq <file> <column> [--sheet <name>] [--valid <csv>]xlsx-corr <file> <x_col> <y_col> [--sheet <name>] [--method pearson|spearman]xlsx-ttest <file> <val_col> <grp_col> <group_a> <group_b> [--sheet <name>] [--equal-var]xlsx-mannwhitney <file> <val_col> <grp_col> <group_a> <group_b> [--sheet <name>]xlsx-chi2 <file> <row_col> <col_col> [--sheet <name>] [--row-valid <csv>] [--col-valid <csv>]xlsx-text-extract <file> <column> [--sheet <name>] [--limit <n>] [--min-length <n>]xlsx-text-keywords <file> <column> [--sheet <name>] [--top <n>]xlsx-research-pack <file> [--sheet <name>] [--profile hlth3112]xlsx-sheet-list <file>xlsx-sheet-add <file> <name> [--position <n>]xlsx-sheet-delete <file> <name>xlsx-sheet-rename <file> <old_name> <new_name>xlsx-merge-cells <file> <range> [--sheet <name>]xlsx-unmerge-cells <file> <range> [--sheet <name>]xlsx-format-cells <file> <range> [--sheet <name>] [--bold] [--italic] [--font-name <n>] [--font-size <n>] [--color <hex>] [--bg-color <hex>] [--number-format <fmt>] [--wrap] [--align <left|center|right>]xlsx-csv-import <xlsx_file> <csv_file> [--sheet <name>] [--delimiter <char>]xlsx-csv-export <xlsx_file> <csv_file> [--sheet <name>] [--delimiter <char>]xlsx-add-validation <file> <range> <type> [--operator <op>] [--formula1 <v>] [--formula2 <v>] [--sheet <name>] [--error <msg>] [--prompt <msg>] [--error-style stop|warning|information] [--no-blank]
list, whole, decimal, date, time, textLength, custombetween, notBetween, equal, notEqual, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqualxlsx-add-dropdown <file> <range> <options_csv> [--sheet <name>] [--prompt <msg>] [--error <msg>] — shortcut for dropdown listxlsx-list-validations <file> [--sheet <name>] — list all validation rulesxlsx-remove-validation <file> [--range <range>] [--all] [--sheet <name>] — remove rulesxlsx-validate-data <file> [--sheet <name>] [--max-rows <n>] — audit existing data against rules (pass/fail per cell)Validation Workflow:
xlsx-writexlsx-add-validation or xlsx-add-dropdownxlsx-validate-data to audit — returns every failing cell with reasonxlsx-cell-writexlsx-validate-data to confirm all cleanTypes: bar, column, bar_horizontal, line, pie, scatter
chart-create <file> <type> <data_range> <categories_range> <title> [--sheet <name>] [--output-sheet <name>] [--x-label <text>] [--y-label <text>] [--labels] [--no-legend] [--legend-pos right|top|bottom|left] [--colors <hex,hex>]chart-comparison <file> <type> <title> [--sheet <name>] [--start-row <n>] [--cat-col <n>] [--value-cols <n,n,n>] [--output <cell>] [--labels]chart-grade-dist <file> <grade_col> <title> [--sheet <name>] [--output <cell>]chart-progress <file> <student_col> <grade_col> <title> [--sheet <name>] [--output <cell>] [--labels]pptx-create <file> <title> [subtitle] — 16:9 widescreen by defaultpptx-add-slide <file> <title> [content] [layout] — layouts: title_only|content|blank|two_content|comparisonpptx-add-bullets <file> <title> <bullets> — bullets separated by \npptx-add-table <file> <title> <headers_csv> <data_csv> [--coerce-rows]pptx-add-image <file> <title> <image_path>pptx-read <file>pptx-slide-count <file>pptx-delete-slide <file> <index>pptx-speaker-notes <file> <slide_index> [notes_text]pptx-update-text <file> <slide_index> [--title <t>] [--body <b>]pptx-extract-images <file> <output_dir> [--slide <index>] [--format png|jpg] [--prefix <name>] — extract all images from slidespptx-list-shapes <file> [--slide <index>] — list ALL shapes with exact position, size, text, typepptx-add-textbox <file> <slide_index> <text> [--left <in>] [--top <in>] [--width <in>] [--height <in>] [--font-size <pt>] [--font-name <name>] [--bold] [--italic] [--color <hex>] [--align <left|center|right>]pptx-modify-shape <file> <slide_index> <shape_name> [--left <in>] [--top <in>] [--width <in>] [--height <in>] [--text <text>] [--font-size <pt>] [--rotation <deg>]pptx-preview <file> <output_dir> [--slide <index>] [--dpi <n>] — render slides as PNG (requires OnlyOffice Docker)Spatial Workflow (recommended for quality presentations):
pptx-list-shapes to see exact positions of all elementspptx-modify-shape to fix overlaps or reposition elementspptx-add-textbox for custom positioned textpptx-preview to render a visual check — view the PNG to verify layoutSlide coordinate system: Origin (0,0) = top-left. Slide is 13.333" wide x 7.5" tall (16:9).
pdf-extract-images <file> <output_dir> [--format png|jpg] [--pages <range>] — extract embedded image objects (PyMuPDF)pdf-page-to-image <file> <output_dir> [--pages <range>] [--dpi <n>] [--format png|jpg] — render full pages as imagespdf-map-page <file> <page> <output_image> [--dpi <n>] [--format png|jpg] [--no-labels] [--no-images] — render block-id overlays for visual selectionpdf-read-blocks <file> [--pages <range>] [--no-spans] [--no-images] [--include-empty] — read native PDF blocks/lines/spans with bbox metadatapdf-search-blocks <file> <query> [--pages <range>] [--case-sensitive] [--no-spans] — search exact PDF blocks/spans and return native anchorspdf-inspect-hidden-data <file> — inspect metadata, XMP/XML metadata, annotations, embedded files, form usage, and page-size consistencypdf-sanitize <file> [output_path] [--clear-metadata] [--remove-xml-metadata] [--remove-annotations] [--remove-embedded-files] [--flatten-forms] [--author <a>] — clear PDF metadata/XMP and explicitly requested hidden objectspdf-compact <file> [output_path] [--garbage <0-4>] [--no-deflate] [--no-clean] [--linearize] — explicitly compact/optimize a PDF; never automaticpdf-merge <input_file> <input_file> [input_file ...] --output <file> — stitch PDFs togetherpdf-split <file> <output_dir> [--pages <range>] [--prefix <name>] — split pages into one-page PDFspdf-reorder <file> <page_order> [output_path] — create a PDF in explicit page order, preserving duplicatespdf-add-text <file> <page> <text> [--output <file>] [--x <pt>] [--y <pt>] [--width <pt>] [--height <pt>] [--font-size <pt>] [--font <name>] [--color <hex>] [--rotation <0|90|180|270>] — overlay bounded textpdf-add-image <file> <page> <image_path> [--output <file>] [--x <pt>] [--y <pt>] [--width <pt>] [--height <pt>] [--no-keep-proportion] — overlay an imagepdf-redact <file> [output_path] (--text <query> | --rect <page,left,top,right,bottom>) [--pages <range>] [--case-sensitive] [--fill <hex>] [--dry-run] — apply true exact text or rectangle redactionspdf-redact-block <file> <block_id> [output_path] [--fill <hex>] [--dry-run] — redact a native block from pdf-map-page or pdf-read-blocksPage ranges are zero-based and inclusive across PDF commands: human-visible page 1 is CLI page 0; visible pages 1-4 are 0-3; visible pages 2 and 4 are 1,3; omit for all pages.
Default DPI: 150. Use 300 for print quality.
Compression/compaction rule: do not run pdf-compact unless the user explicitly requests PDF compaction/compression.
rdf-create <file> [--base <uri>] [--format turtle|xml|n3|json-ld] [--prefix <p>=<uri>]rdf-read <file> [--limit <n>]rdf-add <file> <subject> <predicate> <object> [--type uri|literal|bnode] [--lang <tag>] [--datatype <xsd_uri>]rdf-remove <file> (--all | [--subject <uri>] [--predicate <uri>] [--object <value>]) [--type uri|literal|bnode] [--lang <tag>] [--datatype <xsd_uri>] [--dry-run]rdf-query <file> <sparql_query> [--limit <n>]rdf-export <file> <output_file> [--format <format>]rdf-merge <file_a> <file_b> [--output <file>] [--format <f>]rdf-stats <file>rdf-namespace <file> [<prefix> <uri>]rdf-validate <data_file> <shapes_file>list — List recent office filesopen <file> [gui|web]watch <file> [gui|web]info <file>editor-session <file> [--open] [--wait <sec>] [--activate]editor-capture <file> <output_image> [--backend auto|desktop|rendered] [--page <n>] [--range <A1:D20>] [--slide <n>] [--zoom-reset] [--zoom-in <n>] [--zoom-out <n>] [--crop x,y,w,h]setup-check — Strict post-install/post-pull dependency readiness checkstatus — Check installation (includes python field showing active interpreter)helpbackup-list <file> [--limit <n>]backup-prune [--file <f>] [--keep <n>] [--days <n>]backup-restore <file> [--latest] [--dry-run]--json — every response is {"success": true/false, ...}success firstsetup-check --json after install or update — use setup-check --live-smoke --json when converter proof is needed; then use status --json at session start to verify python field = .venv/bin/python3backup-restore --latest on any write errorpptx-list-shapes before modifying slides — know exact positions to avoid overlapspptx-preview after building slides — visually verify the layout looks correctLast Updated: 2026-05-06 Version: 4.4.19