A simple CLI for processing Twitter/X bookmarks with AI assistance.
Built to work with bird by @steipete.
- Bookmark tweets on X
poll-bookmarks.shfetches new bookmarks every N minutes (via systemd timer)- Use
bmCLI to review, discuss with your AI assistant, and process into your knowledge base - Mark as done when processed
- bird — Twitter CLI
jq— JSON processor- Bash
npm install -g @steipete/bird
# Create credentials file
mkdir -p ~/.config/bird
cat > ~/.config/bird/env << 'EOF'
AUTH_TOKEN=your_auth_token_here
CT0=your_ct0_here
EOF
chmod 600 ~/.config/bird/envGet auth_token and ct0 from Chrome DevTools on x.com (F12 → Application → Cookies).
git clone https://github.com/lukaskawerau/bookmark-processor ~/Code/bookmark-processorln -sf ~/Code/bookmark-processor/bm ~/.local/bin/bm# Symlink systemd units
ln -sf ~/Code/bookmark-processor/bookmark-poll.service ~/.config/systemd/user/
ln -sf ~/Code/bookmark-processor/bookmark-poll.timer ~/.config/systemd/user/
# Enable timer (polls every 5 minutes)
systemctl --user daemon-reload
systemctl --user enable --now bookmark-poll.timer
# Check status
systemctl --user list-timers | grep bookmarkbm list # Show all unprocessed bookmarks
bm next # Show next bookmark in detail
bm show ID # Show specific bookmark
bm done ID # Mark as processed (moves to data/processed/)
bm open ID # Open in browser
bm count # Show inbox/processed counts
bm json ID # Show raw JSON
bm help # Show helpdata/
├── inbox/ # Unprocessed bookmarks (*.jsonl)
├── processed/ # Processed bookmarks (*.jsonl)
└── last_seen.txt # State for incremental fetching
Each bookmark is stored as a single JSONL file named by tweet ID.
You: bm next
AI: Shows bookmark details
You: [voice note or text with your thoughts]
AI: Transcribes, files to Obsidian, adds tags/connections
You: bm done 1234567890
AI: ✅ Marked as processed
- Edit
poll-bookmarks.shto change fetch count (default: 20) - Edit
bookmark-poll.timerto change polling interval (default: 5 min) - The
bmscript is simple bash — hack away!
- bird by @steipete — the Twitter CLI that makes this possible
- Inspired by @alexhillman's bookmark workflow
MIT