X To Notebook

v1.1.0

Push X/Twitter bookmarks into Google NotebookLM notebooks, auto-routed by bookmark folder. Use when the user wants to send bookmarks to NotebookLM, says "pus...

0· 289·1 current·1 all-time
by𝑠𝑝𝑖𝑑𝑒𝑦@spideystreet
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
Name/description, scripts, and SKILL.md all consistently implement fetching X bookmarks with twikit and pushing them to NotebookLM via mcporter. Required binaries (uv, mcporter) and the notebookmcp dependency are appropriate for the described flow. Minor doc mismatch: README initially says bookmarks are pushed as URL sources while SKILL.md and changelog state tweets are pushed as text sources (the code pushes text).
Instruction Scope
Runtime instructions are specific and bounded: list folders, fetch bookmarks, match to notebooks, push via mcporter, mark pushed. They reference only the cookie file and local pushed-IDs file needed for operation; there are no instructions to read unrelated system files or to send data to external endpoints beyond twikit/mcporter calls.
Install Mechanism
No install spec that downloads arbitrary code; the package contains Python scripts that are run via the uv tool. Prerequisite installs (twikit, notebooklm-mcp-cli) are third-party tools but are stated explicitly. No suspicious remote download URLs or extract steps are present in the skill bundle itself.
Credentials
The skill does not request environment variables or external credentials, which is coherent. However it requires the user to export their X session cookies to ~/.openclaw/credentials/x-cookies.json (sensitive). The registry metadata listed no required config paths, but the code and SKILL.md clearly rely on that cookie path and on a local pushed-IDs file (~/.openclaw/data/x-bookmarks-pushed.json). This should be understood as necessary for the feature but is a privacy-sensitive local dependency.
Persistence & Privilege
always is false and the skill does not modify other skills or system-wide settings. It writes to ~/.openclaw under its own paths (credentials and data) which is normal for user tools. The presence of an auto_sync.py mode indicates it can be run unattended (cron), but the skill does not force permanent/invisible installation.
Assessment
This skill appears to do what it claims, but before installing you should: (1) be comfortable exporting your X browser cookies to ~/.openclaw/credentials/x-cookies.json — those cookies grant access to your account session and are sensitive; (2) verify you trust the skill source since it will read that cookie file and call twikit and mcporter locally; (3) note the skill will create and update ~/.openclaw/data/x-bookmarks-pushed.json to track pushed IDs; (4) ensure you want to install and register the NotebookLM MCP tool (mcporter/notebooklm-mcp-cli) and have Chrome for nlm login; (5) review the included Python files yourself if you want to confirm there are no surprises, especially if you plan to run auto_sync.py unattended. If any of these steps are unacceptable, do not install or run the skill.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

Binsuv, mcporter
latestvk977zr1md9421zkt8pnd5pkqxh82gex6
289downloads
0stars
3versions
Updated 1mo ago
v1.1.0
MIT-0

X to Notebook

Fetches X bookmarks organized by folder and auto-routes them to matching NotebookLM notebooks by name.

Prerequisites

  • twikit installed: cd ~/.openclaw && uv add twikit
  • X cookies exported from browser to ~/.openclaw/credentials/x-cookies.json (use Cookie-Editor extension on x.com)
  • notebooklm-mcp-cli installed: uv tool install notebooklm-mcp-cli
  • Google Chrome installed (for persistent auth)
  • NotebookLM authenticated: nlm login
  • notebooklm MCP server registered in mcporter: mcporter config add notebooklm --command "notebooklm-mcp"

Workflow

1. Fetch bookmark folders

{
  "tool": "exec",
  "command": "uv run --project ~/.openclaw {baseDir}/scripts/list_folders.py"
}

Parse the JSON output. If exit code 1, report the error and stop.

2. Fetch bookmarks per folder

For each folder from step 1, plus unfiled bookmarks (no --folder-id):

{
  "tool": "exec",
  "command": "uv run --project ~/.openclaw {baseDir}/scripts/fetch_bookmarks.py --folder-id <folder_id>"
}

For unfiled bookmarks (no folder):

{
  "tool": "exec",
  "command": "uv run --project ~/.openclaw {baseDir}/scripts/fetch_bookmarks.py"
}

Skip folders that return no new bookmarks.

3. List notebooks

{
  "tool": "exec",
  "command": "mcporter call notebooklm.notebook_list"
}

If mcporter error → "NotebookLM MCP server not available. Register it with: mcporter config add notebooklm --command \"notebooklm-mcp\"" and stop.

If auth expired → "NotebookLM session expired. Run: nlm login" and stop.

4. Auto-match folders to notebooks

Match each folder name to a notebook title (case-insensitive, emojis and -notebook/-bookmarks suffix stripped). For example, folder "🦞 openclaw-notebook" matches notebook "OpenClaw". Display the matching plan:

Folder routing:
- "AI Research" → notebook "AI Research" (3 new bookmarks)
- "Claude Code" → notebook "claude code" (2 new bookmarks)
- "Random" → no matching notebook
- "Unfiled" → no matching notebook

5. Handle unmatched folders

For each folder (including "Unfiled") with no matching notebook, ask:

No notebook matches folder "Random" (4 bookmarks). Pick one:
1. Notebook Title A
2. Notebook Title B
+ Create new notebook
s. Skip this folder

If user picks "create new", ask for a title:

{
  "tool": "exec",
  "command": "mcporter call notebooklm.notebook_create title=\"<title>\""
}

If user picks "skip", skip those bookmarks entirely.

6. Push bookmarks

For each folder with a resolved notebook, push each bookmark as a text source (X URLs can't be scraped by NotebookLM):

{
  "tool": "exec",
  "command": "mcporter call notebooklm.source_add notebook_id=\"<notebook_id>\" source_type=text text=\"@author: tweet text\n\nSource: https://x.com/author/status/id\""
}

Report progress per folder. If a push fails, report which tweet failed and continue.

7. Mark as pushed

After successful pushes, mark bookmark IDs:

{
  "tool": "exec",
  "command": "uv run --project ~/.openclaw {baseDir}/scripts/mark_pushed.py <id1> <id2> ..."
}

Only mark IDs that were successfully pushed.

8. Confirm

Report per-folder summary:

Bookmarks synced:
- "AI Research" — 3 pushed
- "Claude Code" — 2 pushed
Skipped: "Random" (user skipped)

9. Error handling

  • fetch_bookmarks.py auth error → "X session expired. Re-export cookies from your browser to ~/.openclaw/credentials/x-cookies.json"
  • NotebookLM MCP not registered → "NotebookLM MCP server not available. Register it with: mcporter config add notebooklm --command \"notebooklm-mcp\""
  • NotebookLM auth expired → "NotebookLM session expired. Run nlm login in your terminal"
  • source_add fails → report the URL and error, continue with remaining bookmarks
  • No bookmarks in any folder → "No new bookmarks to push."

Examples

User saysExpected behavior
"push my bookmarks"Fetch folders + bookmarks, auto-match to notebooks, ask for unmatched, push
"send my X bookmarks to NotebookLM"Same flow
"sync bookmarks to notebook"Same flow

Comments

Loading comments...