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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file perusal-0.0.5.tar.gz.
File metadata
- Download URL: perusal-0.0.5.tar.gz
- Upload date:
- Size: 33.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02919238f2c727571e55eba18881826b948082d632c9c968cca64c6f0faaceb9
|
|
| MD5 |
5d5cede1e2f3be8d01b8398607445d1c
|
|
| BLAKE2b-256 |
eb01cea5a038dfee580e48443cdb1c695d28e5440c3a70ea4b55fe0fb38028e0
|
File details
Details for the file perusal-0.0.5-py3-none-any.whl.
File metadata
- Download URL: perusal-0.0.5-py3-none-any.whl
- Upload date:
- Size: 33.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04865a9b6ce0ead3e54464f286c1d059cd9d022d36c0d7f3a85f3f3c24c9583b
|
|
| MD5 |
1cc18feac4e5995e6dfd18221a55b909
|
|
| BLAKE2b-256 |
ae371f46a916906afcc4ae2b09302bf1a9bc03d58c8439990426fcd3f9cf3888
|