Document Generation logo

Document Generation

Community
automateyournetwork
document-generation

Generate Word (.docx), Excel (.xlsx) and PowerPoint (.pptx) documents and fill existing PDF forms, from real NetClaw data, with per-element provenance and no fabrication. This is the generic document-writing engine (tool surface, tagged-value shapes, fabrication rules). For the four standard NetClaw report compositions (change record, audit workbook, executive summary deck, PDF form) with their content-sourcing rules, use `network-report-documents` instead — it is built on this skill. Use this skill directly for any other one-off deliverable.

Overview

Publisherautomateyournetwork
Repositorynetclaw
Skill namedocument-generation
Stars
680
Forks
189
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by automateyournetwork on GitHub. Read the source before you install it.

Installation

Install the Document Generation AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/automateyournetwork/netclaw/tree/main/workspace/skills/document-generation
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/automateyournetwork/netclaw.git /tmp/netclaw
mkdir -p .claude/skills
cp -r /tmp/netclaw/workspace/skills/document-generation .claude/skills/document-generation
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Document Generation in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Document Generation on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Document Generation is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Document Generation

MCP Server

  • Server: document-mcp (NetClaw-authored, spec 082 / roadmap R18)
  • Command: $DOCUMENT_MCP_CMD
  • Transport: stdio
  • Credentials: none. This server writes files and touches nothing else
  • Infrastructure: no device access, no ticket writes — so there is no approval gate here

The one rule that matters most

A document must never fabricate to fill a blank.

Tool output is ephemeral — read once, in context, by the person who asked. A document is not. It gets emailed, attached to a ticket, filed for audit, and read months later by someone who was not there, and it carries the authority of its formatting.

A professional-looking change record with a plausible invented number is a far more effective way to launder a guess into an official record than any amount of terminal output, because nobody re-derives a figure that is already in a table in a .docx.

So: never infer, estimate, interpolate, or carry forward a stale value to complete a document. If you do not have a figure, send {"unavailable": "<why>"}. The server renders that as visible text. It will not render a blank, and it will not let you send one.

Tagged values — the only accepted shape

Every value in a figure, table, keyvalue or form field is one of exactly three shapes:

jsonc
{"v": "fgt-01", "src": "fgt_system_status", "device": "fgt-01", "as_of": "2026-08-03T13:58:00Z"}
{"unavailable": "device did not answer within timeout"}
{"failed": "FortiGate plane unreachable: connection refused"}
You sendThe document shows
{"v": x, "src": ...}x, with a visible source
{"v": ""}(empty) — the source was consulted and returned nothing
{"unavailable": r}NOT AVAILABLE — r
{"failed": r}RETRIEVAL FAILED — r
{"v": x} with no srcrefused
a bare xrefused

unavailable and failed are different facts and render differently: a dead query is not an empty result. Neither ever renders as N/A, 0, -, or an empty cell.

Tools (6)

ToolDoes
docx_writeWord document from ordered blocks: heading, paragraph, figure, table, keyvalue, image, pagebreak
xlsx_writeWorkbook from sheets of tagged rows, plus failed_rows
pptx_writeDeck from slides: bullets, figure, image
pdf_inspect_formList a PDF's real named fields — call this before filling
pdf_fill_formFill named fields into a new file; reports unfilled and unmatched
list_documentsFind something you generated earlier

What the server adds that you cannot omit

  • A Source column on every table and every spreadsheet row — appended by the writer.
  • An As of column carrying the source's own collection time, distinct from the generation time.
  • Generation time and NetClaw attribution in the .docx footer on every page, the .xlsx banner, and the .pptx title and Sources slides.
  • A Sources section in every file, listing each tool with its as-of and whether it was ok, partial or failed.
  • A GAIT record for every call, including refusals.

If any figure lacks a source, the whole call is refused. There is no partial path.

Three limits, stated up front

No footnotes in Word. python-docx has no footnote API, so attribution is inline — a Source column in tables, a small parenthetical after prose figures. That is more visible than a footnote, not less. Word comments and document properties are set additively but never count as provenance: they are collapsed by default, stripped on paste, and absent in print.

No Office templates. .docx, .xlsx and .pptx are built from scratch and a supplied template is refused, not ignored — otherwise you would get an unbranded document believing it was branded. A corporate template's empty field is the strongest fabrication pressure in the feature. PDF forms are the exception because their fields are explicitly named: there is nothing to guess.

A filled PDF carries no Sources section. It is the customer's form and adding a page would alter it. For that one format provenance lives in the tool response and the GAIT record. Say so when you hand the file over.

Put figures in the right block

Prose carries no attribution. A paragraph asserting a bare number gets a caveat naming the block index — use figure, table or keyvalue instead, all of which force a source. Dates, ticket numbers, IPs, versions and "Section 2" are not flagged.

Other behaviour worth knowing

  • Admin state and operational state must be separate columns. A merged status column is refused. An interface can be administratively up with no carrier, and collapsing them tells a reader traffic is passing when nothing is.
  • Sources that disagree are both shown, with their origins and a caveat. NetClaw does not pick a winner.
  • Untrusted text cannot become a formula. A description beginning with = is written as literal text — openpyxl would otherwise turn it into a live formula in an auditor's spreadsheet.
  • Files are never overwritten. Output is timestamped and exclusively created, so a regenerated report cannot replace one already attached to a ticket. Path is reported back.
  • ok means complete. A document with any gap comes back as written_with_gaps, and you cannot override that.

Boundaries — which skill owns what

Want to…Use
Draw a diagramdrawio-diagram, markmap-viz, uml-diagram, threejs-network-viz. This embeds their output and never redraws it — pass the file they produced plus src naming them
Read a document into the knowledge baserag-mcp (feature 062). It reads these formats; this writes them. Same libraries, opposite direction
Create or update a change recordservicenow-change-workflow owns the CR lifecycle. This renders a document from one and never writes a ticket
Send the document somewhereslack-report-delivery, webex-report-delivery. Writing a file is in scope here; sending it is not
Compose a NetClaw-shaped reportnetwork-report-documents — the four standard compositions

Important rules

  1. Never fill a gap with a guess. Send unavailable or failed with a real reason.
  2. Never send a value without src. It will be refused, and it should be.
  3. Call pdf_inspect_form before pdf_fill_form so you map data to fields that actually exist.
  4. Report what the response says. If it came back written_with_gaps, tell the operator the document is incomplete and which parts. Handing over a gapped document as if it were finished undoes the whole point.
  5. Give the operator the path. They need to find the file.

Frequently asked questions

What does the Document Generation AI skill do?

Generate Word (.docx), Excel (.xlsx) and PowerPoint (.pptx) documents and fill existing PDF forms, from real NetClaw data, with per-element provenance and no fabrication. This is the generic document-writing engine (tool surface, tagged-value shapes, fabrication rules). For the four standard NetClaw report compositions (change record, audit workbook, executive summary deck, PDF form) with their content-sourcing rules, use `network-report-documents` instead — it is built on this skill. Use this skill directly for any other one-off deliverable.

Why use Document Generation on TypingMind?

Because you install it once and use it with any model. Document Generation is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Document Generation in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/automateyournetwork/netclaw/tree/main/workspace/skills/document-generation. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Document Generation?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Document Generation?

As many as you like. As long as a model supports skills, you can use Document Generation with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Document Generation AI skill free?

Yes. It is published on GitHub by automateyournetwork under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇