/microsoft-office
Create, read, and edit Word, PowerPoint, and Excel files.
Claude Code
$ npx -y skills add NousResearch/hermes-agent --skill microsoft-office --agent claude-code
Codex
$ npx skills add NousResearch/hermes-agent --skill microsoft-office -a codex -y
Cursor
$ npx skills add NousResearch/hermes-agent --skill microsoft-office -a cursor -y
Gemini CLI
$ npx skills add NousResearch/hermes-agent --skill microsoft-office -a gemini-cli -y
GitHub Copilot
$ npx skills add NousResearch/hermes-agent --skill microsoft-office -a github-copilot -y
OpenCode
$ npx skills add NousResearch/hermes-agent --skill microsoft-office -a opencode -y
Windsurf
$ npx skills add NousResearch/hermes-agent --skill microsoft-office -a windsurf -y
SKILL.md
microsoft-office.SKILL.mdname: microsoft-office
description: Create, read, and edit Word, PowerPoint, and Excel files.
version: 2.0.0
author: Nous Research
license: MIT
platforms: [linux, macos, windows]
metadata:
hermes:
tags: [office, word, docx, powerpoint, pptx, excel, xlsx, csv, documents, slides, spreadsheets]
category: productivity
related_skills: [pdf]Microsoft Office Skill
Create, read, edit, and template Word (`.docx`), PowerPoint (`.pptx`), and Excel (`.xlsx`, `.csv`) files offline with small Python CLIs built on python-docx, python-pptx, and openpyxl. Office itself is never needed. It does not open legacy binary formats (`.doc`, `.ppt`, `.xls`) and does not render pages without LibreOffice.
When to Use
Pick the format, then read its reference with `skill_view` before working:
| File | Reference | Typical asks | | --- | --- | --- | | `.docx` | `references/word.md` | reports, letters, contracts, `{{token}}` templates, tracked changes, comments | | `.pptx` | `references/powerpoint.md` | pitch decks, brand-template decks, chart refreshes, speaker notes, slide PNGs | | `.xlsx`, `.csv` | `references/excel.md` | styled multi-sheet workbooks, formulas, charts, CSV conversion, row/column restructures |
Deeper notes: `references/revisions-and-comments.md` (Word review markup) and `references/restructuring.md` (Excel reference shifting).
- Not for `.doc`/`.ppt`/`.xls`: convert first with
`soffice --headless --convert-to docx|pptx|xlsx old-file` when LibreOffice is installed.
- Not for `.odt`/`.odp`/`.ods`, or WYSIWYG layout work.
Prerequisites
- Python 3.10+ with `python-docx`, `python-pptx`, and `openpyxl` (import names
`docx`, `pptx`, `openpyxl`).
- Pick the interpreter with `terminal`. Use `python` when it already imports
the libraries (the Hermes Docker image ships them). Otherwise, when `hermes` is on PATH, let Hermes build its shared, pinned documents environment under the Hermes home: it survives container restarts, never touches the Hermes install itself, and is safe to run from several agents at once. When it is not (the terminal runs in a Docker sandbox, which has no Hermes), the block builds a venv in the sandbox home with the same pinned versions. Use this exact block in every document skill so they all share one environment:
python -c "import docx, pptx, openpyxl" 2>/dev/null && PY=python || if command -v hermes >/dev/null 2>&1; then
PY="$(hermes pm environment documents --extra documents --extra documents-pdf)"
else
PY="$HOME/.cache/hermes-docs-venv/bin/python"
"$PY" -c "import docx, openpyxl, pptx, reportlab, pypdf, pdfplumber, pypdfium2" 2>/dev/null || (
# Safe to run from several agents at once: each caller builds a private venv,
# a symlink publishes the first finished one atomically, the others delete theirs.
mkdir -p "$HOME/.cache" && cd "$HOME/.cache" && stage="$(mktemp -d hermes-docs-venv.XXXXXX)" || exit 1
old="$(readlink hermes-docs-venv)" # an earlier build that no longer imports, if any
python3 -m venv "$stage" &&
"$stage/bin/python" -m pip install -q --disable-pip-version-check python-docx==1.2.0 openpyxl==3.1.5 python-pptx==1.0.2 reportlab==5.1.0 pypdf==6.21.2 pdfplumber==0.11.10 pypdfium2==5.14.0 &&
"$stage/bin/python" -c "import docx, openpyxl, pptx, reportlab, pypdf, pdfplumber, pypdfium2" &&
if [ -z "$old" ]; then python3 -c 'import os, sys; os.symlink(*sys.argv[1:])' "$stage" hermes-docs-venv
elif [ "$(readlink hermes-docs-venv)" = "$old" ]; then
ln -s "$stage" "$stage.lnk" && python3 -c 'import os, sys; os.replace(*sys.argv[1:])' "$stage.lnk" hermes-docs-venv &&
case "$old" in hermes-docs-venv.??????) rm -rf "$old" ;; esac
fi 2>/dev/null
[ "$(readlink hermes-docs-venv)" = "$stage" ] || rm -rf "$stage" "$stage.lnk"
)
fi
export PY
"$PY" scripts/docx_create.py --helpRun every helper with `"$PY"`. In PowerShell (Hermes runs on that host, so it is on PATH): `$env:PY = hermes pm environment documents --extra documents --extra documents-pdf`. Never `pip install` into the interpreter that runs Hermes or into the `hermes pm environment` one; Hermes owns both.
- Optional: LibreOffice (`soffice`) for PDF export, Excel recalculation, and
slide rendering, plus poppler (`pdftoppm` or `pdftocairo`) for slide PNGs. The helpers that need them report what is missing and exit 0.
How to Run
Every helper lives in `scripts/`, is an argparse CLI with `--help`, prints JSON to stdout, and exits non-zero on failure. Run them with `terminal` from the skill directory. Author JSON specs with `write_file`; read results with `read_file` or straight from stdout.
"$PY" scripts/docx_create.py spec.json out.docx
"$PY" scripts/pptx_create.py deck.json out.pptx
"$PY" scripts/xlsx_create.py spec.json report.xlsx
Quick Reference
| Task | Word | PowerPoint | Excel | | --- | --- | --- | --- | | Create from JSON spec | `docx_create.py` | `pptx_create.py` | `xlsx_create.py`, `csv_to_xlsx.py` | | Read back | `docx_read.py --text/--structure` | `pptx_read.py --outline` | `xlsx_read.py --sheets/--json` | | Edit | `docx_edit.py` | `pptx_edit.py` | `xlsx_edit.py`, `xlsx_restructure.py` | | Fill a template | `docx_template.py` | `pptx_from_template.py` | — | | Review / check | `docx_revisions.py`, `docx_comments.py`, `docx_validate.py` | `pptx_render.py` (slide PNGs) | `xlsx_recalc.py`, `xlsx_to_csv.py` |
The per-format reference has the full flag table.
Procedure
1. Identify the format from the file extension or the ask, and load its reference (`skill_view` with `file_path=references/<format>.md`). 2. Set `PY` with the Prerequisites block once per session. 3. Create, edit, or read with that format's helpers; pass an output path to keep the original whenever the helper supports one. 4. Verify the result as the reference's Verification section says, then give the user the exact
Read more
name: microsoft-office
description: Create, read, and edit Word, PowerPoint, and Excel files.
version: 2.0.0
author: Nous Research
license: MIT
platforms: [linux, macos, windows]
metadata:
hermes:
tags: [office, word, docx, powerpoint, pptx, excel, xlsx, csv, documents, slides, spreadsheets]
category: productivity
related_skills: [pdf]Microsoft Office Skill
Create, read, edit, and template Word (`.docx`), PowerPoint (`.pptx`), and Excel (`.xlsx`, `.csv`) files offline with small Python CLIs built on python-docx, python-pptx, and openpyxl. Office itself is never needed. It does not open legacy binary formats (`.doc`, `.ppt`, `.xls`) and does not render pages without LibreOffice.
When to Use
Pick the format, then read its reference with `skill_view` before working:
| File | Reference | Typical asks | | --- | --- | --- | | `.docx` | `references/word.md` | reports, letters, contracts, `{{token}}` templates, tracked changes, comments | | `.pptx` | `references/powerpoint.md` | pitch decks, brand-template decks, chart refreshes, speaker notes, slide PNGs | | `.xlsx`, `.csv` | `references/excel.md` | styled multi-sheet workbooks, formulas, charts, CSV conversion, row/column restructures |
Deeper notes: `references/revisions-and-comments.md` (Word review markup) and `references/restructuring.md` (Excel reference shifting).
- Not for `.doc`/`.ppt`/`.xls`: convert first with
`soffice --headless --convert-to docx|pptx|xlsx old-file` when LibreOffice is installed.
- Not for `.odt`/`.odp`/`.ods`, or WYSIWYG layout work.
Prerequisites
- Python 3.10+ with `python-docx`, `python-pptx`, and `openpyxl` (import names
`docx`, `pptx`, `openpyxl`).
- Pick the interpreter with `terminal`. Use `python` when it already imports
the libraries (the Hermes Docker image ships them). Otherwise, when `hermes` is on PATH, let Hermes build its shared, pinned documents environment under the Hermes home: it survives container restarts, never touches the Hermes install itself, and is safe to run from several agents at once. When it is not (the terminal runs in a Docker sandbox, which has no Hermes), the block builds a venv in the sandbox home with the same pinned versions. Use this exact block in every document skill so they all share one environment:
python -c "import docx, pptx, openpyxl" 2>/dev/null && PY=python || if command -v hermes >/dev/null 2>&1; then
PY="$(hermes pm environment documents --extra documents --extra documents-pdf)"
else
PY="$HOME/.cache/hermes-docs-venv/bin/python"
"$PY" -c "import docx, openpyxl, pptx, reportlab, pypdf, pdfplumber, pypdfium2" 2>/dev/null || (
# Safe to run from several agents at once: each caller builds a private venv,
# a symlink publishes the first finished one atomically, the others delete theirs.
mkdir -p "$HOME/.cache" && cd "$HOME/.cache" && stage="$(mktemp -d hermes-docs-venv.XXXXXX)" || exit 1
old="$(readlink hermes-docs-venv)" # an earlier build that no longer imports, if any
python3 -m venv "$stage" &&
"$stage/bin/python" -m pip install -q --disable-pip-version-check python-docx==1.2.0 openpyxl==3.1.5 python-pptx==1.0.2 reportlab==5.1.0 pypdf==6.21.2 pdfplumber==0.11.10 pypdfium2==5.14.0 &&
"$stage/bin/python" -c "import docx, openpyxl, pptx, reportlab, pypdf, pdfplumber, pypdfium2" &&
if [ -z "$old" ]; then python3 -c 'import os, sys; os.symlink(*sys.argv[1:])' "$stage" hermes-docs-venv
elif [ "$(readlink hermes-docs-venv)" = "$old" ]; then
ln -s "$stage" "$stage.lnk" && python3 -c 'import os, sys; os.replace(*sys.argv[1:])' "$stage.lnk" hermes-docs-venv &&
case "$old" in hermes-docs-venv.??????) rm -rf "$old" ;; esac
fi 2>/dev/null
[ "$(readlink hermes-docs-venv)" = "$stage" ] || rm -rf "$stage" "$stage.lnk"
)
fi
export PY
"$PY" scripts/docx_create.py --helpRun every helper with `"$PY"`. In PowerShell (Hermes runs on that host, so it is on PATH): `$env:PY = hermes pm environment documents --extra documents --extra documents-pdf`. Never `pip install` into the interpreter that runs Hermes or into the `hermes pm environment` one; Hermes owns both.
- Optional: LibreOffice (`soffice`) for PDF export, Excel recalculation, and
slide rendering, plus poppler (`pdftoppm` or `pdftocairo`) for slide PNGs. The helpers that need them report what is missing and exit 0.
How to Run
Every helper lives in `scripts/`, is an argparse CLI with `--help`, prints JSON to stdout, and exits non-zero on failure. Run them with `terminal` from the skill directory. Author JSON specs with `write_file`; read results with `read_file` or straight from stdout.
"$PY" scripts/docx_create.py spec.json out.docx "$PY" scripts/pptx_create.py deck.json out.pptx "$PY" scripts/xlsx_create.py spec.json report.xlsx
Quick Reference
| Task | Word | PowerPoint | Excel | | --- | --- | --- | --- | | Create from JSON spec | `docx_create.py` | `pptx_create.py` | `xlsx_create.py`, `csv_to_xlsx.py` | | Read back | `docx_read.py --text/--structure` | `pptx_read.py --outline` | `xlsx_read.py --sheets/--json` | | Edit | `docx_edit.py` | `pptx_edit.py` | `xlsx_edit.py`, `xlsx_restructure.py` | | Fill a template | `docx_template.py` | `pptx_from_template.py` | — | | Review / check | `docx_revisions.py`, `docx_comments.py`, `docx_validate.py` | `pptx_render.py` (slide PNGs) | `xlsx_recalc.py`, `xlsx_to_csv.py` |
The per-format reference has the full flag table.
Procedure
1. Identify the format from the file extension or the ask, and load its reference (`skill_view` with `file_path=references/<format>.md`). 2. Set `PY` with the Prerequisites block once per session. 3. Create, edit, or read with that format's helpers; pass an output path to keep the original whenever the helper supports one. 4. Verify the result as the reference's Verification section says, then give the user the exact
The self-improving AI agent built by Nous Research. It's the only agent with a built-in learning loop — it creates skills from experience, improves them during use, nudges itself to persist knowledge, searches its own past conversations, and builds a
Other skills on hermes-agent.
More skills from other plugins.
1password
Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.
karpathy-guidelines
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
agent-development
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when…
agent-builder
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…
Questions about microsoft-office.
- Which coding agents can use microsoft-office?
- microsoft-office installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

