Browser Harness | Self-healing harness that enables LLMs to complete any task.
This report summarizes scanner evidence for browser-use/browser-harness, a Python project with 18,379 GitHub stars. SynthScan examined 48,768 lines of code across 224 source files, recording 502 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 14.9 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 349 finding(s).
Are imports declared and package/API names verified? 29 finding(s).
Are wrappers, guards, and repeated structures necessary? 376 finding(s).
Which changes need focused human review? 502 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 502 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | agent-workspace/domain-skills/wellfound/scraping.md | 417 | def dismiss_wellfound_login_modal(): | STRING |
| LOW | …workspace/domain-skills/job-boards/indeed-glassdoor.md | 399 | def dismiss_glassdoor_login_modal(): | STRING |
| LOW | agent-workspace/domain-skills/booking-com/scraping.md | 524 | def get_hotel_urls_for_country(cc: str, lang: str = "en-gb", max_shards: int = 2) -> list[str]: | STRING |
| LOW | agent-workspace/domain-skills/glassdoor/scraping.md | 361 | def dismiss_glassdoor_login_modal(): | STRING |
| LOW | agent-workspace/domain-skills/weread/read.md | 165 | def pick_book_from_new_ranking(): | STRING |
| LOW⚡ | tests/unit/test_ipc.py | 4 | def test_runtime_stem_uses_name_in_shared_runtime_dir(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 11 | def test_runtime_stem_uses_bare_name_in_isolated_runtime_dir(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 18 | def test_tmp_stem_uses_name_in_shared_tmp_dir(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 38 | def test_identify_returns_pid_for_well_formed_ping_reply(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 44 | def test_identify_rejects_boolean_pid(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 53 | def test_identify_rejects_boolean_false_pid(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 60 | def test_identify_returns_none_when_pid_field_missing(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 69 | def test_identify_handles_non_dict_ping_payload(monkeypatch): | CODE |
| LOW | tests/unit/test_ipc.py | 80 | def test_identify_returns_none_when_pong_is_not_true(monkeypatch): | CODE |
| LOW | tests/unit/test_ipc.py | 86 | def test_identify_rejects_zero_and_negative_pids(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 105 | def test_ping_returns_true_for_well_formed_pong(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 111 | def test_ping_handles_non_dict_payload(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_ipc.py | 123 | def test_ping_returns_false_when_pong_field_is_missing_or_not_true(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 55 | def test_cleanup_unattached_browser_launch_keeps_cdp_browser(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 63 | def test_cleanup_unattached_browser_launch_ignores_unowned_launch(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 73 | def test_explicit_chrome_path_retains_matching_profile_on_linux(monkeypatch, tmp_path, env_key): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 166 | def test_local_chrome_mode_is_false_when_env_provides_remote_cdp(): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 170 | def test_require_existing_daemon_fails_without_spawning(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 177 | def test_require_existing_daemon_probes_cdp(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 905 | def test_repo_dir_detects_editable_src_layout_clone(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 914 | def test_repo_dir_detects_flat_layout_clone(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 922 | def test_repo_dir_ignores_repo_enclosing_an_installed_wheel(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1065 | def test_parked_daemon_is_detected_from_pid_file_and_log(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1072 | def test_parked_daemon_liveness_never_uses_os_kill(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1081 | def test_parked_daemon_ignored_when_the_process_is_gone(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1088 | def test_parked_daemon_ignored_without_the_handshake_breadcrumb(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1096 | def test_ensure_daemon_waits_for_the_parked_daemon_instead_of_spawning(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1286 | def test_parked_daemon_ignored_when_the_pid_was_reused(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1294 | def test_parked_daemon_survives_wall_clock_age_while_process_is_live(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1304 | def test_spawn_lock_is_exclusive_then_released(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1338 | def test_process_identity_check_fails_closed_when_unavailable(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1348 | def test_pending_pid_record_rejects_reused_pid(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 1357 | def test_restart_daemon_stops_exact_fingerprinted_pending_approval(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 43 | def test_cleanup_unattached_browser_launch_stops_posix_process_group(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 101 | def test_explicit_chrome_path_remains_unowned_without_platform_cleanup(monkeypatch, tmp_path, system): | CODE |
| LOW | tests/unit/test_admin.py | 124 | def test_explicit_unknown_browser_path_remains_unowned(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 142 | def test_update_banner_can_be_disabled_without_network_or_cache_access(monkeypatch, value): | CODE |
| LOW | tests/unit/test_admin.py | 150 | def test_update_banner_remains_enabled_by_default(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 188 | def test_strict_remote_stop_propagates_daemon_error(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 200 | def test_remote_start_retries_cleanup_and_preserves_both_failures(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 231 | def test_local_chrome_mode_is_false_when_process_env_provides_remote_cdp(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 237 | def test_handshake_timeout_needs_chrome_remote_debugging_prompt(): | CODE |
| LOW | tests/unit/test_admin.py | 249 | def test_stale_websocket_does_not_open_chrome_inspect(): | CODE |
| LOW | tests/unit/test_admin.py | 255 | def test_daemon_endpoint_names_discovers_valid_socket_names(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 267 | def test_daemon_endpoint_names_with_bh_runtime_dir_returns_local_name_when_sock_exists(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 278 | def test_daemon_endpoint_names_with_bh_runtime_dir_returns_empty_when_sock_missing(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 288 | def test_daemon_endpoint_names_with_shared_bh_runtime_dir_discovers_named_sockets(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 301 | def test_active_browser_connections_counts_only_healthy_daemons(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 316 | def test_daemon_browser_ready_checks_the_selected_daemon(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 328 | def test_active_browser_connections_skips_daemons_reporting_cdp_disconnected(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 341 | def test_browser_connections_returns_attached_page(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 357 | def test_chrome_running_detects_helium_on_linux(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 380 | def test_doctor_probe_preserves_snap_bin_env_symlink(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 399 | def test_doctor_probe_preserves_snap_bin_path_symlink(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 423 | def test_run_doctor_prints_snap_detect_on_linux_when_probe_is_snap(monkeypatch, capsys): | CODE |
| 191 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit/test_helpers.py | 645 | except RuntimeError: | CODE |
| HIGH | src/browser_harness/auth.py | 487 | except OSError: | CODE |
| HIGH | src/browser_harness/auth.py | 171 | except FileNotFoundError: | CODE |
| HIGH | src/browser_harness/auth.py | 478 | except OSError: | CODE |
| HIGH | src/browser_harness/run.py | 11 | except Exception: pass | CODE |
| HIGH | src/browser_harness/run.py | 89 | except (OSError, TypeError, ValueError): | CODE |
| HIGH | src/browser_harness/recorder.py | 259 | except Exception: | CODE |
| HIGH | src/browser_harness/recorder.py | 271 | except Exception: | CODE |
| HIGH | src/browser_harness/telemetry.py | 69 | except OSError: | CODE |
| HIGH | src/browser_harness/_ipc.py | 201 | except FileNotFoundError: pass | CODE |
| HIGH | src/browser_harness/_ipc.py | 127 | except OSError: pass | CODE |
| HIGH | src/browser_harness/_ipc.py | 162 | except OSError: pass | CODE |
| HIGH | src/browser_harness/_ipc.py | 190 | except FileNotFoundError: pass | CODE |
| HIGH | src/browser_harness/admin.py | 882 | except FileNotFoundError: | CODE |
| HIGH | src/browser_harness/admin.py | 1145 | except OSError: | CODE |
| HIGH | src/browser_harness/admin.py | 1359 | except (OSError, subprocess.SubprocessError): | CODE |
| HIGH | src/browser_harness/admin.py | 1393 | except OSError: | CODE |
| HIGH | src/browser_harness/admin.py | 1400 | except OSError: | CODE |
| HIGH | src/browser_harness/admin.py | 1143 | except OSError: | CODE |
| HIGH | src/browser_harness/admin.py | 1376 | except Exception: | CODE |
| HIGH | src/browser_harness/admin.py | 310 | except OSError: | CODE |
| HIGH | src/browser_harness/admin.py | 314 | except OSError: | CODE |
| HIGH | src/browser_harness/admin.py | 538 | except Exception: | CODE |
| HIGH | src/browser_harness/admin.py | 810 | except (ProcessLookupError, OSError, SystemError, OverflowError): | CODE |
| HIGH | src/browser_harness/admin.py | 815 | except FileNotFoundError: | CODE |
| HIGH | src/browser_harness/admin.py | 876 | except (ProcessLookupError, OSError, SystemError, OverflowError): | CODE |
| HIGH | src/browser_harness/admin.py | 639 | except FileNotFoundError: | CODE |
| HIGH | src/browser_harness/helpers.py | 393 | except Exception: pass | CODE |
| HIGH | src/browser_harness/helpers.py | 421 | except Exception: pass | CODE |
| HIGH | src/browser_harness/helpers.py | 471 | except Exception: | CODE |
| HIGH | src/browser_harness/helpers.py | 445 | except Exception: | CODE |
| HIGH | src/browser_harness/helpers.py | 637 | except ImportError: | CODE |
| HIGH | src/browser_harness/helpers.py | 577 | except BaseException: | CODE |
| HIGH | src/browser_harness/daemon.py | 239 | except Exception: | CODE |
| HIGH | src/browser_harness/daemon.py | 886 | except KeyboardInterrupt: | CODE |
| HIGH | src/browser_harness/daemon.py | 538 | except OSError: | CODE |
| HIGH | src/browser_harness/daemon.py | 894 | except FileNotFoundError: pass | CODE |
| HIGH | src/browser_harness/daemon.py | 316 | except (OSError, KeyError, ValueError): | CODE |
| HIGH | src/browser_harness/daemon.py | 840 | except (asyncio.CancelledError, Exception): pass | CODE |
| HIGH | src/browser_harness/daemon.py | 824 | except Exception: | CODE |
| HIGH | src/browser_harness/daemon.py | 731 | except Exception: pass | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | agent-workspace/domain-skills/spotify/scraping.md | 76 | except Exception as e: | CODE |
| LOW | agent-workspace/domain-skills/quora/scraping.md | 75 | except Exception: | CODE |
| LOW | agent-workspace/domain-skills/quora/scraping.md | 112 | except Exception: | CODE |
| LOW | agent-workspace/domain-skills/musicbrainz/scraping.md | 254 | except Exception: | CODE |
| LOW | agent-workspace/domain-skills/crossref/scraping.md | 116 | except Exception as e: | CODE |
| MEDIUM | agent-workspace/domain-skills/crossref/scraping.md | 105 | def fetch_work(doi): | CODE |
| LOW | agent-workspace/domain-skills/dev-to/scraping.md | 276 | except Exception as e: | CODE |
| LOW | agent-workspace/domain-skills/youtube/scraping.md | 56 | except Exception as e: | CODE |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 284 | except Exception: | CODE |
| LOW | agent-workspace/domain-skills/stackoverflow/scraping.md | 76 | except Exception as e: | CODE |
| LOW | agent-workspace/domain-skills/github/scraping.md | 166 | except Exception as e: | STRING |
| LOW | agent-workspace/domain-skills/zillow/scraping.md | 286 | except Exception: | CODE |
| LOW | agent-workspace/domain-skills/itch-io/scraping.md | 320 | except Exception: | CODE |
| LOW | src/mcp_server.py | 132 | except Exception as exc: # noqa: BLE001 -- browser failures must reach the MCP client. | CODE |
| MEDIUM | src/mcp_server.py | 126 | def wrapper(*args, **kwargs): | CODE |
| LOW | src/browser_harness/auth.py | 239 | except Exception: | CODE |
| LOW | src/browser_harness/auth.py | 313 | except Exception: | CODE |
| LOW | src/browser_harness/run.py | 11 | except Exception: pass | CODE |
| LOW | src/browser_harness/run.py | 236 | except Exception: | CODE |
| LOW | src/browser_harness/run.py | 272 | except Exception as exc: | CODE |
| MEDIUM | src/browser_harness/run.py | 103 | def _cloud_auth_configured(): | CODE |
| LOW | src/browser_harness/recorder.py | 235 | except Exception: | CODE |
| LOW | src/browser_harness/recorder.py | 259 | except Exception: | CODE |
| LOW | src/browser_harness/recorder.py | 271 | except Exception: | CODE |
| LOW | src/browser_harness/recorder.py | 298 | except Exception as e: | CODE |
| MEDIUM | src/browser_harness/recorder.py | 78 | def _load_config(): | CODE |
| LOW | src/browser_harness/telemetry.py | 78 | except Exception: | CODE |
| LOW | src/browser_harness/telemetry.py | 184 | except Exception: | CODE |
| LOW | src/browser_harness/telemetry.py | 243 | except Exception: | CODE |
| LOW | src/browser_harness/telemetry.py | 293 | except Exception: | CODE |
| MEDIUM | src/browser_harness/telemetry.py | 52 | def _load_config() -> dict: | CODE |
| MEDIUM | src/browser_harness/admin.py | 136 | def _log_tail(name): | CODE |
| MEDIUM | src/browser_harness/admin.py | 1130 | def _cache_read(): | CODE |
| LOW⚡ | src/browser_harness/admin.py | 1376 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/admin.py | 1380 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 159 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 538 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 727 | except Exception as exc: | CODE |
| LOW | src/browser_harness/admin.py | 839 | except Exception as exc: | CODE |
| LOW | src/browser_harness/admin.py | 940 | except Exception as e: | CODE |
| LOW | src/browser_harness/admin.py | 1102 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 1157 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 1215 | except Exception: | CODE |
| LOW | src/browser_harness/video_render.py | 175 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 189 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 193 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 196 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 201 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 343 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 377 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 382 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 387 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 393 | except Exception: | STRING |
| MEDIUM | src/browser_harness/helpers.py | 135 | def _runtime_evaluate(expression, session_id=None, await_promise=False): | CODE |
| MEDIUM | src/browser_harness/helpers.py | 585 | def _js_evaluate(expression, sid): | CODE |
| LOW | src/browser_harness/helpers.py | 190 | except Exception as e: | CODE |
| LOW | src/browser_harness/helpers.py | 393 | except Exception: pass | CODE |
| LOW | src/browser_harness/helpers.py | 421 | except Exception: pass | CODE |
| LOW | src/browser_harness/helpers.py | 445 | except Exception: | CODE |
| LOW | src/browser_harness/helpers.py | 471 | except Exception: | CODE |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ce/domain-skills/claude-ai/extract-share-transcript.py | 37 | if (u) turns.push({role: "user", text: u.innerText.trim()}); | CODE |
| HIGH | …ce/domain-skills/claude-ai/extract-share-transcript.py | 38 | else if (a) turns.push({role: "assistant", text: a.innerText.trim()}); | CODE |
| HIGH⚡ | tests/unit/test_ipc.py | 113 | replies with a list / scalar / null, ping() must return False rather than | STRING |
| HIGH | tests/unit/test_admin.py | 14 | def __init__(self, response=b'{"target_id":"target-1","session_id":"session-1","page":null}\n'): | CODE |
| HIGH⚡ | src/browser_harness/macos.py | 18 | return true | CODE |
| HIGH⚡ | src/browser_harness/macos.py | 23 | if my clickAllow(childRef) then return true | CODE |
| HIGH⚡ | src/browser_harness/macos.py | 26 | return false | CODE |
| HIGH | src/browser_harness/video_render.py | 141 | if js('window.videoReady && window.videoReady()'): | CODE |
| HIGH⚡ | src/browser_harness/video_render.py | 349 | if js('window.videoReady && window.videoReady()'): | CODE |
| HIGH⚡ | src/browser_harness/video_render.py | 359 | window.__exported = null; window.__exportError = null; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | agent-workspace/domain-skills/letterboxd/scraping.md | 121 | data = extract_film_data('the-godfather') | COMMENT |
| LOW | agent-workspace/domain-skills/letterboxd/scraping.md | 141 | # 'poster_url': 'https://a.ltrbxd.com/resized/film-poster/.../51818-the-godfather-0-230-0-345-crop.jpg...', | COMMENT |
| LOW | agent-workspace/domain-skills/openstreetmap/scraping.md | 21 | q = urllib.parse.quote(query) | COMMENT |
| LOW | agent-workspace/domain-skills/openstreetmap/scraping.md | 421 | COMMENT | |
| LOW | agent-workspace/domain-skills/steam/scraping.md | 21 | ) | COMMENT |
| LOW | agent-workspace/domain-skills/steam/scraping.md | 41 | # game["supported_languages"]-> HTML string with language list (use html.unescape()) | COMMENT |
| LOW | agent-workspace/domain-skills/steam/scraping.md | 441 | ```python | COMMENT |
| LOW | agent-workspace/domain-skills/steam/scraping.md | 481 | COMMENT | |
| LOW | agent-workspace/domain-skills/BOSS-zhipin/job-search.md | 241 | COMMENT | |
| LOW | agent-workspace/domain-skills/open-library/scraping.md | 81 | COMMENT | |
| LOW | agent-workspace/domain-skills/open-library/scraping.md | 181 | # editions_resp['entries'] == [...] (up to limit items) | COMMENT |
| LOW | agent-workspace/domain-skills/open-library/scraping.md | 241 | # book['title'] == 'The Great Gatsby' | COMMENT |
| LOW | agent-workspace/domain-skills/open-library/scraping.md | 281 | # author['name'] == 'J.R.R. Tolkien' | COMMENT |
| LOW | agent-workspace/domain-skills/open-library/scraping.md | 301 | #### Author search | COMMENT |
| LOW | agent-workspace/domain-skills/open-library/scraping.md | 381 | r = json.loads(http_get("https://openlibrary.org/subjects/science_fiction.json?limit=5")) | COMMENT |
| LOW | agent-workspace/domain-skills/duckduckgo/scraping.md | 341 | # r['infobox']['Founded'] == 'December 08, 2015' | COMMENT |
| LOW | agent-workspace/domain-skills/spotify/scraping.md | 21 | resource_type: 'track', 'album', 'playlist', or 'artist' | COMMENT |
| LOW | agent-workspace/domain-skills/spotify/scraping.md | 41 | # "version": "1.0", | COMMENT |
| LOW | agent-workspace/domain-skills/spotify/scraping.md | 201 | # entity keys: type, name, uri, id, title, artists, releaseDate, duration, | COMMENT |
| LOW | agent-workspace/domain-skills/spotify/scraping.md | 221 | # ---- ALBUM (includes full track list) ---- | COMMENT |
| LOW | agent-workspace/domain-skills/substack/scraping.md | 161 | # Free post (audience == "everyone"): | COMMENT |
| LOW | agent-workspace/domain-skills/substack/scraping.md | 221 | # { | COMMENT |
| LOW | agent-workspace/domain-skills/gutenberg/scraping.md | 61 | # [768] Wuthering Heights — Brontë, Emily (72,775) | COMMENT |
| LOW | agent-workspace/domain-skills/quora/scraping.md | 181 | # 'id': 'UXVlc3Rpb25AMDoyODYx', | COMMENT |
| LOW | agent-workspace/domain-skills/etsy/scraping.md | 261 | # product fields: | COMMENT |
| LOW | agent-workspace/domain-skills/youtube/scraping.md | 21 | Returns title, author, thumbnail URL, and embed iframe HTML. | COMMENT |
| LOW | agent-workspace/domain-skills/youtube/scraping.md | 141 | video = scrape_video("dQw4w9WgXcQ") | COMMENT |
| LOW | agent-workspace/domain-skills/youtube/scraping.md | 221 | COMMENT | |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 361 | # 'list_price': '219.99', | COMMENT |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 381 | import re | COMMENT |
| LOW | agent-workspace/domain-skills/walmart/scraping.md | 281 | COMMENT | |
| LOW | agent-workspace/domain-skills/rawg/scraping.md | 81 | # game['rating_top'] -> 5 | COMMENT |
| LOW | agent-workspace/domain-skills/soundcloud/scraping.md | 21 | Works for: | COMMENT |
| LOW | agent-workspace/domain-skills/soundcloud/scraping.md | 101 | # track['created_at'] = "2007-09-22T14:45:46Z" | COMMENT |
| LOW | agent-workspace/domain-skills/soundcloud/scraping.md | 121 | # user['country_code'] = "DE" | COMMENT |
| LOW | …workspace/domain-skills/package-registries/npm-pypi.md | 141 | COMMENT | |
| LOW | agent-workspace/domain-skills/archive-org/scraping.md | 201 | # name, source ('original'|'derivative'|'metadata'), format, size (bytes as str), | COMMENT |
| LOW | agent-workspace/domain-skills/genius/scraping.md | 61 | return http_get(url, headers=headers) | COMMENT |
| LOW | agent-workspace/domain-skills/genius/scraping.md | 81 | # song["stats"]["accepted_annotations"] → 20 | COMMENT |
| LOW | agent-workspace/domain-skills/itch-io/scraping.md | 61 | if get(k) is not None | COMMENT |
| LOW | agent-workspace/domain-skills/itch-io/scraping.md | 141 | COMMENT | |
| LOW | agent-workspace/domain-skills/itch-io/scraping.md | 241 | COMMENT | |
| LOW | agent-workspace/domain-skills/itch-io/scraping.md | 261 | # Paid game: | COMMENT |
| LOW | agent-workspace/domain-skills/sec-edgar/scraping.md | 181 | break | COMMENT |
| LOW | src/browser_harness/_ipc.py | 141 | resp = request(c, token, {"meta": "ping"}) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | agent-workspace/domain-skills/wellfound/scraping.md | 313 | # Step 1: Load any Wellfound page so the session cookie + DataDome cookie are set | STRING |
| LOW⚡ | agent-workspace/domain-skills/wellfound/scraping.md | 318 | # Step 2: Extract CSRF token from meta tag | STRING |
| LOW⚡ | agent-workspace/domain-skills/wellfound/scraping.md | 325 | # Step 3: Execute GraphQL query via fetch() from within the browser | STRING |
| LOW | agent-workspace/domain-skills/expedia/flights-search.md | 64 | ### Step 1: Select trip type | COMMENT |
| LOW | agent-workspace/domain-skills/expedia/flights-search.md | 70 | ### Step 2: Origin (Leaving from) | COMMENT |
| LOW | agent-workspace/domain-skills/expedia/flights-search.md | 86 | ### Step 3: Destination (Going to) | COMMENT |
| LOW | agent-workspace/domain-skills/expedia/flights-search.md | 90 | ### Step 4: Dates | COMMENT |
| LOW | agent-workspace/domain-skills/expedia/flights-search.md | 118 | ### Step 5: Travellers & Cabin | COMMENT |
| LOW | agent-workspace/domain-skills/expedia/flights-search.md | 127 | ### Step 6: Click Search | COMMENT |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 443 | # Step 1: Search | COMMENT |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 454 | # Step 2: Fetch details for top results (with delay) | COMMENT |
| LOW | agent-workspace/domain-skills/weather/scraping.md | 68 | ### Step 1: city name → coordinates (geocoding) | COMMENT |
| LOW | …nt-workspace/domain-skills/flighthub/flights-search.md | 64 | ### Step 1: Airport Autocomplete | COMMENT |
| LOW | …nt-workspace/domain-skills/flighthub/flights-search.md | 81 | ### Step 2: Datepicker (FAILS — custom click-resistant component) | COMMENT |
| LOW | …nt-workspace/domain-skills/flighthub/flights-search.md | 98 | ### Step 3: Search Button | COMMENT |
| LOW | …nt-workspace/domain-skills/wayback-machine/scraping.md | 148 | # WARNING: This API is BROKEN — returns empty archived_snapshots | COMMENT |
| LOW | agent-workspace/domain-skills/pubmed/scraping.md | 13 | # Step 1: search → get PMIDs | COMMENT |
| LOW | agent-workspace/domain-skills/pubmed/scraping.md | 21 | # Step 2: fetch lightweight metadata for all PMIDs in one call | COMMENT |
| LOW | agent-workspace/domain-skills/pubmed/scraping.md | 233 | # Step 1: ESearch with usehistory=y — NCBI holds result set on server | COMMENT |
| LOW | agent-workspace/domain-skills/pubmed/scraping.md | 245 | # Step 2: EFetch pages using WebEnv (no re-searching) | COMMENT |
| LOW | agent-workspace/domain-skills/flipkart/shopping.md | 103 | # Step 1: Find and click the pincode input or "Change" link | COMMENT |
| LOW | agent-workspace/domain-skills/flipkart/shopping.md | 114 | # Step 2: Clear and type new pincode | COMMENT |
| LOW | agent-workspace/domain-skills/flipkart/shopping.md | 118 | # Step 3: Wait and read delivery estimate | COMMENT |
| LOW | agent-workspace/domain-skills/weread/read.md | 51 | ## Step 1: Login Flow | COMMENT |
| LOW | agent-workspace/domain-skills/weread/read.md | 94 | ## Step 2: Reading Progress Management | STRING |
| LOW | agent-workspace/domain-skills/weread/read.md | 202 | ## Step 3: Auto Reading | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ce/domain-skills/claude-ai/extract-share-transcript.py | 22 | new_tab(share_url) # noqa: F821 — provided by browser-harness | CODE |
| MEDIUM | src/browser_harness/auth.py | 31 | # escape hatch so a dedicated browser-harness client can be used once issued. | COMMENT |
| MEDIUM | src/browser_harness/macos.py | 81 | "chrome://inspect/#remote-debugging, then run `browser-harness mac-approve` again", | STRING |
| MEDIUM | src/browser_harness/_ipc.py | 12 | # then to the browser-harness runtime dir. | COMMENT |
| MEDIUM | src/browser_harness/admin.py | 741 | # restarts anything on its own; a follow-up `browser-harness` | COMMENT |
| MEDIUM | src/browser_harness/admin.py | 1515 | # my-browser-harness-wrapper) cannot silence the hint for a real pip install. | COMMENT |
| MEDIUM | src/browser_harness/admin.py | 1561 | # or pipx install fails here with "`browser-harness` is not installed" and | COMMENT |
| MEDIUM | src/browser_harness/daemon.py | 489 | # Freshly launched browser (ex: harness relaunching closed Chrome) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ace/domain-skills/browser-use-cloud/cleanup-zombies.py | 23 | CODE | |
| LOW | src/browser_harness/auth.py | 6 | CODE | |
| LOW | src/browser_harness/run.py | 13 | CODE | |
| LOW | src/browser_harness/run.py | 13 | CODE | |
| LOW | src/browser_harness/run.py | 13 | CODE | |
| LOW | src/browser_harness/run.py | 13 | CODE | |
| LOW | src/browser_harness/run.py | 33 | CODE | |
| LOW | src/browser_harness/macos.py | 3 | CODE | |
| LOW | src/browser_harness/paths.py | 2 | CODE | |
| LOW | src/browser_harness/telemetry.py | 3 | CODE | |
| LOW | src/browser_harness/video_render.py | 4 | CODE | |
| LOW | src/browser_harness/helpers.py | 650 | CODE | |
| LOW | src/browser_harness/helpers.py | 650 | CODE | |
| LOW | src/browser_harness/helpers.py | 650 | CODE | |
| LOW | src/browser_harness/video.py | 4 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ace/domain-skills/browser-use-cloud/cleanup-zombies.py | 87 | CODE | |
| LOW | src/browser_harness/auth.py | 511 | CODE | |
| LOW | src/browser_harness/run.py | 304 | CODE | |
| LOW | src/browser_harness/recorder.py | 263 | CODE | |
| LOW | src/browser_harness/recorder.py | 313 | CODE | |
| LOW | src/browser_harness/telemetry.py | 128 | CODE | |
| LOW | src/browser_harness/admin.py | 525 | CODE | |
| LOW | src/browser_harness/admin.py | 747 | CODE | |
| LOW | src/browser_harness/admin.py | 1525 | CODE | |
| LOW | src/browser_harness/video_render.py | 414 | CODE | |
| LOW | src/browser_harness/helpers.py | 295 | CODE | |
| LOW | src/browser_harness/helpers.py | 526 | CODE | |
| LOW | src/browser_harness/video.py | 438 | CODE | |
| LOW | src/browser_harness/daemon.py | 264 | CODE | |
| LOW | src/browser_harness/daemon.py | 811 | CODE | |
| LOW | src/browser_harness/daemon.py | 665 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | agent-workspace/domain-skills/feishu/docx-scraping.md | 103 | Suggestions are generated by AI. / This document hasn't been mentioned by others yet. | STRING |
| HIGH | agent-workspace/domain-skills/tiktok/upload.md | 75 | ### 4. AI-generated content disclosure | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | agent-workspace/domain-skills/rawg/scraping.md | 194 | All endpoints live at `https://api.rawg.io/api/`. Append `&key=YOUR_API_KEY` to every request. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | agent-workspace/domain-skills/duckduckgo/scraping.md | 96 | text, kind = ddg_answer("lorem ipsum") | CODE |
| LOW | agent-workspace/domain-skills/duckduckgo/scraping.md | 253 | - Random: `random number`, `generate password`, `lorem ipsum` | CODE |
| LOW | …space/domain-skills/centilebrain/generate-estimates.md | 67 | e.value='user@example.com'; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/browser_harness/telemetry.py | 247 | CODE |