Office Artifacts
Prismer-AI/PrismerCloud
Generate real DOCX, PPTX, XLSX, PDF, CSV files using python-docx / python-pptx / openpyxl / reportlab by writing them into the dispatch artifacts dir, then explicitly deliver each one with cloud…
Read and write real documents on the device - PDF, XLSX, DOCX, PPTX and CSV.
$ npx skills add zhongkaifu/TensorSharp --skill documents -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install zhongkaifu/TensorSharp documents --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/zhongkaifu/TensorSharp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/TensorAgent/skills/documents .claude/skills/documents && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "documents" agent skill from https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documents into .claude/skills/documents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "documents", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documentsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add zhongkaifu/TensorSharp --skill documents -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install zhongkaifu/TensorSharp documents --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zhongkaifu/TensorSharp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/TensorAgent/skills/documents .agents/skills/documents && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "documents" agent skill from https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documents into .agents/skills/documents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "documents", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add zhongkaifu/TensorSharp --skill documents -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install zhongkaifu/TensorSharp documents --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zhongkaifu/TensorSharp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/TensorAgent/skills/documents .cursor/skills/documents && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "documents" agent skill from https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documents into .cursor/skills/documents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "documents", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/zhongkaifu/TensorSharp.git --path TensorAgent/skills/documents--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add zhongkaifu/TensorSharp --skill documents -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install zhongkaifu/TensorSharp documents --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zhongkaifu/TensorSharp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/TensorAgent/skills/documents .gemini/skills/documents && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "documents" agent skill from https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documents into .gemini/skills/documents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "documents", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install zhongkaifu/TensorSharp documentsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add zhongkaifu/TensorSharp --skill documents -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/zhongkaifu/TensorSharp.git skills-src && mkdir -p .github/skills && cp -r skills-src/TensorAgent/skills/documents .github/skills/documents && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "documents" agent skill from https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documents into .github/skills/documents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "documents", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add zhongkaifu/TensorSharp --skill documents -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install zhongkaifu/TensorSharp documents --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/zhongkaifu/TensorSharp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/TensorAgent/skills/documents .opencode/skills/documents && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "documents" agent skill from https://github.com/zhongkaifu/TensorSharp/tree/main/TensorAgent/skills/documents into .opencode/skills/documents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "documents", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
documentsRead and write real documents on the device - PDF, XLSX, DOCX, PPTX and CSV.
Documents is an agent skill from zhongkaifu/TensorSharp. Read and write real documents on the device - PDF, XLSX, DOCX, PPTX and CSV. Turn a photo or picture into a PDF, generate a PDF report or a slide deck from structured input, build a spreadsheet whose formulas carry computed values, extract text and tables out of a PDF or an Office file, and compute sums, means and groupings over a CSV or XLSX. Use whenever the user asks to convert an image to a PDF, to analyse a document or a table, or to produce a report, deck, spreadsheet or Word document.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts (for example `scripts/analyze_table.py`, `scripts/make_docx.py` and `scripts/make_pdf.py`).
It sits in Documents & Office, covering Excel spreadsheets, Word documents and PowerPoint presentations. It works with Microsoft Word, Microsoft Excel, Microsoft PowerPoint and CUDA. The repository describes itself as: A native .NET LLM inference engine and agent runtime for GGUF models. TensorSharp provides a console application, a web-based chatbot interface, iPhone App, and…. The licence is BSD-3-Clause.
Read from SKILL.md and the folder at commit 93e4edb. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 10 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3pipFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Documents loads about 4.2k tokens when it runs. Until then it costs about 127 tokens; SKILL.md has 1,952 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from zhongkaifu/TensorSharp at commit 93e4edb, republished under its BSD-3-Clause licence (© zhongkaifu). 1,952 words, ~4,210 tokens.
.claude/skills/documents/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.Six scripts. Every one runs under the interpreter bundled in this app, with the packages that are already there: reportlab, pypdf, openpyxl, Pillow and defusedxml, plus the standard library. Nothing here needs the network, a child process, or a package the user has to install. python-pptx, python-docx and lxml are bundled too (see Limits) for the things these writers do not do.
Read Limits before promising the user anything. Two of them change what you should say in your answer.
| The user wants | Run |
|---|---|
| A photo or a picture turned into a PDF | make_pdf.py --image |
| A report, a memo, anything to print or share as a PDF | make_pdf.py --spec |
| A CSV turned into a spreadsheet, as it stands | make_xlsx.py --csv |
| A spreadsheet built from figures you computed | make_xlsx.py --spec |
| A slide deck | make_pptx.py |
| A Word document | make_docx.py |
| Numbers out of a CSV or spreadsheet | analyze_table.py |
| Text or tables out of a document they gave you | read_document.py |
| To check a file you produced | validate_document.py |
A typical request — "analyse this spreadsheet and make me a deck" — is
analyze_table.py to get the numbers, then make_pptx.py with those numbers in
the spec. Do not put a number in a document that you did not compute.
Starting from a CSV. Three different requests, three different answers, and picking the wrong one wastes the turn:
make_xlsx.py --csv sales.csv --out sales.xlsx. Do not build a spec by hand
for this, and do not reach for analyze_table.py: it profiles columns and
refuses --out on a workbook without --group-by, because a profile is not
a table.analyze_table.py, which computes it.
Add --total revenue to the command above if you want the workbook to carry
the sum as a live formula as well.read_document.py, or the shell), then write a spec whose
table block holds those rows, then run make_pdf.py / make_pptx.py /
make_docx.py. Put the real rows in the spec; do not summarise them away.python3 scripts/make_pdf.py --image photo.jpg --out photo.pdf
python3 scripts/make_pdf.py --image a.png --image b.png --out album.pdf --title Album
python3 scripts/make_pdf.py --spec spec.json --out report.pdf
python3 scripts/make_pdf.py --spec - --out report.pdf # spec on stdin"Turn this photo into a PDF" is --image, and it is one command. Do not write
a spec for it. The user's attached files are already in your working directory
under the names you were told — pass that name straight to --image. Each picture
gets a page of its own, scaled to fit with its proportions kept; --title adds a
title page. Pass either --image or --spec, never both.
An iPhone photo is HEIC, and the interpreter here has no HEIC decoder. The app
stages a .png beside it for exactly this reason — if you were told about both
IMG_0004.heic and IMG_0004.png, the .png is the one to pass.
Writes the PDF, reopens it with pypdf, and prints JSON: file, bytes,
pages, blocks, extractable_characters. Non-zero exit means it failed.
{
"title": "Q3 Revenue Review",
"subtitle": "Prepared on device",
"author": "TensorAgent",
"page_size": "letter",
"landscape": false,
"margin_in": 0.9,
"blocks": [
{ "type": "heading", "level": 1, "text": "Summary" },
{ "type": "paragraph", "text": "Revenue rose 18%.", "mono": false },
{ "type": "bullets", "items": ["South overtook East", "Costs flat"] },
{ "type": "numbers", "items": ["Load the CSV", "Group by region"] },
{ "type": "table",
"columns": ["Region", "Units", "Revenue"],
"rows": [["West", 120, 420.0], ["East", 200, 700.0]],
"column_widths": [2, 1, 1],
"zebra": true },
{ "type": "image", "path": "chart.png", "width_in": 5.0, "caption": "Figure 1." },
{ "type": "pagebreak" },
{ "type": "spacer", "height": 12 }
]
}page_size is letter or a4. level is 1-3. Numeric table cells are
right-aligned and thousands-separated automatically; the header row repeats when
a table crosses a page. column_widths are relative, not absolute. An unknown
block type is an error, not a skipped block.
There is no chart type. Draw one with Pillow into a .png and add it as an
image block — that is what the image block is for.
python3 scripts/make_xlsx.py --csv sales.csv --out sales.xlsx
python3 scripts/make_xlsx.py --csv sales.csv --out sales.xlsx --total revenue
python3 scripts/make_xlsx.py --spec spec.json --out book.xlsx--csv writes the file as it stands: the header becomes the columns, and a
cell that reads as a number is stored as one, so the column can be summed.
--sheet-name names the sheet (default: the file's own name), and --total COL
adds a SUM row for that column — a real formula with its value cached, like
every other formula here. It is repeatable. Everything below is about --spec,
which is what you use when the figures are ones you computed rather than ones
already in a file.
Read this part. A formula in an .xlsx is only text; the number a reader sees
is the cached value left behind by the last application that saved the file.
There is no Excel and no LibreOffice on this device, so nothing will recalculate
the sheet after you write it. This script therefore evaluates every formula in
Python and writes the value into the cell alongside the formula. The file
also carries fullCalcOnLoad, so a real Excel recomputes everything anyway the
moment the user opens it.
If a formula cannot be evaluated here, the cell gets the formula and no
cached value, the script lists it under uncomputable_formulas, and it exits
non-zero. Tell the user which cells those are; do not present the file as
finished.
{
"sheets": [
{
"name": "Sales",
"columns": ["Region", "Units", "Price", "Revenue"],
"rows": [["West", 120, 3.5, null], ["East", 200, 3.5, null]],
"formulas": [
{ "range": "D2:D3", "formula": "=B{r}*C{r}" },
{ "cell": "D4", "formula": "=SUM(D2:D3)" },
{ "cell": "D5", "formula": "=ROUND(AVERAGE(D2:D3),2)" }
],
"number_formats": { "C": "#,##0.00", "D": "#,##0.00" },
"column_widths": { "A": 18 },
"freeze_header": true,
"auto_filter": true
}
]
}range fills a block of cells from one entry: {r} becomes the row number and
{c} the column letter. Header cells are styled, columns are sized to content,
and a formula may refer to another formula cell in any order.
Functions the evaluator implements: SUM AVERAGE AVG MEDIAN MIN MAX COUNT COUNTA STDEV PRODUCT ABS SQRT INT ROUND POWER LEN UPPER LOWER TRIM CONCAT CONCATENATE IF AND OR NOT, the operators + - * / ^ % &, comparisons, and A1 ranges. It does
not implement lookups (VLOOKUP, INDEX/MATCH), whole-column ranges
(A:B), cross-sheet references or dates. Compute those in Python and write the
result as a value.
python3 scripts/make_pptx.py --spec spec.json --out deck.pptx16:9. Five slide layouts; every slide may have a title.
{
"title": "Q3 Revenue Review",
"author": "TensorAgent",
"slides": [
{ "layout": "title", "title": "Q3 Revenue Review", "subtitle": "Prepared on device" },
{ "layout": "bullets", "title": "What happened",
"bullets": ["South overtook East", { "text": "since 2023", "level": 1 }] },
{ "layout": "table", "title": "By region",
"columns": ["Region", "Revenue"], "rows": [["West", 420.0]] },
{ "layout": "image", "title": "Revenue", "image": "chart.png", "caption": "Figure 1." },
{ "layout": "text", "title": "Next", "text": "Recheck the North price." }
]
}Bullets nest to three levels via level. The common tree form
{ "text": "Heading", "bullets": ["Detail"] } is also accepted and flattened
to those levels, so do not rewrite an otherwise-correct spec just to expand it.
A citation bullet may add date and url beside text; the writer joins all
three visibly on the slide. Images are scaled to fit and centred.
A table slide holds about 12 rows before it runs off the bottom — split a longer
one across slides. notes is refused rather than silently dropped: speaker
notes need a notesMaster part this writer does not build.
Prefer the canonical fields in the example. For compatibility with common deck
specs, a slide with no layout is a bullets slide and its content array is an
alias for bullets (do not provide both). An optional top-level sources array
accepts URL strings or { "title": "...", "date": "...", "url": "..." }
objects and becomes a final Sources slide. For compatibility, the same
sources array on an individual slide is collected into that one final Sources
slide; a slide whose only body is sources acts as that final-slide placeholder
instead of creating an additional empty slide. A text slide that also contains a bullets array is unambiguously
normalized to a bullets slide, with its introductory text retained first.
Unknown fields, ambiguous aliases, and layouts without visible required content
fail before a .pptx is written; the diagnostic names the slide and the fields
accepted by its layout.
python3 scripts/make_docx.py --spec spec.json --out report.docxSame block vocabulary as make_pdf.py, minus spacer:
{
"title": "Q3 Revenue Review",
"subtitle": "Prepared on device",
"author": "TensorAgent",
"blocks": [
{ "type": "heading", "level": 2, "text": "By region" },
{ "type": "paragraph", "text": "Revenue rose 18%.", "bold": false, "italic": false, "align": "left" },
{ "type": "bullets", "items": ["Top level", { "text": "Nested", "level": 1 }] },
{ "type": "numbers", "items": ["First", "Second"] },
{ "type": "table", "columns": ["Region", "Revenue"], "rows": [["West", 420.0]] },
{ "type": "image", "path": "chart.png", "width_in": 5.0, "caption": "Figure 1." },
{ "type": "pagebreak" }
]
}Real Word styles (Title, Heading 1-3, Caption, Table Grid) and real list numbering, so the document's outline and its lists behave as Word's own.
python3 scripts/analyze_table.py sales.csv
python3 scripts/analyze_table.py sales.csv --group-by Region --sum Revenue --mean Price
python3 scripts/analyze_table.py book.xlsx --sheet Q3 --group-by Region --sum Revenue --out summary.xlsx
python3 scripts/analyze_table.py sales.csv --where "Units>=12" --where "Region=West" --sum Revenue --group-by Rep| Option | Effect |
|---|---|
--sheet NAME | which sheet of an .xlsx (default: the first) |
--delimiter C | CSV delimiter (default: sniffed) |
--where "Col=v" | keep matching rows; = != > < >= <=; repeatable |
--group-by COL | aggregate per distinct value of this column |
--sum COL | total this column per group; repeatable |
--mean COL | average this column per group; repeatable |
--out FILE | also write .json, .csv or .xlsx |
With no --group-by it profiles every column: filled/empty counts, distinct
values, and for numeric columns count, sum, mean, median, min, max and stdev;
for text columns the five commonest values. JSON always goes to stdout.
$1,240.00, 1 240, 45% and (320) all read as numbers. A blank cell is not
zero: it is left out of sums and means, and rows_dropped_not_a_number counts
the rows an ordering filter could not judge. Say that number out loud if it is
not zero — it usually is the finding.
formula_cells_without_cached_values is the other one to watch. Reading an
.xlsx gives you the value the file has cached, so a workbook whose totals are
formulas that nothing ever calculated reads as blank and counts as nothing. When
that number is not zero, say so rather than reporting a total built out of holes.
python3 scripts/read_document.py report.pdf --tables --json extracted.json
python3 scripts/read_document.py notes.docx
python3 scripts/read_document.py deck.pptx --json deck.json
python3 scripts/read_document.py book.xlsx --sheet Q3Readable text on stdout; --json also writes the structured form, which is what
a follow-up script should consume.
--tables then finds runs of lines whose
fields start at the same character positions. It is a heuristic: it finds the
tables a report lays out in aligned columns, misses ones drawn with borders
and no alignment, and sometimes calls a numbered list a table. Look at what it
returned before quoting it.make_xlsx.py caches them, which is the point of it.python3 scripts/validate_document.py report.docx deck.pptx book.xlsx report.pdf
python3 scripts/validate_document.py deck.pptx --json checks.jsonPrints PASS/FAIL per file and exits non-zero if any failed. make_pdf.py,
make_xlsx.py, make_docx.py and make_pptx.py already run this on their own
output; use it on a file you assembled by hand or edited afterwards.
No Office application has opened these files. There is no Word, PowerPoint
or Excel on this device, and no headless converter — LibreOffice, which the
published document skills shell out to for exactly this check, cannot be bundled
and could not be launched if it were, because iOS starts no subprocesses. What
validate_document.py checks is that the package is internally consistent:
every part [Content_Types].xml names exists, every part has a content type,
every relationship resolves, every XML part parses, and the primary part has the
root element and children its kind requires. That is a real check and it catches
the mistakes that make a file unopenable — but a PASS means well formed, not
opened. If the user reports that a file will not open, believe them.
python-docx and python-pptx ARE here, and so is lxml. Both import
lxml.etree at module scope, and lxml is a C extension that no index publishes
for iOS — so this app compiles it itself and ships it as signed frameworks,
alongside python-pptx, python-docx, XlsxWriter and typing_extensions.
Import them directly; pip install of any of them by name is a no-op. lxml is
compiled into the app and cannot be replaced by a download; the pure ones could
be shadowed by a pinned install, but nothing here needs that. The writers above
still build the OOXML
themselves with zipfile and xml.etree (they predate this, and they validate
their own output), which is why their feature set is the list above and not
everything Word can do. For what they lack — charts, speaker notes, headers and
footers, editing a document the user gave you — use python-pptx or python-docx
and run validate_document.py on the result, which checks their output the
same way.
pdfplumber is not here. It needs pdfminer.six, which imports
cryptography at the top of pdfminer/pdfdocument.py in every release back to
2022, and cryptography is a Rust extension with no pure wheel of any kind.
That is why PDF reading is pypdf's layout mode and the table finder is a
heuristic rather than a ruling-line analysis. An encrypted PDF that needs a real
password cannot be opened here at all.
Spreadsheet formulas are evaluated by a subset. See the function list under
make_xlsx.py. Anything outside it is refused by name and reported, never
guessed at.
© zhongkaifu, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 10 other files (scripts) in TensorAgent/skills/documents of zhongkaifu/TensorSharp.
Open the folder on GitHubat commit 93e4edb
Documents next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Documents this skillzhongkaifu/TensorSharp | 559 | — | ~4.2k | Automated safety check: Pass | BSD-3-Clause | |
| Office ArtifactsPrismer-AI/PrismerCloud | 1.6k | — | ~2.6k | Automated safety check: Pass | MIT | |
| Markdown Exporterbowenliang123/markdown-exporter | 272 | 1 repos | ~5.3k | Automated safety check: Pass | Apache-2.0 | |
| MinerU Document Readeropendatalab/MinerU | 81k | — | ~9.4k | Automated safety check: Warn | Custom licence | |
| Sn Da Non Spreadsheet AnalysisOpenSenseNova/SenseNova-Skills | 5.7k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Light File ReadingLight0305/Light-skills | 640 | — | ~4.1k | Automated safety check: Pass | MIT |
Prismer-AI/PrismerCloud
Generate real DOCX, PPTX, XLSX, PDF, CSV files using python-docx / python-pptx / openpyxl / reportlab by writing them into the dispatch artifacts dir, then explicitly deliver each one with cloud…
bowenliang123/markdown-exporter
Convert Markdown text to DOCX, PPTX, XLSX, PDF, PNG, SVG, HTML, IPYNB, MD, CSV, JSON, JSONL, XML files, and extract code blocks in Markdown to Python, Bash,JS and etc files.
opendatalab/MinerU
Reads, OCRs, searches and cites local documents through the mineru CLI, covering PDF, images, Office files, EPUB, HTML and CSV.
OpenSenseNova/SenseNova-Skills
Word / PDF / PPT 文档解析与数据分析引擎。覆盖三类文件格式的全量提取、表格数值化、图表理解与跨文档汇总分析。遇到以下任一情况就主动使用本 skill:①用户上传或指定了 .docx / .doc / .pdf / .pptx / .ppt 文件并要求分析、提取或统计其中内容;②用户出现触发词:Word分析 / PDF解析 / PPT提取 / 文档分析 / 报告解析 /…
Light0305/Light-skills
Light 多格式文件深度理解常驻技能:强大地读 Word / PDF / PPTX / Excel / CSV / 图片 / 视频 / 代码 / 压缩包,不只提取文字,而是理解结构 / 图表 / 数据 / 格式要求 / 隐含意图,产结构化"理解笔记"五面 (结构逻辑·关键内容·格式约束·视觉风格·可复用)并映射到下游技能动作(这个文件→接下来能做什么)。
NateBJones-Projects/OB1
Use in Claude Code when a user asks to read, analyze, summarize, or extract from a heavyweight file such as PDF, DOCX, PPTX, XLSX, CSV, or TSV.
zhongkaifu/TensorSharp
Use only for current stock/share prices, ticker quotes, and financial market movers (gainers, losers, most-traded shares).
zhongkaifu/TensorSharp
A skill your agent uses for web searches and current information lookups, finding sources, fact-checking, researching questions, comparing sources, or summarising web pages.
Categories
Read and write real documents on the device - PDF, XLSX, DOCX, PPTX and CSV. Documents is an agent skill from zhongkaifu/TensorSharp. Read and write real documents on the device - PDF, XLSX, DOCX, PPTX and CSV.
Documents fits situations like: the user asks to convert an image to a PDF; analyse a document; produce a report.
Run `npx skills add zhongkaifu/TensorSharp --skill documents -a claude-code`. Or copy the skill folder (TensorAgent/skills/documents in zhongkaifu/TensorSharp) into .claude/skills/documents in your project. Claude Code loads it when a task matches its description.
Run `npx skills add zhongkaifu/TensorSharp --skill documents -a codex`. Or copy the skill folder (TensorAgent/skills/documents in zhongkaifu/TensorSharp) into .agents/skills/documents in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add zhongkaifu/TensorSharp --skill documents -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/documents, .gemini/skills/documents, .github/skills/documents and .opencode/skills/documents in your project.
Going by SKILL.md and its folder, Documents needs Python for the scripts in its folder and the command-line tools its instructions call (python3 and pip). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Documents is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Documents: Office Artifacts (Prismer-AI/PrismerCloud, 1.6k stars), Markdown Exporter (bowenliang123/markdown-exporter, 272 stars), MinerU Document Reader (opendatalab/MinerU, 81k stars) and Sn Da Non Spreadsheet Analysis (OpenSenseNova/SenseNova-Skills, 5.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
zhongkaifu (a GitHub user) maintains it in zhongkaifu/TensorSharp, which has 559 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.
Source: zhongkaifu/TensorSharp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.