Turn X bookmarks into a portable local knowledge pack for both humans and AI agents.
This public repo is the distribution track for tooling incubated in the private x-bookmark-gallery environment.
- generates a static bookmark pack from exported or pre-extracted X bookmark data
- keeps the same corpus usable for both human browsing and AI-agent ingestion
- fits local-first workflows, schedulers, and archive-friendly publishing
- sanitized public sample pack generation
- static
gallery.html+ companion JSON outputs - fixture-based sanitize checks in CI
- scheduler-friendly refresh flow on top of an upstream bookmark source
This is not trying to be a generic bookmark SaaS. It is trying to make exported X bookmarks:
- local-first
- portable
- human-browsable
- AI-readable
- static and archive-friendly
Think of it as:
a knowledge-pack generator / viewer for X bookmarks
not:
a cloud bookmark manager
Good fit for:
- people who want a local-first way to reuse X bookmarks
- people who want the same bookmark corpus to work for both humans and AI agents
- people who already have an extracted bookmark DB / export process upstream
Not the best fit for:
- people looking for a polished cloud bookmark SaaS
- people looking for a zero-setup generic bookmarking product
- people who want the viewer itself to fully own upstream collection
The intended flow is simple:
- upstream extractor / bookmark DB produces JSON
refresh_bundle.pyrefreshes the stable bundlegallery.htmland companion JSON outputs are regenerated- a scheduler reruns the same command later
This is why the repo is positioned as a knowledge-pack layer on top of an extracted source, not as a full bookmark SaaS.
Before: bookmarks often stay trapped inside the platform UI and are awkward to reuse.
After: the same corpus becomes a local HTML view for humans, structured JSON for AI agents, and a schedulable refresh target.
Minimum public bundle:
gallery.htmlbookmarks.jsontags.jsontranslations.jsonpackage-info.jsonREADME.md
Optional later:
bookmarks.mdbookmarks.jsonl
validation-report.json is treated as standard output for sanitized bundles, but optional for sample/manual bundles.
- local static gallery rendering
- text / author search
- media-type filtering
- tag filtering
Tag MatchtoggleAND tagfiltering- sample pack generation
- private-style input -> public-safe bundle sanitizing
- validation report generation
Supported / CI-verified Python versions:
- 3.10
- 3.11
- 3.12
python .\scripts\build_sample_pack.pyOutput goes to dist/sample-pack.
If you want the shortest local "is this fork healthy?" check before using your own data:
python .\scripts\run_sanitize_fixtures.py
python .\scripts\run_sanitize_exitcode_checks.py
python .\scripts\build_sample_pack.pypython .\scripts\render_gallery.py .\sample-data\bookmarks.json .\dist\custom\gallery.html --tags .\sample-data\tags.jsonpython .\scripts\sanitize_import.py .\sample-data\private-input.sample.json .\dist\sanitized-sample --overwritepython .\scripts\refresh_bundle.py .\sample-data\private-input.sample.json .\dist\live-bundleThe recommended upstream is an extracted bookmark DB / export JSON outside the viewer UI.
- Sample pack path: close to zero-setup
- Real data path: requires an upstream extracted bookmark JSON / DB outside this repo
- Scheduler path: comes after the local refresh command already works once
docs/quickstart.mddocs/quick-reference.mddocs/sanitize-import-example.mddocs/use-with-agents.mddocs/public-safe-import-boundary.mddocs/refresh-pipeline.mddocs/scheduler-setup.mddocs/recommended-upstream-input.mddocs/who-its-for.mddocs/end-to-end-example.mddocs/upstream-integration.mddocs/why-adopt.md
This project should try to win on:
- bookmark-to-knowledge-pack transformation
- local shareability
- AI-readable static artifacts
- simple human browsing over structured exports
Not on:
- cloud sync scale
- generic bookmark SaaS breadth
- “AI tagging” alone
MIT

