Executable scripts use subprocess to set up an environment, install dependencies, install browser binaries, and run local scripts. Many Markdown detections are false positives, but the real code still stores session state and automates Google NotebookLM. Before publication, add explicit consent, URL validation, credential storage protections, and command allowlisting.
The skill saves browser storage state for NotebookLM authentication and documents browser cookies and session data in local skill storage. This keeps Google session material on disk and increases exposure if local files are read.
auth_manager.py directly saves browser storage state to disk, and SKILL.md identifies browser cookies and session storage. This is clear persistent credential-adjacent material.
Unvalidated Notebook URL Opened With Authenticated Browser
The question interface accepts a notebook URL and opens it in the browser before the NotebookLM domain wait succeeds. A malicious or mistaken URL can load in an authenticated browser profile before validation fails.
The URL is supplied by arguments or library metadata and page.goto runs before domain enforcement. The risk is bounded by browser origin controls but still exposes the authenticated browser session to arbitrary navigation.
Stealth Browser Automation Against Google NotebookLM
The skill installs a browser for Patchright anti-detection use, configures stealth-related settings, and simulates human typing. This increases abuse and account-policy risk for an external Google service.
The comments and configuration explicitly reference anti-detection and stealth behavior, and ask_question.py uses human-like typing and delay logic. The intent is clear even though it supports the stated feature.
The skill appends a strong follow-up instruction to NotebookLM answers and tells the agent to stop, analyze, and ask more questions before responding. NotebookLM answers originate from uploaded documents, so source content can influence agent control flow unless treated as untrusted.
The follow-up instruction is explicit in both code and skill instructions. I did not find a malicious prompt injection string, but the design creates a reliable path for untrusted source text to affect agent behavior.
Capability review items (16)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
On import, the package runs pip install against requirements.txt in the skill venv. Automatic dependency installation executes external package code and is a real supply-chain risk.
result = subprocess.run([sys.executable, str(setup_script)])
run.py automatically invokes setup_environment.py when the venv is missing. That bootstrap path can install dependencies and browser binaries before the requested task runs.
run.py executes a command built from the requested script name and arguments. It is scoped to the scripts directory, but there is no explicit allowlist before subprocess execution.
clear_auth removes the browser state directory with shutil.rmtree. The path is scoped to skill data, but it is a destructive operation over stored session material.
The cleanup command deletes discovered data paths with shutil.rmtree. It is scoped and usually confirmed, but it can remove browser state, sessions, and library data.
The code validates that navigation reaches notebooklm.google.com during a query. This is intended, but it confirms external Google network access for user questions and notebooks.
The authentication flow opens notebooklm.google.com in a persistent browser context. This is intended, but it sends browser traffic to an external Google service.
The validation flow opens notebooklm.google.com to check stored authentication. This is intended, but it uses external network access with saved browser state.
Executable scripts use subprocess to set up an environment, install dependencies, install browser binaries, and run local scripts. Many Markdown detections are false positives, but the real code still stores session state and automates Google NotebookLM. Before publication, add explicit consent, URL validation, credential storage protections, and command allowlisting.
The skill saves browser storage state for NotebookLM authentication and documents browser cookies and session data in local skill storage. This keeps Google session material on disk and increases exposure if local files are read.
auth_manager.py directly saves browser storage state to disk, and SKILL.md identifies browser cookies and session storage. This is clear persistent credential-adjacent material.
Unvalidated Notebook URL Opened With Authenticated Browser
The question interface accepts a notebook URL and opens it in the browser before the NotebookLM domain wait succeeds. A malicious or mistaken URL can load in an authenticated browser profile before validation fails.
The URL is supplied by arguments or library metadata and page.goto runs before domain enforcement. The risk is bounded by browser origin controls but still exposes the authenticated browser session to arbitrary navigation.
Stealth Browser Automation Against Google NotebookLM
The skill installs a browser for Patchright anti-detection use, configures stealth-related settings, and simulates human typing. This increases abuse and account-policy risk for an external Google service.
The comments and configuration explicitly reference anti-detection and stealth behavior, and ask_question.py uses human-like typing and delay logic. The intent is clear even though it supports the stated feature.
The skill appends a strong follow-up instruction to NotebookLM answers and tells the agent to stop, analyze, and ask more questions before responding. NotebookLM answers originate from uploaded documents, so source content can influence agent control flow unless treated as untrusted.
The follow-up instruction is explicit in both code and skill instructions. I did not find a malicious prompt injection string, but the design creates a reliable path for untrusted source text to affect agent behavior.
Capability review items (16)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
On import, the package runs pip install against requirements.txt in the skill venv. Automatic dependency installation executes external package code and is a real supply-chain risk.
result = subprocess.run([sys.executable, str(setup_script)])
run.py automatically invokes setup_environment.py when the venv is missing. That bootstrap path can install dependencies and browser binaries before the requested task runs.
run.py executes a command built from the requested script name and arguments. It is scoped to the scripts directory, but there is no explicit allowlist before subprocess execution.
clear_auth removes the browser state directory with shutil.rmtree. The path is scoped to skill data, but it is a destructive operation over stored session material.
The cleanup command deletes discovered data paths with shutil.rmtree. It is scoped and usually confirmed, but it can remove browser state, sessions, and library data.
The code validates that navigation reaches notebooklm.google.com during a query. This is intended, but it confirms external Google network access for user questions and notebooks.
The authentication flow opens notebooklm.google.com in a persistent browser context. This is intended, but it sends browser traffic to an external Google service.
The validation flow opens notebooklm.google.com to check stored authentication. This is intended, but it uses external network access with saved browser state.
Static analysis flagged many shell-command patterns; most markdown hits are command examples or API documentation, not executable backticks. The executable scripts still confirm high-risk behavior because the skill installs dependencies and a browser, automates Google NotebookLM in an authenticated Chrome profile, and stores reusable browser state containing cookies or local storage.
Many static findings in SKILL.md and references files are bash or Python snippets showing how to call the provided scripts. These examples are not executed by the files themselves, but they document commands that users may run manually.
The cited locations are fenced markdown examples or troubleshooting snippets, not runtime code. They remain relevant because the commands point to executable scripts with confirmed side effects.
Capability review items (5)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
The skill saves authenticated browser storage to disk and documents that browser cookies and session data are retained. This is necessary for the workflow, but it creates account takeover risk if the skill directory or generated data is exposed.
The code directly calls storage_state with a path, and the skill documentation states that browser cookies and session data are stored. The risk is confirmed, although it appears tied to legitimate NotebookLM authentication rather than confirmed exfiltration.
The runner creates a virtual environment, installs Python dependencies, upgrades pip, and installs a Patchright Chrome browser automatically. This increases supply-chain and execution risk for a marketplace skill because first use can fetch and execute third-party packages.
The subprocess calls are explicit and install requirements plus a browser runtime. The behavior is documented and purposeful, but it is high impact because package installation happens from skill execution flow.
Stealth Browser Automation Against Google Services
The skill depends on Patchright and configures real Chrome automation for NotebookLM login and queries. This may violate service expectations, can trigger account controls, and requires handling authenticated browser data with care.
The dependency and setup comments explicitly identify Patchright and Chrome automation, while auth_manager drives an authenticated browser session. I did not find evidence of malicious network destinations, so confidence is high for risk but not for malicious intent.
Notebook URL Is Navigated Before Domain Validation Completes
The question script accepts a notebook URL from command-line arguments or saved library data and navigates to it before checking that the final URL is a NotebookLM domain. A malicious or mistaken URL could load unexpected content in the skill-controlled browser context.
The URL parameter is accepted and passed to page.goto before the NotebookLM regex wait. Browser cookie scoping limits direct cookie leakage, but the ordering still creates avoidable navigation risk.
The cleanup command recursively deletes browser state and other files under the skill data directory when confirmed. The implementation scopes deletion to the skill data path and previews by default, so this is a moderate operational risk rather than malicious behavior.
The recursive deletion is explicit and confirmed by code, but it is limited to computed cleanup paths under data_dir and has a confirmation flow unless forced.
Static false positives ignored (1)
These static matches were dismissed by semantic review or matched schema-only tokens, so they are shown for transparency but do not drive the quality score.
Weak Cryptography Alerts Appear To Be Textual False Positives
Static weak-crypto alerts appear to match ordinary words such as description, id, or session text in documentation and script metadata. I did not find evidence of cryptographic primitives being used for protection in the reviewed files.
Searches for crypto-related APIs found no implemented weak cryptographic algorithm in the reviewed script paths. The static line hits correspond to benign text or metadata fields.
Static analysis flagged many shell-command patterns; most markdown hits are command examples or API documentation, not executable backticks. The executable scripts still confirm high-risk behavior because the skill installs dependencies and a browser, automates Google NotebookLM in an authenticated Chrome profile, and stores reusable browser state containing cookies or local storage.
Many static findings in SKILL.md and references files are bash or Python snippets showing how to call the provided scripts. These examples are not executed by the files themselves, but they document commands that users may run manually.
The cited locations are fenced markdown examples or troubleshooting snippets, not runtime code. They remain relevant because the commands point to executable scripts with confirmed side effects.
Capability review items (5)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
The skill saves authenticated browser storage to disk and documents that browser cookies and session data are retained. This is necessary for the workflow, but it creates account takeover risk if the skill directory or generated data is exposed.
The code directly calls storage_state with a path, and the skill documentation states that browser cookies and session data are stored. The risk is confirmed, although it appears tied to legitimate NotebookLM authentication rather than confirmed exfiltration.
The runner creates a virtual environment, installs Python dependencies, upgrades pip, and installs a Patchright Chrome browser automatically. This increases supply-chain and execution risk for a marketplace skill because first use can fetch and execute third-party packages.
The subprocess calls are explicit and install requirements plus a browser runtime. The behavior is documented and purposeful, but it is high impact because package installation happens from skill execution flow.
Stealth Browser Automation Against Google Services
The skill depends on Patchright and configures real Chrome automation for NotebookLM login and queries. This may violate service expectations, can trigger account controls, and requires handling authenticated browser data with care.
The dependency and setup comments explicitly identify Patchright and Chrome automation, while auth_manager drives an authenticated browser session. I did not find evidence of malicious network destinations, so confidence is high for risk but not for malicious intent.
Notebook URL Is Navigated Before Domain Validation Completes
The question script accepts a notebook URL from command-line arguments or saved library data and navigates to it before checking that the final URL is a NotebookLM domain. A malicious or mistaken URL could load unexpected content in the skill-controlled browser context.
The URL parameter is accepted and passed to page.goto before the NotebookLM regex wait. Browser cookie scoping limits direct cookie leakage, but the ordering still creates avoidable navigation risk.
The cleanup command recursively deletes browser state and other files under the skill data directory when confirmed. The implementation scopes deletion to the skill data path and previews by default, so this is a moderate operational risk rather than malicious behavior.
The recursive deletion is explicit and confirmed by code, but it is limited to computed cleanup paths under data_dir and has a confirmation flow unless forced.
Static false positives ignored (1)
These static matches were dismissed by semantic review or matched schema-only tokens, so they are shown for transparency but do not drive the quality score.
Weak Cryptography Alerts Appear To Be Textual False Positives
Static weak-crypto alerts appear to match ordinary words such as description, id, or session text in documentation and script metadata. I did not find evidence of cryptographic primitives being used for protection in the reviewed files.
Searches for crypto-related APIs found no implemented weak cryptographic algorithm in the reviewed script paths. The static line hits correspond to benign text or metadata fields.
This skill is a legitimate Google NotebookLM integration using browser automation. The static findings are false positives triggered by: (1) shell command examples in documentation, (2) Playwright browser automation code for Google authentication, (3) network requests to Google's legitimate NotebookLM service. The combination of code execution + network + credentials is expected behavior for this type of integration skill.
15
Files scanned
3,425
Lines analyzed
9
Review items
0
False positives ignored
Capability review items (5)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
Uses Playwright for browser automation with persistent authentication state. This is standard for skills that integrate with web services requiring login.
Legitimate browser automation for Google NotebookLM authentication. Uses Playwright with persistent context to maintain session cookies.
Python subprocess calls for environment setup (venv creation, pip install, patchright install). These are required for skill initialization.
Subprocess calls are used for legitimate environment setup (creating venv, installing dependencies). Arguments are hardcoded strings, no user input injection.
Accesses local filesystem to store notebook library, authentication state, and browser profile. Standard for persistent skill data.
Filesystem access is for storing skill data in ~/.claude/skills/notebooklm/data/ - standard skill storage location. No sensitive system files accessed.