원클릭으로
karakeep-obsidian-sync
Full CRUD CLI for Karakeep — standalone bookmarking tool with optional Obsidian vault sync
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Full CRUD CLI for Karakeep — standalone bookmarking tool with optional Obsidian vault sync
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
MCP server providing browser automation tools that bypass Cloudflare, LinkedIn, Indeed, and other WAF-protected sites using agent-browser with anti-detection stealth.
Delegate coding/tasks to pi CLI over RPC with persistent, resumable sessions.
Browser automation via agent-browser CLI (Vercel Labs). Headless Chrome navigation, snapshots, clicks, fills, screenshots, eval, and batch flows for web research, UI testing, and QA.
Manifest V3 Chrome extension that patches browser fingerprint vectors at document_start for WAF bypass
Hermes-native tool plugin for controlling pi --mode rpc sessions with full lifecycle management
Build three essential docs for AI agent context: personal constitution, goals, and business strategy. Based on Allie Miller's framework.
| name | karakeep-obsidian-sync |
| description | Full CRUD CLI for Karakeep — standalone bookmarking tool with optional Obsidian vault sync |
| version | 0.5.1 |
| author | Dustin Chadwick |
| metadata | {"hermes":{"tags":["karakeep","obsidian","bookmarking","sync","cli","crud"]}} |
A CLI tool for Karakeep (self-hosted bookmarking). All CRUD commands work standalone — Obsidian vault sync is an optional add-on.
Author: Dustin "Dusty" Chadwick (@ShaggyD)
kkSingle-file Python script — zero external dependencies.
| Command | Description |
|---|---|
kk login <url> <key> | Connect to a Karakeep instance |
kk logout | Wipe saved config and state |
kk list [--limit N] | List recent bookmarks |
kk get <id> | View bookmark as JSON |
kk add <url> | Save a URL bookmark |
kk text <content> | Save a plain text bookmark |
kk note <id> [text] | View/update a bookmark's note |
kk edit <id> --title= --note= | Update title, note, archived, favourited |
kk tag <id> <tag>... | Attach tags |
kk untag <id> <tag>... | Detach tags |
kk delete <id> | Delete a bookmark |
kk sync [--enrich] | Pull new bookmarks → vault; --enrich fetches transcripts/content |
kk push | Push vault note changes → Karakeep (if configured) |
kk enrich <id> | Fetch YouTube transcript or article content for a single bookmark |
kk enrich --next | Enrich the next un-enriched YouTube bookmark (newest first) |
kk enrich --list | Show YouTube enrichment queue and progress |
kk config [--set key=val] | Show or update configuration |
None of the CRUD commands (list, get, add, text, note, edit, tag, untag, delete) require a vault. Sync and push only work if vault_path is configured.
# Install
cp kk ~/.local/bin/ && chmod +x ~/.local/bin/kk
# Connect
kk login https://hoarder.example.com ak2_your_api_key_here
# Use
kk list
kk add https://example.com/article
kk note <id> "My thoughts on this"
After login (or later), configure vault sync:
kk config --set vault_path=~/my-vault/003_Resources/Bookmarks
kk config --set daily_path=~/my-vault/002_Journal/daily # optional
kk sync # initial pull
The login command also offers an interactive vault setup prompt.
_Index.md in your bookmark directory with Dataview-powered Recently Added and By Tag tables.md file with frontmatter (source, URL, tags, author)[[_Index|Bookmarks]] (relative — works from any folder)daily_path is configuredScans your vault for edited ## Notes sections and pushes changes back to the bookmark's note field in Karakeep.
Bookmarks can be enriched with additional content before saving to the vault:
| Type | Enrichment | How |
|---|---|---|
| YouTube links | Full transcript (25K+ chars) | youtube-transcript-api via uv run --with |
| Article links | Readable text extraction | curl + Python's built-in html.parser |
Commands:
kk enrich <id> — enrich a single bookmark and preview the resultkk enrich --next — auto-find the next un-enriched YouTube bookmark (newest first) and add transcript to the vault notekk enrich --list — show progress: total YouTube bookmarks, how many enriched, how many remainingkk sync --enrich — sync new bookmarks and auto-enrich each onePacing pattern: For existing bookmarks, use kk enrich --next in a daily cron to process one per day. This avoids hammering the API and gives you a daily artifact to review. Typical pace: 26 bookmarks → ~1 month to catch up.
Enrichment is best-effort. If fetching fails (no uv, no curl, network timeout), the note is still saved with Karakeep's existing content. The cron default is kk sync without --enrich because enrichment adds latency (transcript fetching, page downloads).
When daily_path is not explicitly set, the tool infers it from vault_path using a PARA-structure heuristic. See references/vault-path-inference.md.
# Daily sync + enrichment (both run at midnight, enrich 10 min later)
0 0 * * * /home/user/.local/bin/kk sync
10 0 * * * /home/user/.local/bin/kk enrich --next
Push has no cron by default — editing notes in your vault should be intentional.
---
created: 2026-04-30 05:49
source: karakeep
karakeep_id: <full-bookmark-id>
source_url: <original-url>
author: <author>
publisher: <publisher>
tags: [tag1, tag2]
---
No personal tags or conventions are baked in. Notes link back to [[_Index|Bookmarks]] which works from any vault folder structure.
This skill was refactored from a personal tool to a distributable one. Key lessons embedded in the design:
kk login asks about vault setup, but you can hit enter to skip and configure later.[[_Index|Bookmarks]] works from any vault folder — no hardcoded paths._extract_youtube_id must handle /shorts/ URLs — these URLs don't match /watch, /embed/, or /v/ patterns. Without it, Shorts fall through to article enrichment and never get a ## Transcript section, creating an infinite loop in --next.references/uv-adhoc-deps.md). Article text via curl + stdlib HTML parsing. Failures don't block the sync.~/.config/kk/config.json. Recommended: chmod 600 ~/.config/kk/config.jsonurllib UA. The tool sets User-Agent: kk-cli/0.5kk list. Truncated IDs return 404{"tagName": "..."} objects, not strings. Handled internallykk note <id> "" clears a bookmark's note fieldunknown-untitled.mdpathlib and datetime.fromisoformat)--next vs --list discrepancy with orphan bookmarks — kk enrich --next only processes vault files that have a non-empty karakeep_id in frontmatter. Bookmarks created manually in the vault (no Karakeep record) are invisible to --next, so it may report "All enriched" while --list still shows remaining. Meanwhile, --list only checks for the ## Transcript header string — it does not filter by karakeep_id. If you see a mismatch between the two commands, check missing karakeep_ids and custom header names (e.g., ## Raw Transcript won't match ## Transcript). Reconcile by either adding a Karakeep entry or tweaking the transcript header in the vault file.## Transcript. Variants like ## Raw Transcript, ## Full Transcript, or ## YouTube Transcript are not recognized as enriched. If a vault file has a transcript under a different heading, --list will show it as un-enriched and --next may loop over it. Keep the header exactly ## Transcript.