| name | docx |
| description | Create, edit, redline, and comment on `.docx` files inside the container, with a strict render-and-verify workflow. Use `render_docx.py` to generate page PNGs (and optional PDF) for visual QA, then iterate until layout is flawless before delivering the final DOCX. |
DOCX Skill (Read โข Create โข Edit โข Redline โข Comment)
Use this skill when you need to create or modify .docx files in this container environment and verify them visually.
Non-negotiable: render โ inspect PNGs โ iterate
You do not โknowโ a DOCX is satisfactory until youโve rendered it and visually inspected page images.
DOCX text extraction (or reading XML) will miss layout defects: clipping, overlap, missing glyphs, broken tables, spacing drift, and header/footer issues.
Shipping gate: before delivering any DOCX, you must:
- Run
render_docx.py to produce page-<N>.png images (optionally also a PDF with --emit_pdf)
- Open the PNGs (100% zoom) and confirm every page is clean
- If anything looks off, fix the DOCX and re-render (repeat until flawless)
If rendering fails, fix rendering first (LibreOffice profile/HOME) rather than guessing.
Deliverable discipline: Rendered artifacts (PNGs and optional PDFs) are for internal QA only. Unless the user explicitly asks for intermediates, return only the requested final deliverable (e.g., when the task asks for a DOCX, deliver the DOCX โ not page images or PDFs).
Quick start (common one-liners)
python render_docx.py input.docx --output_dir out
python scripts/comments_strip.py input.docx --out no_comments.docx
python scripts/accept_tracked_changes.py input.docx --mode accept --out accepted.docx
python scripts/a11y_audit.py input.docx
python scripts/a11y_audit.py input.docx --out_json a11y_report.json
python scripts/a11y_audit.py input.docx --fix_image_alt from_filename --out a11y_fixed.docx
python scripts/redact_docx.py input.docx redacted.docx --emails --phones
Package layout
This skill is organized for progressive discovery: start here, then jump into task- or OOXML-specific docs.
DOCS SKILL PACKAGE
Root:
- SKILL.md: short overview + routing
- manifest.txt: machine-readable list of files to download (one relative path per line)
- render_docx.py: canonical DOCXโPNG renderer (container-safe LO profile + writable HOME + verbose logs)
Tasks:
- tasks/read_review.md
- tasks/create_edit.md
- tasks/verify_render.md
- tasks/accessibility_a11y.md
- tasks/comments_manage.md
- tasks/protection_restrict_editing.md
- tasks/privacy_scrub_metadata.md
- tasks/multi_doc_merge.md
- tasks/style_lint_normalize.md
- tasks/forms_content_controls.md
- tasks/captions_crossrefs.md
- tasks/redaction_anonymization.md
- tasks/clean_tracked_changes.md
- tasks/compare_diff.md
- tasks/templates_style_packs.md
- tasks/watermarks_background.md
- tasks/footnotes_endnotes.md
- tasks/fixtures_edge_cases.md
- tasks/navigation_internal_links.md
OOXML:
- ooxml/tracked_changes.md
- ooxml/comments.md
- ooxml/hyperlinks_and_fields.md
- ooxml/rels_and_content_types.md
Troubleshooting:
- troubleshooting/libreoffice_headless.md
- troubleshooting/run_splitting.md
Scripts:
Core building blocks (importable helpers):
scripts/docx_ooxml_patch.py โ low-level OOXML patch helper (tracked changes, comments, hyperlinks, relationships). Other scripts reuse this.
scripts/fields_materialize.py โ materialize SEQ/REF field display text for deterministic headless rendering/QA.
High-leverage utilities (also importable, but commonly invoked as CLIs):
render_docx.py โ canonical DOCX โ PNG renderer (optional PDF via --emit_pdf; do not deliver intermediates unless asked).
scripts/render_and_diff.py โ render + per-page image diff between two DOCXs.
scripts/content_controls.py โ list / wrap / fill Word content controls (SDTs) for forms/templates.
scripts/captions_and_crossrefs.py โ insert Caption paragraphs for tables/figures + optional bookmarks around caption numbers.
scripts/insert_ref_fields.py โ replace [[REF:bookmark]] markers with real REF fields (cross-references).
scripts/internal_nav.py โ add internal navigation links (static TOC + Top/Bottom + figN/tblN jump links).
scripts/style_lint.py โ report common formatting/style inconsistencies.
scripts/style_normalize.py โ conservative cleanup (clear run-level overrides; optional paragraph overrides).
scripts/redact_docx.py โ layout-preserving redaction/anonymization.
scripts/privacy_scrub.py โ remove personal metadata + rsid* attributes.
scripts/set_protection.py โ restrict editing (read-only / comments / forms).
scripts/comments_extract.py โ extract comments to JSON (text, author/date, resolved flag, anchored snippets).
scripts/comments_strip.py โ remove all comments (final-delivery mode).
Audits / conversions / niche helpers:
scripts/fields_report.py, scripts/heading_audit.py, scripts/section_audit.py, scripts/images_audit.py, scripts/footnotes_report.py, scripts/watermark_audit_remove.py
scripts/xlsx_to_docx_table.py, scripts/docx_table_to_csv.py
scripts/insert_toc.py, scripts/insert_note.py, scripts/apply_template_styles.py, scripts/accept_tracked_changes.py, scripts/make_fixtures.py
v7 additions (stress-test helpers):
scripts/watermark_add.py โ add a detectable VML watermark object into an existing header.
scripts/comments_add.py โ add multiple comments (by paragraph substring match) and wire up comments.xml plumbing if needed.
scripts/comments_apply_patch.py โ append/replace comment text and mark/clear resolved state (w:done=1).
scripts/add_tracked_replacements.py โ generate tracked-change replacements (<w:del> + <w:ins>) in-place.
scripts/a11y_audit.py โ audit a11y issues; can also apply simple fixes via --fix_table_headers / --fix_image_alt.
scripts/flatten_ref_fields.py โ replace REF/PAGEREF field blocks with their cached visible text for deterministic rendering.
scripts/xlsx_to_docx_table.py also marks header rows as repeating headers (w:tblHeader) to improve a11y and multi-page tables.
Examples:
- examples/end_to_end_smoke_test.md
Note: manifest.txt is machine-readable and is used by download tooling. It must contain only relative file paths (one per line).
Coverage map (scripts โ task guides)
This is a quick index so you can jump from a helper script to the right task guide.
Layout & style
style_lint.py, style_normalize.py โ tasks/style_lint_normalize.md
apply_template_styles.py โ tasks/templates_style_packs.md
section_audit.py โ tasks/sections_layout.md
heading_audit.py โ tasks/headings_numbering.md
Figures / images
images_audit.py, a11y_audit.py โ tasks/images_figures.md, tasks/accessibility_a11y.md
captions_and_crossrefs.py โ tasks/captions_crossrefs.md
Tables / spreadsheets
xlsx_to_docx_table.py โ tasks/tables_spreadsheets.md
docx_table_to_csv.py โ tasks/tables_spreadsheets.md
Fields & references
fields_report.py, fields_materialize.py โ tasks/fields_update.md
insert_ref_fields.py, flatten_ref_fields.py โ tasks/fields_update.md, tasks/captions_crossrefs.md
insert_toc.py โ tasks/toc_workflow.md
Review lifecycle (comments / tracked changes)
add_tracked_replacements.py, accept_tracked_changes.py โ tasks/clean_tracked_changes.md
comments_add.py, comments_extract.py, comments_apply_patch.py, comments_strip.py โ tasks/comments_manage.md
Privacy / publishing
privacy_scrub.py โ tasks/privacy_scrub_metadata.md
redact_docx.py โ tasks/redaction_anonymization.md
watermark_add.py, watermark_audit_remove.py โ tasks/watermarks_background.md
Navigation & multi-doc assembly
internal_nav.py โ tasks/navigation_internal_links.md
merge_docx_append.py โ tasks/multi_doc_merge.md
Forms & protection
content_controls.py โ tasks/forms_content_controls.md
set_protection.py โ tasks/protection_restrict_editing.md
QA / regression
render_and_diff.py, render_docx.py โ tasks/compare_diff.md, tasks/verify_render.md
make_fixtures.py โ tasks/fixtures_edge_cases.md
docx_ooxml_patch.py โ used across guides for targeted patches
Skill folder contents
tasks/ โ task playbooks (what to do step-by-step)
ooxml/ โ advanced OOXML patches (tracked changes, comments, hyperlinks, fields)
scripts/ โ reusable helper scripts
examples/ โ small runnable examples
Default workflow (80/20)
Rule of thumb: every meaningful edit batch must end with a render + PNG review. No exceptions.
"80/20" here means: follow the simplest workflow that covers most DOCX tasks reliably.
Golden path (donโt mix-and-match unless debugging):
- Author/edit with
python-docx (paragraphs, runs, styles, tables, headers/footers).
- Render โ inspect PNGs immediately (DOCX โ PNGs). Treat this as your feedback loop.
- Fix and repeat until the PNGs are visually perfect.
- Only if needed: use OOXML patching for tracked changes, comments, hyperlinks, or fields.
- Re-render and inspect again after any OOXML patch or layout-sensitive change.
- Deliver only after the latest PNG review passes (all pages, 100% zoom).
Visual review (recommended)
Use the packaged renderer (dedicated LibreOffice profile + writable HOME):
python render_docx.py /mnt/data/input.docx --output_dir /mnt/data/out
python render_docx.py /mnt/data/input.docx --output_dir /mnt/data/out --verbose
python render_docx.py /mnt/data/input.docx --output_dir /mnt/data/out --emit_pdf
Then inspect the generated page-<N>.png files.
Success criteria (render + visual QA):
- PNGs exist for each page
- Page count matches expectations
- Inspect every page at 100% zoom (no โspot checkโ for final delivery)
- No clipping/overlap, no broken tables, no missing glyphs, no header/footer misplacement
Note: LibreOffice sometimes prints scary-looking stderr (e.g., error : Unknown IO error) even when output is correct. Treat the render as successful if the PNGs exist and look right (and if you used --emit_pdf, the PDF exists and is non-empty).
What rendering does and doesnโt validate
- Great for: layout correctness, fonts, spacing, tables, headers/footers, and whether tracked changes visually appear.
- Not reliable for: comments (often not rendered in headless PDF export). For comments, also do structural checks (comments.xml + anchors + rels + content-types).
Quality reminders
- Donโt ship visible defects (clipped/overlapping text, broken tables, unreadable glyphs).
- Donโt leak tool citation tokens into the DOCX (convert them to normal human citations).
- Prefer ASCII punctuation (avoid exotic Unicode hyphens/dashes that render inconsistently).
Where to go next
- If the task is reading/reviewing:
tasks/read_review.md
- If the task is creating/editing:
tasks/create_edit.md
- If you need an accessibility audit (alt text, headings, tables, links):
tasks/accessibility_a11y.md
- If you need to extract or remove comments:
tasks/comments_manage.md
- If you need to restrict editing / make read-only:
tasks/protection_restrict_editing.md
- If you need to scrub personal metadata (author/rsid/custom props):
tasks/privacy_scrub_metadata.md
- If you need to merge/append DOCXs:
tasks/multi_doc_merge.md
- If you need format consistency / style cleanup:
tasks/style_lint_normalize.md
- If you need forms / content controls (SDTs):
tasks/forms_content_controls.md
- If you need captions + cross-references:
tasks/captions_crossrefs.md
- If you need redaction/anonymization:
tasks/redaction_anonymization.md
- If the task is verification/raster review:
tasks/verify_render.md
- If your render looks wrong but content is right (stale fields):
tasks/fields_update.md
- If you need a Table of Contents:
tasks/toc_workflow.md
- If you need internal navigation links (static TOC + Back-to-TOC + Top/Bottom):
tasks/navigation_internal_links.md
- If headings/numbering/TOC levels are messy:
tasks/headings_numbering.md
- If you have mixed portrait/landscape or margin weirdness:
tasks/sections_layout.md
- If images shift or overlap across renderers:
tasks/images_figures.md
- If you need spreadsheet โ table round-tripping:
tasks/tables_spreadsheets.md
- If you need tracked changes (redlines):
ooxml/tracked_changes.md
- If you need comments:
ooxml/comments.md
- If you need hyperlinks/fields/page numbers/headers:
ooxml/hyperlinks_and_fields.md
- If LibreOffice headless is failing:
troubleshooting/libreoffice_headless.md
- If you need a clean copy with tracked changes accepted:
tasks/clean_tracked_changes.md
- If you need to diff two DOCXs (render + per-page diff):
tasks/compare_diff.md
- If you need templates / style packs (DOTX):
tasks/templates_style_packs.md
- If you need watermark audit/removal:
tasks/watermarks_background.md
- If you need true footnotes/endnotes:
tasks/footnotes_endnotes.md
- If you want reproducible fixtures for edge cases:
tasks/fixtures_edge_cases.md