Automated summary
Creates, reads, and edits Word documents (.docx and .dotx templates) either by generating docx-js code or by editing the XML inside the archive directly.
Strengths
- Spans the full lifecycle: authoring with docx-js, reading with pandoc, editing through unzip-and-modify of word/document.xml
- Documents the real docx-js footguns (landscape orientation, DXA table widths, bullet numbering, page breaks, positional tab dot leaders)
- Enforces a visual check by converting the .docx to PDF and rendering page images before delivery
- Handles tracked changes, comments, and XSD validation with an auto-repair option
Limitations
- Editing requires leaving the XML unformatted and coalescing fragmented runs, which stays brittle on complex documents
- docx-js cannot open an existing file, so any modification has to go through raw XML work
- Relies on external tooling (Node, Python, LibreOffice, pandoc, pdftoppm) being installed locally
- Does not cover PDFs, spreadsheets, or Google Docs
Use it whenever a Word deliverable must be produced or revised: a report, memo, letter, or template with a table of contents, headings, or letterhead.
Skip it for PDFs, spreadsheets, Google Docs, or any coding task unrelated to a Word document.
Security analysis
CautionThe skill performs legitimate local document manipulation and explicitly takes precautions against malicious docx symlinks. It uses shell and Python for file conversion, validation, and XML editing, but no destructive, exfiltration, or obfuscated actions are indicated. The main concern is undeclared tool usage and reliance on bundled scripts.
- •Skill declares no allowed-tools but instructs execution of shell commands (soffice, pdftoppm, unzip, zip, find) and Python scripts, which requires tool access beyond declared tools.
- •Runs bundled Python scripts (merge_runs.py, validate.py, accept_changes.py) without showing their code, so trust is placed in the skill package.
- •Handles untrusted .docx files by stripping symlinks before processing, which is good practice but still involves parsing untrusted ZIP/XML content.
Examples
Create a 6-page quarterly report as output.docx with a cover page, an auto-generated table of contents, numbered headings, and a footer with page numbers.In contract.docx, replace every occurrence of 'Acme Corp' with 'Acme Industries' and make sure all edits are recorded as tracked changes under the author name J. Dupont.Read spec.docx and give me its full content as markdown, keeping the heading hierarchy.name: docx description: "Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation." license: Proprietary. LICENSE.txt has complete terms
DOCX creation, editing, and analysis
A .docx is a ZIP archive of XML files. Choose your approach by task:
| Task | Approach |
|---|---|
| Create a new document | Write a docx (npm) script — see gotchas below |
| Edit an existing document | unzip → edit word/document.xml → zip (docx-js cannot open existing files) |
| Read content | pandoc -t markdown file.docx |
Script paths below are relative to this skill's directory.
Creating with docx-js — gotchas
docx is preinstalled — do not run npm install first; write the script and require('docx') directly. Only if that require fails: npm install docx. The model knows the API; these are the footguns:
- Page size defaults to A4. For US Letter set
page: { size: { width: 12240, height: 15840 } }(DXA; 1440 = 1″). - Landscape: pass portrait dimensions and
orientation: PageOrientation.LANDSCAPE— docx-js swaps width/height internally. - Tables need dual widths: set
columnWidthson the table ANDwidthon every cell, both inWidthType.DXA(PERCENTAGE breaks in Google Docs). Column widths must sum to the table width. - Table shading: use
ShadingType.CLEAR, neverSOLID(renders black). - Lists: never insert
•literally; use anumberingconfig withLevelFormat.BULLET. ImageRunrequirestype:("png","jpg", …).PageBreakmust be inside aParagraph.- Never use
\n— use separateParagraphelements. - TOC: headings must use built-in
HeadingLevel.*; custom heading styles needoutlineLevelset or they won't appear. - Don't use a table as a horizontal rule — use a paragraph bottom border instead.
- Dot-leader / right-aligned-on-same-line: use
PositionalTab(alignment: PositionalTabAlignment.RIGHT,leader: PositionalTabLeader.DOT) inside aTextRun, not literal.or space padding.
Verify the output
After writing a .docx, render it and look at it:
python scripts/office/soffice.py --headless --convert-to pdf output.docx
pdftoppm -jpeg -r 100 output.pdf page
ls page-*.jpg # then Read the images
pdftoppm zero-pads page numbers to the width of the page count (page-01.jpg…page-12.jpg).
Editing existing documents
Legacy .doc files must be converted first: python scripts/office/soffice.py --headless --convert-to docx file.doc.
unzip -q doc.docx -d unpacked/
find unpacked -type l -delete # strip symlink entries — docx from external parties is untrusted
python scripts/merge_runs.py unpacked/ # coalesce fragmented runs so text is findable
# edit unpacked/word/document.xml in place — do NOT reformat or pretty-print
(cd unpacked && rm -f ../out.docx && zip -Xr ../out.docx .)
python scripts/office/validate.py out.docx --original doc.docx # XSD checks; --auto-repair fixes common issues
# redlining? add --author "<the name you redlined under>" to check every edit is tracked
Word splits text across many <w:r> runs (revision ids, spell-check markers), so a phrase you can see in the document often doesn't exist as a contiguous string in the XML. merge_runs.py merges adjacent identically-formatted runs in word/document.xml without changing content or rendering; it also accepts a .docx directly (python scripts/merge_runs.py doc.docx -o merged.docx).
Tracked changes: when redlining, validate with --author "<the name you redlined under>" (needs --original) — it reports any text you changed without a <w:ins>/<w:del> around it, which is easy to do by accident and invisible in the accepted view. Wrap runs in <w:ins>/<w:del> with w:id, w:author, w:date attributes. Inside <w:del>, the text element is <w:delText>, not <w:t>. A deleted paragraph mark (<w:pPr><w:rPr><w:del w:id=".." w:author=".." w:date=".."/></w:rPr></w:pPr>) means "merge this paragraph into the next" — so deleting a paragraph outright is that plus a <w:del> around every run. The <w:del/> must come before the rPr's other children; their order is schema-enforced.
To produce a clean copy with all tracked changes accepted: python scripts/accept_changes.py in.docx out.docx.
Accepting a deleted paragraph mark should join that paragraph to the one below it, so a paragraph whose runs are all deleted vanishes. Word does this; accept_changes.py and pandoc --track-changes=accept don't always. Both fail the same way — they strip the deleted text but leave the emptied paragraph behind, which reads as a stray empty bullet when it was auto-numbered:
pandoc --track-changes=acceptnever joins the paragraphs.accept_changes.py(LibreOffice) joins them correctly, except when the deleted paragraph is followed by an empty spacer paragraph.
An empty bullet in either view is an artifact of that view, not a defect in the document. Check paragraph deletions in the XML.
Comments
Comments require six cross-linked files. Use the helper — directory mode when you'll also be editing document.xml (saves an unzip/rezip cycle), .docx-direct mode otherwise:
# Against an already-unpacked directory (preferred when also placing markers)
python scripts/comment.py unpacked/ "Fees & expenses cap is too low"
python scripts/comment.py unpacked/ "Agreed" --parent 0
# Against a .docx directly
python scripts/comment.py contract.docx "This cap is too low" -o annotated.docx
The script writes comments.xml, commentsExtended.xml, commentsIds.xml, commentsExtensible.xml, the relationships, and the content-type overrides. Comment IDs are auto-assigned. It then prints the <w:commentRangeStart>/<w:commentRangeEnd>/<w:commentReference> snippet to add to word/document.xml so the comment anchors to specific text — until you place those markers, the comment exists but is not visible.
Dependencies
docx (npm, preinstalled — install only if require('docx') fails) · pandoc · LibreOffice (soffice) · pdftoppm (Poppler)
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/docx-document-creation-and-editing-mrwakgfi' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/docx-document-creation-and-editing-mrwakgfi/download' --output '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md.part' && mv '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md.part' '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
Original excerpt: Dependencies
docx (npm, preinstalled — install only if require('docx') fails) · pandoc · LibreOffice (soffice) · pdftoppm (Poppler)
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md' && test -s '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/docx' && cp -R '.skill-downloads/docx-document-creation-and-editing-mrwakgfi' '.claude/skills/docx'Cursor
test -f '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md' && test -s '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/docx' && cp -R '.skill-downloads/docx-document-creation-and-editing-mrwakgfi' '.cursor/skills/docx'Codex
test -f '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md' && test -s '.skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/docx' && cp -R '.skill-downloads/docx-document-creation-and-editing-mrwakgfi' '.agents/skills/docx'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/docx-document-creation-and-editing-mrwakgfi'openskills read 'docx-document-creation-and-editing-mrwakgfi'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/docx-document-creation-and-editing-mrwakgfi/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
Supabase Docs Authoring
Documentation
Write, edit, and review Supabase documentation content including guides, tutorials, reference docs, and partials. Follow style guides and MDX/TOML validation rules.
Create Architecture Decision Record
Documentation
Create a new Architecture Decision Record with sequential numbering, register it in the AgentDB graph, and link related ADRs.
Plan update with deep research
Documentation
Updates a plan document by launching parallel subagents to analyze a topic across all compiler passes, then consolidates findings into the plan doc.