Skip to main content
carrel — a library desk for your files, and your agents



Python 3.12+ License: MIT tests release



carrel desk TUI tour

carrel desk — browse the tree, inspect a file, run an action, search the index.

carrel pack token stats

carrel pack src --stats — the token table, before you spend a context window on it.

carrel redact proof

carrel redact — true raster redaction of a PDF, and the proof: grep exits 1.

A carrel is a private study desk in a library: your materials close at hand, organized your way. carrel is that desk for your local files — pdf, docx, odt, epub, rtf, xlsx, md, html, txt, json, xml, csv, and png/jpg/ico images — with 26 commands to convert, OCR, inspect, diff, index, search, pack, watch, and more. And it treats AI agents as first-class users of the desk: every data-producing command speaks --json with stable exit codes, carrel pack turns file trees into LLM-ready context, and the repo doubles as a Claude Code plugin marketplace whose plugins drive the same CLI.

What can it do

Domain Command What it does
Convert & transform carrel convert Conversion across pdf, md, html, txt, docx, odt, epub, rtf, png/jpg/ico, json, xml, csv, plus xlsx → csv/json; the full SRC → target matrix is in carrel convert --help
carrel ocr Images and scanned PDFs → text, markdown, or a searchable PDF
carrel edit PDF merge/split/rotate/extract-pages, image resize/rotate/crop, text find-replace, json set/del
carrel extract-images Pull embedded images out of pdf, ico, and html
carrel audiobook Narrate txt/md/pdf and docx/odt/epub/rtf into mp3/ogg, chapters from markdown headings
Inspect & prove carrel inspect Metadata + per-type structure summary: sha256, pages, EXIF, json shape, csv dialect, docx paragraphs, xlsx sheets…
carrel diff Unified text diffs, structural json/csv diffs, pdf text diffs, image pixel diffs
carrel thumb Thumbnails for pdfs, images, and html
carrel proof Soft-proof against an ICC profile, with a ΔE summary
carrel color Dominant palette extraction, ICC conversion, contrast checks
The desk index carrel index SQLite FTS5 index of everything under a root (.carrel/carrel.db, versioned schema); --status reports stale rows
carrel search bm25-ranked full-text search with type and tag filters
carrel tag Tag files; find by tag
carrel note Sidecar notes on any file; real text annotations on PDFs
carrel catalog Export/import tags + notes as JSON (move a desk, commit it next to a repo); status shows schema version and stale index rows
Agents & context carrel pack Bundle files/trees into one LLM-ready document — md/xml/json; --query packs what the desk index ranks relevant, --since REF/--changed packs what git touched; include/exclude globs, .gitignore-aware (with ! negation), chunking, --dedupe-content, --outline, token estimates or exact counts (--tokenizer exact)
carrel mcp Serve the whole desk over MCP on stdio: 10 tools (search, pack, inspect, tag, note, index, convert, diff, redact, doctor) plus carrel://file/{path} and carrel://search/{query} resources
Housekeeping carrel organize Sort a folder by type/date/EXIF date — dry-run by default
carrel dedupe Exact (BLAKE2) and near (perceptual hash) duplicate detection
carrel watch Watch a folder and run shell actions on file events
carrel redact Pattern/PII redaction for text formats; true raster redaction for PDFs
carrel sign Visible PDF stamps, sha256 manifests, gpg-backed verify
carrel form Build html/pdf forms from JSON specs; list and fill AcroForm PDFs
The desk itself carrel desk The flagship TUI — see below; needs the tui extra
carrel doctor What your environment enables today, with install hints for the rest
carrel completion Tab-completion scripts for bash, zsh, and fish

carrel wraps the masters — pandoc, poppler, qpdf, tesseract/ocrmypdf, ImageMagick, exiftool, ffmpeg… — behind one adapter layer with capability detection. Missing binary? Commands degrade with an install hint (exit 3), never a crash. Several copies of a tool on PATH? Pin one with CARREL_BIN_<NAME> (docs/CONFIGURATION.md).

Quickstart

Requires Python ≥ 3.12 and uv. No checkout needed:

uv tool install 'carrel[all]'   # or: pipx install 'carrel[all]' — puts `carrel` on your PATH
                                # plain `carrel` skips the TUI and office/token extras (see INSTALL)
carrel doctor         # what can your desk do today? (+ apt hints for the rest)

(Contributing or hacking on it? uv tool install . from a checkout does the same thing.)

A first taste:

carrel inspect paper.pdf                              # pages, sha256, producer, form fields…
carrel convert minutes.docx --to md                   # office/ebook formats read and write via pandoc
carrel index . && carrel search "marginal notes"      # FTS5 over your whole desk
carrel pack src/ --format xml -o context.xml --stats  # LLM-ready context + token table
carrel pack docs/ --query "release checklist" --stats # only the files the index ranks relevant
carrel catalog export -o desk.json                    # tags + notes, portable and diff-able

Add --json to any of these and you get machine-readable output on stable exit codes — that's the whole agent contract. Tab completion: eval "$(carrel completion bash)" (zsh and fish too).

The marketplace

This repo is also a Claude Code plugin marketplace: plugins whose slash commands, agents, skills, and hooks all delegate to the CLI above. The table below is a snapshot — docs/MARKETPLACE.md is authoritative for the current plugin list.

claude plugin marketplace add coltonbearden/carrel
claude plugin install carrel-inspect@carrel
Plugin Gives Claude
carrel-inspect /inspect, /diff, /search, /pack + a context-packing skill
carrel-convert /convert, /ocr, /thumb, /audiobook + a batch doc-converter agent
carrel-organize /organize, /dedupe, /tag, /note-file
carrel-watch /watch-folder + a watch-automation recipe skill
carrel-agent A file-librarian agent, the carrel MCP server, and a hook that re-indexes files Claude writes

Install the CLI first (see Quickstart) so the plugins can call it. Works headless too:

claude -p "/carrel-inspect:inspect text+image.pdf" --allowedTools "Bash(carrel:*)"

The full validated flow (with real output) is in docs/TEST_REPORT.md.

The desk TUI

carrel desk
carrel mark

The flagship: a three-pane Textual desk. A file tree on the left, an inspector in the middle (metadata, preview, tags, notes), an action palette on the right (convert, ocr, pack, thumbnail…) — all driving the same core library as the CLI, with full-text search along the bottom. Theme: warm lamplight on dark wood, per docs/BRAND.md.

Learn more

License

MIT © Colton Bearden

Related projects

  • brainrot — Self-audit toolkit for Claude: mine your own chat history for corrections and wins, arbitrate findings into a lean rule set, keep memory tidy

Release files for carrel 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for carrel 0.3.1
File Size Uploaded
carrel-0.3.1.tar.gz 215.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for carrel 0.3.1
File Interpreter ABI Platform
carrel-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 363.1 kB

Release files / carrel-0.3.1.tar.gz

Download URL carrel-0.3.1.tar.gz
Size 215.3 kB
Tags Source
SHA-256 checksum
How to use checksums
14ed5fcaf4699a6d8de8311bbaa7358aff76ec0125a69ec231d50bd5c20099c4
BLAKE2b-256 checksum
How to use checksums
68a63dd67ee7c7421baf46623d8d6989009a6fa2f30f58b16b6758cc5d700e25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Release files / carrel-0.3.1-py3-none-any.whl

Download URL carrel-0.3.1-py3-none-any.whl
Size 147.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2730f2119273430946deb900907e7a05031479110f5502183811326b332bba4f
BLAKE2b-256 checksum
How to use checksums
4a14eb39c83ba38122224c6281e96458ad4b9d9bcd09cc90a01389c19eda1036
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.2

2 release files

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page