sylinko/everywhere/officecli
- community
Checking that the SKILL.md file is still in the repository.
Create, analyze, proofread, and modify Office documents (.docx, .xlsx, .pptx) using the officecli CLI tool. Use when the user wants to create, inspect, check formatting, find issues, add charts, or modify Office documents.
Install
npx vskill@latest install sylinko/everywhere/officecliSKILL.md
officecli
AI-friendly CLI for .docx, .xlsx, .pptx. Single binary, no dependencies, no Office installation needed.
Usage
officecli is a built-in tool. If it's unavailable or not exist, please instruct the user to open the OfficeCLI tool in the chat window. The tool allows you to call officecli directly without having to install or locate the executable. For any of the commands in the following instructions, do not use any other tools; you MUST use the exact tool and pass the commandLine parameter to execute them.
Strategy
L1 (read) → L2 (DOM edit) → L3 (raw XML). Always prefer higher layers. Add --json for structured output.
Before doc work, check Specialized Skills (bottom of this file). Fundraising decks, academic papers, financial models, dashboards, and Morph animations need their own skill loaded first — load_skill once, then proceed.
Help System (IMPORTANT)
When unsure about property names, value formats, or command syntax, ALWAYS run help instead of guessing. One help query beats guess-fail-retry loops.
officecli help ≡ officecli --help, and officecli <cmd> --help ≡ officecli help <cmd> — same content.
Format aliases: word→docx, excel→xlsx, ppt/powerpoint→pptx. Verbs: add, set, get, query, remove. MCP exposes the same schema via the single command string param: {"command":"help docx paragraph"} (not a structured {"format":...,"type":...} object — the MCP tool has exactly one param, command, and passes it through to the CLI verbatim).
Performance: Resident Mode
Every command auto-starts a resident on first access (60s idle timeout) — file-lock conflicts are automatically avoided. Explicit open/close is still recommended for longer sessions (12min idle):
Opt out of auto-start: OFFICECLI_NO_AUTO_RESIDENT=1.
Flush only at the non-officecli boundary. officecli's own reads (get/query/view/dump) always see your latest edits, so you never need to save mid-workflow. Run save (keeps the resident) or close (flush + release) only before a non-officecli program reads the file — python-docx/openpyxl, Word, a renderer, delivery/upload. (Idle sessions auto-flush within seconds; OFFICECLI_RESIDENT_FLUSH=each makes every mutation flush before returning.)
Quick Start
PPT:
Word:
Excel:
L1: Create, Read & Inspect
view modes
| Mode | Description | Useful flags | |||
|---|---|---|---|---|---|
outline | Document structure | ||||
stats | Statistics (pages, words, shapes) | ||||
issues | Formatting/content/structure problems | `--type format\ | content\ | structure, --limit N` | |
text | Plain text extraction | --start N --end N, --max-lines N | |||
annotated | Text with formatting annotations | ||||
html | Static HTML snapshot — same renderer as watch, no server needed | --browser, --page N (docx), --start N --end N (pptx) | |||
screenshot / svg / pdf / forms | PNG via headless browser / SVG (pptx slide) / PDF via exporter plugin / form-fields JSON via format-handler plugin | -o, --screenshot-width/-height, pptx --grid N |
Use view html for one-shot snapshots (CI artifacts, archival, diffing); use watch when you need live refresh or browser-side click-to-select.
get
Any XML path via element localName. Use --depth N to expand children. Add --json for structured output. Default text output is grep-friendly: path (type) "text" key=val key=val ...
Stable ID Addressing
Elements with stable IDs return @attr=value paths instead of positional indices. Prefer these in multi-step workflows — positional indices shift on insert/delete, stable IDs do not.
PPT also accepts @name= (e.g. shape[@name=Title 1]), with morph !! prefix awareness. Elements without stable IDs (slide, run, tr/tc, row) fall back to positional indices.
query
CSS-like selectors: [attr=value], [attr!=value], [attr~=text], [attr>=value], [attr<=value], :contains("text"), :empty, :has(formula), :no-alt. Boolean and/or supported across query/set/remove: cell[value>5000 or value<100], cell[(type=Number or type=Date) and value>0]. Excel row-by-column-name: Sheet1!row[Salary>5000]. set accepts selectors and Excel-native paths (parity with get/query). Bare unscoped selectors rejected on set/remove.
Watch & Interactive Selection
Live HTML preview that auto-refreshes on every file change. Browsers can click / shift-click / box-drag to select shapes; the CLI can read the current browser selection and act on it.
Open the printed http://localhost:N URL. Click to select; shift/cmd/ctrl+click to multi-select; drag from empty space to box-select. PPT/Word use blue outline; Excel uses native-style green selection (double-click cell to edit inline; drag a chart to reposition).
get <file> selected — read what the user clicked
Returns DocumentNodes for whatever is currently selected. Empty result if nothing selected. Exit code != 0 if no watch is running.
Key properties
- Selection survives file edits. Paths use stable
@id=form. - All connected browsers share one selection. Last-write-wins.
- Same-file single-watch. A given file can have only one watch process at a time.
- Group shapes select as a whole. Drilling into individual children of a group is not supported in v1.
- Coverage:
.pptxshapes/pictures/tables/charts/connectors/groups;.docxtop-level paragraphs and tables. Inherited layout/master decorations and Word nested elements (table cells, run-level) are not addressable. `.xlsx` does not emit `data-path` —mark/selectionon xlsx always resolvestale=true(v2 candidate).
Marks — edit proposals waiting for review
Use mark when changes need human review BEFORE they hit the file. Marks live in the watch process only; a separate set pipeline applies accepted ones. For one-shot changes use set directly; for permanent file annotations use add --type comment (Word native).
Props: find (literal or regex when regex=true; raw form find='r"[abc]"'), color (hex / rgb(...) / 22 named whitelist), note, tofix (drives apply pipeline). Path must be data-path format from watch HTML — see subskills for full pipeline.
L2: DOM Operations
set — modify properties
Any XML attribute is settable via element path (found via get --depth N) — even attributes not currently present. Without find=, set applies format to the entire element.
Value formats:
| Type | Format | Examples | |
|---|---|---|---|
| Colors | Hex (with/without #), named, RGB, theme | FF0000, #FF0000, red, rgb(255,0,0), accent1..accent6 | |
| Spacing | Unit-qualified | 12pt, 0.5cm, 1.5x, 150% | |
| Dimensions | EMU or suffixed | 914400, 2.54cm, 1in, 72pt, 96px |
Dotted-attr aliases — font.<attr> forms accepted on shape/run/paragraph/table/row/cell/section/styles, e.g. --prop font.color=red --prop font.bold=true --prop font.size=14pt. Run officecli help <fmt> <element> for the full list.
find — format or replace matched text
Use top-level --find / --replace on set (and --find on query). Legacy --prop find=X still works but emits a hint.
Path controls search scope: / = whole document, /body/p[1] or /slide[N]/shape[M] = specific element, /header[1] / /footer[1] = headers/footers.
Notes:
- Case-sensitive by default. Case-insensitive:
--prop 'find=(?i)error' --prop regex=true - Matches work across run boundaries
- No match = silent success.
--jsonincludes"matched": N - Excel: only
find+replacesupported (no find + format props)
add — add elements or clone
--after, --before, --index are mutually exclusive. No position flag = append to end.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingsrc/Everywhere.Core/Assets/Skills/OfficeCLI/SKILL.md
Popularity
- Repository stars
- 6,239
- Repository forks
- 388
- 7-day trend score
- 44
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/sylinko/everywhere/officecli)