| name | notebooklm-safari-browser-control |
| description | Experimental NotebookLM control path for Safari using safaridriver/WebDriver, with verification-first gates and no CDP assumptions. |
NotebookLM Safari Browser Control
Use this skill only when the user explicitly wants NotebookLM operated through Safari, or when the Chromium/CDP NotebookLM route is unavailable and the user asks to test Safari.
Safari is not a Chromium/CDP route. Do not reuse notebooklm-cdp.mjs or claim CDP support. This skill requires safaridriver and Safari Remote Automation permission.
Inputs
- NotebookLM task or verification request.
- Optional WebDriver endpoint, default
http://127.0.0.1:4444.
- Optional permission to launch Safari or safaridriver.
Non-Goals
- Do not read cookies, localStorage, Safari profile files, keychain, session tokens, or hidden browser storage.
- Do not enable Safari Remote Automation, launch Safari, or start a driver server without explicit approval.
- Do not claim parity with the Chromium/CDP orchestrator until a live NotebookLM E2E passes.
Required Tool Check
Read references/operation.md, references/failure-modes.md, and references/production-skill-architecture.md before acting.
Before any Safari UI automation, run:
node scripts/notebooklm-safari-verify.mjs
The route is usable only when the final report has:
safari_app.exists=true;
safaridriver.exists=true;
- Remote Automation/driver endpoint verified or explicit user approval to enable/start it;
storage_read=false.
If safaridriver is missing or Remote Automation is not available, return tool_unavailable or permission_blocked.
Retry Policy
Verify once. If safaridriver or a reachable endpoint is missing, do not retry, enable Remote Automation, or start Safari automatically. After user approval, one narrower retry is allowed with an explicit endpoint or approved driver launch.
Workflow
- Verify Safari/WebDriver route.
- If route is not verified, stop with the closed failure mode and include the verify report.
- Before creating a WebDriver session, decide the Safari route:
- if the user wants to use an already-open logged-in Safari window, do not start
safaridriver or create a new WebDriver session; WebDriver cannot attach to that normal window. Use or request an existing-window GUI/Accessibility route instead.
- if the user accepts a separate WebDriver automation window, create the WebDriver session and require login inside that automation window when needed.
- If route is verified and the user approved WebDriver automation, open visible NotebookLM in the automation window.
- Follow the same human NotebookLM UI procedure as
notebooklm-research-orchestrator: import sources first, verify source count, then ask chat or generate Studio artifacts.
- Preserve the
notebooklm-research-orchestrator human-experience YouTube requirement. For practical/comparative/software/workflow research, a Safari run is incomplete unless relevant YouTube videos were scouted and imported, or context_exhausted/youtube or not_applicable is recorded.
- Apply the localized NotebookLM input-target guard from
references/operation.md: do not confuse source search with chat, use exact visible/aria labels where possible, and use the route-specific input adapter when DOM value mutation does not enable the UI. In normal Safari, bind the chat Отправить button to the same nearest form as Поле для запросов; never pick the first global send button.
- Apply the answer copy-button extraction gate from
references/operation.md: completed NotebookLM chat answers must be copied through the answer toolbar copy button. Raw DOM/page text is dirty fallback only and does not satisfy completion by default.
Evidence
Every Safari run must record:
- verify report;
- Safari/safaridriver version;
- Remote Automation state or endpoint status;
- visible NotebookLM URL/title after attach;
- YouTube human-experience attempt/import status for practical research;
- answer extraction method for chat runs, including copy-button status and UI-noise count;
- action log;
- final stop reason.
Final Review
This skill is experimental until reviews/review.json is updated with a passing live NotebookLM E2E result. A local verify report alone proves dependency state, not NotebookLM task success.
Failure Modes
tool_unavailable: Safari or safaridriver missing.
permission_blocked: Remote Automation, launch, login, or system permission required.
wrong_route: user needs an already-open logged-in Safari window, but the skill is about to create a separate WebDriver automation session.
wrong_input_target: automation filled the wrong visible input.
insert_disabled: URL text exists but the NotebookLM import button remains disabled after validation wait.
copy_button_unavailable: completed answer exists but the answer copy control cannot be found or used.
copy_button_extract_dirty: copied answer contains NotebookLM UI toolbar noise.
regression_detected: visible NotebookLM UI selectors no longer match.
partial_output: route exists but requested output is incomplete.