Skip to content
Back to skills

Docx Authoring

ASecurity

When generating or editing a Word .docx — create, fill a template, or edit body XML via a consumer library; round-trip validated. Triggers on 'generate a docx', 'fill this Word template'.

  • 10 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentspythonrustgo

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 2, 2026

npx -y skills add event4u-app/agent-config --skill docx-authoring --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Docx Authoring?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Docx Authoring
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/event4u-app-docx-authoring/badge)](https://www.skillsdirectory.com/skills/event4u-app-docx-authoring)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
model_tier: medium
name: docx-authoring
description: "When generating or editing a Word .docx — create, fill a template, or edit body XML via a consumer library; round-trip validated. Triggers on 'generate a docx', 'fill this Word template'."
status: active
tier: senior
domain: process
compatibility: "Requires a consumer-installed OOXML library (python-docx for create/fill; a zip+xml toolchain for the unpack→edit→pack path). No LibreOffice/soffice dependency — that surface is gated (see pptx, road-to-ecosystem-harvest-document-skills Phase 2). Ships zero runtime in this package."
harness_compat: consumer-installed-deps
workspaces:
  - agent-config-maintainer
packs:
  - meta
---

# docx-authoring

Wing-1 engineering skill for **writing** Word documents — the generation half of
the read→write cycle whose read side is [`markitdown`](../markitdown/SKILL.md).
Ships zero runtime in this package: the agent drives a library the consumer
already has (python-docx, or a zip+XML toolchain), exactly as `markitdown` wraps
a consumer-installed converter. Re-implements the **pattern**, never any
proprietary source.

## When to use

- "Generate a .docx report / letter / contract from this content."
- "Fill this Word template with these values."
- "Edit the body of this .docx" (a heading, a table cell, a style).

Do NOT use for: reading a docx → Markdown (that is `markitdown`); slide decks
(`html-deck`, or the gated pptx surface); PDFs (`pdf-tools`).

## Procedure

### 1. Pick the path by task

| Task | Path |
|---|---|
| Create from scratch / structured content | Library create (python-docx `Document()`) — build paragraphs, tables, styles programmatically |
| Fill a supplied template | Open the template, replace placeholder runs in place, save a copy — never mutate the original |
| Surgical edit of existing body | **unpack → edit XML → pack-with-validate**: a `.docx` is a ZIP of XML; unzip, edit `word/document.xml`, re-zip preserving the archive structure |

### 2. Honor the hard-won gotchas (encode as rules, not hope)

- **Page size defaults to US Letter** in most libraries — set A4 explicitly when the locale needs it; never assume.
- **Table columns need dual widths** — set BOTH the table grid width and each cell width, or renderers ignore one and collapse the layout.
- **No Unicode bullet glyphs** as literal characters (`•`, `‣`) — use the list-style paragraph, or the document loses its list semantics and screen readers skip it.
- **Runs, not paragraphs, carry formatting** — a placeholder that spans two runs will not match a naive whole-paragraph replace; split/merge runs first.

### 3. Validate — round-trip, do not trust the write

1. Re-open the generated file with the SAME library; assert it parses (a corrupt ZIP or malformed XML throws here).
2. Read back one written value (a heading text, a table cell) and assert it equals what was written.
3. For the unpack→pack path: confirm the archive still contains `[Content_Types].xml` and `word/document.xml` (dropping either produces a file Word refuses to open).

## Output format

1. The generated/edited `.docx` path.
2. The validation result: parses ✅, read-back value matched ✅, required parts present ✅.
3. Any gotcha that applied (e.g. "set A4 explicitly; template used Letter").

## Gotcha

The most common silent failure is a file that **saves without error but Word
refuses to open**: an unpack→pack cycle that re-zipped with a directory entry,
wrong compression, or a dropped `[Content_Types].xml`. The round-trip re-open in
step 3 is the only check that catches it — a green "file written" line does not.

- **Silent corruption:** an unpack→pack cycle re-zipped with a directory entry or a dropped `[Content_Types].xml` → saves fine, Word shows "file is corrupt". Only the round-trip re-open catches it.

## Do NOT

- Do NOT bundle or ship a Python toolkit in this package — drive the consumer's library (zero-runtime posture, like `markitdown`).
- Do NOT mutate a supplied template in place — always write a copy.
- Do NOT claim success on "file written"; claim it only after the round-trip re-open.
- Do NOT reach for LibreOffice/soffice — that dependency is gated (pptx surface).

## Related Skills

**WHEN to use this**

- The target artifact is a Word `.docx` — a report, letter, contract, or a filled template.
- A `.docx` body needs a surgical edit (heading, table cell, style) via the unpack→edit→pack path.

**WHEN NOT to use this**

- Reading a docx into the conversation → [`markitdown`](../markitdown/SKILL.md).
- PDFs → [`pdf-tools`](../pdf-tools/SKILL.md); spreadsheets → [`spreadsheet-authoring`](../spreadsheet-authoring/SKILL.md); slide decks → [`html-deck`](../html-deck/SKILL.md).
- The task needs LibreOffice-backed rendering (pptx) — that surface is gated, do not reach for it here.

## When the agent should load this

- "Generate a Word report from this content."
- "Fill this .docx template with these values."
- "Edit the heading / a table cell in this .docx."
- "Produce a contract as a .docx."

## Output

1. **Generated document** — the `.docx` path. Cite as `docx-output`.
2. **Validation receipt** — parses on re-open ✅, read-back value matched ✅, required OOXML parts present ✅. Cite as `docx-validation`.
3. **Gotcha log** — present only when a gotcha applied (page-size override, run-split for a template placeholder). Cite as `docx-gotchas`.

Files in this skill

  • SKILL.md5.3 KB
  • evals/triggers.json2.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.