Twitter Bookmark Sync

Automatically ranks your Twitter bookmarks daily and delivers a curated reading list.

The problem: You bookmark tweets but never read them. They pile up and important content gets lost in the noise.

This tool: Self-learning bookmark curator that adapts to your interests, ranks by personal value, and delivers your best reads every morning.


⚑ What It Does

Your bookmarks get smarter over time.

The tool:

  • Learns what you care about from your bookmarking patterns
  • Adapts ranking weights based on what you actually save
  • Decays old interests automatically (unless reinforced)
  • Delivers personalized value statements every morning

The more you bookmark, the better it gets at knowing what matters to you.

Zero manual work needed.


πŸ› οΈ Getting Ready

Before installing this skill:

You'll need:

  • macOS 10.15 (Catalina) or later
  • Twitter account with bookmarks
  • Homebrew for installing dependencies

Install through Homebrew:

# Install bird CLI
brew install steipete/tap/bird

# Install jq
brew install jq

Set up Twitter authentication:

  1. Open browser β†’ https://x.com (logged in)

  2. DevTools (Cmd+Option+I) β†’ Application β†’ Cookies β†’ https://x.com

  3. Copy these values:

    • auth_token
    • ct0
  4. Save to config:

mkdir -p ~/.config/bird
cat > ~/.config/bird/config.json5 << 'EOF'
{
  authToken: "your_auth_token_here",
  ct0: "your_ct0_here"
}
EOF
  1. Test:
bird whoami

πŸš€ Installation

skills install twitter-bookmark-sync
cd ~/bot/skills/twitter-bookmark-sync
./install.sh

The installer will:

  • Verify dependencies
  • Create your config file
  • Guide you through cron setup
  • Run a test sync

πŸ”§ How It Works

Result: A self-learning curator that gets smarter with every bookmark.

The schedule:

Midnight (00:00) - Learning & Ranking:

  1. Fetches bookmarks from last 24 hours
  2. Categorizes each by topic and value type
  3. Updates ranking algorithm:
    • Applies time decay (5% per day) to old interests
    • Reinforces categories you're actively bookmarking
    • Discovers new interest patterns automatically
    • Normalizes weights to maintain balance
  4. Ranks new bookmarks using evolved criteria
  5. Saves to ~/Documents/twitter-reading-YYYY-MM-DD.md

Morning (08:00) - Notification:

  1. Analyzes why each bookmark matters to YOU specifically
  2. Sends value-focused statements (not content summaries)
  3. Links to full reading list

Self-Learning Algorithm:

Initial state (from USER.md):

  • London transition: weight 100
  • Crypto insights: weight 100
  • Career growth: weight 95
  • Investment strategy: weight 90
  • ... (11 categories total)

After 30 days (example evolution):

  • If you bookmark lots of crypto β†’ crypto weight stays high (100)
  • If you stop bookmarking relationships β†’ weight decays (90 β†’ 85 β†’ 81...)
  • If you bookmark AI tools daily β†’ new category emerges ("discovered_ai_tools": 65)

Decay mechanics:

  • 5% weight reduction per day for unused categories
  • When you bookmark a category again β†’ decay resets
  • Floor: minimum weight of 10 (never disappears completely)

Configuration:

{
  "fetch_time": "00:00",           // When to learn & rank
  "notification_time": "08:00",     // When to notify
  "lookback_hours": 24,             // How far back to check
  "notification_channel": "telegram" // Where to send
}

Ranking criteria stored in: ~/bot/twitter-bookmark-sync-criteria.json
(Evolves automatically β€” you don't edit this manually)



πŸ“š Additional Information

Everything below is optional. The skill works out-of-the-box with defaults.

This section contains:

  • Advanced configuration
  • Notification channel setup
  • Manual usage
  • Troubleshooting

You don't need to read this for initial installation.


Advanced Configuration

Edit ~/bot/twitter-bookmark-sync-config.json:

Change timing:

{
  "fetch_time": "23:00",  // 11pm instead of midnight
  "notification_time": "07:00"  // 7am instead of 8am
}

Change lookback window:

{
  "lookback_hours": 24  // Check last 24 hours instead of 16
}

Customize interests:

{
  "keywords_high": [
    "your", "specific", "interests"
  ],
  "keywords_medium": [
    "secondary", "topics"
  ]
}
Notification Channels

Telegram (default):

{
  "notification_channel": "telegram"
}

Results sent to your Telegram chat.

Gmail (via gog skill):

{
  "notification_channel": "gmail",
  "gmail_to": "[email protected]"
}

Requires gog skill installed and configured.

Slack:

{
  "notification_channel": "slack",
  "slack_channel": "#bookmarks"
}

Results sent to specified Slack channel.

Manual Usage

Run sync immediately:

cd ~/bot/skills/twitter-bookmark-sync
./scripts/sync.sh

Send notification now:

./scripts/notify.sh

Check logs:

tail -f ~/bot/logs/twitter-bookmark-sync.log
Troubleshooting

"No bookmarks found"

Check bird authentication:

bird whoami

Verify you have bookmarks:

bird bookmarks -n 5

"Permission denied"

Make scripts executable:

chmod +x ~/bot/skills/twitter-bookmark-sync/scripts/*.sh
chmod +x ~/bot/skills/twitter-bookmark-sync/scripts/*.py

"Twitter cookies expired"

Re-extract cookies from browser and update ~/.config/bird/config.json5

"Notification not sent"

Check Bot status:

bot status

Verify notification channel in config.


License

MIT

S
Description
Hanzo Bot skill: twitter-bookmark-sync (by tunaissacoding)
Readme
41 KiB
Languages
Python 68.4%
Shell 31.6%