DOCX
Use this skill whenever the user asks to create, revise, comment on, or inspect a .docx document.
Default Workflow
- For new documents with straightforward structure, write Markdown first and convert it with
pandoc.
- For programmatic creation, write a CommonJS
.cjs script and use require("docx"). The container exposes global Node packages through NODE_PATH; avoid bare ESM import "docx" examples.
- For editing an existing
.docx, never round-trip the original file through docx or pandoc. Unpack the OOXML, edit the XML you need, and repack it.
Existing-File Editing Workflow
node skills/office/unpack.cjs input.docx tmp/docx-edit
node skills/office/validate.cjs tmp/docx-edit
node skills/office/pack.cjs tmp/docx-edit output.docx
Edit only the relevant parts under tmp/docx-edit/word/:
document.xml for the main body
styles.xml for styles
numbering.xml for list definitions
header*.xml / footer*.xml for page furniture
_rels/*.rels when you add new parts
Rules
- Preserve existing formatting by editing OOXML directly for in-place revisions.
- Escape XML-sensitive characters (
&, <, >) and preserve xml:space="preserve" when surrounding spaces matter.
- Use DXA table widths and explicit cell widths instead of percentages when layout must survive Word and Google Docs.
- Keep relationship ids, comment ids, and content-type overrides consistent when adding parts.
- Never write plain text or placeholder text directly to a
.docx file path. If generation fails, stop and report the error.
Comments And Reviews
- Use
node skills/docx/scripts/comment.cjs --help to insert a comment around an exact text match inside an unpacked DOCX tree.
- Use
node skills/docx/scripts/accept_changes.cjs /tmp/docx-edit --json to accept straightforward tracked changes after unpacking.
- The helper currently targets
word/document.xml. For complex tracked changes, nested fields, or multi-run matches, edit the OOXML manually after unpacking.
Useful Commands
pandoc draft.docx -t gfm -o draft.md
pandoc outline.md -o report.docx
Templates
- Prefer user-provided
.docx templates from the current workspace for letterhead, memos, and branded report formats.
- Preserve headers, footers, styles, numbering, and section geometry unless the user explicitly asks for a layout change.
Minimal Creation Pattern
const fs = require("node:fs");
const { Document, Packer, Paragraph, TextRun } = require("docx");
const document = new Document({
sections: [
{
children: [
new Paragraph({
children: [new TextRun({ text: "Quarterly Update", bold: true })],
}),
new Paragraph("Prepared for leadership review."),
],
},
],
});
Packer.toBuffer(document).then((buffer) => {
fs.writeFileSync("quarterly-update.docx", buffer);
});
1---2name: docx3description: Create, inspect, and edit `.docx` files safely, including comments and OOXML-preserving changes.4---5# DOCX67Use this skill whenever the user asks to create, revise, comment on, or inspect a `.docx` document.89## Default Workflow1011- For new documents with straightforward structure, write Markdown first and convert it with `pandoc`.12- For programmatic creation, write a CommonJS `.cjs` script and use `require("docx")`. The container exposes global Node packages through `NODE_PATH`; avoid bare ESM `import "docx"` examples.13- For editing an existing `.docx`, never round-trip the original file through `docx` or `pandoc`. Unpack the OOXML, edit the XML you need, and repack it.1415## Existing-File Editing Workflow1617```bash18node skills/office/unpack.cjs input.docx tmp/docx-edit19node skills/office/validate.cjs tmp/docx-edit20node skills/office/pack.cjs tmp/docx-edit output.docx21```2223Edit only the relevant parts under `tmp/docx-edit/word/`:2425- `document.xml` for the main body26- `styles.xml` for styles27- `numbering.xml` for list definitions28- `header*.xml` / `footer*.xml` for page furniture29- `_rels/*.rels` when you add new parts3031## Rules3233- Preserve existing formatting by editing OOXML directly for in-place revisions.34- Escape XML-sensitive characters (`&`, `<`, `>`) and preserve `xml:space="preserve"` when surrounding spaces matter.35- Use DXA table widths and explicit cell widths instead of percentages when layout must survive Word and Google Docs.36- Keep relationship ids, comment ids, and content-type overrides consistent when adding parts.37- Never write plain text or placeholder text directly to a `.docx` file path. If generation fails, stop and report the error.3839## Comments And Reviews4041- Use `node skills/docx/scripts/comment.cjs --help` to insert a comment around an exact text match inside an unpacked DOCX tree.42- Use `node skills/docx/scripts/accept_changes.cjs /tmp/docx-edit --json` to accept straightforward tracked changes after unpacking.43- The helper currently targets `word/document.xml`. For complex tracked changes, nested fields, or multi-run matches, edit the OOXML manually after unpacking.4445## Useful Commands4647```bash48pandoc draft.docx -t gfm -o draft.md49pandoc outline.md -o report.docx50```5152## Templates5354- Prefer user-provided `.docx` templates from the current workspace for letterhead, memos, and branded report formats.55- Preserve headers, footers, styles, numbering, and section geometry unless the user explicitly asks for a layout change.5657## Minimal Creation Pattern5859```js60const fs = require("node:fs");61const { Document, Packer, Paragraph, TextRun } = require("docx");6263const document = new Document({64 sections: [65 {66 children: [67 new Paragraph({68 children: [new TextRun({ text: "Quarterly Update", bold: true })],69 }),70 new Paragraph("Prepared for leadership review."),71 ],72 },73 ],74});7576Packer.toBuffer(document).then((buffer) => {77 fs.writeFileSync("quarterly-update.docx", buffer);78});79```