config/claude/skills/firefox-bookmarks/SKILL.md
Analyze Firefox bookmarks and tags directly from the places.sqlite database. Extract recent bookmarks, analyze tag popularity, find bookmark statistics, and explore bookmark metadata. Use when working with Firefox bookmarks, analyzing bookmark usage, organizing tags, or extracting bookmark data from Firefox profiles.
npx skillsauth add dreikanter/dotfiles firefox-bookmarksInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This Skill provides direct access to Firefox bookmark data by querying the places.sqlite database. It includes utilities for extracting bookmarks, analyzing tags, and generating insights about bookmark usage.
When the user asks to work with Firefox bookmarks, follow these steps:
Determine what the user wants:
The scripts automatically find the Firefox profile using these paths:
~/Library/Application Support/Firefox/Profiles/*default*~/.mozilla/firefox/*default*~/AppData/Roaming/Mozilla/Firefox/Profiles/*default*Use the scripts located in ~/.claude/skills/firefox-bookmarks/scripts/:
Extract Recent Bookmarks:
ruby ~/.claude/skills/firefox-bookmarks/scripts/extract_bookmarks.rb [limit]
Analyze Tags:
ruby ~/.claude/skills/firefox-bookmarks/scripts/analyze_tags.rb
Explore Database:
ruby ~/.claude/skills/firefox-bookmarks/scripts/explore_db.rb
User asks: "What are my most recent Firefox bookmarks?"
Response: Run extract_bookmarks.rb with default limit (50) and show the results.
User asks: "What are my most popular bookmark tags?"
Response: Run analyze_tags.rb and present the top tags with usage counts.
User asks: "Show me all bookmarks tagged with 'ruby'"
Response: Write a custom SQLite query to filter by specific tag.
User asks: "How does Firefox store bookmarks?"
Response: Run explore_db.rb to show the database schema and explain the structure.
Firefox stores bookmarks in places.sqlite with these key tables:
moz_bookmarks: Bookmark entries, folders, and tags
id: Unique identifiertype: 1=bookmark, 2=folderfk: Foreign key to moz_places (NULL for folders/tags)parent: Parent folder IDtitle: Bookmark/folder/tag namedateAdded: Timestamp in microsecondslastModified: Last modification timestampmoz_places: URL and visit data
id: Unique identifierurl: The URLtitle: Page titlevisit_count: Number of visitslast_visit_date: Last visit timestampTags Structure: Tags are stored as folders with parent ID 4
parent=4, fk=NULL, title=tag_nameAll scripts create temporary copies of places.sqlite to avoid:
If scripts fail:
gem install sqlite3 --user-install)Help users write custom SQLite queries:
-- Find bookmarks by keyword in title
SELECT url, title, datetime(dateAdded/1000000, 'unixepoch') as added
FROM moz_bookmarks b
JOIN moz_places p ON b.fk = p.id
WHERE p.title LIKE '%keyword%'
ORDER BY dateAdded DESC;
Examples of useful analyses:
scripts/extract_bookmarks.rb - Extract recent bookmarks with metadatascripts/analyze_tags.rb - Analyze tag popularity and usagescripts/explore_db.rb - Explore Firefox database structuredevelopment
Run a one-shot Claude Code subagent review of the current branch or PR without editing files.
tools
Use the notes CLI to create, list, read, append to, update, annotate, and delete notes in a date-based markdown archive — including daily todos with task rollover and tag operations across the store.
data-ai
Enable "Explain Like I'm a Smart 18 Year Old" mode for the rest of the conversation. Use when the user types /eli18.
tools
Fast-path Playwright CLI recipes for ad-hoc browser testing and screenshots. Use when manually verifying UI changes in a local dev environment - covers installation, the open-snapshot-interact-screenshot loop, stable element targeting, and the gotchas that waste time.