Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When GLM needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks
bash "$SKILL_DIR/setup.sh" # Interactive environment check + install
A .docx file is a ZIP archive containing XML files. This skill provides tools for creating, editing, reading, and reviewing Word documents.
Step 1: Determine task type → load the corresponding route file
Step 2: Determine business scene → load the corresponding scene file (if applicable)
Step 3: Load references/design-system.md for cover recipes, palettes, and chart colors
Step 4: Load references/common-rules.md for shared layout, font, and quality rules
: Execute per route instructions
: Run the post-generation checklist
⚠️ MANDATORY — Cover Recipe Enforcement (Step 3):
When creating a document that needs a cover page, you MUST use one of the 7 validated cover recipes (R1–R7) from design-system.md. Free-form cover code is FORBIDDEN. The recipe provides the wrapper table, background, layout structure, border settings, and spacing — do not reinvent any of these.
Workflow: (1) Call selectCoverRecipe(docType, industry) to get recipe + palette → (2) Use the corresponding buildCoverRX() function code from design-system.md → (3) Pass your config (title, subtitle, metaLines, etc.) into the recipe builder. If you skip this and write cover code from scratch, the cover WILL have compatibility issues (blank pages in MS Office, missing borders, overflow, etc.).
All CLI tools live in scripts/ relative to this skill's directory. Before calling any script, resolve the absolute path once:
DOCX_SCRIPTS="<skill_directory>/scripts" # ← parent directory of this SKILL.md
# Then all commands use $DOCX_SCRIPTS:
python3 "$DOCX_SCRIPTS/postcheck.py" output.docx
python3 "$DOCX_SCRIPTS/add_toc_placeholders.py" output.docx --auto
For Python imports (when generation code needs to import skill modules):
import sys, os
DOCX_SCRIPTS = os.path.join("<skill_directory>", "scripts")
if DOCX_SCRIPTS not in sys.path:
sys.path.insert(0, DOCX_SCRIPTS)
⚠️ NEVER use bare python3 scripts/... — it only works if cwd happens to be the skill directory. Always use the absolute $DOCX_SCRIPTS path.
| User Intent | Route | Files to Load |
|---|---|---|
| Create/write/generate (no attachment) | Create | routes/create.md + references/docx-js-core.md |
| Edit/modify/revise (has attachment) | Edit | routes/edit.md + references/ooxml.md |
| Format/layout/font/margin | Format | routes/format.md |
| Comment/annotate/review | Comment | routes/comment.md |
| Read/analyze/extract | Read | routes/read.md |
| User Keywords | Scene | File |
|---|---|---|
| thesis, academic, research, paper, dissertation, abstract, journal | Academic | scenes/academic.md |
| report, analysis, experiment, testing, survey, review, summary, proposal, feasibility, competitor, industry, operations | Report | scenes/report.md |
| contract, agreement, terms, transfer, NDA, confidential, framework, cooperation, service terms, user agreement, procurement | Contract | scenes/contract.md |
| resume, CV, job application | Resume | scenes/resume.md |
| exam, test, quiz, paper (exam context), lesson plan | Exam | scenes/exam.md |
| official document, notice, letter, reply, minutes, red header, government, issuance | Official | scenes/official-doc.md |
| broadcast script, product copy, livestream, speech, presentation script, video script | Copywriting | scenes/copywriting.md |
| plan, proposal (if not report context) | Report | scenes/report.md |
| policy, regulation, standard, management rules | Official | scenes/official-doc.md |
If no scene matches, use default design rules from references/design-system.md and references/common-rules.md.
→ See references/common-rules.md for full font profiles, spacing, indent, and layout rules.
Key rules (quick reference):
line: 312) — MANDATORY. Exceptions: resume 1.15x, official doc 28pt fixed, copywriting 400, contract 1.5xfirstLine: 480 SimSun / 420 YaHei)margins set, ShadingType.CLEAR, tableHeader: true, cantSplit: true, title keepNext: truetype parameter required, preserve aspect ratio via image-size, PageBreak inside Paragraphrule: "exact" with 1200 twips safety margin| Unit | Value |
|---|---|
| 1 cm | 567 twips |
| 1 inch | 1440 twips |
| 1 pt | 20 half-points |
| A4 | 11906 × 16838 twips |
For Chinese font size table and common margins, see references/common-rules.md.
line: 312) or scene-specific overridefirstLine: 480 or 420)image-size — NEVER hardcode both width and heightreference"" '') MUST use Unicode escapes (\u201c \u201d \u2018 \u2019); straight quotes (" ') use \" \' or alternate delimiters. This is the #1 most common code generation bug. Chinese text frequently contains "" for emphasis or proper nouns (e.g., "双11", "前低后高", "618") — every occurrence MUST be escaped. Failure to escape produces JS syntax errors that silently break document generation.type parameterheading: HeadingLevel.HEADING_X (never simulate with bold + large font)rule: "exact" (never "atLeast" for tall tables)→ See references/toc.md for the complete TOC reference and checklist.
TableOfContents element must be presentTableOfContents element; without it, TOC and body content will render on the same page. This is the #1 TOC formatting failure — never omit itadd_toc_placeholders.py --auto runs after generation; exit code = 0page: { pageNumbers: { start: 1, formatType: NumberFormat.DECIMAL } } so page numbers start from the first body page, not from the TOC pagespageNumbers MUST be inside page: {}, NOT at properties top level (see toc.md § Page Number API)PAGE \* ROMAN \* MERGEFORMAT; Arabic section PAGE \* arabic \* MERGEFORMAT (WPS ignores pgNumType fmt). ⚠️ NEVER use \* decimal in instrText — decimal is a docx-js API enum value (NumberFormat.DECIMAL), NOT a valid Word field format switch; using it causes page numbers to render as "1decimal", "2decimal". The correct Word field switch for Arabic numerals is \* arabic.<w:pgNumType/> from cover section (docx-js emits empty element that confuses WPS)tableHeader: truecantSplit: truekeepNext: truedesign-system.md — free-form cover code is forbiddenselectCoverRecipe() in design-system.md)allNoBorders (all recipes provide this)calcTitleLayout() — never hardcoded font size above 40ptcalcCoverSpacing() — never hardcoded large spacing valuesrule: "exact")color set (Rule 9 — never rely on default black)───, ━━━) — use paragraph borders onlypython3 "$DOCX_SCRIPTS/postcheck.py" output.docx
Automatically checks 14 business rules: blank pages, cover overflow (font size/spacing/trailing content), line spacing consistency, table margins, table cross-page control (cantSplit/tblHeader), image overflow, image aspect ratio distortion, font fallback, CJK indent, heading hierarchy, ShadingType misuse, TOC quality, document cleanliness (placeholder text/Markdown/HTML residuals), report content quality (abstract presence/heading specificity/vague conclusion detection).
⚠️ After generating any document, MUST run postcheck.py and fix all ❌ errors.
Formula input uses LaTeX syntax, internally converted to docx-js Math objects.
See references/math-formulas.md.
Default: matplotlib template library generates PNG for embedding.
6 ready-to-use templates: bar, line, pie, box, radar, heatmap. Colors auto-derived from document palette.accent for style consistency. Default palette: Morandi low-saturation (see design-system.md).
See references/chart-templates.md.
bun add docx or npm install docx (creating)pdftoppm)