Browser Harness | Self-healing harness that enables LLMs to complete any task.
This report presents the forensic synthetic code analysis of browser-use/browser-harness, a Python project with 17,214 GitHub stars. SynthScan v2.0 examined 43,922 lines of code across 171 source files, recording 369 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 10.2 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 369 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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 | 51 | def test_cleanup_unattached_browser_launch_keeps_cdp_browser(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 59 | def test_cleanup_unattached_browser_launch_ignores_unowned_launch(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 69 | def test_explicit_chrome_path_retains_matching_profile_on_linux(monkeypatch, tmp_path, env_key): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 162 | def test_local_chrome_mode_is_false_when_env_provides_remote_cdp(): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 166 | def test_require_existing_daemon_fails_without_spawning(monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_admin.py | 173 | def test_require_existing_daemon_probes_cdp(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 39 | def test_cleanup_unattached_browser_launch_stops_posix_process_group(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 97 | def test_explicit_chrome_path_remains_unowned_without_platform_cleanup(monkeypatch, tmp_path, system): | CODE |
| LOW | tests/unit/test_admin.py | 120 | def test_explicit_unknown_browser_path_remains_unowned(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 138 | def test_update_banner_can_be_disabled_without_network_or_cache_access(monkeypatch, value): | CODE |
| LOW | tests/unit/test_admin.py | 146 | def test_update_banner_remains_enabled_by_default(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 184 | def test_strict_remote_stop_propagates_daemon_error(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 196 | def test_remote_start_retries_cleanup_and_preserves_both_failures(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 227 | def test_local_chrome_mode_is_false_when_process_env_provides_remote_cdp(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 233 | def test_handshake_timeout_needs_chrome_remote_debugging_prompt(): | CODE |
| LOW | tests/unit/test_admin.py | 245 | def test_stale_websocket_does_not_open_chrome_inspect(): | CODE |
| LOW | tests/unit/test_admin.py | 251 | def test_daemon_endpoint_names_discovers_valid_socket_names(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 263 | 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 | 274 | def test_daemon_endpoint_names_with_bh_runtime_dir_returns_empty_when_sock_missing(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 284 | def test_daemon_endpoint_names_with_shared_bh_runtime_dir_discovers_named_sockets(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 297 | def test_active_browser_connections_counts_only_healthy_daemons(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 312 | def test_daemon_browser_ready_checks_the_selected_daemon(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 324 | def test_active_browser_connections_skips_daemons_reporting_cdp_disconnected(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 337 | def test_browser_connections_returns_attached_page(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 353 | def test_chrome_running_detects_helium_on_linux(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 376 | def test_doctor_probe_preserves_snap_bin_env_symlink(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 395 | def test_doctor_probe_preserves_snap_bin_path_symlink(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 419 | def test_run_doctor_prints_snap_detect_on_linux_when_probe_is_snap(monkeypatch, capsys): | CODE |
| LOW | tests/unit/test_admin.py | 440 | def test_run_doctor_skips_snap_detect_on_non_linux(monkeypatch, capsys): | CODE |
| LOW | tests/unit/test_admin.py | 458 | def test_run_doctor_reports_bad_stored_cloud_auth_without_crashing(monkeypatch, capsys): | CODE |
| LOW | tests/unit/test_admin.py | 476 | def test_run_doctor_fix_snap_prints_steps(capsys): | CODE |
| LOW | tests/unit/test_admin.py | 485 | def test_run_doctor_prints_active_browser_connections_and_active_pages(monkeypatch, capsys): | CODE |
| LOW | tests/unit/test_admin.py | 512 | def test_doctor_page_output_truncates_long_text(monkeypatch, capsys): | CODE |
| LOW | tests/unit/test_admin.py | 535 | def test_start_remote_daemon_stops_created_browser_when_daemon_start_fails(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 562 | def test_start_remote_daemon_stops_created_browser_when_daemon_start_is_interrupted(monkeypatch, exc_type): | CODE |
| LOW | tests/unit/test_admin.py | 589 | def test_stop_cloud_browser_swallows_baseexception_from_stop_request(monkeypatch, exc_type): | CODE |
| LOW | tests/unit/test_admin.py | 594 | def test_start_remote_daemon_does_not_stop_created_browser_on_success(monkeypatch): | CODE |
| LOW | tests/unit/test_admin.py | 618 | def test_restart_daemon_does_not_signal_when_daemon_unreachable(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 644 | def test_restart_daemon_signals_pid_returned_by_identify_not_pid_file(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 699 | def test_restart_daemon_sends_shutdown_to_pre_upgrade_daemon_without_pid_in_ping(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 737 | def test_restart_daemon_skips_sigterm_if_pid_was_reused_during_wait(monkeypatch, tmp_path): | CODE |
| LOW | tests/unit/test_admin.py | 782 | def test_restart_daemon_sigterms_via_start_time_fingerprint_when_socket_gone(monkeypatch, tmp_path): | CODE |
| 116 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | mcp_server.py | 131 | except Exception as exc: | CODE |
| MEDIUM | mcp_server.py | 125 | def wrapper(*args, **kwargs): | CODE |
| 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 | 227 | 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/browser_harness/auth.py | 236 | except Exception: | CODE |
| LOW | src/browser_harness/auth.py | 310 | except Exception: | CODE |
| LOW | src/browser_harness/run.py | 11 | except Exception: pass | CODE |
| LOW | src/browser_harness/run.py | 233 | except Exception: | CODE |
| LOW | src/browser_harness/run.py | 269 | except Exception as exc: | CODE |
| MEDIUM | src/browser_harness/run.py | 100 | def _cloud_auth_configured(): | CODE |
| LOW | src/browser_harness/recorder.py | 233 | except Exception: | CODE |
| LOW | src/browser_harness/recorder.py | 257 | except Exception: | CODE |
| LOW | src/browser_harness/recorder.py | 269 | except Exception: | CODE |
| LOW | src/browser_harness/recorder.py | 288 | except Exception: | 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 | 135 | def _log_tail(name): | CODE |
| MEDIUM | src/browser_harness/admin.py | 827 | def _cache_read(): | CODE |
| LOW⚡ | src/browser_harness/admin.py | 1072 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/admin.py | 1076 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 353 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 472 | except Exception as exc: | CODE |
| LOW | src/browser_harness/admin.py | 545 | except Exception as exc: | CODE |
| LOW | src/browser_harness/admin.py | 646 | except Exception as e: | CODE |
| LOW | src/browser_harness/admin.py | 808 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 854 | except Exception: | CODE |
| LOW | src/browser_harness/admin.py | 912 | 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 | 342 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 376 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 381 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 386 | except Exception: | CODE |
| LOW⚡ | src/browser_harness/video_render.py | 392 | except Exception: | STRING |
| LOW | src/browser_harness/helpers.py | 184 | except Exception as e: | CODE |
| LOW | src/browser_harness/helpers.py | 318 | except Exception: pass | CODE |
| LOW | src/browser_harness/helpers.py | 346 | except Exception: pass | CODE |
| LOW | src/browser_harness/helpers.py | 370 | except Exception: | CODE |
| LOW | src/browser_harness/helpers.py | 396 | except Exception: | CODE |
| MEDIUM | src/browser_harness/helpers.py | 129 | def _runtime_evaluate(expression, session_id=None, await_promise=False): | CODE |
| MEDIUM | src/browser_harness/daemon.py | 200 | def _silent(coro): | CODE |
| MEDIUM | src/browser_harness/daemon.py | 519 | def enable_one(d): | CODE |
| 20 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 | 10 | 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 | 348 | if js('window.videoReady && window.videoReady()'): | CODE |
| HIGH⚡ | src/browser_harness/video_render.py | 358 | 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 | 301 | # 'price': 74.99, | COMMENT |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 321 | ```python | 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/ebay/scraping.md | 386 | # Step 1: Search | COMMENT |
| LOW | agent-workspace/domain-skills/ebay/scraping.md | 397 | # 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/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 |
|---|---|---|---|---|
| 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 | 546 | CODE | |
| LOW | src/browser_harness/helpers.py | 546 | CODE | |
| LOW | src/browser_harness/helpers.py | 546 | CODE | |
| LOW | src/browser_harness/video.py | 4 | CODE |
| 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 | 486 | # restarts anything on its own; a follow-up `browser-harness` | COMMENT |
| MEDIUM | src/browser_harness/daemon.py | 453 | # Freshly launched browser (ex: harness relaunching closed Chrome) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ace/domain-skills/browser-use-cloud/cleanup-zombies.py | 87 | CODE | |
| LOW | src/browser_harness/auth.py | 508 | CODE | |
| LOW | src/browser_harness/run.py | 301 | CODE | |
| LOW | src/browser_harness/recorder.py | 261 | CODE | |
| LOW | src/browser_harness/recorder.py | 294 | CODE | |
| LOW | src/browser_harness/telemetry.py | 128 | CODE | |
| LOW | src/browser_harness/admin.py | 340 | CODE | |
| LOW | src/browser_harness/admin.py | 492 | CODE | |
| LOW | src/browser_harness/video_render.py | 413 | CODE | |
| LOW | src/browser_harness/helpers.py | 451 | CODE | |
| LOW | src/browser_harness/video.py | 438 | CODE | |
| LOW | src/browser_harness/daemon.py | 228 | CODE | |
| LOW | src/browser_harness/daemon.py | 767 | CODE | |
| LOW | src/browser_harness/daemon.py | 614 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 |