Keeps the NotebookLM skill usable on the VPS by self-refreshing
its Google session before it expires — no human re-login needed day to day.

  • What it does — loads the saved NotebookLM session into a headless Chromium
    context, visits NotebookLM → Google Accounts → NotebookLM so Google rotates the
    session cookies
    , verifies it’s still logged in, then saves the refreshed session
    back to disk (permissions locked to 600).
  • Method — storage-state round-trip (Playwright). No display, no password, no
    persistent profile; it only renews an already-valid session.
  • Scripts~/.notebooklm/refresh_vps.sh (cron wrapper, logs to refresh.log)
    ~/.notebooklm/refresh_vps.py (the round-trip). Session lives in
    ~/.notebooklm/storage_state.json (secret, 600; never in git or here).
  • Schedule — daily 09:00 Asia/Jerusalem (cron) + a Monday 06:00 keep-alive
    (notebooklm list).
  • Exit codes0 refreshed · 2 session expired → re-seed once from a machine
    with a display (notebooklm login on the laptop, then copy the file to the VPS) ·
    1 error.
  • Status (2026-06-14) — verified working: last run logged REFRESH_OK, exit 0.
  • Owner — a Jarvis-tier maintenance job; Fury
    flags it in the weekly audit if refresh.log shows repeated non-zero exits.

Re-seed is the only manual step, and only when the session fully expires (exit 2).
The daily refresh exists precisely to keep that from happening.