headcleaner
headcleaner
Обходит папку, преобразует каждый документ в Markdown (с frontmatter), OKF v0.2 (с frontmatter) или в оба — с анимированным TUI в стиле omp.
headcleaner convert ~/Documents/inbox --format both --output ~/Documents/inbox.cleanheadcleaner — это Python CLI, который сканирует указанную вами директорию, определяет каждый документ по расширению, запускает подходящий механизм извлечения (OfficeCLI для офисных форматов, pdfplumber для PDF, BeautifulSoup для HTML и т.д.) и выдаёт чистый нормализованный результат — либо Markdown и OKF рядом, либо только один.
Форматы вывода:
--format md(Markdown),--format okf(набор OKF v0.2),--format both(по умолчанию)Покрытие движками: 7 форматов из коробки (XLSX, DOCX, PPTX, PDF, HTML, HTM, TXT) — см. docs/FORMAT_MATRIX.md с дорожной картой 16 форматов к v1.0
TUI: анимированный терминал в стиле omp (панели с псевдографикой, неоновая палитра, разделители powerline)
Линтер:
headcleaner lintпроверяет преобразованные Markdown / OKF на проблемы форматированияPST по сообщениям: один концепт OKF на каждое письмо (через readpst), поэтому проверка и согласование работают файл за файлом
Бэкенд office_oxide: чистые Python-привязки на Rust для офисных форматов (~100x быстрее OfficeCLI)
Эвристическая очистка:
headcleaner convert --cleanзапускает 12-этапный конвейер очистки, вдохновлённый any2mdЗапасной вариант all2md: автоматически обрабатывает 38 дополнительных форматов (Jupyter, LaTeX, reST, исходный код и т.д.), если установлен all2md
headcleaner mcp: запуск headcleaner в качестве MCP-сервера, предоставляющего 14 инструментовokf_*любому хосту MCP-агентов (Claude Code, Cursor и т.д.) — установка черезuv pip install "headcleaner[mcp]"Диагностика:
headcleaner doctorпроверяет Python, PATH, OfficeCLI, права на вывод и реестр@slug, затем выдаёт вердикт GO/NO-GOПлагины адаптеров: сторонние пакеты регистрируют форматы через группу точек входа
headcleaner_pluginzsv CSV: самый быстрый в мире SIMD-парсер CSV (~10-100x быстрее stdlib), когда
zsvесть в PATHАттестация доверия:
headcleaner attestстроит корень Меркла + подпись ed25519;verifyпроверяет еёЛокальный просмотр:
headcleaner serve <bundle>предоставляет FastAPI-интерфейс для просмотра и поискаЧестные значения по умолчанию: поля доверия OKF заполняются
unverified/human:pending, никогда не выдумываются
Установка
# 1. The Office engine — single binary, no Office install needed
npm install -g @officecli/officecli
# 2. The CLI itself (Python ≥3.12, uv-managed)
uv tool install headcleaner
# Or for development:
git clone <this repo>
cd headcleaner-cli
uv sync
uv run headcleaner --helpДругие способы установки (curl | bash, pip, brew, Windows PowerShell) см. в docs/INSTALL.md.
Быстрый старт
headcleaner ~/Documents/inbox --format both --output ./cleanВ результате получается:
clean/
├── manifest.json # run summary: per-file status, engine, sha256
├── REPORT.md # count, average time, and error rate by engine
├── _md/ # plain Markdown (one file per source)
│ ├── notes.docx.md
│ ├── q3.pdf.md
│ └── ...
└── okf/ # OKF v0.2 bundle (one concept per source)
├── index.md # auto-generated directory index
├── notes.md # OKF concept: type=Document
├── q3.pdf.md
└── ...Справочник по CLI
headcleaner convert <INPUT_DIR> [OPTIONS]
Options:
-f, --format {md,okf,both} Output format(s) [default: both]
-o, --output DIR Output directory [default: ./out]
--ocr Enable Tesseract OCR for scanned PDFs
--officecli-timeout <secs> Timeout per OfficeCLI subprocess call (default: 60)
--include, -i GLOB Include glob (may be repeated)
--exclude, -e GLOB Exclude glob (may be repeated)
--jobs, -j N Parallel worker processes (default: 1 = sequential)
--no-cache Re-convert every file (skip the SHA-256 cache)
--no-continue-on-error Stop on the first failure
--obsidian-compat Add Obsidian-friendly flat fields to OKF frontmatter
--clean Run the 12-stage heuristic cleanup pipeline (any2md-inspired) on each body
--tui / --no-tui Force / disable the animated TUI (default: auto-detect TTY)
--no-okf-index Skip OKF directory index.md generationДругие команды: headcleaner doctor [--output-dir DIR] Запуск диагностики установки и прав headcleaner templates Список поддерживаемых форматов headcleaner agents Показать статус установки движков headcleaner watch IN [--webhook-url URL] Повторное преобразование при изменении файлов (Ctrl+C для остановки) headcleaner lint Проверка преобразованных Markdown / OKF на проблемы форматирования headcleaner lint --fix Автоисправление безопасных проблем в .fixed/ headcleaner serve Локальный HTTP-браузер для набора OKF headcleaner notion-import <EXPORT.zip> Реверсирование экспорта рабочего пространства Notion headcleaner attest Вычисление корня Меркла + опциональная подпись ed25519 headcleaner verify Проверка аттестации относительно набора
## Why OKF?
OKF (Open Knowledge Format, v0.2) is just **markdown + YAML frontmatter in a directory hierarchy**. That means:
- Every concept is a single `.md` file you can `cat`, `grep`, edit in any text editor
- Bundles live in git — pull requests, diffs, blame all work
- Obsidian, Notion, MkDocs, Hugo, Jekyll all consume OKF natively
- Required frontmatter key is just `type` — anything beyond that is producer freedom
See [docs/OKF_NOTES.md](docs/OKF_NOTES.md) for the OKF v0.2 specifics this CLI emits.
## Trust stance (honest defaults)
We never auto-claim review. Every emitted OKF concept gets:
- `status: unverified`
- `verified: human:pending`
- `generated: human:<user>@<host>` (OKF §7 actor convention)
- `stale_after: <today + 180d>`
- `sources: [{uri: file://..., sha256: ...}]`
A human can grep `human:pending` later to find concepts needing review. See [docs/OKF_NOTES.md](docs/OKF_NOTES.md) for the full contract.
## Supported formats
See [docs/FORMAT_MATRIX.md](docs/FORMAT_MATRIX.md) for the full engine × library table. At a glance:
| Format | Engine | Library |
|---|---|---|
| `.docx`, `.xlsx`, `.pptx` | OfficeCLI binary | (native DOM) |
| `.pdf` | pdfplumber (text-layer), pytesseract if `--ocr` | pdfplumber / pytesseract |
| `.html`, `.htm` | BeautifulSoup | beautifulsoup4 |
| `.txt` | chardet + read | chardet |
| `.md`, `.markdown` | pass-through + frontmatter inject | stdlib |
| `.csv`, `.tsv` | Sniffer dialect + GFM table (zsv SIMD when installed) | stdlib `csv` (or `zsv` binary) |
| `.json` | pretty-print + fenced block | stdlib `json` |
| `.eml` | headers + text/html body + attachments | stdlib `email` |
| `.epub` | per-chapter HTML → MD | ebooklib (+ bs4 fallback) |
| `.rtf` | control-word stripping | striprtf (+ regex fallback) |
| `.odt`, `.ods`, `.odp` | paragraph/row extraction + GFM tables | odfpy (+ raw-XML fallback) |
| `.msg` | Outlook headers + body + attachments | extract-msg |
| `.pst` | **per-message** (one OKF concept per email) | readpst (libpst) + libpff-python fallback |
| `.docx`, `.xlsx`, `.pptx` | **office_oxide** (primary, ~100x faster), OfficeCLI binary (fallback) | office_oxide 0.1.8 (PyO3) |
| `.ipynb`, `.latex`, `.rst`, sourcecode, `.enex`, `.chm`, etc. (38 formats) | all2md (when installed) | all2md 1.12 |
| `.doc`, `.xls`, `.ppt` | clear error path | needs `libreoffice --convert-to` first |
## Live mode
```bash
headcleaner watch ~/inbox --output ~/out --webhook-url https://hooks.slack.com/...Автоматически перезапускает преобразование при изменении файлов в ~/inbox.
Каждый повторный запуск отправляет манифест на URL вебхука (опционально). Нажмите
Ctrl+C для остановки.
Синхронизация хранилища Obsidian
headcleaner convert ~/inbox --format okf \
--output ~/Documents/MyVault/Concepts \
--obsidian-compatДобавляет плоские поля, совместимые с Obsidian (source, sha256, generated_by,
verified_by, stale_on), в frontmatter OKF, чтобы концепт корректно
отображался в панели свойств Obsidian. Исходные поля OKF остаются
нетронутыми для обратного преобразования.
Проверка (согласование человеком)
Автоконвертация устанавливает verified: human:pending. TUI headcleaner review
проходит по всем ожидающим концептам в наборе и позволяет человеку переключить
каждый из них на:
approved →
verified: human:reviewed,status: verified,reviewed_at,reviewed_by,reviewed_viarejected →
verified: human:rejected,status: rejected, опциональныйrejection_reasons[]skipped → оставляет концепт как
pending
headcleaner review ./out/okf
# Textual TUI: a=approve, r=reject, s=skip, n=next, p=prev, q=quitЕсли Textual недоступен (например, headless CI), автоматически используется REPL в простом режиме.
Распространение
PyPI:
pip install headcleaner(сборка через uv, публикация через OIDC trusted publishing при пуше тега)Homebrew:
brew install headcleaner(формула вpackaging/homebrew/)Docker:
docker pull ghcr.io/local/headcleaner(многоступенчатый образ с tesseract)Windows:
winget install headcleaner,scoop install headcleaner,choco install headcleanerСтатический бинарник:
pip install pyinstaller && pyinstaller packaging/pyinstaller/headcleaner.spec
Полный чек-лист релиза в RELEASE.md.
Поверхность CLI
headcleaner view <bundle> (добавьте --tui для просмотра в терминале) отображает набор OKF как единый автономный HTML-граф (без бэкенда, открывается в любом браузере). Полные опции см. в docs/VIEWER.md.
headcleaner convert IN_DIR [flags] # walk + convert
headcleaner watch IN_DIR [flags] # live mode + webhooks
headcleaner review BUNDLE # human sign-off TUI/REPL
headcleaner attest BUNDLE [--private-key PEM] # Merkle root + optional ed25519 sig
headcleaner verify BUNDLE [--public-key PEM] # verify an attestation
headcleaner serve BUNDLE [--host] [--port] # local HTTP browser for the bundle
headcleaner glob DIR # interactive include REPL (Textual)
headcleaner notion-import EXPORT.zip OUT # reverse a Notion workspace export
headcleaner lint DIR [--fix] # OKF + MD rule checks
headcleaner doctor [--output-dir] # dependency and permission preflight
headcleaner agents [stdout] # emit AGENTS.md
headcleaner templates # list supported formatsДокументация
Документ | Назначение |
этот файл — установка, быстрый старт, справочник по CLI | |
все способы установки (curl, pip, brew, PowerShell, uv, Docker) | |
подробное руководство по использованию с примерами | |
как устроен конвейер и где его расширять | |
все поддерживаемые форматы × движки × библиотеки | |
контракт OKF v0.2, который выдаёт этот CLI + политика доверия | |
JSON-схема frontmatter OKF и интеграция с редакторами/CI | |
протокол точек входа для сторонних адаптеров | |
частые ошибки и их исправление | |
часто задаваемые вопросы | |
как добавить новый формат / движок / эмиттер | |
история релизов | |
44+ реализованных улучшений и будущие идеи | |
расширение HeadCleaner для VS Code (Concept Explorer + Trust Inspector) |
Устранение неполадок
officecli not found — установите с помощью npm install -g @officecli/officecli. Выполните headcleaner agents для проверки.
PDF без извлекаемого текста — ваш PDF содержит только изображения. Повторно запустите с --ocr (требуются pytesseract и бинарник Tesseract в PATH).
Скрытые файлы пропускаются — это намеренно. Файлы, начинающиеся с ., отбрасываются обходчиком.
Отсутствует index.md OKF для корня — автоматически создаётся, когда в наборе есть ≥1 концепт. Используйте --no-okf-index, чтобы отказаться.
Подробнее — см. docs/TROUBLESHOOTING.md.
Разработка
git clone <this repo>
cd headcleaner-cli
uv sync
uv run pytest # 314 tests, ~14s
uv run headcleaner convert ./tests/fixtures --format both --output ./outАрхитектура
src/headcleaner/
├── walk.py # recursive folder walker
├── router.py # extension → engine dispatch
├── normalize.py # CanonicalDoc + OKF/MD frontmatter builders
├── lint.py # post-conversion linter (OKF + Markdown)
├── run.py # pipeline orchestrator
├── cli.py # Click CLI (headcleaner command)
├── tui.py # Textual TUI (omp-style)
├── engines/
│ ├── base.py # Adapter ABC
│ ├── officecli.py
│ ├── pdf.py
│ ├── html.py
│ └── txt.py
└── emit/
├── markdown.py
├── okf.py
├── okf_index.py
└── manifest.pyДобавление нового формата: поместите модуль в engines/, зарегистрируйте адаптер в router.py, добавьте строку в docs/FORMAT_MATRIX.md. Полное руководство по расширению см. в docs/CONTRIBUTING.md.
Лицензия
Apache-2.0
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Markdown in, any format out. PDFs merged, split, watermarked. Runs on our own doc engines.
Markdown utilities MCP.
MCP server for AgentDocs (agentdocs.eu): read, search, write, comment on & share Markdown docs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jamesdsizemore/headcleaner-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server