Bowerbird
Like its namesake bowerbird, it collects — then, unlike you, it curates. Bowerbird audits, cleans, categorises and helps you rediscover your browser bookmarks, entirely on your own machine.
pip install bowerbird-bookmarks
bowerbird ingest # read your browsers' bookmarks (read-only)
bowerbird check # validate every link
bowerbird serve # dashboard at http://127.0.0.1:8420
What it does
- Multi-browser ingest — Chrome, Brave, Edge, Vivaldi (one Chromium parser),
Firefox (
places.sqlite) and Safari (read-only). Sources are facets, not silos: the same link saved in two browsers is one URL, tracked once. - Link validation that doesn't lie: only 404/410 (or a confirmed soft-404) counts as dead; a bot-wall 403 is blocked, not dead; reaching a login page counts as alive; YouTube videos are checked via oEmbed because deleted videos still return 200.
- Canonicalisation and duplicate detection (tracking params stripped, youtu.be unified, per-source dupe groups with a keeper heuristic).
- LLM thematic analysis (Claude, two-pass): a taxonomy is derived from your collection first, then bookmarks are assigned 1–3 categories with confidence. Categories are tags — one bookmark can live in many.
- Full-text search (SQLite FTS5) over titles, URLs, topics, and the visible text of every reachable page.
- Ask your bookmarks — ask a question, get links from your own collection grouped by theme with a line on why each is relevant. Never answers from the open web.
- Graveyard & Wayback — dead links get Internet Archive snapshot lookup, per-row or bulk replace, and bulk retire for the unrecoverable.
- Domain triage — review a whole domain in one decision.
- Obsidian export — topic notes plus per-bookmark stubs with frontmatter and wikilinks; drop the folder into your vault.
- Topic map — a force-directed graph of your collection's themes.
- Safe write-back — regenerate the browser's bookmarks file: duplicates
collapsed, dead links moved to a
_Graveyardfolder (never silently deleted), Wayback replacements applied. Dry-run by default, timestamped backup always, refuses to run while the browser is open.
Requirements
- macOS (browser profile discovery is macOS-path based for now)
- Python 3.12+
- An Anthropic API key (
ANTHROPIC_API_KEY) for the categorisation and Ask features — everything else works without one.
Data location
Everything lives in $BOWERBIRD_HOME (default ~/.bowerbird): the SQLite database,
write-back backups, reports and exports. A bowerbird.db in the current directory is respected. Your browsers' own files are only ever
written by the explicit bowerbird writeback --apply, and backed up first.
Commands
| Command | What it does |
|---|---|
bowerbird sources |
detect and register installed browsers |
bowerbird ingest |
import bookmarks + history (read-only, reconciling) |
bowerbird check |
validate links (--recheck to re-probe) |
bowerbird enrich |
fetch page titles/descriptions/text for search |
bowerbird categorize --taxonomy / --assign |
two-pass LLM categorisation |
bowerbird index |
rebuild the full-text search index |
bowerbird wayback |
look up Internet Archive snapshots for dead links |
bowerbird report |
write a Markdown audit report |
bowerbird obsidian |
export an Obsidian-ready folder |
bowerbird writeback --source-id N [--apply] |
write the cleaned tree back |
bowerbird serve |
the dashboard (Library, Ask, Graveyard, Duplicates, Domains, Topic map) |
Notes
The CLI is also installed under the short alias bower, and the Python module
is import bowerbird.
Status
Beta. Built and used in anger on a 9,600-bookmark collection; APIs and schema may still change. Issues and ideas welcome.
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 bowerbird_bookmarks-0.6.0.tar.gz.
File metadata
- Download URL: bowerbird_bookmarks-0.6.0.tar.gz
- Upload date:
- Size: 39.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
443299a353357b3f8b7a08fab955ebbd8426bae789b20bc2f6237da36c2d04d7
|
|
| MD5 |
e6b94d4d854da3c1d6d530829d8fc397
|
|
| BLAKE2b-256 |
15dbd1a72f2fa80e8f88f7162a9ee4c1b0ab0418891bc32aee252c1bbfea4849
|
File details
Details for the file bowerbird_bookmarks-0.6.0-py3-none-any.whl.
File metadata
- Download URL: bowerbird_bookmarks-0.6.0-py3-none-any.whl
- Upload date:
- Size: 48.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bd994244fab425dbe358828a4cc45a506e490568e1cb600c14c0f9d3830d480
|
|
| MD5 |
7106822870f28ddc2d7049c415a8915c
|
|
| BLAKE2b-256 |
38c636615d0a6adcc58c48c33f9d0566cfd8d9adaa3e7bc74f6a7eb632686577
|