Skip to main content

perusal

The internet without all the 💩

pip install perusal

perusal https://en.wikipedia.org/wiki/Domino    # -> clean Markdown on stdout
perusal ./saved-page.html                        # a local HTML file works too
perusal report https://example.com               # HTML-vs-Markdown size / token savings
perusal url1 url2 url3                           # -> one combined Markdown digest
echo '<h1>hi</h1>' | perusal -                   # read HTML from stdin

Pages pass through the domonic Readability and Turndown ports: fetch → readable-article extraction → Markdown → cleanup, with optional relevance ranking (--query) and a hard character budget (--max-chars).

Pages that render client-side (an empty server response, "Enable JavaScript to view this content") need their own JavaScript actually run first:

pip install 'perusal[js]'
perusal https://example.com/app --js             # runs the page's <script>s via myjs first

The reader-browser

pip install 'perusal[browser]'
perusal browse                                   # tabbed webview reader
perusal browse https://en.wikipedia.org/wiki/Domino

A small tabbed reader-browser (history, incognito tabs, bookmarks, DevTools, adjustable type, Wikipedia math rendering, "save page as Markdown") with keyboard shortcuts: ⌘/Ctrl+T new tab, W close tab, R reload, D bookmark, B toggle bookmarks, U view page source, L focus the URL bar.

DevTools (the </> button): raw page Source, a static Resources inventory (every referenced script/stylesheet/image/iframe, each viewable in turn), and an Info tab with IP / reverse DNS / WHOIS / DNS records (hand-rolled clients, no new dependency) plus certificate-transparency-log subdomain discovery via crt.sh. Purely passive and manually triggered — no port scanning, no active brute-forcing, nothing sent to the site itself beyond the page fetch perusal already made.

MCP server (optional)

pip install 'perusal[mcp]'
perusal mcp                                       # stdio MCP server

One read-only, idempotent tool — web_read(url, query?, max_chars?, timeout?) — built on the official Python MCP SDK. Point an MCP client at perusal mcp.

See the full documentation.

Metadata

Release files for perusal 0.0.5

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

Source distribution (sdist)

Source distribution for perusal 0.0.5
File Size Uploaded Provenance Actions
perusal-0.0.5.tar.gz 33.2 kB Without provenance Details for perusal-0.0.5.tar.gz

Built distribution (wheel)

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

Total release size: 66.9 kB

Release files / perusal-0.0.5.tar.gz

Download URL perusal-0.0.5.tar.gz
Size 33.2 kB
Tags Source
SHA-256 checksum
How to use checksums
02919238f2c727571e55eba18881826b948082d632c9c968cca64c6f0faaceb9
BLAKE2b-256 checksum
How to use checksums
eb01cea5a038dfee580e48443cdb1c695d28e5440c3a70ea4b55fe0fb38028e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / perusal-0.0.5-py3-none-any.whl

Download URL perusal-0.0.5-py3-none-any.whl
Size 33.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
04865a9b6ce0ead3e54464f286c1d059cd9d022d36c0d7f3a85f3f3c24c9583b
BLAKE2b-256 checksum
How to use checksums
ae371f46a916906afcc4ae2b09302bf1a9bc03d58c8439990426fcd3f9cf3888
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Security for perusal 0.0.5

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.5 This release

2 release files No provenance

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