[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CB29RNHBFZP46F87WX686Q":3,"skill-same:01M6CB29RNHBFZP46F87WX686Q":136},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":31,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":66,"commitSha":67,"skillDirectory":68,"forksCount":69,"repositoryHtmlUrl":70,"repositoryHomepageUrl":6,"ownerHtmlUrl":71,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":72,"install":73,"resources":86},"01M6CB29RNHBFZP46F87WX686Q","docx",null,"Create, read, edit, template, and review Word .docx files.","adnichols\u002Fai-configs","adnichols","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F493746?v=4","01M6C33VRY9WF6XWYPT1AFA7JJ","Aaron Nichols","01M6C33VWTNKGRM92E9G643V4W",5,"MIT","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[5,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"powerpoint","files","edit","read","Word","template","templates","productivity","office","create","documents","windows","research","linux","review","macos","xlsx","PDF","2026-11-10 10:12:30",false,"---\nname: docx\ndescription: Create, read, edit, template, and review Word .docx files.\nversion: 1.1.0\nauthor: Nous Research\nlicense: MIT\nplatforms: [linux, macos, windows]\nmetadata:\n  hermes:\n    tags: [word, docx, documents, office, templates, revisions, comments]\n    category: productivity\n    related_skills: [pdf, xlsx, powerpoint]\n---\n\n# Docx Skill\n\nCreate, read, edit, and template Microsoft Word `.docx` files with\npython-docx via small CLIs. It handles text, styles, lists, tables,\nimages, headers\u002Ffooters, `{{token}}` templating, tracked changes\n(list\u002Faccept\u002Freject), comments (list\u002Fadd\u002Fdelete), TOC and page-number\nfields, and package health checks. It does not render documents itself\n(PDF needs LibreOffice — see Converting to PDF) or edit legacy `.doc`.\n\n## When to Use\n\n- The user asks to generate a Word document (report, letter, contract).\n- You need the text, outline, styles, or embedded images of a `.docx`.\n- You must change an existing `.docx`: replace text, edit table cells,\n  insert\u002Fdelete paragraphs, apply styles, merge fragmented runs.\n- You have a `.docx` template with `{{placeholders}}` to fill from data.\n- The document has tracked changes to review, accept, or reject.\n- You need to read reviewers' comments, or add\u002Fdelete comments.\n- A `.docx` won't open or behaves oddly and you need corruption triage.\n- The document needs a table of contents or \"Page X of Y\" footers.\n- Not for: `.doc` (legacy), `.odt`, or WYSIWYG layout work.\n\n## Prerequisites\n\n- Python 3.10+ with `python-docx` installed:\n  `pip install python-docx` (import name is `docx`; lxml comes with it).\n- Comments `add` uses the native API on python-docx >= 1.2 and an XML\n  fallback on older versions — both are automatic.\n- For image blocks: the image files must exist locally (PNG\u002FJPEG).\n\n## How to Run\n\nAll helpers live in `scripts\u002F` next to this file. Run them with the\n`terminal` tool; each supports `--help` and prints JSON to stdout.\n\n```bash\npython scripts\u002Fdocx_create.py spec.json out.docx\npython scripts\u002Fdocx_read.py out.docx --text\npython scripts\u002Fdocx_edit.py replace out.docx --find old --replace new\npython scripts\u002Fdocx_template.py tpl.docx values.json filled.docx\npython scripts\u002Fdocx_revisions.py list out.docx\npython scripts\u002Fdocx_comments.py list out.docx\npython scripts\u002Fdocx_validate.py out.docx\n```\n\n## Quick Reference\n\n| Task | Command |\n| --- | --- |\n| Create from JSON spec | `docx_create.py spec.json out.docx` |\n| Full text (body+tables+headers\u002Ffooters) | `docx_read.py f.docx --text` |\n| Heading outline + table shapes | `docx_read.py f.docx --structure` |\n| Styles actually used | `docx_read.py f.docx --styles` |\n| Extract embedded images | `docx_read.py f.docx --images outdir\u002F` |\n| Detect tracked changes\u002Fcomments | `docx_read.py f.docx --revisions` |\n| Find\u002Freplace (formatting kept) | `docx_edit.py replace f.docx --find A --replace B -o out.docx` |\n| Set a table cell | `docx_edit.py set-cell f.docx --table 0 --row 1 --col 2 --text X` |\n| Insert paragraph before index N | `docx_edit.py insert f.docx --index N --text X --style Normal` |\n| Delete paragraph N | `docx_edit.py delete f.docx --index N` |\n| Apply style to paragraph N | `docx_edit.py style f.docx --index N --style \"Heading 1\"` |\n| Merge equal-format adjacent runs | `docx_edit.py normalize f.docx -o out.docx` |\n| Insert TOC field before para N | `docx_edit.py toc f.docx --index N -o out.docx` |\n| \"Page X of Y\" footer fields | `docx_edit.py page-numbers f.docx` |\n| Fill `{{tokens}}` | `docx_template.py tpl.docx values.json out.docx --strict` |\n| List revisions (id\u002Fauthor\u002Fdate\u002Ftext) | `docx_revisions.py list f.docx` |\n| Accept \u002F reject all revisions | `docx_revisions.py accept-all f.docx -o out.docx` (or `reject-all`) |\n| Accept \u002F reject one revision | `docx_revisions.py accept f.docx --id 3 -o out.docx` |\n| List comments (+anchored text) | `docx_comments.py list f.docx` |\n| Add comment anchored to text | `docx_comments.py add f.docx --target \"phrase\" --text \"note\" --author You` |\n| Delete comment by id | `docx_comments.py delete f.docx --id 0` |\n| Health-check the package | `docx_validate.py f.docx` (exit 1 on errors) |\n\n## Procedure\n\n1. **Create.** Write a JSON spec with `write_file`, then run\n   `scripts\u002Fdocx_create.py`. The spec supports: `page` (size + margins in\n   mm), `header`\u002F`footer` strings, `footer_page_numbers` (adds a\n   \"Page X of Y\" field footer), `styles` (custom paragraph styles with\n   font, size, bold\u002Fitalic, hex `color`), and `blocks` — `heading`\n   (level 1-9), `paragraph` (either `text` or a `runs` list where each run\n   may set `bold`\u002F`italic`\u002F`underline`), `bullet_list`, `numbered_list`,\n   `table` (`header` row rendered bold, `rows`, optional built-in table\n   `style` such as `Table Grid`), `image` (`path`, optional `width_mm`),\n   `toc` (Table of Contents field), and `page_break`. The full spec\n   format is documented at the top of `scripts\u002Fdocx_create.py`.\n2. **Read.** Use `scripts\u002Fdocx_read.py` with exactly one mode flag.\n   `--text` returns body paragraphs, all table cell text, and\n   header\u002Ffooter text as JSON. `--structure` returns the heading outline\n   plus paragraph\u002Ftable\u002Fsection counts. `--images DIR` copies every file\n   under `word\u002Fmedia\u002F` out of the package.\n3. **Edit.** Use `scripts\u002Fdocx_edit.py`. `replace` walks body, tables\n   (nested included), headers and footers, and preserves run formatting;\n   add `--body-only` to skip headers\u002Ffooters. Pass `-o out.docx` to keep\n   the original; omit it to edit in place. Paragraph indices for\n   `insert`\u002F`delete`\u002F`style`\u002F`toc` refer to `--structure`\u002F`--text` body\n   order. Run `normalize` first on documents that came out of heavy Word\n   editing — it merges adjacent runs with identical formatting so later\n   find-replace matches reliably.\n4. **Review revisions.** `docx_revisions.py list` reports every `w:ins`\n   and `w:del` (id, author, date, affected text) anywhere in body,\n   tables, headers, or footers. `accept-all` \u002F `reject-all` resolve them\n   in bulk; `accept`\u002F`reject --id N` handles a single revision. Accept\n   keeps insertions and drops deleted text; reject does the reverse.\n5. **Comments.** `docx_comments.py list` returns each comment's id,\n   author, date, body text, and the document text it is anchored to.\n   `add --target \"some phrase\"` anchors a new comment to the first\n   occurrence of that phrase (runs are split as needed; formatting is\n   preserved). `delete --id N` removes the comment and its markers\n   without touching document text.\n6. **Template.** Put `{{name}}`-style tokens in the document. Run\n   `scripts\u002Fdocx_template.py` with a JSON object of values. Use\n   `--strict` to fail when tokens remain unfilled; the JSON output lists\n   `filled` counts and `unfilled_tokens` either way.\n7. **Verify** (always): re-read the output with `--text` or\n   `--structure`, and run `docx_validate.py` on anything you produced\n   via revision\u002Fcomment surgery.\n\n## Converting to PDF\n\nNo script needed. When LibreOffice is installed, convert headlessly:\n\n```bash\nsoffice --headless --convert-to pdf --outdir outdir\u002F file.docx\n```\n\nCheck availability first (`command -v soffice || command -v\nlibreoffice`). If neither exists, tell the user PDF conversion is\nunavailable in this environment rather than improvising — python-docx\ncannot render PDFs, and layout fidelity requires a real renderer.\n\n## Pitfalls\n\n- **Tokens split across runs.** Word often fragments text into several\n  runs. The replace helpers collapse matched runs (replacement inherits\n  the first run's formatting); running `docx_edit.py normalize` first\n  reduces fragmentation for all later edits.\n- **Revision coverage.** `docx_revisions.py` resolves run-level\n  insertions and deletions (the overwhelming majority). Paragraph-mark\n  and table-row revisions, format-change records, and moves are detected\n  by `--revisions` but not auto-resolved — see\n  `references\u002Frevisions-and-comments.md` and hand those to Word.\n- **Comment threading.** Replies and \"resolved\" status live in\n  `commentsExtended.xml`, which this skill ignores; comments it adds are\n  plain top-level comments.\n- **Field results are computed by Word.** `toc`, `page-numbers`, and the\n  `toc`\u002F`footer_page_numbers` spec options write *field codes*.\n  Word\u002FLibreOffice populates the actual entries and numbers when the\n  file is opened (Word may prompt to update fields); python-docx never\n  computes them, so placeholder text shows until then.\n- **Validation is a health check, not schema validation.**\n  `docx_validate.py` verifies the zip, required parts, relationship\n  targets, image magic bytes, and referenced styles. It is NOT XSD\n  validation — a file can pass and still contain XML Word dislikes.\n- **Style names must exist.** Applying a style that isn't defined in the\n  document raises `KeyError`. Built-ins like `Heading 1`, `List Bullet`,\n  `List Number`, `Table Grid` exist in the default template; custom\n  styles must be declared in the create spec first.\n- **Numbered lists restart.** `List Number` relies on Word's default\n  numbering; separate lists in one document may continue numbering\n  instead of restarting. Warn users needing precise multi-list numbering.\n- **Cell writes replace formatting.** `set-cell` uses `cell.text = ...`,\n  which resets runs in that cell to plain formatting.\n- **Encoding.** All JSON specs\u002Fvalues files are read as UTF-8 explicitly;\n  never rely on locale defaults when writing your own glue code.\n- **Don't unzip-and-sed the XML.** Edit through the scripts (or\n  python-docx); raw text substitution in `document.xml` corrupts files\n  easily. Use `patch`\u002F`write_file` only for the JSON inputs, never on the\n  `.docx` itself.\n\n## Verification\n\n- After create\u002Fedit\u002Ftemplate, run `docx_read.py out.docx --text` and\n  check the expected strings appear (and old strings are gone).\n- After accept\u002Freject, `docx_revisions.py list` should return `[]` (or\n  only the ids you intentionally left); after comment surgery,\n  `docx_comments.py list` should reflect the change and `--text` output\n  must be unchanged.\n- `docx_validate.py out.docx` exits 0 with `\"ok\": true` on a healthy\n  package — run it after any revision\u002Fcomment\u002Ffield manipulation.\n- For templates run with `--strict`, or check `unfilled_tokens == []`.\n- Structure checks: `--structure` should show the expected heading\n  outline and table shapes; `--styles` confirms custom styles applied.\n","# Docx Skill\n\nCreate, read, edit, and template Microsoft Word `.docx` files with\npython-docx via small CLIs. It handles text, styles, lists, tables,\nimages, headers\u002Ffooters, `{{token}}` templating, tracked changes\n(list\u002Faccept\u002Freject), comments (list\u002Fadd\u002Fdelete), TOC and page-number\nfields, and package health checks. It does not render documents itself\n(PDF needs LibreOffice — see Converting to PDF) or edit legacy `.doc`.\n\n## When to Use\n\n- The user asks to generate a Word document (report, letter, contract).\n- You need the text, outline, styles, or embedded images of a `.docx`.\n- You must change an existing `.docx`: replace text, edit table cells,\n  insert\u002Fdelete paragraphs, apply styles, merge fragmented runs.\n- You have a `.docx` template with `{{placeholders}}` to fill from data.\n- The document has tracked changes to review, accept, or reject.\n- You need to read reviewers' comments, or add\u002Fdelete comments.\n- A `.docx` won't open or behaves oddly and you need corruption triage.\n- The document needs a table of contents or \"Page X of Y\" footers.\n- Not for: `.doc` (legacy), `.odt`, or WYSIWYG layout work.\n\n## Prerequisites\n\n- Python 3.10+ with `python-docx` installed:\n  `pip install python-docx` (import name is `docx`; lxml comes with it).\n- Comments `add` uses the native API on python-docx >= 1.2 and an XML\n  fallback on older versions — both are automatic.\n- For image blocks: the image files must exist locally (PNG\u002FJPEG).\n\n## How to Run\n\nAll helpers live in `scripts\u002F` next to this file. Run them with the\n`terminal` tool; each supports `--help` and prints JSON to stdout.\n\n```bash\npython scripts\u002Fdocx_create.py spec.json out.docx\npython scripts\u002Fdocx_read.py out.docx --text\npython scripts\u002Fdocx_edit.py replace out.docx --find old --replace new\npython scripts\u002Fdocx_template.py tpl.docx values.json filled.docx\npython scripts\u002Fdocx_revisions.py list out.docx\npython scripts\u002Fdocx_comments.py list out.docx\npython scripts\u002Fdocx_validate.py out.docx\n```\n\n## Quick Reference\n\n| Task | Command |\n| --- | --- |\n| Create from JSON spec | `docx_create.py spec.json out.docx` |\n| Full text (body+tables+headers\u002Ffooters) | `docx_read.py f.docx --text` |\n| Heading outline + table shapes | `docx_read.py f.docx --structure` |\n| Styles actually used | `docx_read.py f.docx --styles` |\n| Extract embedded images | `docx_read.py f.docx --images outdir\u002F` |\n| Detect tracked changes\u002Fcomments | `docx_read.py f.docx --revisions` |\n| Find\u002Freplace (formatting kept) | `docx_edit.py replace f.docx --find A --replace B -o out.docx` |\n| Set a table cell | `docx_edit.py set-cell f.docx --table 0 --row 1 --col 2 --text X` |\n| Insert paragraph before index N | `docx_edit.py insert f.docx --index N --text X --style Normal` |\n| Delete paragraph N | `docx_edit.py delete f.docx --index N` |\n| Apply style to paragraph N | `docx_edit.py style f.docx --index N --style \"Heading 1\"` |\n| Merge equal-format adjacent runs | `docx_edit.py normalize f.docx -o out.docx` |\n| Insert TOC field before para N | `docx_edit.py toc f.docx --index N -o out.docx` |\n| \"Page X of Y\" footer fields | `docx_edit.py page-numbers f.docx` |\n| Fill `{{tokens}}` | `docx_template.py tpl.docx values.json out.docx --strict` |\n| List revisions (id\u002Fauthor\u002Fdate\u002Ftext) | `docx_revisions.py list f.docx` |\n| Accept \u002F reject all revisions | `docx_revisions.py accept-all f.docx -o out.docx` (or `reject-all`) |\n| Accept \u002F reject one revision | `docx_revisions.py accept f.docx --id 3 -o out.docx` |\n| List comments (+anchored text) | `docx_comments.py list f.docx` |\n| Add comment anchored to text | `docx_comments.py add f.docx --target \"phrase\" --text \"note\" --author You` |\n| Delete comment by id | `docx_comments.py delete f.docx --id 0` |\n| Health-check the package | `docx_validate.py f.docx` (exit 1 on errors) |\n\n## Procedure\n\n1. **Create.** Write a JSON spec with `write_file`, then run\n   `scripts\u002Fdocx_create.py`. The spec supports: `page` (size + margins in\n   mm), `header`\u002F`footer` strings, `footer_page_numbers` (adds a\n   \"Page X of Y\" field footer), `styles` (custom paragraph styles with\n   font, size, bold\u002Fitalic, hex `color`), and `blocks` — `heading`\n   (level 1-9), `paragraph` (either `text` or a `runs` list where each run\n   may set `bold`\u002F`italic`\u002F`underline`), `bullet_list`, `numbered_list`,\n   `table` (`header` row rendered bold, `rows`, optional built-in table\n   `style` such as `Table Grid`), `image` (`path`, optional `width_mm`),\n   `toc` (Table of Contents field), and `page_break`. The full spec\n   format is documented at the top of `scripts\u002Fdocx_create.py`.\n2. **Read.** Use `scripts\u002Fdocx_read.py` with exactly one mode flag.\n   `--text` returns body paragraphs, all table cell text, and\n   header\u002Ffooter text as JSON. `--structure` returns the heading outline\n   plus paragraph\u002Ftable\u002Fsection counts. `--images DIR` copies every file\n   under `word\u002Fmedia\u002F` out of the package.\n3. **Edit.** Use `scripts\u002Fdocx_edit.py`. `replace` walks body, tables\n   (nested included), headers and footers, and preserves run formatting;\n   add `--body-only` to skip headers\u002Ffooters. Pass `-o out.docx` to keep\n   the original; omit it to edit in place. Paragraph indices for\n   `insert`\u002F`delete`\u002F`style`\u002F`toc` refer to `--structure`\u002F`--text` body\n   order. Run `normalize` first on documents that came out of heavy Word\n   editing — it merges adjacent runs with identical formatting so later\n   find-replace matches reliably.\n4. **Review revisions.** `docx_revisions.py list` reports every `w:ins`\n   and `w:del` (id, author, date, affected text) anywhere in body,\n   tables, headers, or footers. `accept-all` \u002F `reject-all` resolve them\n   in bulk; `accept`\u002F`reject --id N` handles a single revision. Accept\n   keeps insertions and drops deleted text; reject does the reverse.\n5. **Comments.** `docx_comments.py list` returns each comment's id,\n   author, date, body text, and the document text it is anchored to.\n   `add --target \"some phrase\"` anchors a new comment to the first\n   occurrence of that phrase (runs are split as needed; formatting is\n   preserved). `delete --id N` removes the comment and its markers\n   without touching document text.\n6. **Template.** Put `{{name}}`-style tokens in the document. Run\n   `scripts\u002Fdocx_template.py` with a JSON object of values. Use\n   `--strict` to fail when tokens remain unfilled; the JSON output lists\n   `filled` counts and `unfilled_tokens` either way.\n7. **Verify** (always): re-read the output with `--text` or\n   `--structure`, and run `docx_validate.py` on anything you produced\n   via revision\u002Fcomment surgery.\n\n## Converting to PDF\n\nNo script needed. When LibreOffice is installed, convert headlessly:\n\n```bash\nsoffice --headless --convert-to pdf --outdir outdir\u002F file.docx\n```\n\nCheck availability first (`command -v soffice || command -v\nlibreoffice`). If neither exists, tell the user PDF conversion is\nunavailable in this environment rather than improvising — python-docx\ncannot render PDFs, and layout fidelity requires a real renderer.\n\n## Pitfalls\n\n- **Tokens split across runs.** Word often fragments text into several\n  runs. The replace helpers collapse matched runs (replacement inherits\n  the first run's formatting); running `docx_edit.py normalize` first\n  reduces fragmentation for all later edits.\n- **Revision coverage.** `docx_revisions.py` resolves run-level\n  insertions and deletions (the overwhelming majority). Paragraph-mark\n  and table-row revisions, format-change records, and moves are detected\n  by `--revisions` but not auto-resolved — see\n  `references\u002Frevisions-and-comments.md` and hand those to Word.\n- **Comment threading.** Replies and \"resolved\" status live in\n  `commentsExtended.xml`, which this skill ignores; comments it adds are\n  plain top-level comments.\n- **Field results are computed by Word.** `toc`, `page-numbers`, and the\n  `toc`\u002F`footer_page_numbers` spec options write *field codes*.\n  Word\u002FLibreOffice populates the actual entries and numbers when the\n  file is opened (Word may prompt to update fields); python-docx never\n  computes them, so placeholder text shows until then.\n- **Validation is a health check, not schema validation.**\n  `docx_validate.py` verifies the zip, required parts, relationship\n  targets, image magic bytes, and referenced styles. It is NOT XSD\n  validation — a file can pass and still contain XML Word dislikes.\n- **Style names must exist.** Applying a style that isn't defined in the\n  document raises `KeyError`. Built-ins like `Heading 1`, `List Bullet`,\n  `List Number`, `Table Grid` exist in the default template; custom\n  styles must be declared in the create spec first.\n- **Numbered lists restart.** `List Number` relies on Word's default\n  numbering; separate lists in one document may continue numbering\n  instead of restarting. Warn users needing precise multi-list numbering.\n- **Cell writes replace formatting.** `set-cell` uses `cell.text = ...`,\n  which resets runs in that cell to plain formatting.\n- **Encoding.** All JSON specs\u002Fvalues files are read as UTF-8 explicitly;\n  never rely on locale defaults when writing your own glue code.\n- **Don't unzip-and-sed the XML.** Edit through the scripts (or\n  python-docx); raw text substitution in `document.xml` corrupts files\n  easily. Use `patch`\u002F`write_file` only for the JSON inputs, never on the\n  `.docx` itself.\n\n## Verification\n\n- After create\u002Fedit\u002Ftemplate, run `docx_read.py out.docx --text` and\n  check the expected strings appear (and old strings are gone).\n- After accept\u002Freject, `docx_revisions.py list` should return `[]` (or\n  only the ids you intentionally left); after comment surgery,\n  `docx_comments.py list` should reflect the change and `--text` output\n  must be unchanged.\n- `docx_validate.py out.docx` exits 0 with `\"ok\": true` on a healthy\n  package — run it after any revision\u002Fcomment\u002Ffield manipulation.\n- For templates run with `--strict`, or check `unfilled_tokens == []`.\n- Structure checks: `--structure` should show the expected heading\n  outline and table shapes; `--styles` confirms custom styles applied.\n",{"name":5,"author":55,"license":15,"version":56,"metadata":57,"platforms":65,"description":7},"Nous Research","1.1.0",{"hermes":58},{"tags":59,"category":39,"related_skills":63},[60,5,42,40,38,61,62],"word","revisions","comments",[64,48,32],"pdf",[45,47,43],"main","64e2fc9afa7bb3da1138eb73399144d0e7e73e9d","_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx",4,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs","https:\u002F\u002Fgithub.com\u002Fadnichols","2026-11-06 00:28:38",{"source":8,"skillName":5,"commands":74,"prompt":84,"zipAvailable":85},[75,78,81],{"tool":76,"command":77},"npx","npx skills add adnichols\u002Fai-configs --skill docx",{"tool":79,"command":80},"bunx","bunx skills add adnichols\u002Fai-configs --skill docx",{"tool":82,"command":83},"pnpm","pnpm dlx skills add adnichols\u002Fai-configs --skill docx","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002FSKILL.md",true,[87,92,98,104,108,112,116,120,124,128,132],{"path":88,"resourceType":88,"resourceTypeDesc":89,"sizeBytes":90,"sourceHtmlUrl":91},"LICENSE","许可证",1070,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002FLICENSE",{"path":93,"resourceType":94,"resourceTypeDesc":95,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Frevisions-and-comments.md","REFERENCE","参考文档",3997,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Freferences\u002Frevisions-and-comments.md",{"path":99,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":102,"sourceHtmlUrl":103},"scripts\u002Fdocx_comments.py","SCRIPT","脚本",10655,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_comments.py",{"path":105,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":106,"sourceHtmlUrl":107},"scripts\u002Fdocx_common.py",3364,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_common.py",{"path":109,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":110,"sourceHtmlUrl":111},"scripts\u002Fdocx_create.py",6387,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_create.py",{"path":113,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":114,"sourceHtmlUrl":115},"scripts\u002Fdocx_edit.py",8619,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_edit.py",{"path":117,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":118,"sourceHtmlUrl":119},"scripts\u002Fdocx_read.py",5405,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_read.py",{"path":121,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":122,"sourceHtmlUrl":123},"scripts\u002Fdocx_revisions.py",4571,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_revisions.py",{"path":125,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":126,"sourceHtmlUrl":127},"scripts\u002Fdocx_template.py",2482,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_template.py",{"path":129,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":130,"sourceHtmlUrl":131},"scripts\u002Fdocx_validate.py",6200,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Fscripts\u002Fdocx_validate.py",{"path":133,"resourceType":100,"resourceTypeDesc":101,"sizeBytes":134,"sourceHtmlUrl":135},"tests\u002Ftest_docx_skill.py",21267,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fdocx\u002Ftests\u002Ftest_docx_skill.py",[137,155,184,209,220,236],{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":143,"publishedAt":50},"01M6CB7RN791P5RRRCJWWC7DAR","blocked-page-recovery","Use when a fetch fails: 403\u002F429, paywall, WAF, bot wall.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fweb\u002Fblocked-page-recovery\u002FSKILL.md",[],[144,145,146,147,148,149,150,151,152,153,154,43,44,45,47],"recovery","page","blocked page recovery","bot","fallback","use","fetch","hermes agent","hermes","Citations","waf",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":170,"publishedAt":50},"01M6CB7NQY2VVYCQJ1QBXACQF4","writing-plans","Use when creating or updating executable software plans. Keep plans as local files unless the user explicitly asks to register them in Doct.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fwriting-plans\u002FSKILL.md",[161,164,167],{"categoryNo":162,"categoryName":163,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":165,"categoryName":166,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":168,"categoryName":169,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000036","内容创作者",[171,172,173,174,175,176,177,178,179,33,180,181,149,182,151,152,183],"writing","writing plans","documentation","test","workflow","design","user","development","planning","implementation","html","ops","plan",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":199,"publishedAt":50},"01M6CB7JME246KZQHP73Z2STDF","test-driven-development","TDD: enforce RED-GREEN-REFACTOR, tests before code.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Ftest-driven-development\u002FSKILL.md",[190,193,196],{"categoryNo":191,"categoryName":192,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":194,"categoryName":195,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":197,"categoryName":198,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000037","律师与法务",[174,178,200,201,202,151,152,203,183,204,205,206,47,207,45,208,43],"test driven development","red-green-refactor","superpowers","quality","refactor","code","debugging","tdd","testing",{"skillNo":210,"name":211,"nameZh":6,"description":212,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":213,"categories":214,"keywords":216,"publishedAt":50},"01M6CB7FQ407KQTD4Z9VAWKY54","systematic-debugging","4-phase root cause debugging: understand bugs before fixing.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fsystematic-debugging\u002FSKILL.md",[215],{"categoryNo":194,"categoryName":195,"taxonomyType":21,"taxonomyTypeDesc":22},[206,217,178,202,151,152,218,183,219,43,174,45,47],"systematic debugging","troubleshooting","investigation",{"skillNo":221,"name":222,"nameZh":6,"description":223,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":224,"categories":225,"keywords":229,"publishedAt":50},"01M6CB7D57MK88HE5YPZHKH68Q","spike","Throwaway experiments to validate an idea before build.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fspike\u002FSKILL.md",[226],{"categoryNo":227,"categoryName":228,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[222,43,230,231,44,232,45,47,233,234,235,151,152,183,179],"validate","experiments","prototype","feasibility","sketch","experiment",{"skillNo":237,"name":238,"nameZh":6,"description":239,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":240,"categories":241,"keywords":246,"publishedAt":50},"01M6CB7APAQ37YE5YE1MAAFT42","simplify-code","Parallel 3-agent cleanup of recent code changes.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fsimplify-code\u002FSKILL.md",[242,243],{"categoryNo":165,"categoryName":166,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":244,"categoryName":245,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000030","开发工程师",[247,248,205,249,151,152,250,183,204,251,252,253,178,43,174,45,46,47],"simplify code","simplify","subagent","parallel","code-review","delegation","cleanup"]