Word Document Reader and Writer
HKUDS/DeepTutor
Reads, creates and edits Word .docx files with python-docx, and drops to raw OOXML for tracked changes, comments and byte-exact edits.
Inspects, edits in place or creates Word .docx files with bundled Python scripts, keeping existing styles intact when content changes.
$ npx skills add TokenRhythm/opensquilla --skill docx -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install TokenRhythm/opensquilla docx --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/TokenRhythm/opensquilla.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/opensquilla/skills/bundled/docx .claude/skills/docx && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "docx" agent skill from https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docx into .claude/skills/docx/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docx", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docxType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add TokenRhythm/opensquilla --skill docx -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install TokenRhythm/opensquilla docx --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TokenRhythm/opensquilla.git skills-src && mkdir -p .agents/skills && cp -r skills-src/src/opensquilla/skills/bundled/docx .agents/skills/docx && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "docx" agent skill from https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docx into .agents/skills/docx/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docx", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TokenRhythm/opensquilla --skill docx -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install TokenRhythm/opensquilla docx --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TokenRhythm/opensquilla.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/src/opensquilla/skills/bundled/docx .cursor/skills/docx && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "docx" agent skill from https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docx into .cursor/skills/docx/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docx", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/TokenRhythm/opensquilla.git --path src/opensquilla/skills/bundled/docx--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add TokenRhythm/opensquilla --skill docx -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install TokenRhythm/opensquilla docx --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TokenRhythm/opensquilla.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/src/opensquilla/skills/bundled/docx .gemini/skills/docx && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "docx" agent skill from https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docx into .gemini/skills/docx/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docx", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install TokenRhythm/opensquilla docxInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add TokenRhythm/opensquilla --skill docx -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/TokenRhythm/opensquilla.git skills-src && mkdir -p .github/skills && cp -r skills-src/src/opensquilla/skills/bundled/docx .github/skills/docx && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "docx" agent skill from https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docx into .github/skills/docx/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docx", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TokenRhythm/opensquilla --skill docx -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install TokenRhythm/opensquilla docx --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TokenRhythm/opensquilla.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/src/opensquilla/skills/bundled/docx .opencode/skills/docx && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "docx" agent skill from https://github.com/TokenRhythm/opensquilla/tree/main/src/opensquilla/skills/bundled/docx into .opencode/skills/docx/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "docx", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
docxInspects, edits in place or creates Word .docx files with bundled Python scripts, keeping existing styles intact when content changes.
The skill treats a .docx as an OOXML zip and has the agent choose one of three paths up front: inspect an existing file, edit it in place, or create a new document from a brief. Inspection runs scripts/inspect_docx.py to dump paragraphs, tables and styles as stable JSON, which can be compared before and after an edit to confirm that a round trip kept everything.
For edits, edit_docx.py applies a JSON list of operations such as replace_run and replace_text at the run level, so fonts and theme settings survive, and a placeholder spread over several runs is collapsed into the first. Changes that python-docx handles poorly, such as page layout, numbering and tracked changes, are made by unzipping the file, patching word/document.xml and related parts and repacking. The folder also has create_docx.py, export_markdown_docx.py, a python-docx reference and a third-party notices file. When you hand over a document and ask for changes, the agent edits it rather than starting fresh.
Read from SKILL.md and the folder at commit 4494195. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 4 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Word DOCX Toolkit loads about 1.7k tokens when it runs, and up to ~2.5k if it reads all its reference files. Until then it costs about 46 tokens; SKILL.md has 644 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from TokenRhythm/opensquilla at commit 4494195, republished under its Apache-2.0 licence (© TokenRhythm). 644 words, ~1,744 tokens.
.claude/skills/docx/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Work with Microsoft Word .docx files. The format is OOXML — a zip container
holding XML parts (word/document.xml, styles.xml, numbering.xml, headers,
footers, relationships). Treat structure as primary; rendered text is a view.
Pick one path up front. The right path depends only on what is on disk before you start.
| You have | Goal | Path |
|---|---|---|
Existing .docx | Read text/structure | A. Inspect |
Existing .docx | Modify content while keeping styles | B. Edit-in-place |
| Nothing or a brief | Build a new doc | C. Create from scratch |
If the user hands you a doc and asks for changes, default to path B and treat the input as the visual style baseline. Only choose path C when the user says "start fresh" or there is no input.
Dump structure as JSON for inspection without mutating anything.
python {baseDir}/scripts/inspect_docx.py /path/to/doc.docxOutput schema:
{
"paragraphs": [{"index": 0, "text": "...", "style": "Heading 1"}, ...],
"tables": [[["row0,col0", "row0,col1"], ...], ...],
"sections": 1,
"has_tracked_changes": false
}Use this whenever you need to see what is in the doc before deciding how to edit. The output is stable and machine-readable — diff two inspect outputs to verify a round-trip preserved everything you intended.
Two sub-strategies; pick by how invasive the edit is.
When the change is "swap this string" or "fill these placeholders": mutate runs in place. This preserves all theme/style/font settings.
python {baseDir}/scripts/edit_docx.py input.docx ops.json --out output.docxops.json is a list of operations:
[
{"op": "replace_run", "para": 0, "run": 0, "text": "Q3 Review"},
{"op": "replace_text", "find": "{{CLIENT}}", "with": "Acme Corp"}
]Edit at the run level, not the paragraph level — replacing whole paragraph text drops formatting. If a placeholder spans multiple runs (often happens when the original template applied bold/italic mid-word), the helper script collapses runs into the first one and clears the rest.
python-docx exposes paragraphs, tables, and runs but has limited support for
page layout, numbering definitions, and tracked changes. For those, unzip the
.docx, patch word/document.xml and adjacent parts, and repack:
mkdir _unpacked && (cd _unpacked && unzip -q ../input.docx)
# edit _unpacked/word/document.xml
(cd _unpacked && zip -q -r ../output.docx . -x "*.DS_Store")Rules when patching XML:
defusedxml.ElementTree or lxml, not stdlib xml.etree.ElementTree.
ET drops or rewrites namespace prefixes (w:, r:) in ways Word refuses to
load.xml:space="preserve" on <w:t> elements that hold leading or
trailing whitespace.[Content_Types].xml must list every part type. Removing a header without
also removing its override entry yields a "repair" prompt in Word.numbering.xml; bullet/number changes must
patch the numbering ID, not just the visible text.When done, validate by opening in LibreOffice headless before declaring success — silent failures are common.
For a simple Markdown source, run the export script with the Markdown on stdin:
python {baseDir}/scripts/export_markdown_docx.py --out out.docx < draft.mdFor structured content, use a JSON specification:
python {baseDir}/scripts/create_docx.py spec.json --out out.docxspec.json describes content declaratively:
{
"metadata": {"title": "Q3 Review", "author": "Wei E."},
"body": [
{"kind": "heading", "level": 1, "text": "Q3 Review"},
{"kind": "paragraph", "text": "Revenue +18% YoY."},
{"kind": "table", "rows": [["Metric", "Value"], ["Revenue", "$2.1M"]]}
]
}For programmatic use call python-docx directly:
from docx import Document
doc = Document()
doc.add_heading("Q3 Review", level=1)
doc.add_paragraph("Revenue +18% YoY.")
table = doc.add_table(rows=2, cols=2)
table.rows[0].cells[0].text = "Metric"
doc.save("out.docx")See references/python_docx.md for paragraphs, styles, numbering, tables, headers/footers, and section breaks.
Tracked changes are stored in word/document.xml as <w:ins> and <w:del>
elements. python-docx does not expose them as first-class objects — the
inspect helper sets has_tracked_changes: true when any w:ins or w:del
element is found, and you must resolve them by patching XML directly. Treat
docs with tracked changes as read-only until reviewers accept or reject the
revisions.
| Symptom | Cause | Fix |
|---|---|---|
| Word reports "needs repair" | Removed a header part but left override in [Content_Types].xml | Strip the override entry too |
| Text replacement drops bold/italic | Replaced paragraph.text instead of editing runs | Use op: replace_run |
| Numbering restarts unexpectedly | Edited a list item across two abstractNum definitions | Patch numbering.xml; rebuild numbering IDs |
| Smart-quote characters render as garbage | XML read with stdlib ET dropped namespaces | Switch to defusedxml or lxml |
| Long string overflows | Cell width is fixed in the template | Either shorten or compute auto-fit before save |
.docx (OOXML WordprocessingML). It does not handle
.doc (legacy binary) or Google Docs. Convert via LibreOffice or Word
export first..docm / VBA. The runtime sandbox does not
execute embedded code, and security scanners flag mixed content..docx, hand off to LibreOffice headless or a
separate PDF skill. This skill stops at .docx.© TokenRhythm, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (scripts, references) in src/opensquilla/skills/bundled/docx of TokenRhythm/opensquilla.
Open the folder on GitHubat commit 4494195
Word DOCX Toolkit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Word DOCX Toolkit this skillTokenRhythm/opensquilla | 7.1k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Word Document Reader and WriterHKUDS/DeepTutor | 41k | — | ~2.5k | Automated safety check: Pass | Apache-2.0 | |
| Markdown to Word Convertercat-xierluo/SuitAgent | 206 | — | ~559 | Automated safety check: Pass | MIT | |
| Word Document Creation And Editingpipeshub-ai/pipeshub-ai | 3.8k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| DOCXLeastBit/Claude_skills_zh-CN | 588 | — | ~1.3k | Automated safety check: Notes | Proprietary | |
| Office DOCXsingula-ai/alego | 109 | 1 repos | ~1.5k | Automated safety check: Pass | MIT |
HKUDS/DeepTutor
Reads, creates and edits Word .docx files with python-docx, and drops to raw OOXML for tracked changes, comments and byte-exact edits.
cat-xierluo/SuitAgent
Converts Markdown files into Word documents formatted to Chinese typesetting conventions, with presets for academic, legal, report and book layouts.
pipeshub-ai/pipeshub-ai
Routes a Word document request to the right approach: a TypeScript library for new files, XML editing for existing ones, and plain reading only.
LeastBit/Claude_skills_zh-CN
全面的文档创建、编辑和分析功能,支持修订追踪、批注、格式保留和文本提取。当 Claude 需要处理专业文档(.docx 文件)时使用:(1) 创建新文档,(2) 修改或编辑内容,(3) 处理修订追踪,(4) 添加批注,或其他任何文档任务
singula-ai/alego
Create, read, edit, and check Word documents (.docx), including reports, letters, and formatted tables.
daymade/claude-code-skills
读取 Word/WPS 审阅后的 docx,把批注(comments)与修订(track changes)提取成可逐条裁决的 markdown 对账表或 JSON。触发场景:对方批注完的合同/协议/书稿/报告回来了要读意见;「提取 docx 批注」「审阅意见对账」「读一下修订」「谁批了什么、批在哪」;WPS 云文档/Word 在线协作…
TokenRhythm/opensquilla
Runs multi-round research in three stages with a persisted state file, evidence tracking and a long-form report with per-claim citations.
TokenRhythm/opensquilla
Deterministic PDF operations through bundled scripts: extract text and tables, merge files or page ranges, split by range, fill form fields and build PDFs from data.
TokenRhythm/opensquilla
Guides semantic, accessible HTML work: pages, forms, media and HTML5 APIs, plus how to deliver a runnable webpage project with a preview.
TokenRhythm/opensquilla
Reads, edits in place, or creates PowerPoint .pptx decks, picking one of three paths based on what tools and files are available.
TokenRhythm/opensquilla
Inspects, edits in place or creates Microsoft Excel .xlsx workbooks with openpyxl, treating each cell as a typed number, string, datetime or formula value.
TokenRhythm/opensquilla
Hands a self-contained coding task to Codex, Claude Code, OpenCode or Pi as a non-interactive background process, using OpenSquilla's exec_command and process tools.
Works with
Categories
Inspects, edits in place or creates Word .docx files with bundled Python scripts, keeping existing styles intact when content changes. docx as an OOXML zip and has the agent choose one of three paths up front: inspect an existing file, edit it in place, or create a new document from a brief.py to dump paragraphs, tables and styles as stable JSON, which can be compared before and after an edit to confirm that a round trip kept everything.
Word DOCX Toolkit fits situations like: reading the text, tables and styles of an existing Word document; filling placeholders in a .docx while keeping its formatting; creating a new Word document from a brief; reviewing or changing tracked changes in a .docx.
Run `npx skills add TokenRhythm/opensquilla --skill docx -a claude-code`. Or copy the skill folder (src/opensquilla/skills/bundled/docx in TokenRhythm/opensquilla) into .claude/skills/docx in your project. Claude Code loads it when a task matches its description.
Run `npx skills add TokenRhythm/opensquilla --skill docx -a codex`. Or copy the skill folder (src/opensquilla/skills/bundled/docx in TokenRhythm/opensquilla) into .agents/skills/docx in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TokenRhythm/opensquilla --skill docx -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/docx, .gemini/skills/docx, .github/skills/docx and .opencode/skills/docx in your project.
Going by SKILL.md and its folder, Word DOCX Toolkit needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python with python-docx.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Word DOCX Toolkit is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.7k tokens (SKILL.md is roughly 7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 741 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Word DOCX Toolkit: Word Document Reader and Writer (HKUDS/DeepTutor, 41k stars), Markdown to Word Converter (cat-xierluo/SuitAgent, 206 stars), Word Document Creation And Editing (pipeshub-ai/pipeshub-ai, 3.8k stars) and DOCX (LeastBit/Claude_skills_zh-CN, 588 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
TokenRhythm (a GitHub organization) maintains it in TokenRhythm/opensquilla, which has 7,087 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 4, 2026.
Source: TokenRhythm/opensquilla on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.