Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/demomacro/office-open/claude-mdgit clone --depth 1 https://github.com/DemoMacro/office-openWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/demomacro/office-open/claude-md)<a href="https://agentmods.dev/instructions/demomacro/office-open/claude-md"><img src="https://agentmods.dev/badge/instructions/demomacro/office-open/claude-md.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.03350 | $0.03350 |
| Opus 5 | $0.01675 | $0.01675 |
| Sonnet 5 | $0.00670 | $0.00670 |
| Haiku 4.5 | $0.00335 | $0.00335 |
Grade A, and why
office-open CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 59 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are a senior TypeScript developer.
Project
office-open is a monorepo for generating and parsing Office Open XML documents (.docx, .pptx, .xlsx) with JS/TS. Declarative API, works in Node.js and browsers. Bidirectional: stringify (JSON → XML) and parse (XML → JSON).
Architecture
- Packages:
core/(shared OOXML domains — descriptor runtime,drawing/,chart/,table/,picture/,connector/,group/, smartart, OPC),xml/,docx/,pptx/,xlsx/. The three format packages are peers: samesrc/layout (parts/,shared/,compiler.ts,context.ts,generate.ts,parse.ts,patch.ts,index.ts) and one**Optionsname per shared concept. - Parts: one module per OOXML XML part. docx/xlsx co-locate types and the
<part>Descdescriptor; pptx keeps descriptors inparts/descriptors/with public types inshared/<domain>/. Cross-part shared types live inshared/. - Descriptor pattern: every part is a
CustomDescriptor<T>with hand-writtenstringify(opts, ctx)+parse(el, ctx)(bidirectional). Runtime atpackages/core/src/descriptor/. - Cross-format copy reuses
core's shared domains + package-to-package conversion inpackages/office-open/src/convert/— no unified document-model layer. The conversion mode follows how the concept's XML maps across packages:- Identical XML (
chart: onec:chartSpacepart) → shared core model, no conversion. - Same element, different anchoring (
picturepic:pic/p:pic/xdr:pic; shapes; text) → each package owns an*Optionsreflecting its anchor model (docxwp:inline/wp:anchor, pptx spTree, xlsx cell anchor) + pairwiseconvert/*functions; N is small, so pairwise beats a hub-spoke intermediate. The shared payload still lands in core:core/picture/BasePictureOptions(data/type + cNvPr viaNonVisualDrawingPropertiesOptions) is extended by pptx/xlsxPictureOptions, while docx stays a format discriminated union bridged through itsaltText;convert/picture.tsthreads the cNvPr fields (name/description/title/hidden) straight through every leg. The sameNonVisualDrawingPropertiesOptions(a:CT_NonVisualDrawingProps) backs every drawing's cNvPr/docPr across all three packages viacore/drawing/non-visual/. - Structurally different XML (
table:w:tblflow /a:tblgraphic /smlcell-range) →core/table/defines the shared structural base (BaseTableOptions/BaseTableRowOptions/BaseTableCellOptions: rows/cells/span/6-flags/columnWidths/vertical-align); docx/pptxTableOptions extends Base*add domain-specific style/position, xlsx is independent (its sml Table is a data range, restored visually viaconvert/table.ts).convert/table.tspasses the structural base through directly and translates only cell content (w:p↔a:p viaconvert/text), units (twip↔EMU viacore/util/converters), and pptx fill/scheme-color → docx shading/themeColor. - Connector (
cxnSp:p:cxnSp/xdr:cxnSp; docx has no standalone cxnSp) →core/connector/BaseConnectorOptions extends NonVisualDrawingPropertiesOptions(cNvPr + locking + start/end connection endpoints; no spPr — pptx top-level convenience vs xlsx spPr asymmetry, kept per-package). pptxConnectorOptions/LineShapeOptionsand xlsxConnectorOptionsextend base;convert/connector.tsthreads cNvPr + locking + endpoints viapickConnectorBase. - Group (
grpSp:p:grpSp/xdr:grpSp/wpg:wgp) →core/drawing/group-shape-properties-desc.tsGroupShapePropertiesOptions(CT_GroupShapeProperties: xfrm/fill/effects/scene3d — no geometry/ln/sp3d, distinct from CT_ShapeProperties) +core/group/BaseGroupOptions extends NonVisualDrawingPropertiesOptions(cNvPr only; grpSpPr content/children/position stay per-package). pptx/xlsx/docx all useGroupOptions(docx bridged throughaltTextlike picture).convert/group.tsthreads container + child cNvPr viapickGroupBase/pickNonVisualDrawingProperties. - Shape base is YAGNI: cNvPr is already unified via
NonVisualDrawingPropertiesOptions(Phase 2), spPr/textBody already live in core, there are no scattered convert adapters and no shape-specific public field worth lifting — so noBaseShapeOptionsis introduced.
- Identical XML (
- OOXML XSD (
ooxml-schemas/transitional/) is the golden source of truth —wml.xsd(DOCX),pml.xsd(PPTX),sml.xsd(XLSX),dml-main.xsd(DrawingML). Validate XML output against it.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 59 lines · 3,350 tokens per session scan A ba212a086c21
office-open CLAUDE.md is an instructions file published in the GitHub repository DemoMacro/office-open (29 stars, last pushed 3d ago), licensed MIT. It adds 3,350 tokens to every session, about $0.0168 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other instructions, from other repositories
office-open-xml-viewer AGENTS.md
AGENTS.md instructions for yukiyokotani/office-open-xml-viewer, covering agent instructions, project, standard development flow, git and pr rules and verification.
office-open-xml-viewer CLAUDE.md
Claude Code instructions for yukiyokotani/office-open-xml-viewer, covering claude.md, worktree startup checklist, claude worktree roles, parallel session safety and claude autonomous work.
mcp-ms-office-documents AGENTS.md
AGENTS.md instructions for ForLegalAI/mcp-ms-office-documents, covering agents.md, project overview, architecture, key conventions and filename generation.
bilig bilig-workpaper.instructions.md
Instructions for proompteng/bilig, covering bilig workpaper formula proof, first checks, required readback, command safety and references.
bilig CLAUDE.md
Claude Code instructions for proompteng/bilig, covering claude code project instructions, first checks, claude code workpaper paths, required readback and command safety.
xlsx-for-ai CLAUDE.md
Instructions for senoff/xlsx-for-ai, covering xlsx-for-ai — agent loading guide, always-load, load on relevance, review gate (mandatory unless explicitly skipped) and repo posture.