The skill performs legitimate NotebookLM research automation, and most static matches are documentation or fixed commands. Confirmed risks include behavior-steering prompt injection, anti-detection automation, persistent Google session cookies, unsafe URL navigation with a disabled browser sandbox, automatic installers, and an arbitrary local Python execution path.
Uses realistic typing speeds and interaction patterns to avoid detection.
The documentation explicitly says human-like interaction is used to avoid detection. This confirms deliberate evasion of Google's automation controls, not ordinary system reconnaissance.
The script appends "EXTREMELY IMPORTANT: Is that ALL you need to know?" and instructions to review the user request and ask again. This tool-output text directs the host agent's behavior and can force extra external queries before the user receives a response.
The behavior-steering text is defined in code, appended to every retrieved answer, and reinforced by explicit agent instructions in SKILL.md.
The skill saves complete browser storage state and later reinjects its cookies into a persistent Chrome context. Theft or unintended disclosure of this local state can enable Google session hijacking.
The code explicitly serializes browser cookies and local storage, applies restrictive permissions, and reloads the cookies for later authenticated sessions.
A user-provided or library-stored URL is opened before its host is validated, while Chrome is launched with --no-sandbox. This permits arbitrary browser navigation and increases the impact of malicious web content.
The CLI accepts any URL, stores it without origin validation, navigates to it, and only afterward waits for the NotebookLM origin while the browser sandbox is disabled.
Capability review items (9)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
Importing the scripts package can invoke pip automatically to download and execute dependencies. Network package installation as an import side effect creates supply-chain and unexpected-execution risk.
First-run setup automatically installs third-party requirements from the network. Version pins reduce drift but do not remove package-index or supply-chain execution risk.
The --run value is joined into a script path without an allowlist or resolved-path containment check, then executed by Python. A traversal value can execute an arbitrary existing local Python file.
clear_auth recursively deletes the browser-state directory, whose base path can be selected through AAS_NOTEBOOKLM_DATA_DIR. The command is intentional but lacks a containment check before destructive deletion.
Sensitive legacy state is moved to DATA_DIR, which can be selected by an environment variable. An untrusted environment can redirect this migration to an unintended filesystem location.
AAS_NOTEBOOKLM_DATA_DIR controls where live browser credentials are stored and which browser-state tree can later be deleted. The value is expanded without validating it against an approved application directory.
Most static findings are documentation examples, standard Claude skill paths, or scoped local file operations. Confirmed risks include automatic setup commands, persistent Google session storage, anti-detection automation, and URL validation after navigation. No prompt-injection instructions were found.
The skill saves browser storage state to disk and documents that browser cookies and sessions are stored locally. Compromise or accidental sharing of this directory could expose NotebookLM access.
The code directly saves cookies and localStorage with context.storage_state, and the skill documentation states browser cookies and sessions are stored.
Uses realistic typing speeds and interaction patterns to avoid detection.
The README explicitly describes realistic interaction patterns to avoid detection. This is not system reconnaissance, but it is a real third-party automation evasion concern.
The skill advertises human-like interaction to avoid detection and installs Patchright Chrome for fingerprinting reliability. This raises third-party service automation and policy concerns.
README text explicitly says the automation avoids detection, and setup comments tie Chrome installation to browser fingerprinting and anti-detection behavior.
The question script opens the supplied notebook URL before verifying that the browser landed on notebooklm.google.com. A malicious or mistaken URL can be loaded before rejection.
The code calls page.goto(notebook_url) before the NotebookLM domain regex check, so validation happens after navigation.
Capability review items (8)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
This is executable package initialization code, not a documentation sample. It can create a virtual environment and install dependencies, so it is real install-time command execution.
result = subprocess.run([sys.executable, str(setup_script)])
The runner invokes setup_environment.py when the local virtual environment is missing. That setup path can install Python packages and browser components before running the requested skill script.
The runner executes a selected local script with provided arguments. The script path is constrained to the skill scripts directory, but this remains real agent-triggered code execution.
The setup script installs requirements from the marketplace package. That is real dependency installation with supply-chain exposure, even though the command is not shell-injected.
Most static findings are documentation examples, standard Claude skill paths, or scoped local file operations. Confirmed risks include automatic setup commands, persistent Google session storage, anti-detection automation, and URL validation after navigation. No prompt-injection instructions were found.
The skill saves browser storage state to disk and documents that browser cookies and sessions are stored locally. Compromise or accidental sharing of this directory could expose NotebookLM access.
The code directly saves cookies and localStorage with context.storage_state, and the skill documentation states browser cookies and sessions are stored.
Uses realistic typing speeds and interaction patterns to avoid detection.
The README explicitly describes realistic interaction patterns to avoid detection. This is not system reconnaissance, but it is a real third-party automation evasion concern.
The skill advertises human-like interaction to avoid detection and installs Patchright Chrome for fingerprinting reliability. This raises third-party service automation and policy concerns.
README text explicitly says the automation avoids detection, and setup comments tie Chrome installation to browser fingerprinting and anti-detection behavior.
The question script opens the supplied notebook URL before verifying that the browser landed on notebooklm.google.com. A malicious or mistaken URL can be loaded before rejection.
The code calls page.goto(notebook_url) before the NotebookLM domain regex check, so validation happens after navigation.
Capability review items (8)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
This is executable package initialization code, not a documentation sample. It can create a virtual environment and install dependencies, so it is real install-time command execution.
result = subprocess.run([sys.executable, str(setup_script)])
The runner invokes setup_environment.py when the local virtual environment is missing. That setup path can install Python packages and browser components before running the requested skill script.
The runner executes a selected local script with provided arguments. The script path is constrained to the skill scripts directory, but this remains real agent-triggered code execution.
The setup script installs requirements from the marketplace package. That is real dependency installation with supply-chain exposure, even though the command is not shell-injected.
Most static hits in Markdown examples and installation paths are false positives, but the live scripts do execute subprocesses, install dependencies and Chrome, contact NotebookLM, and persist Google browser state. I found no evidence of credential exfiltration to an unknown endpoint, but unencrypted session-cookie storage, anti-detection browser automation, and agent-control text in tool output create high-risk marketplace concerns. Manual review and consent gating are required before publication.
Uses realistic typing speeds and interaction patterns to avoid detection.
The line explicitly says the skill uses realistic interaction patterns to avoid detection. Although the static label is imprecise, this is real automation-evasion intent.
The skill intentionally saves Google NotebookLM browser state, including cookies and local storage, to disk for reuse. This creates high impact if the local skill directory is exposed or copied.
The code directly saves browser storage state, and the documentation says state.json contains cookies and localStorage. This confirms sensitive session handling without evidence of external exfiltration.
The skill documents human-like interaction, browser fingerprint consistency, and Patchright anti-detection setup for automating Google NotebookLM. This creates account, compliance, and marketplace abuse risk.
Multiple files describe anti-detection or fingerprint-consistency behavior connected to a real external Google service. The behavior is intentional, not an incidental library detail.
The skill appends directive text to NotebookLM answers and instructs the agent to stop, analyze, and run follow-up queries before responding. This blends tool output with agent-control instructions.
The directive is explicit and is appended to returned answer text, which can influence the agent after external content is retrieved. It does not bypass security controls directly, so confidence is high but not maximal.
Capability review items (24)
These are real local capabilities that may be expected for this skill, so they require review but are not counted as confirmed malicious behavior.
This path is the documented storage location for NotebookLM library data, auth metadata, and browser state. Storing Google session cookies and notebook links under a hidden skill directory is a real local secrecy risk.
This path is the documented storage location for NotebookLM library data, auth metadata, and browser state. Storing Google session cookies and notebook links under a hidden skill directory is a real local secrecy risk.
The package initializer can run pip and browser installation subprocesses during environment setup. This is intentional, but import-time installer execution is a real supply-chain and local execution risk.
The setup script runs pip, Patchright browser installation, or a selected local script through subprocess. Arguments are list-based, but it still executes external installers and local code on the user machine.
All data stored in `~/.claude/skills/notebooklm/data/`:
This path is the documented storage location for NotebookLM library data, auth metadata, and browser state. Storing Google session cookies and notebook links under a hidden skill directory is a real local secrecy risk.
This path is the documented storage location for NotebookLM library data, auth metadata, and browser state. Storing Google session cookies and notebook links under a hidden skill directory is a real local secrecy risk.
This path is the documented storage location for NotebookLM library data, auth metadata, and browser state. Storing Google session cookies and notebook links under a hidden skill directory is a real local secrecy risk.
The code writes authentication metadata in the skill data directory. The write is scoped, but it is part of a flow that persists Google browser session state locally.
The code removes the stored browser state directory when clearing authentication. The path is scoped, but the operation is destructive to local session data and must remain user-directed.
The code writes saved notebook URLs and metadata to a local library file. The path is scoped, but private notebook links and descriptions can be sensitive.
All data stored in `~/.claude/skills/notebooklm/data/`:
This path is the documented storage location for NotebookLM library data, auth metadata, and browser state. Storing Google session cookies and notebook links under a hidden skill directory is a real local secrecy risk.
The live code connects browser automation to notebooklm.google.com for authentication or notebook queries. This is expected functionality, but it sends user questions and account session traffic to an external Google service.
The live code connects browser automation to notebooklm.google.com for authentication or notebook queries. This is expected functionality, but it sends user questions and account session traffic to an external Google service.
The live code connects browser automation to notebooklm.google.com for authentication or notebook queries. This is expected functionality, but it sends user questions and account session traffic to an external Google service.
The live code connects browser automation to notebooklm.google.com for authentication or notebook queries. This is expected functionality, but it sends user questions and account session traffic to an external Google service.
The URL appears in a comment, but it documents Patchright anti-detection setup tied to browser installation. It is kept as supporting evidence for automation-evasion behavior.
Static analysis correctly identified a high-risk combination of scripts, network access, filesystem writes, browser session storage, and external commands. I found no evidence of prompt injection or third-party credential exfiltration, but the skill intentionally stores Google cookies and automates NotebookLM with anti-detection browser tooling, so it should not be published without human policy review.
The skill intentionally saves Google NotebookLM browser state, including cookies and local storage, to disk for reuse. This is core functionality but creates high impact if the local skill directory is exposed or mishandled.
The code directly calls storage_state to save cookies and documentation explicitly describes state.json as cookies plus localStorage. This confirms a real sensitive-data handling risk, even without evidence of exfiltration.
Anti-Detection Browser Automation Against Google Service
The skill uses Patchright and browser fingerprint consistency to automate NotebookLM. This may violate service expectations and increases account, compliance, and abuse risk for marketplace users.
Multiple files describe browser fingerprint consistency, Patchright setup, and manual cookie injection. The behavior is intentional and connected to a real external Google service.
Automatic Subprocess Execution and Dependency Installation
The runner creates a virtual environment, installs dependencies, installs a browser, and executes selected local Python scripts. Arguments are list-based and paths are constrained, but the behavior still executes code and network installation steps on the user machine.
The subprocess calls are explicit and perform installation and execution. The implementation avoids shell=True and uses local paths, so this is elevated operational risk rather than confirmed command injection.
Capability review items (2)
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 cleanup manager can delete browser state, sessions, library data, authentication metadata, and other files under the skill data directory. The design includes preview and confirmation, reducing likelihood of accidental deletion.
The file deletion logic is present and uses shutil.rmtree and unlink. It appears scoped and user-confirmed, so it is a legitimate utility with moderate filesystem risk.
The package includes python-dotenv and documents optional .env settings. I did not find evidence of secret exfiltration, but environment file support can expose local configuration if expanded later.
The dependency and documentation are real, but reviewed code did not show broad environment secret collection. This is a low-confidence future misuse concern.
Static false positives ignored (2)
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.
Markdown Command Examples Misclassified as Ruby Backticks
Many static external-command findings are Markdown code fences and inline shell examples in documentation, not Ruby execution inside application code. They are still operational instructions, but not hidden runtime behavior.
The cited lines are Markdown examples and instructions, not executable Ruby source. Static pattern matching likely interpreted backticks and fenced commands as code execution.
Weak Crypto and C2 Keyword Matches Are False Positives
Several blocker findings appear to match benign text such as NotebookLM, Gemini model descriptions, or example topic names. I did not find evidence that the skill implements cryptography or command-and-control behavior.
The cited contexts are product descriptions and user examples. No cryptographic implementation or C2-style endpoint was found in the reviewed files.
Persistent Google Browser Session StorageAnti-Detection Browser Automation Against Google ServiceAutomatic Subprocess Execution and Dependency Installation
Static scanner detected 558 pattern matches across 20 files, but evaluation confirms most are false positives in documentation. Real risks: browser automation saves Google auth cookies locally, network access to notebooklm.google.com, and subprocess execution for internal scripts. All patterns are expected for legitimate NotebookLM integration. Markdown files triggered external_commands detections from code examples. Recommend warnings about authentication requirements and network dependency.
Skill saves Google authentication cookies to local storage at ~/.claude/skills/notebooklm/data/. This is necessary for browser automation but creates a local credential store.
Clear evidence of context.storage_state() saving cookies to disk - standard browser automation pattern but requires user awareness