{"data":{"skill":{"slug":"sickn33-notebooklm","name":"notebooklm","icon":"📦","repo":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/notebooklm","status":"approved","author":"sickn33","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"7a79bad5-14af-42d1-8026-bcb3fa610192","skill_id":"c1973d81-8b93-4e4e-ab8f-e5c1e68263b5","version":6,"content_hash":"v3:81e05e636292629114b76cbb3922fbe57672fc02:fe8f31e77502d277e54f04a070202047652de0bf23fd55aa245a9a0a3e0ac199:509b5350c54f3b5e44dcfe4f97be5e118e2db38df0dc48f3434fce09c2f067aa:736b696c6c732f7369636b6e33332f6e6f7465626f6f6b6c6d:67291a65b3d1dbdc7ba1c5a647303c6e","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"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.","remediation":[{"issue":"Tool output contains instructions that steer the host agent and trigger repeated queries.","severity":"high","suggestion":"Remove FOLLOW_UP_REMINDER from retrieved answers. Return source content as clearly delimited untrusted data and let the host agent decide whether another query is needed."},{"issue":"Chrome opens unvalidated URLs with --no-sandbox and anti-detection settings.","severity":"high","suggestion":"Require an exact notebooklm.google.com HTTPS origin before storage or navigation, remove --no-sandbox, and remove automation-evasion flags and humanization behavior."},{"issue":"The --run setup option can execute a traversed local Python path.","severity":"high","suggestion":"Use the same script allowlist and resolved-path containment checks implemented in scripts/run.py before invoking any script."},{"issue":"Google cookies and browser state persist locally and are later reinjected.","severity":"high","suggestion":"Document account impact, use OS credential storage where possible, minimize retained state, and require explicit consent before saving or reusing authentication."},{"issue":"Dependency and browser installers run automatically, including during package import.","severity":"high","suggestion":"Remove import-time setup, require explicit installation confirmation, verify package hashes, and avoid automatically upgrading pip."},{"issue":"An environment variable controls sensitive state and recursive deletion paths.","severity":"medium","suggestion":"Resolve and validate the data directory against an approved user-data root before migration, credential writes, or recursive deletion."}],"risk_factor_evidence":[{"factor":"filesystem","evidence":[{"file":"AUTHENTICATION.md","line_end":101,"line_start":101},{"file":"AUTHENTICATION.md","line_end":101,"line_start":101},{"file":"README.md","line_end":73,"line_start":73},{"file":"README.md","line_end":76,"line_start":76},{"file":"README.md","line_end":154,"line_start":154},{"file":"README.md","line_end":163,"line_start":163},{"file":"README.md","line_end":266,"line_start":266},{"file":"README.md","line_end":268,"line_start":268},{"file":"README.md","line_end":334,"line_start":334},{"file":"README.md","line_end":347,"line_start":347},{"file":"README.md","line_end":400,"line_start":400},{"file":"README.md","line_end":73,"line_start":73},{"file":"README.md","line_end":76,"line_start":76},{"file":"README.md","line_end":154,"line_start":154},{"file":"README.md","line_end":163,"line_start":163},{"file":"README.md","line_end":266,"line_start":266},{"file":"README.md","line_end":268,"line_start":268},{"file":"README.md","line_end":334,"line_start":334},{"file":"README.md","line_end":347,"line_start":347},{"file":"README.md","line_end":400,"line_start":400},{"file":"references/api_reference.md","line_end":185,"line_start":185},{"file":"references/api_reference.md","line_end":185,"line_start":185},{"file":"references/troubleshooting.md","line_end":101,"line_start":101},{"file":"references/troubleshooting.md","line_end":223,"line_start":223},{"file":"references/troubleshooting.md","line_end":226,"line_start":226},{"file":"references/troubleshooting.md","line_end":236,"line_start":236},{"file":"references/troubleshooting.md","line_end":282,"line_start":282},{"file":"references/troubleshooting.md","line_end":283,"line_start":283},{"file":"references/troubleshooting.md","line_end":287,"line_start":287},{"file":"references/troubleshooting.md","line_end":298,"line_start":298},{"file":"references/troubleshooting.md","line_end":299,"line_start":299},{"file":"references/troubleshooting.md","line_end":306,"line_start":306},{"file":"references/troubleshooting.md","line_end":353,"line_start":353},{"file":"references/troubleshooting.md","line_end":361,"line_start":361},{"file":"references/troubleshooting.md","line_end":101,"line_start":101},{"file":"references/troubleshooting.md","line_end":223,"line_start":223},{"file":"references/troubleshooting.md","line_end":226,"line_start":226},{"file":"references/troubleshooting.md","line_end":236,"line_start":236},{"file":"references/troubleshooting.md","line_end":282,"line_start":282},{"file":"references/troubleshooting.md","line_end":283,"line_start":283},{"file":"references/troubleshooting.md","line_end":287,"line_start":287},{"file":"references/troubleshooting.md","line_end":298,"line_start":298},{"file":"references/troubleshooting.md","line_end":299,"line_start":299},{"file":"references/troubleshooting.md","line_end":306,"line_start":306},{"file":"references/troubleshooting.md","line_end":353,"line_start":353},{"file":"references/troubleshooting.md","line_end":361,"line_start":361},{"file":"scripts/auth_manager.py","line_end":191,"line_start":191},{"file":"scripts/auth_manager.py","line_end":219,"line_start":219},{"file":"scripts/cleanup_manager.py","line_end":173,"line_start":173},{"file":"scripts/config.py","line_end":32,"line_start":32}]},{"factor":"network","evidence":[{"file":"README.md","line_end":77,"line_start":77},{"file":"README.md","line_end":401,"line_start":401},{"file":"references/api_reference.md","line_end":30,"line_start":30},{"file":"references/api_reference.md","line_end":52,"line_start":52},{"file":"references/api_reference.md","line_end":59,"line_start":59},{"file":"references/troubleshooting.md","line_end":148,"line_start":148},{"file":"references/troubleshooting.md","line_end":209,"line_start":209},{"file":"references/troubleshooting.md","line_end":210,"line_start":210},{"file":"references/troubleshooting.md","line_end":209,"line_start":209},{"file":"references/troubleshooting.md","line_end":210,"line_start":210},{"file":"references/usage_patterns.md","line_end":31,"line_start":31},{"file":"scripts/ask_question.py","line_end":9,"line_start":9},{"file":"scripts/ask_question.py","line_end":80,"line_start":80},{"file":"scripts/auth_manager.py","line_end":10,"line_start":10},{"file":"scripts/auth_manager.py","line_end":127,"line_start":127},{"file":"scripts/auth_manager.py","line_end":142,"line_start":142},{"file":"scripts/auth_manager.py","line_end":276,"line_start":276},{"file":"scripts/setup_environment.py","line_end":72,"line_start":72},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":96,"line_start":96},{"file":"SKILL.md","line_end":125,"line_start":125}]},{"factor":"env_access","evidence":[{"file":"README.md","line_end":258,"line_start":258},{"file":"requirements.txt","line_end":10,"line_start":10},{"file":"scripts/config.py","line_end":12,"line_start":12}]},{"factor":"external_commands","evidence":[{"file":"references/api_reference.md","line_end":160,"line_start":160},{"file":"references/api_reference.md","line_end":216,"line_start":216},{"file":"references/api_reference.md","line_end":228,"line_start":228},{"file":"references/api_reference.md","line_end":249,"line_start":249},{"file":"references/api_reference.md","line_end":271,"line_start":271},{"file":"references/troubleshooting.md","line_end":132,"line_start":132},{"file":"references/troubleshooting.md","line_end":277,"line_start":277},{"file":"references/usage_patterns.md","line_end":177,"line_start":177},{"file":"references/usage_patterns.md","line_end":210,"line_start":210},{"file":"references/usage_patterns.md","line_end":219,"line_start":219},{"file":"references/usage_patterns.md","line_end":143,"line_start":143},{"file":"scripts/__init__.py","line_end":53,"line_start":53},{"file":"scripts/__init__.py","line_end":65,"line_start":65},{"file":"scripts/run.py","line_end":48,"line_start":48},{"file":"scripts/run.py","line_end":107,"line_start":107},{"file":"scripts/setup_environment.py","line_end":54,"line_start":54},{"file":"scripts/setup_environment.py","line_end":62,"line_start":62},{"file":"scripts/setup_environment.py","line_end":75,"line_start":75},{"file":"scripts/setup_environment.py","line_end":132,"line_start":132},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":33,"line_start":27},{"file":"SKILL.md","line_end":36,"line_start":33},{"file":"SKILL.md","line_end":37,"line_start":36},{"file":"SKILL.md","line_end":38,"line_start":37},{"file":"SKILL.md","line_end":39,"line_start":38},{"file":"SKILL.md","line_end":45,"line_start":39},{"file":"SKILL.md","line_end":47,"line_start":45},{"file":"SKILL.md","line_end":55,"line_start":47},{"file":"SKILL.md","line_end":57,"line_start":55},{"file":"SKILL.md","line_end":58,"line_start":57},{"file":"SKILL.md","line_end":66,"line_start":58},{"file":"SKILL.md","line_end":68,"line_start":66},{"file":"SKILL.md","line_end":73,"line_start":68},{"file":"SKILL.md","line_end":76,"line_start":73},{"file":"SKILL.md","line_end":86,"line_start":76},{"file":"SKILL.md","line_end":109,"line_start":86},{"file":"SKILL.md","line_end":112,"line_start":109},{"file":"SKILL.md","line_end":113,"line_start":112},{"file":"SKILL.md","line_end":117,"line_start":113},{"file":"SKILL.md","line_end":129,"line_start":117},{"file":"SKILL.md","line_end":140,"line_start":129},{"file":"SKILL.md","line_end":142,"line_start":140},{"file":"SKILL.md","line_end":148,"line_start":142},{"file":"SKILL.md","line_end":149,"line_start":148},{"file":"SKILL.md","line_end":154,"line_start":149},{"file":"SKILL.md","line_end":156,"line_start":154},{"file":"SKILL.md","line_end":157,"line_start":156},{"file":"SKILL.md","line_end":164,"line_start":157},{"file":"SKILL.md","line_end":166,"line_start":164},{"file":"SKILL.md","line_end":167,"line_start":166}]}],"critical_findings":[],"high_findings":[{"title":"System reconnaissance","locations":[{"file":"README.md","line_end":200,"line_start":200}],"confidence":0.98,"description":"Uses realistic typing speeds and interaction patterns to avoid detection.","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"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."},{"title":"Python subprocess.run","locations":[{"file":"scripts/__init__.py","line_end":53,"line_start":53}],"confidence":0.93,"description":"subprocess.run(","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"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."},{"title":"Python subprocess.run","locations":[{"file":"scripts/__init__.py","line_end":65,"line_start":65}],"confidence":0.93,"description":"subprocess.run(","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"Importing the package can automatically run Patchright's browser installer. This downloads and executes browser setup without a separate user confirmation step."},{"title":"Python subprocess.run","locations":[{"file":"scripts/setup_environment.py","line_end":54,"line_start":54}],"confidence":0.91,"description":"subprocess.run(","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"First-run setup automatically upgrades pip from the network. This executes newly downloaded package-management code and mutates the environment without a dedicated confirmation."},{"title":"Python subprocess.run","locations":[{"file":"scripts/setup_environment.py","line_end":62,"line_start":62}],"confidence":0.91,"description":"result = subprocess.run(","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"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."},{"title":"Python subprocess.run","locations":[{"file":"scripts/setup_environment.py","line_end":75,"line_start":75}],"confidence":0.9,"description":"subprocess.run(","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"The setup automatically invokes Patchright to download and install Chrome assets. This is a significant external side effect performed during automatic bootstrap."},{"title":"Python subprocess.run","locations":[{"file":"scripts/setup_environment.py","line_end":132,"line_start":132}],"confidence":0.98,"description":"result = subprocess.run(cmd)","review_kind":"capability","source_category":"external_commands","source_severity":"high","confidence_reasoning":"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."},{"title":"Prompt Injection Attempt Detected","locations":[{"file":"scripts/ask_question.py","line_end":36,"line_start":29},{"file":"SKILL.md","line_end":144,"line_start":131}],"confidence":0.98,"description":"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.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The behavior-steering text is defined in code, appended to every retrieved answer, and reinforced by explicit agent instructions in SKILL.md."},{"title":"Persistent Google Session Credentials","locations":[{"file":"scripts/auth_manager.py","line_end":179,"line_start":173},{"file":"scripts/browser_utils.py","line_end":53,"line_start":46}],"confidence":0.97,"description":"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.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The code explicitly serializes browser cookies and local storage, applies restrictive permissions, and reloads the cookies for later authenticated sessions."},{"title":"Unvalidated Browser Navigation Without Sandbox","locations":[{"file":"scripts/config.py","line_end":66,"line_start":60},{"file":"scripts/ask_question.py","line_end":80,"line_start":74},{"file":"scripts/notebook_manager.py","line_end":319,"line_start":314}],"confidence":0.96,"description":"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.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"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."}],"medium_findings":[{"title":"Python shutil operations","locations":[{"file":"scripts/auth_manager.py","line_end":219,"line_start":219}],"confidence":0.79,"description":"shutil.rmtree(self.browser_state_dir)","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"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."},{"title":"Python shutil operations","locations":[{"file":"scripts/config.py","line_end":32,"line_start":32}],"confidence":0.76,"description":"shutil.move(str(LEGACY_DATA_DIR), str(DATA_DIR))","review_kind":"capability","source_category":"filesystem","source_severity":"medium","confidence_reasoning":"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."},{"title":"Python environment access","locations":[{"file":"scripts/config.py","line_end":12,"line_start":12}],"confidence":0.84,"description":"DATA_DIR = Path(os.environ.get(","review_kind":"capability","source_category":"env_access","source_severity":"low","confidence_reasoning":"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."}],"low_findings":[],"dangerous_patterns":[{"title":"System reconnaissance","locations":[{"file":"README.md","line_end":200,"line_start":200}],"confidence":0.98,"description":"Uses realistic typing speeds and interaction patterns to avoid detection.","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"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."}],"files_scanned":20,"total_lines":4212,"audit_model":"codex","audited_at":"2026-08-04T16:14:49.377+00:00","created_at":"2026-08-05T01:37:02.176144+00:00","static_findings":[{"id":"sensitive:.gitignore:26:environment-file-access","file":".gitignore","pattern":"Environment file access","snippet":".env","category":"sensitive","line_end":26,"severity":"high","line_start":26},{"id":"sensitive:.gitignore:27:environment-file-access","file":".gitignore","pattern":"Environment file access","snippet":"*.env","category":"sensitive","line_end":27,"severity":"high","line_start":27},{"id":"sensitive:.gitignore:28:environment-file-access","file":".gitignore","pattern":"Environment file access","snippet":".env.*","category":"sensitive","line_end":28,"severity":"high","line_start":28},{"id":"sensitive:.gitignore:50:sqlite-database-file","file":".gitignore","pattern":"SQLite database file","snippet":"Thumbs.db","category":"sensitive","line_end":50,"severity":"medium","line_start":50},{"id":"sensitive:.gitignore:52:sqlite-database-file","file":".gitignore","pattern":"SQLite database file","snippet":"ehthumbs.db","category":"sensitive","line_end":52,"severity":"medium","line_start":52},{"id":"filesystem:AUTHENTICATION.md:101:hidden-file-in-home-directory","file":"AUTHENTICATION.md","pattern":"Hidden file in home directory","snippet":"~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":101,"severity":"high","line_start":101},{"id":"filesystem:AUTHENTICATION.md:101:hidden-file-access","file":"AUTHENTICATION.md","pattern":"Hidden file access","snippet":"~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":101,"severity":"medium","line_start":101},{"id":"blocker:AUTHENTICATION.md:5:system-reconnaissance","file":"AUTHENTICATION.md","pattern":"System reconnaissance","snippet":"This skill uses a **hybrid authentication approach** that combines the best of both worlds:","category":"blocker","line_end":5,"severity":"low","line_start":5},{"id":"blocker:AUTHENTICATION.md:48:system-reconnaissance","file":"AUTHENTICATION.md","pattern":"System reconnaissance","snippet":"## Our Solution: Hybrid Approach","category":"blocker","line_end":48,"severity":"low","line_start":48},{"id":"blocker:AUTHENTICATION.md:154:system-reconnaissance","file":"AUTHENTICATION.md","pattern":"System reconnaissance","snippet":"Until then, our hybrid approach is the most reliable solution.","category":"blocker","line_end":154,"severity":"low","line_start":154},{"id":"network:README.md:77:hardcoded-url","file":"README.md","pattern":"Hardcoded URL","snippet":"git clone https://github.com/PleasePrompto/notebooklm-skill notebooklm","category":"network","line_end":77,"severity":"low","line_start":77},{"id":"network:README.md:401:hardcoded-url","file":"README.md","pattern":"Hardcoded URL","snippet":"git clone https://github.com/PleasePrompto/notebooklm-skill notebooklm","category":"network","line_end":401,"severity":"low","line_start":401},{"id":"filesystem:README.md:73:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"mkdir -p ~/.claude/skills","category":"filesystem","line_end":73,"severity":"high","line_start":73},{"id":"filesystem:README.md:76:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills","category":"filesystem","line_end":76,"severity":"high","line_start":76},{"id":"filesystem:README.md:154:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"| **Installation** | Clone to `~/.claude/skills` | `claude mcp add ...` |","category":"filesystem","line_end":154,"severity":"high","line_start":154},{"id":"filesystem:README.md:163:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"~/.claude/skills/notebooklm/","category":"filesystem","line_end":163,"severity":"high","line_start":163},{"id":"filesystem:README.md:266:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":266,"severity":"high","line_start":266},{"id":"filesystem:README.md:268:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"~/.local/share/agentic-awesome-skills/notebooklm/","category":"filesystem","line_end":268,"severity":"high","line_start":268},{"id":"filesystem:README.md:334:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"ls ~/.claude/skills/notebooklm/","category":"filesystem","line_end":334,"severity":"high","line_start":334},{"id":"filesystem:README.md:347:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":347,"severity":"high","line_start":347},{"id":"filesystem:README.md:400:hidden-file-in-home-directory","file":"README.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills","category":"filesystem","line_end":400,"severity":"high","line_start":400},{"id":"filesystem:README.md:73:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"mkdir -p ~/.claude/skills","category":"filesystem","line_end":73,"severity":"medium","line_start":73},{"id":"filesystem:README.md:76:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills","category":"filesystem","line_end":76,"severity":"medium","line_start":76},{"id":"filesystem:README.md:154:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"| **Installation** | Clone to `~/.claude/skills` | `claude mcp add ...` |","category":"filesystem","line_end":154,"severity":"medium","line_start":154},{"id":"filesystem:README.md:163:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"~/.claude/skills/notebooklm/","category":"filesystem","line_end":163,"severity":"medium","line_start":163},{"id":"filesystem:README.md:266:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":266,"severity":"medium","line_start":266},{"id":"filesystem:README.md:268:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"~/.local/share/agentic-awesome-skills/notebooklm/","category":"filesystem","line_end":268,"severity":"medium","line_start":268},{"id":"filesystem:README.md:334:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"ls ~/.claude/skills/notebooklm/","category":"filesystem","line_end":334,"severity":"medium","line_start":334},{"id":"filesystem:README.md:347:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":347,"severity":"medium","line_start":347},{"id":"filesystem:README.md:400:hidden-file-access","file":"README.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills","category":"filesystem","line_end":400,"severity":"medium","line_start":400},{"id":"env_access:README.md:258:dotenv-library","file":"README.md","pattern":"dotenv library","snippet":"- **python-dotenv==1.2.2**: Environment configuration","category":"env_access","line_end":258,"severity":"low","line_start":258},{"id":"blocker:README.md:200:system-reconnaissance","file":"README.md","pattern":"System reconnaissance","snippet":"Uses realistic typing speeds and interaction patterns to avoid detection.","category":"blocker","line_end":200,"severity":"low","line_start":200},{"id":"blocker:README.md:221:system-reconnaissance","file":"README.md","pattern":"System reconnaissance","snippet":"**User asks**: \"Check my Suzuki GSR 600 workshop manual for brake fluid type, engine oil specs, and ","category":"blocker","line_end":221,"severity":"low","line_start":221},{"id":"external_commands:references/api_reference.md:160:python-subprocess-run","file":"references/api_reference.md","pattern":"Python subprocess.run","snippet":"result = subprocess.run([","category":"external_commands","line_end":160,"severity":"high","line_start":160},{"id":"external_commands:references/api_reference.md:216:python-subprocess-run","file":"references/api_reference.md","pattern":"Python subprocess.run","snippet":"result = subprocess.run([","category":"external_commands","line_end":216,"severity":"high","line_start":216},{"id":"external_commands:references/api_reference.md:228:python-subprocess-run","file":"references/api_reference.md","pattern":"Python subprocess.run","snippet":"subprocess.run([\"python\", \"scripts/run.py\", \"auth_manager.py\", \"setup\"])","category":"external_commands","line_end":228,"severity":"high","line_start":228},{"id":"external_commands:references/api_reference.md:249:python-subprocess-run","file":"references/api_reference.md","pattern":"Python subprocess.run","snippet":"result = subprocess.run([","category":"external_commands","line_end":249,"severity":"high","line_start":249},{"id":"external_commands:references/api_reference.md:271:python-subprocess-run","file":"references/api_reference.md","pattern":"Python subprocess.run","snippet":"result = subprocess.run([","category":"external_commands","line_end":271,"severity":"high","line_start":271},{"id":"network:references/api_reference.md:30:hardcoded-url","file":"references/api_reference.md","pattern":"Hardcoded URL","snippet":"python scripts/run.py ask_question.py --question \"...\" --notebook-url \"https://...\"","category":"network","line_end":30,"severity":"low","line_start":30},{"id":"network:references/api_reference.md:52:hardcoded-url","file":"references/api_reference.md","pattern":"Hardcoded URL","snippet":"--url \"https://notebooklm.google.com/notebook/...\" \\","category":"network","line_end":52,"severity":"low","line_start":52},{"id":"network:references/api_reference.md:59:hardcoded-url","file":"references/api_reference.md","pattern":"Hardcoded URL","snippet":"--url \"https://notebooklm.google.com/notebook/...\" \\","category":"network","line_end":59,"severity":"low","line_start":59},{"id":"filesystem:references/api_reference.md:185:hidden-file-in-home-directory","file":"references/api_reference.md","pattern":"Hidden file in home directory","snippet":"Location: `~/.claude/skills/notebooklm/data/`","category":"filesystem","line_end":185,"severity":"high","line_start":185},{"id":"filesystem:references/api_reference.md:185:hidden-file-access","file":"references/api_reference.md","pattern":"Hidden file access","snippet":"Location: `~/.claude/skills/notebooklm/data/`","category":"filesystem","line_end":185,"severity":"medium","line_start":185},{"id":"sensitive:references/api_reference.md:199:environment-file-access","file":"references/api_reference.md","pattern":"Environment file access","snippet":"Optional `.env` file configuration:","category":"sensitive","line_end":199,"severity":"high","line_start":199},{"id":"blocker:references/api_reference.md:27:system-reconnaissance","file":"references/api_reference.md","pattern":"System reconnaissance","snippet":"python scripts/run.py ask_question.py --question \"...\" --notebook-id notebook-id","category":"blocker","line_end":27,"severity":"low","line_start":27},{"id":"blocker:references/api_reference.md:71:system-reconnaissance","file":"references/api_reference.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py activate --id notebook-id","category":"blocker","line_end":71,"severity":"low","line_start":71},{"id":"blocker:references/api_reference.md:74:system-reconnaissance","file":"references/api_reference.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py remove --id notebook-id","category":"blocker","line_end":74,"severity":"low","line_start":74},{"id":"blocker:references/api_reference.md:252:system-reconnaissance","file":"references/api_reference.md","pattern":"System reconnaissance","snippet":"\"--notebook-id\", notebook_id","category":"blocker","line_end":253,"severity":"low","line_start":252},{"id":"blocker:references/api_reference.md:274:system-reconnaissance","file":"references/api_reference.md","pattern":"System reconnaissance","snippet":"\"--notebook-id\", notebook_id","category":"blocker","line_end":275,"severity":"low","line_start":274},{"id":"blocker:references/api_reference.md:277:system-reconnaissance","file":"references/api_reference.md","pattern":"System reconnaissance","snippet":"time.sleep(2)  # Avoid rate limits","category":"blocker","line_end":277,"severity":"low","line_start":277},{"id":"external_commands:references/troubleshooting.md:132:python-subprocess-run","file":"references/troubleshooting.md","pattern":"Python subprocess.run","snippet":"subprocess.run([\"python\", \"scripts/run.py\", \"auth_manager.py\", \"reauth\"])","category":"external_commands","line_end":132,"severity":"high","line_start":132},{"id":"external_commands:references/troubleshooting.md:277:unix-shell-invocation","file":"references/troubleshooting.md","pattern":"Unix shell invocation","snippet":"#!/bin/bash","category":"external_commands","line_end":277,"severity":"medium","line_start":277},{"id":"network:references/troubleshooting.md:148:hardcoded-url","file":"references/troubleshooting.md","pattern":"Hardcoded URL","snippet":"--url \"https://notebooklm.google.com/...\" \\","category":"network","line_end":148,"severity":"low","line_start":148},{"id":"network:references/troubleshooting.md:209:hardcoded-url","file":"references/troubleshooting.md","pattern":"Hardcoded URL","snippet":"export HTTP_PROXY=http://proxy:port","category":"network","line_end":209,"severity":"low","line_start":209},{"id":"network:references/troubleshooting.md:210:hardcoded-url","file":"references/troubleshooting.md","pattern":"Hardcoded URL","snippet":"export HTTPS_PROXY=http://proxy:port","category":"network","line_end":210,"severity":"low","line_start":210},{"id":"network:references/troubleshooting.md:209:proxy-environment-variable","file":"references/troubleshooting.md","pattern":"Proxy environment variable","snippet":"export HTTP_PROXY=http://proxy:port","category":"network","line_end":209,"severity":"medium","line_start":209},{"id":"network:references/troubleshooting.md:210:proxy-environment-variable","file":"references/troubleshooting.md","pattern":"Proxy environment variable","snippet":"export HTTPS_PROXY=http://proxy:port","category":"network","line_end":210,"severity":"medium","line_start":210},{"id":"filesystem:references/troubleshooting.md:101:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":101,"severity":"high","line_start":101},{"id":"filesystem:references/troubleshooting.md:223:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cp ~/.claude/skills/notebooklm/data/library.json library.backup.json","category":"filesystem","line_end":223,"severity":"high","line_start":223},{"id":"filesystem:references/troubleshooting.md:226:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"rm ~/.claude/skills/notebooklm/data/library.json","category":"filesystem","line_end":226,"severity":"high","line_start":226},{"id":"filesystem:references/troubleshooting.md:236:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"df -h ~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":236,"severity":"high","line_start":236},{"id":"filesystem:references/troubleshooting.md:282:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"if [ -f ~/.claude/skills/notebooklm/data/library.json ]; then","category":"filesystem","line_end":282,"severity":"high","line_start":282},{"id":"filesystem:references/troubleshooting.md:283:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cp ~/.claude/skills/notebooklm/data/library.json ~/library.backup.json","category":"filesystem","line_end":283,"severity":"high","line_start":283},{"id":"filesystem:references/troubleshooting.md:287:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":287,"severity":"high","line_start":287},{"id":"filesystem:references/troubleshooting.md:298:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"mkdir -p ~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":298,"severity":"high","line_start":298},{"id":"filesystem:references/troubleshooting.md:299:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cp ~/library.backup.json ~/.claude/skills/notebooklm/data/library.json","category":"filesystem","line_end":299,"severity":"high","line_start":299},{"id":"filesystem:references/troubleshooting.md:306:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":306,"severity":"high","line_start":306},{"id":"filesystem:references/troubleshooting.md:353:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":353,"severity":"high","line_start":353},{"id":"filesystem:references/troubleshooting.md:361:hidden-file-in-home-directory","file":"references/troubleshooting.md","pattern":"Hidden file in home directory","snippet":"ls -la ~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":361,"severity":"high","line_start":361},{"id":"filesystem:references/troubleshooting.md:101:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":101,"severity":"medium","line_start":101},{"id":"filesystem:references/troubleshooting.md:223:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cp ~/.claude/skills/notebooklm/data/library.json library.backup.json","category":"filesystem","line_end":223,"severity":"medium","line_start":223},{"id":"filesystem:references/troubleshooting.md:226:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"rm ~/.claude/skills/notebooklm/data/library.json","category":"filesystem","line_end":226,"severity":"medium","line_start":226},{"id":"filesystem:references/troubleshooting.md:236:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"df -h ~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":236,"severity":"medium","line_start":236},{"id":"filesystem:references/troubleshooting.md:282:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"if [ -f ~/.claude/skills/notebooklm/data/library.json ]; then","category":"filesystem","line_end":282,"severity":"medium","line_start":282},{"id":"filesystem:references/troubleshooting.md:283:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cp ~/.claude/skills/notebooklm/data/library.json ~/library.backup.json","category":"filesystem","line_end":283,"severity":"medium","line_start":283},{"id":"filesystem:references/troubleshooting.md:287:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":287,"severity":"medium","line_start":287},{"id":"filesystem:references/troubleshooting.md:298:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"mkdir -p ~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":298,"severity":"medium","line_start":298},{"id":"filesystem:references/troubleshooting.md:299:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cp ~/library.backup.json ~/.claude/skills/notebooklm/data/library.json","category":"filesystem","line_end":299,"severity":"medium","line_start":299},{"id":"filesystem:references/troubleshooting.md:306:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":306,"severity":"medium","line_start":306},{"id":"filesystem:references/troubleshooting.md:353:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"cd ~/.claude/skills/notebooklm","category":"filesystem","line_end":353,"severity":"medium","line_start":353},{"id":"filesystem:references/troubleshooting.md:361:hidden-file-access","file":"references/troubleshooting.md","pattern":"Hidden file access","snippet":"ls -la ~/.claude/skills/notebooklm/data/","category":"filesystem","line_end":361,"severity":"medium","line_start":361},{"id":"blocker:references/troubleshooting.md:166:system-reconnaissance","file":"references/troubleshooting.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py activate --id correct-id","category":"blocker","line_end":166,"severity":"low","line_start":166},{"id":"blocker:references/troubleshooting.md:318:system-reconnaissance","file":"references/troubleshooting.md","pattern":"System reconnaissance","snippet":"| Not authenticated | No valid auth | `run.py auth_manager.py setup` |","category":"blocker","line_end":318,"severity":"low","line_start":318},{"id":"blocker:references/troubleshooting.md:320:system-reconnaissance","file":"references/troubleshooting.md","pattern":"System reconnaissance","snippet":"| Invalid credentials | Wrong account | Check Google account |","category":"blocker","line_end":320,"severity":"low","line_start":320},{"id":"blocker:references/troubleshooting.md:334:system-reconnaissance","file":"references/troubleshooting.md","pattern":"System reconnaissance","snippet":"| Notebook not found | Invalid ID | `run.py notebook_manager.py list` |","category":"blocker","line_end":334,"severity":"low","line_start":334},{"id":"blocker:references/troubleshooting.md:336:system-reconnaissance","file":"references/troubleshooting.md","pattern":"System reconnaissance","snippet":"| Invalid URL | Wrong format | Use full NotebookLM URL |","category":"blocker","line_end":336,"severity":"low","line_start":336},{"id":"blocker:references/troubleshooting.md:343:system-reconnaissance","file":"references/troubleshooting.md","pattern":"System reconnaissance","snippet":"3. **Monitor queries** - Track daily count to avoid limits","category":"blocker","line_end":343,"severity":"low","line_start":343},{"id":"external_commands:references/usage_patterns.md:177:python-subprocess-run","file":"references/usage_patterns.md","pattern":"Python subprocess.run","snippet":"result = subprocess.run([","category":"external_commands","line_end":177,"severity":"high","line_start":177},{"id":"external_commands:references/usage_patterns.md:210:python-subprocess-run","file":"references/usage_patterns.md","pattern":"Python subprocess.run","snippet":"result = subprocess.run([","category":"external_commands","line_end":210,"severity":"high","line_start":210},{"id":"external_commands:references/usage_patterns.md:219:python-subprocess-run","file":"references/usage_patterns.md","pattern":"Python subprocess.run","snippet":"follow_up = subprocess.run([","category":"external_commands","line_end":219,"severity":"high","line_start":219},{"id":"external_commands:references/usage_patterns.md:143:unix-shell-invocation","file":"references/usage_patterns.md","pattern":"Unix shell invocation","snippet":"#!/bin/bash","category":"external_commands","line_end":143,"severity":"medium","line_start":143},{"id":"network:references/usage_patterns.md:31:hardcoded-url","file":"references/usage_patterns.md","pattern":"Hardcoded URL","snippet":"--url \"https://notebooklm.google.com/notebook/...\" \\","category":"network","line_end":31,"severity":"low","line_start":31},{"id":"blocker:references/usage_patterns.md:89:system-reconnaissance","file":"references/usage_patterns.md","pattern":"System reconnaissance","snippet":"--notebook-id notebook-id","category":"blocker","line_end":89,"severity":"low","line_start":89},{"id":"blocker:references/usage_patterns.md:115:system-reconnaissance","file":"references/usage_patterns.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py activate --id notebook-1","category":"blocker","line_end":115,"severity":"low","line_start":115},{"id":"blocker:references/usage_patterns.md:118:system-reconnaissance","file":"references/usage_patterns.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py activate --id notebook-2","category":"blocker","line_end":118,"severity":"low","line_start":118},{"id":"blocker:references/usage_patterns.md:155:system-reconnaissance","file":"references/usage_patterns.md","pattern":"System reconnaissance","snippet":"--notebook-id \"$NOTEBOOK_ID\"","category":"blocker","line_end":155,"severity":"low","line_start":155},{"id":"blocker:references/usage_patterns.md:156:system-reconnaissance","file":"references/usage_patterns.md","pattern":"System reconnaissance","snippet":"sleep 2  # Avoid rate limits","category":"blocker","line_end":156,"severity":"low","line_start":156},{"id":"blocker:references/usage_patterns.md:180:system-reconnaissance","file":"references/usage_patterns.md","pattern":"System reconnaissance","snippet":"\"--notebook-id\", notebook_id","category":"blocker","line_end":181,"severity":"low","line_start":180},{"id":"env_access:requirements.txt:10:dotenv-library","file":"requirements.txt","pattern":"dotenv library","snippet":"python-dotenv==1.2.2","category":"env_access","line_end":10,"severity":"low","line_start":10},{"id":"external_commands:scripts/__init__.py:53:python-subprocess-run","file":"scripts/__init__.py","pattern":"Python subprocess.run","snippet":"subprocess.run(","category":"external_commands","line_end":53,"severity":"high","line_start":53},{"id":"external_commands:scripts/__init__.py:65:python-subprocess-run","file":"scripts/__init__.py","pattern":"Python subprocess.run","snippet":"subprocess.run(","category":"external_commands","line_end":65,"severity":"high","line_start":65},{"id":"network:scripts/ask_question.py:9:hardcoded-url","file":"scripts/ask_question.py","pattern":"Hardcoded URL","snippet":"See: https://github.com/microsoft/playwright/issues/36139","category":"network","line_end":9,"severity":"low","line_start":9},{"id":"network:scripts/ask_question.py:80:hardcoded-url","file":"scripts/ask_question.py","pattern":"Hardcoded URL","snippet":"page.wait_for_url(re.compile(r\"^https://notebooklm\\.google\\.com/\"), timeout=10000)","category":"network","line_end":80,"severity":"low","line_start":80},{"id":"sensitive:scripts/ask_question.py:112:certificate-key-files","file":"scripts/ask_question.py","pattern":"Certificate/key files","snippet":"page.keyboard.press(\"Enter\")","category":"sensitive","line_end":112,"severity":"high","line_start":112},{"id":"blocker:scripts/ask_question.py:6:system-reconnaissance","file":"scripts/ask_question.py","pattern":"System reconnaissance","snippet":"Implements hybrid auth approach:","category":"blocker","line_end":6,"severity":"low","line_start":6},{"id":"blocker:scripts/ask_question.py:225:system-reconnaissance","file":"scripts/ask_question.py","pattern":"System reconnaissance","snippet":"mark = \" [ACTIVE]\" if nb.get('id') == library.active_notebook_id else \"\"","category":"blocker","line_end":225,"severity":"low","line_start":225},{"id":"blocker:scripts/ask_question.py:227:system-reconnaissance","file":"scripts/ask_question.py","pattern":"System reconnaissance","snippet":"print(\"\\nSpecify with --notebook-id or set active:\")","category":"blocker","line_end":227,"severity":"low","line_start":227},{"id":"blocker:scripts/ask_question.py:228:system-reconnaissance","file":"scripts/ask_question.py","pattern":"System reconnaissance","snippet":"print(\"python scripts/run.py notebook_manager.py activate --id ID\")","category":"blocker","line_end":228,"severity":"low","line_start":228},{"id":"network:scripts/auth_manager.py:10:hardcoded-url","file":"scripts/auth_manager.py","pattern":"Hardcoded URL","snippet":"See: https://github.com/microsoft/playwright/issues/36139","category":"network","line_end":10,"severity":"low","line_start":10},{"id":"network:scripts/auth_manager.py:127:hardcoded-url","file":"scripts/auth_manager.py","pattern":"Hardcoded URL","snippet":"page.goto(\"https://notebooklm.google.com\", wait_until=\"domcontentloaded\")","category":"network","line_end":127,"severity":"low","line_start":127},{"id":"network:scripts/auth_manager.py:142:hardcoded-url","file":"scripts/auth_manager.py","pattern":"Hardcoded URL","snippet":"page.wait_for_url(re.compile(r\"^https://notebooklm\\.google\\.com/\"), timeout=timeout_ms)","category":"network","line_end":142,"severity":"low","line_start":142},{"id":"network:scripts/auth_manager.py:276:hardcoded-url","file":"scripts/auth_manager.py","pattern":"Hardcoded URL","snippet":"page.goto(\"https://notebooklm.google.com\", wait_until=\"domcontentloaded\", timeout=30000)","category":"network","line_end":276,"severity":"low","line_start":276},{"id":"filesystem:scripts/auth_manager.py:191:python-file-write-append","file":"scripts/auth_manager.py","pattern":"Python file write/append","snippet":"with open(self.auth_info_file, 'w') as f:","category":"filesystem","line_end":191,"severity":"medium","line_start":191},{"id":"filesystem:scripts/auth_manager.py:219:python-shutil-operations","file":"scripts/auth_manager.py","pattern":"Python shutil operations","snippet":"shutil.rmtree(self.browser_state_dir)","category":"filesystem","line_end":219,"severity":"medium","line_start":219},{"id":"blocker:scripts/auth_manager.py:7:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"Implements hybrid auth approach:","category":"blocker","line_end":7,"severity":"low","line_start":7},{"id":"blocker:scripts/auth_manager.py:32:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"def _get_hostname(url: str) -> str:","category":"blocker","line_end":32,"severity":"low","line_start":32},{"id":"blocker:scripts/auth_manager.py:33:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"\"\"\"Extract a normalized hostname from a URL.\"\"\"","category":"blocker","line_end":33,"severity":"low","line_start":33},{"id":"blocker:scripts/auth_manager.py:35:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"return (urlparse(url).hostname or \"\").lower()","category":"blocker","line_end":35,"severity":"low","line_start":35},{"id":"blocker:scripts/auth_manager.py:41:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"\"\"\"Return True when the URL hostname exactly matches the expected host.\"\"\"","category":"blocker","line_end":41,"severity":"low","line_start":41},{"id":"blocker:scripts/auth_manager.py:42:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"return _get_hostname(url) == expected_host","category":"blocker","line_end":42,"severity":"low","line_start":42},{"id":"blocker:scripts/auth_manager.py:66:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"\"\"\"Check if valid authentication exists\"\"\"","category":"blocker","line_end":66,"severity":"low","line_start":66},{"id":"blocker:scripts/auth_manager.py:255:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"True if authentication is valid","category":"blocker","line_end":256,"severity":"low","line_start":255},{"id":"blocker:scripts/auth_manager.py:283:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"print(\"  ❌ Authentication is invalid (redirected to login)\")","category":"blocker","line_end":283,"severity":"low","line_start":283},{"id":"blocker:scripts/auth_manager.py:353:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"print(\"Authentication is valid and working\")","category":"blocker","line_end":353,"severity":"low","line_start":353},{"id":"blocker:scripts/auth_manager.py:355:system-reconnaissance","file":"scripts/auth_manager.py","pattern":"System reconnaissance","snippet":"print(\"Authentication is invalid or expired\")","category":"blocker","line_end":355,"severity":"low","line_start":355},{"id":"sensitive:scripts/browser_session.py:135:certificate-key-files","file":"scripts/browser_session.py","pattern":"Certificate/key files","snippet":"self.page.keyboard.press(\"Enter\")","category":"sensitive","line_end":135,"severity":"high","line_start":135},{"id":"blocker:scripts/browser_session.py:22:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"def _get_hostname(url: str) -> str:","category":"blocker","line_end":22,"severity":"low","line_start":22},{"id":"blocker:scripts/browser_session.py:23:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"\"\"\"Extract a normalized hostname from a URL.\"\"\"","category":"blocker","line_end":23,"severity":"low","line_start":23},{"id":"blocker:scripts/browser_session.py:25:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"return (urlparse(url).hostname or \"\").lower()","category":"blocker","line_end":25,"severity":"low","line_start":25},{"id":"blocker:scripts/browser_session.py:48:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"self.id = session_id","category":"blocker","line_end":48,"severity":"low","line_start":48},{"id":"blocker:scripts/browser_session.py:73:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"if _get_hostname(self.page.url) == \"accounts.google.com\":","category":"blocker","line_end":73,"severity":"low","line_start":73},{"id":"blocker:scripts/browser_session.py:108:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"Dict with status, question, answer, session_id","category":"blocker","line_end":109,"severity":"low","line_start":108},{"id":"blocker:scripts/browser_session.py:163:system-reconnaissance","file":"scripts/browser_session.py","pattern":"System reconnaissance","snippet":"\"session_id\": self.id","category":"blocker","line_end":164,"severity":"low","line_start":163},{"id":"filesystem:scripts/cleanup_manager.py:173:python-shutil-operations","file":"scripts/cleanup_manager.py","pattern":"Python shutil operations","snippet":"shutil.rmtree(path)","category":"filesystem","line_end":173,"severity":"medium","line_start":173},{"id":"filesystem:scripts/config.py:32:python-shutil-operations","file":"scripts/config.py","pattern":"Python shutil operations","snippet":"shutil.move(str(LEGACY_DATA_DIR), str(DATA_DIR))","category":"filesystem","line_end":32,"severity":"medium","line_start":32},{"id":"env_access:scripts/config.py:12:python-environment-access","file":"scripts/config.py","pattern":"Python environment access","snippet":"DATA_DIR = Path(os.environ.get(","category":"env_access","line_end":12,"severity":"low","line_start":12},{"id":"filesystem:scripts/notebook_manager.py:58:python-file-write-append","file":"scripts/notebook_manager.py","pattern":"Python file write/append","snippet":"with open(self.library_file, 'w') as f:","category":"filesystem","line_end":58,"severity":"medium","line_start":58},{"id":"sensitive:scripts/notebook_manager.py:141:certificate-key-files","file":"scripts/notebook_manager.py","pattern":"Certificate/key files","snippet":"self.active_notebook_id = list(self.notebooks.keys())[0]","category":"sensitive","line_end":141,"severity":"high","line_start":141},{"id":"blocker:scripts/notebook_manager.py:10:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"import uuid","category":"blocker","line_end":11,"severity":"low","line_start":10},{"id":"blocker:scripts/notebook_manager.py:41:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"self.active_notebook_id = data.get('active_notebook_id')","category":"blocker","line_end":41,"severity":"low","line_start":41},{"id":"blocker:scripts/notebook_manager.py:46:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"self.active_notebook_id = None","category":"blocker","line_end":46,"severity":"low","line_start":46},{"id":"blocker:scripts/notebook_manager.py:89:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"notebook_id = name.lower().replace(' ', '-').replace('_', '-')","category":"blocker","line_end":89,"severity":"low","line_start":89},{"id":"blocker:scripts/notebook_manager.py:92:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"if notebook_id in self.notebooks:","category":"blocker","line_end":92,"severity":"low","line_start":92},{"id":"blocker:scripts/notebook_manager.py:116:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"self.active_notebook_id = notebook_id","category":"blocker","line_end":116,"severity":"low","line_start":116},{"id":"blocker:scripts/notebook_manager.py:133:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"if notebook_id in self.notebooks:","category":"blocker","line_end":133,"severity":"low","line_start":133},{"id":"blocker:scripts/notebook_manager.py:137:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"if self.active_notebook_id == notebook_id:","category":"blocker","line_end":137,"severity":"low","line_start":137},{"id":"blocker:scripts/notebook_manager.py:138:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"self.active_notebook_id = None","category":"blocker","line_end":138,"severity":"low","line_start":138},{"id":"blocker:scripts/notebook_manager.py:141:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"self.active_notebook_id = list(self.notebooks.keys())[0]","category":"blocker","line_end":141,"severity":"low","line_start":141},{"id":"blocker:scripts/notebook_manager.py:171:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"if notebook_id not in self.notebooks:","category":"blocker","line_end":171,"severity":"low","line_start":171},{"id":"blocker:scripts/notebook_manager.py:244:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"if notebook_id not in self.notebooks:","category":"blocker","line_end":244,"severity":"low","line_start":244},{"id":"blocker:scripts/notebook_manager.py:247:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"self.active_notebook_id = notebook_id","category":"blocker","line_end":247,"severity":"low","line_start":247},{"id":"blocker:scripts/notebook_manager.py:270:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"if notebook_id not in self.notebooks:","category":"blocker","line_end":270,"severity":"low","line_start":270},{"id":"blocker:scripts/notebook_manager.py:367:system-reconnaissance","file":"scripts/notebook_manager.py","pattern":"System reconnaissance","snippet":"active = \" [ACTIVE]\" if notebook['id'] == library.active_notebook_id else \"\"","category":"blocker","line_end":367,"severity":"low","line_start":367},{"id":"external_commands:scripts/run.py:48:python-subprocess-run","file":"scripts/run.py","pattern":"Python subprocess.run","snippet":"result = subprocess.run([sys.executable, str(setup_script)])","category":"external_commands","line_end":48,"severity":"high","line_start":48},{"id":"external_commands:scripts/run.py:107:python-os-exec-variants","file":"scripts/run.py","pattern":"Python os.exec variants","snippet":"os.execv(str(venv_python), [str(venv_python), str(script_path)] + script_args)","category":"external_commands","line_end":107,"severity":"high","line_start":107},{"id":"external_commands:scripts/setup_environment.py:54:python-subprocess-run","file":"scripts/setup_environment.py","pattern":"Python subprocess.run","snippet":"subprocess.run(","category":"external_commands","line_end":54,"severity":"high","line_start":54},{"id":"external_commands:scripts/setup_environment.py:62:python-subprocess-run","file":"scripts/setup_environment.py","pattern":"Python subprocess.run","snippet":"result = subprocess.run(","category":"external_commands","line_end":62,"severity":"high","line_start":62},{"id":"external_commands:scripts/setup_environment.py:75:python-subprocess-run","file":"scripts/setup_environment.py","pattern":"Python subprocess.run","snippet":"subprocess.run(","category":"external_commands","line_end":75,"severity":"high","line_start":75},{"id":"external_commands:scripts/setup_environment.py:132:python-subprocess-run","file":"scripts/setup_environment.py","pattern":"Python subprocess.run","snippet":"result = subprocess.run(cmd)","category":"external_commands","line_end":132,"severity":"high","line_start":132},{"id":"network:scripts/setup_environment.py:72:hardcoded-url","file":"scripts/setup_environment.py","pattern":"Hardcoded URL","snippet":"# See: https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python#anti-detection","category":"network","line_end":72,"severity":"low","line_start":72},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Shares NotebookLM URL (`https://notebooklm.google.com/notebook/...`)","category":"external_commands","line_end":17,"severity":"medium","line_start":17},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":33,"severity":"medium","line_start":27},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":36,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `--url` - The NotebookLM URL","category":"external_commands","line_end":37,"severity":"medium","line_start":36},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `--name` - A descriptive name","category":"external_commands","line_end":38,"severity":"medium","line_start":37},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `--description` - What the notebook contains (REQUIRED!)","category":"external_commands","line_end":39,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:39:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `--topics` - Comma-separated topics (REQUIRED!)","category":"external_commands","line_end":45,"severity":"medium","line_start":39},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**NEVER call scripts directly. ALWAYS use `python scripts/run.py [script]`:**","category":"external_commands","line_end":47,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":55,"severity":"medium","line_start":47},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":57,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The `run.py` wrapper automatically:","category":"external_commands","line_end":58,"severity":"medium","line_start":57},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. Creates `.venv` if needed","category":"external_commands","line_end":66,"severity":"medium","line_start":58},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":68,"severity":"medium","line_start":66},{"id":"external_commands:SKILL.md:68:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":73,"severity":"medium","line_start":68},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":76,"severity":"medium","line_start":73},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":86,"severity":"medium","line_start":76},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":109,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":112,"severity":"medium","line_start":109},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. Check library: `python scripts/run.py notebook_manager.py list`","category":"external_commands","line_end":113,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:113:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. Ask question: `python scripts/run.py ask_question.py --question \"...\" --notebook-id ID`","category":"external_commands","line_end":117,"severity":"medium","line_start":113},{"id":"external_commands:SKILL.md:117:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":129,"severity":"medium","line_start":117},{"id":"external_commands:SKILL.md:129:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":140,"severity":"medium","line_start":129},{"id":"external_commands:SKILL.md:140:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":142,"severity":"medium","line_start":140},{"id":"external_commands:SKILL.md:142:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":148,"severity":"medium","line_start":142},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### Authentication Management (`auth_manager.py`)","category":"external_commands","line_end":149,"severity":"medium","line_start":148},{"id":"external_commands:SKILL.md:149:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":154,"severity":"medium","line_start":149},{"id":"external_commands:SKILL.md:154:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":156,"severity":"medium","line_start":154},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### Notebook Management (`notebook_manager.py`)","category":"external_commands","line_end":157,"severity":"medium","line_start":156},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":164,"severity":"medium","line_start":157},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":166,"severity":"medium","line_start":164},{"id":"external_commands:SKILL.md:166:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### Question Interface (`ask_question.py`)","category":"external_commands","line_end":167,"severity":"medium","line_start":166},{"id":"external_commands:SKILL.md:167:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":169,"severity":"medium","line_start":167},{"id":"external_commands:SKILL.md:169:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":171,"severity":"medium","line_start":169},{"id":"external_commands:SKILL.md:171:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"### Data Cleanup (`cleanup_manager.py`)","category":"external_commands","line_end":172,"severity":"medium","line_start":171},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":176,"severity":"medium","line_start":172},{"id":"external_commands:SKILL.md:176:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":181,"severity":"medium","line_start":176},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- First run creates `.venv` automatically","category":"external_commands","line_end":187,"severity":"medium","line_start":181},{"id":"external_commands:SKILL.md:187:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":192,"severity":"medium","line_start":187},{"id":"external_commands:SKILL.md:192:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":196,"severity":"medium","line_start":192},{"id":"external_commands:SKILL.md:196:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"All data stored in `~/.claude/skills/notebooklm/data/`:","category":"external_commands","line_end":197,"severity":"medium","line_start":196},{"id":"external_commands:SKILL.md:197:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `library.json` - Notebook metadata","category":"external_commands","line_end":198,"severity":"medium","line_start":197},{"id":"external_commands:SKILL.md:198:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/auth_info.json` - private authentication status ","category":"external_commands","line_end":198,"severity":"medium","line_start":198},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/browser_state/` - private browser cookies and se","category":"external_commands","line_end":199,"severity":"medium","line_start":199},{"id":"external_commands:SKILL.md:201:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Security:** Protected by `.gitignore`, never commit to git.","category":"external_commands","line_end":205,"severity":"medium","line_start":201},{"id":"external_commands:SKILL.md:205:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Optional `.env` file in skill directory:","category":"external_commands","line_end":206,"severity":"medium","line_start":205},{"id":"external_commands:SKILL.md:206:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```env","category":"external_commands","line_end":213,"severity":"medium","line_start":206},{"id":"external_commands:SKILL.md:213:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":217,"severity":"medium","line_start":213},{"id":"external_commands:SKILL.md:217:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":233,"severity":"medium","line_start":217},{"id":"external_commands:SKILL.md:233:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":239,"severity":"medium","line_start":233},{"id":"external_commands:SKILL.md:239:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| ModuleNotFoundError | Use `run.py` wrapper |","category":"external_commands","line_end":242,"severity":"medium","line_start":239},{"id":"external_commands:SKILL.md:242:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Browser crashes | `python scripts/run.py cleanup_manager.py --preserve-library` |","category":"external_commands","line_end":243,"severity":"medium","line_start":242},{"id":"external_commands:SKILL.md:243:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Notebook not found | Check with `notebook_manager.py list` |","category":"external_commands","line_end":265,"severity":"medium","line_start":243},{"id":"external_commands:SKILL.md:265:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `scripts/` - All automation scripts (ask_question.py, notebook_manager.py, etc.)","category":"external_commands","line_end":266,"severity":"medium","line_start":265},{"id":"external_commands:SKILL.md:266:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/` - private per-user authentication and notebook","category":"external_commands","line_end":267,"severity":"medium","line_start":266},{"id":"external_commands:SKILL.md:267:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `references/` - Extended documentation:","category":"external_commands","line_end":268,"severity":"medium","line_start":267},{"id":"external_commands:SKILL.md:268:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `api_reference.md` - Detailed API documentation for all scripts","category":"external_commands","line_end":269,"severity":"medium","line_start":268},{"id":"external_commands:SKILL.md:269:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `troubleshooting.md` - Common issues and solutions","category":"external_commands","line_end":270,"severity":"medium","line_start":269},{"id":"external_commands:SKILL.md:270:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `usage_patterns.md` - Best practices and workflow examples","category":"external_commands","line_end":271,"severity":"medium","line_start":270},{"id":"external_commands:SKILL.md:271:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `.venv/` - Isolated Python environment (auto-created on first run)","category":"external_commands","line_end":272,"severity":"medium","line_start":271},{"id":"network:SKILL.md:17:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Shares NotebookLM URL (`https://notebooklm.google.com/notebook/...`)","category":"network","line_end":17,"severity":"low","line_start":17},{"id":"network:SKILL.md:96:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"--url \"https://notebooklm.google.com/notebook/...\" \\","category":"network","line_end":96,"severity":"low","line_start":96},{"id":"network:SKILL.md:125:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"python scripts/run.py ask_question.py --question \"...\" --notebook-url \"https://...\"","category":"network","line_end":125,"severity":"low","line_start":125},{"id":"filesystem:SKILL.md:196:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"All data stored in `~/.claude/skills/notebooklm/data/`:","category":"filesystem","line_end":196,"severity":"high","line_start":196},{"id":"filesystem:SKILL.md:198:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/auth_info.json` - private authentication status ","category":"filesystem","line_end":198,"severity":"high","line_start":198},{"id":"filesystem:SKILL.md:199:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/browser_state/` - private browser cookies and se","category":"filesystem","line_end":199,"severity":"high","line_start":199},{"id":"filesystem:SKILL.md:266:hidden-file-in-home-directory","file":"SKILL.md","pattern":"Hidden file in home directory","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/` - private per-user authentication and notebook","category":"filesystem","line_end":266,"severity":"high","line_start":266},{"id":"filesystem:SKILL.md:196:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"All data stored in `~/.claude/skills/notebooklm/data/`:","category":"filesystem","line_end":196,"severity":"medium","line_start":196},{"id":"filesystem:SKILL.md:198:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/auth_info.json` - private authentication status ","category":"filesystem","line_end":198,"severity":"medium","line_start":198},{"id":"filesystem:SKILL.md:199:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/browser_state/` - private browser cookies and se","category":"filesystem","line_end":199,"severity":"medium","line_start":199},{"id":"filesystem:SKILL.md:266:hidden-file-access","file":"SKILL.md","pattern":"Hidden file access","snippet":"- `~/.local/share/agentic-awesome-skills/notebooklm/` - private per-user authentication and notebook","category":"filesystem","line_end":266,"severity":"medium","line_start":266},{"id":"sensitive:SKILL.md:205:environment-file-access","file":"SKILL.md","pattern":"Environment file access","snippet":"Optional `.env` file in skill directory:","category":"sensitive","line_end":205,"severity":"high","line_start":205},{"id":"blocker:SKILL.md:105:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py activate --id notebook-id","category":"blocker","line_end":105,"severity":"low","line_start":105},{"id":"blocker:SKILL.md:108:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py remove --id notebook-id","category":"blocker","line_end":108,"severity":"low","line_start":108},{"id":"blocker:SKILL.md:113:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"2. Ask question: `python scripts/run.py ask_question.py --question \"...\" --notebook-id ID`","category":"blocker","line_end":113,"severity":"low","line_start":113},{"id":"blocker:SKILL.md:122:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"python scripts/run.py ask_question.py --question \"...\" --notebook-id notebook-id","category":"blocker","line_end":122,"severity":"low","line_start":122},{"id":"blocker:SKILL.md:161:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py activate --id ID","category":"blocker","line_end":161,"severity":"low","line_start":161},{"id":"blocker:SKILL.md:162:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"python scripts/run.py notebook_manager.py remove --id ID","category":"blocker","line_end":162,"severity":"low","line_start":162},{"id":"blocker:SKILL.md:168:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"python scripts/run.py ask_question.py --question \"...\" [--notebook-id ID] [--notebook-url URL] [--sh","category":"blocker","line_end":168,"severity":"low","line_start":168},{"id":"blocker:SKILL.md:226:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"Activate notebook → python scripts/run.py notebook_manager.py activate --id ID","category":"blocker","line_end":226,"severity":"low","line_start":226}],"finding_verdicts":[{"id":"sensitive:.gitignore:26:environment-file-access","reason":"This is an ignore rule naming files that should not be committed. It performs no file or database access and reduces accidental disclosure.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:.gitignore:27:environment-file-access","reason":"This is an ignore rule naming files that should not be committed. It performs no file or database access and reduces accidental disclosure.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:.gitignore:28:environment-file-access","reason":"This is an ignore rule naming files that should not be committed. It performs no file or database access and reduces accidental disclosure.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:.gitignore:50:sqlite-database-file","reason":"This is an ignore rule naming files that should not be committed. It performs no file or database access and reduces accidental disclosure.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:.gitignore:52:sqlite-database-file","reason":"This is an ignore rule naming files that should not be committed. It performs no file or database access and reduces accidental disclosure.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:AUTHENTICATION.md:101:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:AUTHENTICATION.md:101:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"blocker:AUTHENTICATION.md:5:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:AUTHENTICATION.md:48:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:AUTHENTICATION.md:154:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"network:README.md:77:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:README.md:401:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:73:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:76:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:154:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:163:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:266:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:268:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:334:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:347:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:400:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:73:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:76:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:154:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:163:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:266:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:268:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:334:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:347:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:README.md:400:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"env_access:README.md:258:dotenv-library","reason":"This line documents a dependency used for configuration. It does not access or disclose environment values.","verdict":"false_positive","confidence":0.97},{"id":"blocker:README.md:200:system-reconnaissance","reason":"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.","verdict":"confirmed","severity":"high","confidence":0.98},{"id":"blocker:README.md:221:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/api_reference.md:160:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/api_reference.md:216:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/api_reference.md:228:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/api_reference.md:249:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/api_reference.md:271:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"network:references/api_reference.md:30:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:references/api_reference.md:52:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:references/api_reference.md:59:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/api_reference.md:185:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/api_reference.md:185:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:references/api_reference.md:199:environment-file-access","reason":"This line documents optional environment configuration. It does not read, print, transmit, or modify an environment file.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/api_reference.md:27:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/api_reference.md:71:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/api_reference.md:74:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/api_reference.md:252:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/api_reference.md:274:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/api_reference.md:277:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/troubleshooting.md:132:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/troubleshooting.md:277:unix-shell-invocation","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"network:references/troubleshooting.md:148:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:references/troubleshooting.md:209:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:references/troubleshooting.md:210:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:references/troubleshooting.md:209:proxy-environment-variable","reason":"This is an explicit troubleshooting example for user-configured HTTP proxies. It does not silently alter or extract proxy settings.","verdict":"false_positive","confidence":0.97},{"id":"network:references/troubleshooting.md:210:proxy-environment-variable","reason":"This is an explicit troubleshooting example for user-configured HTTP proxies. It does not silently alter or extract proxy settings.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:101:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:223:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:226:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:236:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:282:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:283:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:287:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:298:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:299:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:306:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:353:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:361:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:101:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:223:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:226:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:236:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:282:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:283:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:287:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:298:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:299:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:306:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:353:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:references/troubleshooting.md:361:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/troubleshooting.md:166:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/troubleshooting.md:318:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/troubleshooting.md:320:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/troubleshooting.md:334:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/troubleshooting.md:336:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/troubleshooting.md:343:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/usage_patterns.md:177:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/usage_patterns.md:210:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/usage_patterns.md:219:python-subprocess-run","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:references/usage_patterns.md:143:unix-shell-invocation","reason":"This location is a documentation example, not executed skill code. The example uses an argument list or ordinary shell workflow without an identified injection path.","verdict":"false_positive","confidence":0.97},{"id":"network:references/usage_patterns.md:31:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/usage_patterns.md:89:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/usage_patterns.md:115:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/usage_patterns.md:118:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/usage_patterns.md:155:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/usage_patterns.md:156:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:references/usage_patterns.md:180:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"env_access:requirements.txt:10:dotenv-library","reason":"This line declares the pinned python-dotenv dependency. It does not read environment variables or expose their values.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:scripts/__init__.py:53:python-subprocess-run","reason":"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.","verdict":"confirmed","severity":"high","confidence":0.93},{"id":"external_commands:scripts/__init__.py:65:python-subprocess-run","reason":"Importing the package can automatically run Patchright's browser installer. This downloads and executes browser setup without a separate user confirmation step.","verdict":"confirmed","severity":"high","confidence":0.93},{"id":"network:scripts/ask_question.py:9:hardcoded-url","reason":"The URL is either an upstream issue reference or a strict NotebookLM redirect check. It is expected for this integration and does not transmit data to an unrelated service.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/ask_question.py:80:hardcoded-url","reason":"The URL is either an upstream issue reference or a strict NotebookLM redirect check. It is expected for this integration and does not transmit data to an unrelated service.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:scripts/ask_question.py:112:certificate-key-files","reason":"The matched call presses the Enter key in the browser. It does not read, create, or transmit a certificate or private key.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/ask_question.py:6:system-reconnaissance","reason":"The match is descriptive text or notebook-selection output. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/ask_question.py:225:system-reconnaissance","reason":"The match is descriptive text or notebook-selection output. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/ask_question.py:227:system-reconnaissance","reason":"The match is descriptive text or notebook-selection output. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/ask_question.py:228:system-reconnaissance","reason":"The match is descriptive text or notebook-selection output. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/auth_manager.py:10:hardcoded-url","reason":"The URL is an upstream issue reference or the official NotebookLM origin used for login and validation. It is necessary for the declared integration.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/auth_manager.py:127:hardcoded-url","reason":"The URL is an upstream issue reference or the official NotebookLM origin used for login and validation. It is necessary for the declared integration.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/auth_manager.py:142:hardcoded-url","reason":"The URL is an upstream issue reference or the official NotebookLM origin used for login and validation. It is necessary for the declared integration.","verdict":"false_positive","confidence":0.97},{"id":"network:scripts/auth_manager.py:276:hardcoded-url","reason":"The URL is an upstream issue reference or the official NotebookLM origin used for login and validation. It is necessary for the declared integration.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/auth_manager.py:191:python-file-write-append","reason":"This write stores only authentication timestamps in a fixed private application file, then applies mode 0600. It does not write credentials supplied by an attacker.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/auth_manager.py:219:python-shutil-operations","reason":"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.","verdict":"confirmed","severity":"medium","confidence":0.79},{"id":"blocker:scripts/auth_manager.py:7:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:32:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:33:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:35:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:41:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:42:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:66:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:255:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:283:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:353:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/auth_manager.py:355:system-reconnaissance","reason":"The match is URL parsing, authentication state logic, or status text. It does not discover host or account configuration.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:scripts/browser_session.py:135:certificate-key-files","reason":"The matched call presses the Enter key to submit a question. It has no certificate or private-key behavior.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:22:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:23:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:25:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:48:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:73:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:108:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/browser_session.py:163:system-reconnaissance","reason":"The match is URL parsing or ordinary in-memory session bookkeeping. It does not enumerate the host or security environment.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/cleanup_manager.py:173:python-shutil-operations","reason":"Deletion is limited to the fixed skill-local data directory and is gated by preview and explicit confirmation. No user-controlled deletion path is used here.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:scripts/config.py:32:python-shutil-operations","reason":"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.","verdict":"confirmed","severity":"medium","confidence":0.76},{"id":"env_access:scripts/config.py:12:python-environment-access","reason":"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.","verdict":"confirmed","severity":"medium","confidence":0.84},{"id":"filesystem:scripts/notebook_manager.py:58:python-file-write-append","reason":"This writes user-requested notebook metadata to the skill-local library file. It is expected persistence and does not expose sensitive content.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:scripts/notebook_manager.py:141:certificate-key-files","reason":"The match selects the first notebook identifier after removal. It has no certificate or private-key behavior.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:10:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:41:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:46:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:89:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:92:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:116:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:133:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:137:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:138:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:141:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:171:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:244:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:247:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:270:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"blocker:scripts/notebook_manager.py:367:system-reconnaissance","reason":"The match is notebook identifier generation, lookup, or display logic. It does not perform system reconnaissance.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:scripts/run.py:48:python-subprocess-run","reason":"This executes the fixed, repository-local setup script with the current Python interpreter. Neither the executable nor script path comes from user input.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:scripts/run.py:107:python-os-exec-variants","reason":"The runner executes only an allowlisted script whose resolved path must remain inside the scripts directory. Arguments are passed as an array without a shell.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:scripts/setup_environment.py:54:python-subprocess-run","reason":"First-run setup automatically upgrades pip from the network. This executes newly downloaded package-management code and mutates the environment without a dedicated confirmation.","verdict":"confirmed","severity":"high","confidence":0.91},{"id":"external_commands:scripts/setup_environment.py:62:python-subprocess-run","reason":"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.","verdict":"confirmed","severity":"high","confidence":0.91},{"id":"external_commands:scripts/setup_environment.py:75:python-subprocess-run","reason":"The setup automatically invokes Patchright to download and install Chrome assets. This is a significant external side effect performed during automatic bootstrap.","verdict":"confirmed","severity":"high","confidence":0.9},{"id":"external_commands:scripts/setup_environment.py:132:python-subprocess-run","reason":"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.","verdict":"confirmed","severity":"high","confidence":0.98},{"id":"network:scripts/setup_environment.py:72:hardcoded-url","reason":"This URL appears only in a source comment referencing Patchright documentation. It causes no network request or data transfer.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:39:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:58:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:68:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:109:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:113:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:117:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:129:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:140:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:142:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:149:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:154:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:156:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:157:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:164:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:166:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:167:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:169:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:171:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:176:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:181:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:187:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:192:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:196:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:197:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:198:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:199:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:201:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:205:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:206:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:213:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:217:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:233:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:239:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:242:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:243:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:265:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:266:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:267:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:268:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:269:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:270:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"external_commands:SKILL.md:271:ruby-shell-backtick-execution","reason":"The match is Markdown inline-code or code-fence syntax, not Ruby or shell backtick execution. No executable construct exists at this location.","verdict":"false_positive","confidence":0.97},{"id":"network:SKILL.md:17:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:SKILL.md:96:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"network:SKILL.md:125:hardcoded-url","reason":"The URL is an expected NotebookLM, project, or installation endpoint shown in documentation. No secret or unrelated exfiltration destination is present.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:196:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:198:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:199:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:266:hidden-file-in-home-directory","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:196:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:198:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:199:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"filesystem:SKILL.md:266:hidden-file-access","reason":"This Markdown line documents an installation or application-state path. The documentation itself performs no hidden-file access.","verdict":"false_positive","confidence":0.97},{"id":"sensitive:SKILL.md:205:environment-file-access","reason":"This line documents optional environment configuration. It does not read, print, transmit, or modify an environment file.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:105:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:108:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:113:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:122:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:161:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:162:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:168:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97},{"id":"blocker:SKILL.md:226:system-reconnaissance","reason":"The matched prose or command concerns NotebookLM authentication, notebook identifiers, or normal usage. It does not enumerate host, network, account, or security controls.","verdict":"false_positive","confidence":0.97}],"semantic_findings":[{"title":"Prompt Injection Attempt Detected","severity":"high","locations":[{"file":"scripts/ask_question.py","line_end":36,"line_start":29},{"file":"SKILL.md","line_end":144,"line_start":131}],"confidence":0.98,"description":"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.","confidence_reasoning":"The behavior-steering text is defined in code, appended to every retrieved answer, and reinforced by explicit agent instructions in SKILL.md."},{"title":"Persistent Google Session Credentials","severity":"high","locations":[{"file":"scripts/auth_manager.py","line_end":179,"line_start":173},{"file":"scripts/browser_utils.py","line_end":53,"line_start":46}],"confidence":0.97,"description":"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.","confidence_reasoning":"The code explicitly serializes browser cookies and local storage, applies restrictive permissions, and reloads the cookies for later authenticated sessions."},{"title":"Unvalidated Browser Navigation Without Sandbox","severity":"high","locations":[{"file":"scripts/config.py","line_end":66,"line_start":60},{"file":"scripts/ask_question.py","line_end":80,"line_start":74},{"file":"scripts/notebook_manager.py","line_end":319,"line_start":314}],"confidence":0.96,"description":"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.","confidence_reasoning":"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."}],"subject_marketplace_commit_sha":"81e05e636292629114b76cbb3922fbe57672fc02","subject_content_hash":"fe8f31e77502d277e54f04a070202047652de0bf23fd55aa245a9a0a3e0ac199","subject_tree_hash":"509b5350c54f3b5e44dcfe4f97be5e118e2db38df0dc48f3434fce09c2f067aa","subject_plugin_path":"skills/sickn33/notebooklm","audit_payload_hash":"67291a65b3d1dbdc7ba1c5a647303c6e","confirmed_risk_level":"high","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"81e05e636292629114b76cbb3922fbe57672fc02","contentHash":"fe8f31e77502d277e54f04a070202047652de0bf23fd55aa245a9a0a3e0ac199","treeHash":"509b5350c54f3b5e44dcfe4f97be5e118e2db38df0dc48f3434fce09c2f067aa","pluginPath":"skills/sickn33/notebooklm","auditPayloadHash":"67291a65b3d1dbdc7ba1c5a647303c6e"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/sickn33-notebooklm/audits/6/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":4,"capabilityReviewCount":9,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}