Markitdown
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
Write natural, human-sounding Persian (Farsi) and build correct right-to-left Persian deliverables.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add ali2000hos/persian-writing --skill persian-writing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ali2000hos/persian-writing persian-writing --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "persian-writing" agent skill from https://github.com/ali2000hos/persian-writing/tree/main into .claude/skills/persian-writing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "persian-writing", 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.
$ npx skills add ali2000hos/persian-writing --skill persian-writing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ali2000hos/persian-writing persian-writing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "persian-writing" agent skill from https://github.com/ali2000hos/persian-writing/tree/main into .agents/skills/persian-writing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "persian-writing", 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 ali2000hos/persian-writing --skill persian-writing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ali2000hos/persian-writing persian-writing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "persian-writing" agent skill from https://github.com/ali2000hos/persian-writing/tree/main into .cursor/skills/persian-writing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "persian-writing", 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.
$ npx skills add ali2000hos/persian-writing --skill persian-writing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ali2000hos/persian-writing persian-writing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "persian-writing" agent skill from https://github.com/ali2000hos/persian-writing/tree/main into .gemini/skills/persian-writing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "persian-writing", 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 ali2000hos/persian-writing persian-writingInstalls 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 ali2000hos/persian-writing --skill persian-writing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "persian-writing" agent skill from https://github.com/ali2000hos/persian-writing/tree/main into .github/skills/persian-writing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "persian-writing", 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 ali2000hos/persian-writing --skill persian-writing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ali2000hos/persian-writing persian-writing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "persian-writing" agent skill from https://github.com/ali2000hos/persian-writing/tree/main into .opencode/skills/persian-writing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "persian-writing", 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.
persian-writingWrite natural, human-sounding Persian (Farsi) and build correct right-to-left Persian deliverables.
Persian Writing is an agent skill from ali2000hos/persian-writing. Write natural, human-sounding Persian (Farsi) and build correct right-to-left Persian deliverables. Use for ANY task involving Persian text or an Iranian audience: writing, editing, translating, humanizing, SEO content and copywriting (سئو، کپیرایتینگ، لندینگ), academic papers/theses, and Persian output in Word/.docx, PDF, PowerPoint, HTML, Excel, images/posters, emails, social posts. Covers register detection (رسمی/اداری/محاوره/علمی — errors here are costly), Persian AI-tell removal, orthography (نیمفاصله/ZWNJ،…
Its SKILL.md is about 4.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 59 other files, including scripts, reference files and assets (for example `.claude-plugin/marketplace.json`, `.claude-plugin/plugin.json` and `AGENTS.md`). Compatibility notes: Any agent that reads Markdown skills (Claude, Claude Code, Cursor, Codex, custom harnesses; chat-only AIs via universal/persian-writing-universal.md)…
It sits in Documents & Office, covering Humanizing AI text, PowerPoint presentations and Word documents. It works with Microsoft PowerPoint, Microsoft Word and Microsoft Excel. The repository describes itself as: Professional Persian (Farsi) writing & RTL documents skill for any AI — نگارش فارسی حرفهای برای هوش مصنوعی. The licence is MIT.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 75fcdf3. 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 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
python3bashnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, 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.
Any agent that reads Markdown skills (Claude, Claude Code, Cursor, Codex, custom harnesses; chat-only AIs via universal/persian-writing-universal.md). Scripts: Python 3.8+ stdlib only. docx/pptx→PDF conversion: LibreOffice + installed fonts. PDF checks: poppler-utils, pypdf, or PyMuPDF (any one).
From compatibility in the SKILL.md frontmatter.
Persian Writing loads about 4.4k tokens when it runs, and up to ~46k if it reads all its reference files. Until then it costs about 228 tokens; SKILL.md has 1,802 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 patterns that need a careful read before installing.
copywriting (سئو، کپی⟨U+200C⟩رایتینگ، لندینگ), academic papers/theses, and Persianersian AI-tell removal, orthography (نیم⟨U+200C⟩فاصله/ZWNJ، اعدادe فارسی, Farsi, Persian, Iran, RTL, راست⟨U+200C⟩چین, نیم⟨U+200C⟩فاصله, ویرایش, مقاله,پایان⟨U+200C⟩نامه, سئو, کپشن, Vazirmatn — even if the user never mentions this skill.emic: paper, thesis, report, مقاله/پایان⟨U+200C⟩نامه | `references/academic.md` |full written forms (می⟨U+200C⟩شود نه میشه), شما, zero slang — but است نه می⟨U+200C⟩باشد,(محاوره⟨U+200C⟩نویسی): میشه، می⟨U+200C⟩خوام، رو، particles like دیگه/که/مگه.2. **Ban the bureaucratic tells:** می⟨U+200C⟩باشد، لازم به ذکر است، در راستای،از اهمیت ویژه⟨U+200C⟩ای برخوردار است، نقش بسزایی ایفا می⟨U+200C⟩کند.نه تنها ... بلکه, tacked-on «که نشان⟨U+200C⟩دهنده⟨U+200C⟩ی ... است», vague «کارشناسان معتقدند»,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 ali2000hos/persian-writing at commit 75fcdf3, republished under its MIT licence (© ali2000hos). 1,802 words, ~4,364 tokens.
.claude/skills/persian-writing/SKILL.md (or your agent's skills folder). This skill also uses 56 other files; get the full folder from GitHub.Two failure modes make Persian output look machine-made, and they are independent:
Fixing one without the other still produces something a native reader screenshots and laughs at. This skill fixes both. Work through the two checklists below, and read the reference file for your output format before generating anything.
| Task | Read |
|---|---|
| Any Persian prose (always) | references/writing-style.md |
| Mechanical correctness (always) | references/orthography.md |
| Academic: paper, thesis, report, مقاله/پایاننامه | references/academic.md |
| Educational/technical content, docs, product pages, how-to | references/content-structures.md |
| Telegram, Instagram, captions, carousels, reels, stories | references/social-channels.md |
| SEO content, blog for search, landing/ad copy, کپشن فروش | references/seo-copywriting.md |
| Cleanup/normalize/spell-check existing text (ویرایش، پاکسازی) | references/cleanup/paknevis-rules.md + usage-patterns.md |
| Choosing/embedding fonts | references/fonts.md |
| Word/.docx or docx→PDF | references/docx-pdf.md |
| PowerPoint/.pptx | references/pptx.md |
| HTML, email templates, HTML→PDF | references/html-css.md |
| Images/posters (PIL), new PDFs (reportlab), Excel | references/format-skills-fa.md |
Visual neutrality — read before copying any code example. This skill styles NOTHING. It governs direction, spacing, fonts-for-shaping and text — never colors, accent bars, card backgrounds, or a house look. Every hex, border, and fill in the code examples is a stand-in written in plain grey/black; they exist to show WHERE a property goes, not what value to use. Default output is black text on default background, no accent color. Take colors and visual form ONLY from: the user's explicit request, an attached brand/theme skill, or an input template being matched. Absent those, do not invent a palette and do not carry one over from example to example — unstyled is the correct default, and a surprise purple heading is a bug.
This skill composes with the general docx/pptx/pdf skills: those handle file mechanics; this one overrides and extends them for Persian. When both disagree about RTL behavior, this skill wins — its rules come from debugging real Persian documents. If another active skill or the user specifies particular fonts or colors, those win on aesthetics; this skill still governs RTL mechanics and orthography. This skill itself is brand-neutral: colors in the code examples are placeholders, and Vazirmatn is just the default font, not a requirement.
Full guide in references/writing-style.md. The core moves:
references/academic.md.references/seo-copywriting.md.fa_lint.py --check --rhythm
flags flat rhythm, but lexical tells matter far more — writing-style.md §3.5.
The goal is prose that is genuinely better, not prose tuned to a detector:
AI detectors are unreliable and falsely flag second-language writers at very
high rates, and this skill never helps disguise authorship (§3.6).Full rules in references/orthography.md. These apply to every deliverable:
‌.npm install…».
For plain-text output where a line must open with a name,
persian_cleanup.py --bidi adds an invisible direction mark. Full rules:
orthography.md §9.Two scripts enforce this mechanically — use both before delivering Persian text:
# 1. FIX: paknevis-style editorial pass (ZWNJ, chars, digits, punctuation, گیومه)
python3 scripts/persian_cleanup.py --edit --in text.md --out text.md
# 2. LINT: report what still needs contextual judgment (dashes, میشود forms,
# fake tanvin, register issues) — fix these by hand
python3 scripts/fa_lint.py --check text.md--edit is safe on structured files. Fenced code blocks, inline code and table
rows are lifted out before processing and restored byte-identical, and leading
indentation is never collapsed. This matters because Persian typography rules
are correct for prose and destructive in code: they would turn "text" into
«text», rewrite ASCII digits as Persian, and flatten the spacing a table's
columns rely on. Pass protect_code=False (Python API) only if you truly want
those rules applied everywhere. Keep the file in version control either way —
the tool is careful, not omniscient.
persian_cleanup.py is a full toolkit (paknevis + davat merged): aggressive
cleaning for NLP (--preset persian), single functions (--fn convert_digits),
spell-check against the bundled 453K-word frequency dictionary
(--edit --spellcheck), custom pipelines. Persian «ویرایش» requests → --edit
(conservative, content preserved); «پاکسازی/نرمالایز» → --preset persian
(strips links/mentions/emojis). Details: references/cleanup/. Note: --edit
applies the خانهٔ ezafe style; drop fix_ezafe from --steps to keep خانهی.
Bundled in assets/fonts/ (SIL OFL — free for commercial use):
Other families (Shabnam, Sahel, Samim, Parastoo, Tanha, Gandom) and pairing advice:
references/fonts.md. In offline sandboxes only bundled fonts exist —
scripts/download_fonts.py works only where GitHub is reachable.
Before any docx→PDF or pptx→PDF conversion, install the fonts:
bash scripts/install_fonts.sh # copies assets/fonts → ~/.fonts, runs fc-cache
fc-list | grep -i vazir # verify — else LibreOffice silently falls backSkipping this is the #1 cause of broken Persian PDFs: conversion "succeeds" but every glyph is DejaVu tofu or disconnected letters.
Format-specific recipes live in the reference files. The universal ones:
bidirectional: true,
AlignmentType.RIGHT renders at the visual left. Always align START.rightToLeft: true + font with hint: "cs" (Complex Script).bidi: true. Tables that must flow right-to-left:
visuallyRightToLeft: true.List Number/List Bullet styles.
Their markers live in numbering.xml, which has no bidi and renders Latin
1. on the wrong side plus an OpenSymbol bullet that breaks font embedding.
Write markers as ordinary runs («۱. », «• ») — docx-pdf.md §6.1.styles.xml has no Persian font and Word's Heading styles
carry a blue color you never asked for. Run persianize_styles(doc) from
docx-pdf.md §6.1 immediately after Document(). Headers/footers are separate
XML parts and need the RTL treatment applied to them directly.keepNext + keepLines (no orphan headings);
cards/boxes go inside a single-cell table with cantSplit: true (never split
across pages); no separator after the last list item; no stray PageBreak
before a section break (blank pages).Two gates. Check the .docx BEFORE converting (catches what code review can't), then check the PDF:
# 1. DOCX: package integrity FIRST (a file Word won't open can't be RTL-checked),
# then section bidi, jc=right traps, cs fonts, list numbering, heading colors.
# --fix repairs missing <w:bidi/>; --sanitize strips the Word-for-Mac template
# artifacts python-docx inherits (the classic "file is corrupt" fingerprint).
python3 scripts/verify_docx.py output.docx --expect-font Vazirmatn --fix --sanitize
# 2. PDF: fallback fonts, blank pages, template leaks, Arabic chars
python3 scripts/verify_pdf.py output.pdf --expect-font Vazirmatnverify_docx.py exists because setting an RTL flag and that flag reaching the
XML are different things: libraries drop bidi from section properties, and
OOXML requires <w:bidi/> to be the FIRST child of <w:sectPr> — appended
anywhere else, renderers ignore it. Verify the artifact, never the source code.
It also guards the package itself: [Content_Types].xml must be the first ZIP
entry, every relationship Target must resolve, every XML part must be
well-formed and free of control characters. Repairs are written to a temp file
and validated before replacing anything, so a failed repair can't destroy the
document. Details and the already-corrupt-file procedure: docx-pdf.md §4.5.
It checks: near-empty pages, "undefined"/template leaks, non-embedded or fallback
fonts, Arabic ي/ك in extracted text, and page count. Fix every warning, regenerate,
re-verify. For prose, re-read your final text against the native test — one pass of
persian_cleanup.py --edit + fa_lint.py --check plus one honest read-aloud
catches most disasters.
persian-writing/
├── SKILL.md ← you are here
├── references/
│ ├── writing-style.md ← registers, Persian AI tells, colloquial patterns
│ ├── academic.md ← نگارش علمی: papers, theses, citations, formulas
│ ├── orthography.md ← ZWNJ, characters, digits, punctuation, ezafe
│ ├── cleanup/ ← paknevis rules, davat API, usage patterns
│ ├── fonts.md ← catalog, personalities, pairings, embedding
│ ├── content-structures.md ← POV, education vs promotion, body patterns
│ ├── social-channels.md ← Telegram/Instagram craft, repurposing
│ ├── seo-copywriting.md ← Persian SEO writing + کپیرایتینگ
│ ├── docx-pdf.md ← RTL docx recipes, pagination, PDF post-processing
│ ├── pptx.md ← RTL PowerPoint via python-pptx / html2pptx
│ ├── html-css.md ← RTL web, mixed-direction text, print CSS
│ └── format-skills-fa.md ← PIL posters, reportlab PDFs, Excel RTL
├── scripts/
│ ├── persian_cleanup.py ← FIX: edit/clean/normalize/spell-check (paknevis+davat)
│ ├── fa_lint.py ← LINT: report issues needing contextual judgment
│ ├── verify_docx.py ← DOCX RTL checks (+ --fix for section bidi)
│ ├── verify_pdf.py ← post-generation PDF checks
│ ├── check_version.py ← verify the version matches in all four places
│ ├── install_fonts.sh ← bundled fonts → ~/.fonts (run before PDF export)
│ └── download_fonts.py ← fetch extra families (needs GitHub access)
└── assets/
├── fonts/ ← Vazirmatn + Lalezar TTFs
└── persian_words.txt ← 453K-word frequency dictionary (spell-check)© ali2000hos, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. 27 hidden characters (zero-width or bidirectional) removed. Raw file
SKILL.md and 56 other files (scripts, references, assets) in the repository root of ali2000hos/persian-writing.
Open the folder on GitHubat commit 75fcdf3
Persian Writing 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 |
|---|---|---|---|---|---|---|
| Persian Writing this skillali2000hos/persian-writing | 368 | — | ~4.4k | Automated safety check: Warn | MIT | |
| MarkitdownImCa0/just-laws | 781 | 14 repos | ~3.2k | Automated safety check: Notes | MIT | |
| GenOffice Document CLIgenspark-ai/genoffice | 9.2k | — | ~19k | Automated safety check: Pass | Apache-2.0 | |
| Docx4jplutext/docx4j | 2.4k | — | ~2.5k | Automated safety check: Pass | None | |
| Cyber Pptcrazyykhllc-bit/CyberPPT | 1.8k | — | ~10k | Automated safety check: Pass | MIT | |
| Markitshift-labs-ai/markit | 1.3k | — | ~299 | Automated safety check: Pass | MIT |
ImCa0/just-laws
Convert files and office documents to Markdown. An agent skill from ImCa0/just-laws.
genspark-ai/genoffice
Creates, converts, reads and edits real pptx, xlsx, docx and PDF files locally through the genoffice command line.
plutext/docx4j
A skill your agent uses when writing Java code that creates, reads or edits Word (.docx), PowerPoint (.pptx) or Excel (.xlsx) files with docx4j — including generating documents, editing existing…
crazyykhllc-bit/CyberPPT
当用户需要把 DOCX、PDF、TXT、XLSX、研究报告、业务材料或原始数据转成高密度、可编辑、咨询风格 PPTX 时使用;也适用于需要 SCR 论证、视觉风格探索、详细图表和渲染质检的 PPT。
shift-labs-ai/markit
Convert files and URLs to Markdown. An agent skill from shift-labs-ai/markit.
jimmc414/Kosmos
Convert various file formats (PDF, Office documents, images, audio, web content, structured data) to Markdown optimized for LLM processing.
Categories
Write natural, human-sounding Persian (Farsi) and build correct right-to-left Persian deliverables. Persian Writing is an agent skill from ali2000hos/persian-writing. Write natural, human-sounding Persian (Farsi) and build correct right-to-left Persian deliverables.
Persian Writing fits situations like: ANY task involving Persian text; an Iranian audience: writing; SEO content and copywriting (سئو، کپیرایتینگ، لندینگ); academic papers/theses.
Run `npx skills add ali2000hos/persian-writing --skill persian-writing -a claude-code`. Or copy the skill folder (the ali2000hos/persian-writing repository) into .claude/skills/persian-writing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ali2000hos/persian-writing --skill persian-writing -a codex`. Or copy the skill folder (the ali2000hos/persian-writing repository) into .agents/skills/persian-writing 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 ali2000hos/persian-writing --skill persian-writing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/persian-writing, .gemini/skills/persian-writing, .github/skills/persian-writing and .opencode/skills/persian-writing in your project.
Going by SKILL.md and its folder, Persian Writing needs the command-line tools its instructions call (python3, bash and npm). Our summary lists: Python 3; Node.js; Docker. Compatibility (from SKILL.md): Any agent that reads Markdown skills (Claude, Claude Code, Cursor, Codex, custom harnesses; chat-only AIs via universal/persian-writing-universal.md). Scripts: Python 3.8+ stdlib only. docx/pptx→PDF conversion: LibreOffice + installed fonts. PDF checks: poppler-utils, pypdf, or PyMuPDF (any one). .
SKILL.md contains no URLs. Its commands use npm, 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 flagged 10 warning(s): contains zero-width characters. Read the flagged lines before installing; the check is not a guarantee either way. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Persian Writing is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.4k 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. Its references folder adds about 42k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Persian Writing: Markitdown (ImCa0/just-laws, 781 stars), GenOffice Document CLI (genspark-ai/genoffice, 9.2k stars), Docx4j (plutext/docx4j, 2.4k stars) and Cyber Ppt (crazyykhllc-bit/CyberPPT, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ali2000hos (a GitHub user) maintains it in ali2000hos/persian-writing, which has 368 GitHub stars. The repository was last updated on October 4, 2026.
Source: ali2000hos/persian-writing on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.