anydoc — convert-documents-to-markdown skill

# anydoc — convert-documents-to-markdown

Installed: 2026-08-14

## What it is

[anydoc](https://github.com/firecrawl/anydoc) by Firecrawl: a pure-Rust library + CLI that converts office documents to clean GitHub-Flavored Markdown. Median conversion under 5 ms, no ML models, fully local.

Supported formats (14): Word (.doc/.docx/.docm), PowerPoint (.ppt/.pps/.pot/.pptx/.pptm/.ppsx/.ppsm), Excel (.xls/.xlsx/.xlsm/.xlsb), OpenDocument (.odt/.ods/.odp), RTF, EPUB, CSV, and text-based PDF.

## What is installed on this machine

| Component | Location / command |
| --- | --- |
| CLI (global, prebuilt Windows binary) | `npm install -g @firecrawl/anydoc` → `anydoc` command |
| Kilo skill (all projects) | `C:\Users\jan\.config\kilo\skills\convert-documents-to-markdown\SKILL.md` |

The skill file is the official SKILL.md from the repo, placed manually — Kilo discovers skills at `skills/<name>/SKILL.md` in `~/.config/kilo/` (global) or `.kilo/` (per project), same open format Claude Code / Cursor use. New sessions surface its name + description to the agent, which loads the full instructions on demand.

## Usage

```bash
anydoc report.docx               # Markdown to stdout
anydoc slides.pptx -o slides.md  # write to a file
anydoc - --format csv < data.csv # read stdin
```

- Format is detected from file content, not extension; `--format` is only needed for stdin CSV or wrong extensions
- Exit codes: 0 success, 1 conversion failed, 2 usage error
- Large documents: use `-o` and read parts, don't stream everything into context
- Libraries also available: `@firecrawl/anydoc` (npm), `firecrawl-anydoc` (PyPI), `anydoc` (crates.io)

## Caveats

- No OCR: scanned/image-only PDFs fail as unsupported (Firecrawl's hosted Parse API covers those)
- Project is young (first released Aug 2026); benchmarks are self-reported but verified install + smoke test passed (CSV → GFM table)

## Why not the official installer

`npx skills add firecrawl/anydoc` targets Claude Code / Codex / Cursor / OpenCode and their config paths; it does not know Kilo's. Placing the same SKILL.md in Kilo's global skills directory achieves the identical result.

id: c726f33fbba34cceb144bc7929917081
parent_id: 49fa12562d8744a9abb8f81815faf180
created_time: 2026-08-14T15:27:40.554Z
updated_time: 2026-08-14T15:27:40.554Z
is_conflict: 0
latitude: 0.00000000
longitude: 0.00000000
altitude: 0.0000
author: 
source_url: 
is_todo: 0
todo_due: 0
todo_completed: 0
source: joplin-desktop
source_application: net.cozic.joplin-desktop
application_data: 
order: 1786721260554
user_created_time: 2026-08-14T15:27:40.554Z
user_updated_time: 2026-08-14T15:27:40.554Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
is_locked: 0
extracted_resource_ids: 
type_: 1