doc2md
Batch-convert Word, PowerPoint, Excel, OpenDocument, RTF, EPUB, CSV and PDF into clean GitHub-Flavored Markdown before the agent starts reading — one file, a list, or a whole folder at once. For when
markdown
conversion
pdf
docx
batch
SKILL.mdskills/doc2md
GitHubdoc2md — конвертация документов в Markdown до чтения агентом
Зачем
Агент обычно читает .docx, .xlsx, .pptx, .pdf каждый своим отдельным ридером — на пачке из 10-20 файлов это десятки лишних вызовов инструментов и разный формат вывода под каждый тип. doc2md прогоняет всё через один конвертер и на выходе всегда получается чистый GitHub-Flavored Markdown, независимо от того, что было на входе.
Это не замена скиллам docx/pdf/xlsx/pptx для точечной работы с одним файлом (правки, форматирование, извлечение изображений — там нужны они). doc2md — для случая «прочитать содержимое пачки документов и дальше с ней работать», особенно когда документов много и формат смешанный.
Три способа подать файлы на вход
- Путь(и), которые назвал пользователь. Передать как есть, можно несколько через пробел.
- Файл прислали в чат. Cowork кладёт вложения в папку uploads текущей сессии — путь виден в системном контексте. Передать этот путь напрямую, отдельно скачивать не нужно.
- Целая папка. Передать путь к папке — скрипт рекурсивно найдёт внутри всё поддерживаемое и сконвертирует.
Быстрый старт
Основной, кросс-платформенный вариант (Windows/macOS/Linux, нужен только Node.js — он и так требуется для npx/anydoc):
node <папка скилла>/scripts/convert.js договор.docx
node <папка скилла>/scripts/convert.js ~/Downloads/акты/ -o ~/Downloads/акты-md/
node <папка скилла>/scripts/convert.js a.pdf b.xlsx "отчёт за март.pptx"
На Unix (macOS/Linux/WSL/Git Bash) можно вызвать тот же конвертер через bash:
bash <папка скилла>/scripts/convert.sh договор.docx
Без -o каждый <имя>.<расширение>.md пишется рядом с исходником (например, отчёт.docx → отчёт.docx.md). С -o папка/ результаты собираются в одном месте. Тёзки из разных подпапок получают суффикс пути, чтобы один результат не перезаписал другой.
Для одного файла и разового вызова можно и напрямую, без скрипта:
npx -y @firecrawl/anydoc report.docx -o report.docx.md
Скрипт convert.js нужен для пакетного случая (папка, список файлов) и для честной сводки по результатам, single-file вызов ничего не добавляет к прямому npx.
Поддерживаемые форматы
| Группа | Расширения |
|---|---|
| Word | .doc .docx .docm |
| PowerPoint | .ppt .pps .pot .pptx .pptm .ppsx .ppsm |
| Excel | .xls .xlsx .xlsm .xlsb |
| OpenDocument | .odt .ods .odp |
| Прочее | .rtf .epub .csv .pdf |
Что скрипт делает, а что нет
- Конвертирует файл(ы), печатает построчный статус (
OK/ПРОПУСК/ОШИБКА) и итоговую сводку: сколько успешно, сколько пропущено, сколько ошибок вызова. - Различие ПРОПУСК vs ОШИБКА.
OK— код anydoc0и результат записан.ПРОПУСК— код3, PDF нужны OCR-страницы. Любой другой сбой чтения, конвертации, записи или вызова —ОШИБКАи ненулевой код всего пакета. В строку выводится stderr от anydoc. - Сканы и PDF-картинки без текстового слоя локальный режим не читает. Такие файлы попадают в «ПРОПУСК», batch на этом не падает. Для них: сначала OCR через скилл
pdf(шаг «сделать PDF searchable»), потом повторный прогон. У anydoc 0.2.4 есть--ocr hosted, но он отправляет весь документ в Firecrawl Parse; эта обёртка его не включает. - Зашифрованные/защищённые паролем файлы —
ОШИБКАс объяснением от anydoc; не отправляй их на OCR. - Не удаляет и не трогает исходники. Повторный запуск может обновить ранее созданный
.md.
Содержимое файла передаётся через stdin, чтобы путь с пробелами и
%VAR%не попадал в командную строкуcmd.exeна Windows. Коды возврата взяты изanydoc --helpверсии 0.2.4.
После конвертации
Для больших документов не пересказывай .md в контекст целиком — прочитай оглавление/начало, дальше ищи (grep) по конкретным разделам. На пачке из десятков файлов это ощутимая экономия токенов относительно построчного чтения каждого через штатный формат-специфичный ридер.
Установка
Ничего ставить не нужно: npx -y @firecrawl/anydoc сам скачивает нужный бинарник под платформу при первом запуске (нужен Node 18+, в песочнице Cowork уже есть). Для постоянного использования без повторной загрузки каждый раз: npm install -g @firecrawl/anydoc.
Протестировано (06.08.2026, песочница Cowork, Node 22, Linux/macOS)
.csvс кириллицей → чистая GFM-таблица, без искажений..docxс заголовком, абзацем и таблицей на русском → корректный Markdown, кириллица не потеряна.- Папка с двумя файлами одного имени, разных расширений (
test.csv+test.docx) → найдена и починена коллизия имён до релиза: без сохранения расширения в имени.mdоба ложились в один файл и второй перезаписывал первый. - Путь с пробелами и кириллицей в имени файла → работает.
- Несуществующий путь в списке аргументов → пропускается с понятным сообщением, batch не падает.
scripts/convert.js(кросс-платформенная Node-версия): та же батарея тестов повторена и прошла — рекурсивный обход папки, коллизия имён, кириллица в.docx/.csv, вложенная подпапка, несуществующий путь.- Синтаксис-гейт обеих версий (
node --check,bash -n) и smoke-тесты (--help, несуществующий путь) гоняются в CI на каждый PR.
Автоматический Windows CI прошёл 07.10.2026: CSV и настоящий DOCX с пробелами и %TEMP% в имени, извлечение текста из DOCX и коллизии в -o. Установку скилла и боевую пачку на пользовательском Windows-компьютере ещё не проверяли; .pptx, .xlsx, .pdf и .epub тоже не тестировались вживую.
Источник
Обёртка над github.com/firecrawl/anydoc (MIT, Rust). По собственному бенчмарку авторов (⚠️ вендорские цифры, независимо не перепроверялись) против libreoffice/unstructured/markitdown/pandoc/docling/mammoth на 100 документах — anydoc первым местом по качеству на всех 14 форматах и на два порядка быстрее (медиана 4.4 мс/документ против 100+ мс у конкурентов). Апстрим публикует свой минимальный skill (npx skills add firecrawl/anydoc) — он умеет то же самое для одного файла за раз, без пакетной обработки, без сводки по batch и без русской документации. Этот скилл достраивает именно то, чего там нет.