Convert Chrome bookmarks into Obsidian notes and Claude Code skills
Project description
bookmark2skill
Chrome bookmarks → Obsidian notes + Claude Code skill files.
This is not an AI application. It's a downstream utility tool for AI agents (Claude Code, Codex, etc.) — the AI agent is the brain, bookmark2skill is the hands. The tool itself does NOT call any LLM API.
Why
- Prevent link rot — bookmarks go dead anytime, local archive is the only reliable backup
- Deconstruct, don't summarize — extract logic chains, brilliant quotes, narrative craft, counterpoints, overlooked details — preserve the original texture
- Let AI agents understand your taste —
taste_signalsmodel your aesthetic preferences, thinking patterns, and values - AI summary — every piece must include a 2-4 sentence summary as a quick-access entry point
- Incremental processing — manifest tracks which bookmarks are processed, pending, or failed
Install
./build.sh develop # editable install with dev deps
# or
pip install . # production install
Optional: Playwright for JS-heavy pages:
pip install ".[browser]"
Configuration
mkdir -p ~/.bookmark2skill
cp defaults/config.toml ~/.bookmark2skill/config.toml
cp defaults/taxonomy.toml ~/.bookmark2skill/taxonomy.toml
Edit ~/.bookmark2skill/config.toml:
[paths]
vault_path = "/path/to/your/obsidian/vault"
skill_dir = "/path/to/your/skills"
Priority: config.toml < BOOKMARK2SKILL_* env vars < CLI flags
Workflow
AI agent orchestrates the following (humans can run manually too). b2k is a shorthand alias for bookmark2skill:
# 1. Parse bookmarks, register new URLs in manifest
b2k list --source chrome
# 2. Check processing status
b2k status
# 3. Fetch a single page
b2k fetch https://example.com/article > /tmp/raw.md
# 4. AI agent reads raw.md, produces structured JSON (see docs/agent-guide.md)
# 5. Write Obsidian note
b2k write-obsidian \
--url https://example.com/article \
--data /tmp/distilled.json
# 6. Write skill file (categorized by taxonomy)
b2k write-skill \
--url https://example.com/article \
--data /tmp/distilled.json \
--category engineering/system-design
# 7. Mark as done
b2k mark-done https://example.com/article \
--obsidian-path ./bookmark2skill/article.md \
--skill-path ./engineering/system-design/article.md
On fetch failure:
b2k mark-failed https://example.com/dead --reason "HTTP 404"
Commands
| Command | Purpose | Output |
|---|---|---|
list |
Parse bookmark source, register new URLs | JSON array → stdout |
fetch |
Fetch and clean a single page (auto/direct/jina/playwright) | Markdown → stdout |
write-obsidian |
Render structured JSON into Obsidian note | Writes file, path → stdout |
write-skill |
Render structured JSON into skill file | Writes file, path → stdout |
status |
Query manifest processing status | JSON counts → stdout |
mark-done |
Set URL status to 'done' in manifest | Updates manifest |
mark-failed |
Set URL status to 'failed' in manifest | Updates manifest |
search |
Search skill files by keyword | JSON results → stdout |
Run b2k <command> --help for detailed parameter descriptions.
Bookmark Sources
- Chrome local JSON —
--source chrome, auto-detects~/Library/Application Support/Google/Chrome/Default/Bookmarks - HTML export —
--source bookmarks.html, supports Netscape format from any browser - Folder filters —
--include-folder "Tech" --exclude-folder "Work"for selective processing
Output Formats
Obsidian Note (human-readable)
Writes to {vault-path}/bookmark2skill/{folder}/{slug}.md:
- YAML frontmatter (url, author, tags, dates)
- Summary (2-4 sentences)
- Six-dimension deconstruction: logic chains, brilliant quotes, narrative craft, concrete examples, counterpoints, overlooked details
- Empty sections auto-skipped
Claude Code Skill (AI-agent-friendly)
Writes to {skill-dir}/{category}/{slug}.md:
- Heavy frontmatter: taste_signals, reuse_contexts, quality_score, key_claims
- Light body: key insights, quotes, examples, when-to-reference
- Categorized by taxonomy for precise retrieval
Tiered Fetch
Tier 1: httpx + readability (fast, static pages)
↓ content too short
Tier 2: Jina Reader API r.jina.ai (JS-rendered pages, zero local deps)
↓ Jina fails
Tier 3: Playwright (local browser, optional dependency)
Override with --renderer direct|jina|playwright.
Taxonomy
Default categories in ~/.bookmark2skill/taxonomy.toml:
engineering/— system-design, frontend, backend, devopsthinking/— mental-models, decision-making, problem-solvingdesign/— ui-ux, visual, interactionwriting/— technical, narrative, persuasionproduct/— strategy, user-research, growth
AI agents can follow existing categories or create new ones freely.
For AI Agents
See docs/agent-guide.md for:
- Full workflow orchestration guide
- Structured JSON Schema (all fields documented)
- Distillation guidelines (summary + six-dimension deconstruction)
- Skill consumption best practices
Tech Stack
- Python 3.10+
- click (CLI), httpx (HTTP), readability-lxml (content extraction), jinja2 (templates), tomli (TOML config)
- Playwright (optional, JS-heavy pages)
- Jina Reader API (remote browser rendering, zero local deps)
Project details
Release history Release notifications | RSS feed
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 bookmark2skill-0.1.0.tar.gz.
File metadata
- Download URL: bookmark2skill-0.1.0.tar.gz
- Upload date:
- Size: 53.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b5d46c18722525347622183afa11e021853b0402bddcb6007652b18ef15e331
|
|
| MD5 |
80e1775b71555da6d23871e08ff2f935
|
|
| BLAKE2b-256 |
6a356ee5b27360547a0274ea64913d57b3dd2317e33a2805db473689f346087a
|
File details
Details for the file bookmark2skill-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bookmark2skill-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bcc321bab062c01fbc3a1ed0b0ab18b9c434b76ac8ce32ed9b3c162954a0db73
|
|
| MD5 |
25f1d71682b1eb1fd4a12f2e8a1137ae
|
|
| BLAKE2b-256 |
e4ee678086d53b7961794f7a3634aa1f60fa0761ca54269002350f84692d7fbe
|