Bookmark Ninja
Author: Harold Mansfield
Version: 1.0.0
Platform: π¦ OpenClaw
License: MIT
Bookmakr Ninja converts browser bookmark HTML files into a clean, structured JSON index with full folder hierarchy preserved, deduplication, merge support, and optional URL liveness verification.
Installation
OpenClaw Dashboard (Recommended)
- Click the green Code button on this page and select Download ZIP
- Extract the ZIP and locate the
bookmark-ninjafolder inside - Open your OpenClaw dashboard
- Navigate to the Skills tab
- Click Add Skill or Upload Skill
- Select the extracted
bookmark-ninjafolder - Enable the skill
Bookmark Ninja will appear in your agent skill list and activate automatically on bookmark-related tasks.
Wiring Bookmark Ninja into Your Agents
Installing this skill makes it available, but in a multi-agent setup, each agent follows its own workspace instructions. Your agents won’t query the bookmark library automatically unless you tell them to. Skills provide capability. Workspace files tell the agent when and how to use it. You need both.
Add this block to each investigative agent’s
TOOLS.md
:
OSINT Source Discovery β Bookmark Ninja
Before executing searches, query the bookmark library to identify the best
specialist sources for the target seed type.
Search by keyword β find sources relevant to target type
python3 ~/.openclaw/skills/bookmark-ninja/bookmark-parser.py
/path/to/bookmarks.html --search "KEYWORD" --format json
List all categories available
python3 ~/.openclaw/skills/bookmark-ninja/bookmark-parser.py
/path/to/bookmarks.html --stats
When to query:
At case open β run --stats to orient to available categories
Before tool selection β search for your seed type to surface specialist sources
When web searches return thin results β query for alternative sources
Command Reference
usage: bookmark-parser.py [-h] [-o OUTPUT] [--format {json,csv,both}]
[--merge] [--keep-old] [--keep-new]
[--check-alive] [--stats]
input
positional arguments:
input HTML bookmark file to parse
options:
-o OUTPUT Output path (default: bookmarks-index.json)
--format Output format: json, csv, or both (default: json)
--merge Merge with existing index file
--keep-old On conflict, keep old entry (default: prompt)
--keep-new On conflict, keep new entry (default: prompt)
--check-alive Verify URL liveness via HEAD request
--stats Show statistics only, do not save
Quick Start
1. Export your bookmarks
| Browser | Steps |
|---|---|
| Chrome | Menu -> Bookmarks -> Bookmark Manager -> More -> Export bookmarks |
| Firefox | Menu -> Bookmarks -> Manage Bookmarks -> Import and Backup -> Export Bookmarks to HTML |
| Edge / Brave | Same as Chrome |
Saves as bookmarks_[date].html
2. Run the parser
python3 bookmark-ninja/bookmark-parser.py bookmarks.html
Output: bookmarks-index.json β structured, searchable, agent-ready.
3. Query from your agent
import json
with open("bookmarks-index.json") as f:
bookmarks = json.load(f)
# Search by keyword
results = [b for b in bookmarks if "osint" in b["title"].lower()]
# Filter by category
email_tools = [b for b in bookmarks if "Email Search" in b["category"]]
# Find dead links
dead = [b for b in bookmarks if b.get("alive") == False]
About Me
Harold Mansfield
AI Support Strategist
Sec+ CySA+ NIST 800-37
I help small business owners and teams turn AI confusion into AI solutions.
My background spans 15 years in IT support, infrastructure, cybersecurity, and systems administration for SMBs and corporate teams. That foundation shapes everything I do, from security-aware design to a practical understanding of what actually works in the real world versus what just sounds good in a demo.
I also build things. Most recently I conceived, built, and shipped Samaritan, a 12-agent autonomous OSINT investigation platform built on OpenClaw, running on ParrotOS. It includes automated case management, a curated library of nearly 2,000 intelligence sources, structured evidence pipelines, and upgrade safety automation.
When I show you how agentic AI works, I am showing you something I built myself.
That is the difference. Everything I teach comes from something I have actually built, broken, fixed, and shipped. If you are ready to stop guessing and start getting real results from AI, letβs talk.