Repository Analysis

Panniantong/Agent-Reach

Give your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.

26.6 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of Panniantong/Agent-Reach, a Python project with 56,060 GitHub stars. SynthScan v2.0 examined 12,502 lines of code across 83 source files, recording 321 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 26.6 places this repository in the Moderate 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).

26.6
Adjusted Score
26.6
Raw Score
100%
Time Factor
2026-07-10
Last Push
56.1K
Stars
Python
Language
12.5K
Lines of Code
83
Files
321
Pattern Hits
2026-07-14
Scan Date
0.01
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 1MEDIUM 7LOW 313

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 321 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.

Hyper-Verbose Identifiers168 hits · 164 pts
SeverityFileLineSnippetContext
LOWtests/test_xiaoyuzhou_install.py13def test_install_xiaoyuzhou_deps_does_not_raise_when_no_groq_key(capsys):CODE
LOWtests/test_probe.py26def test_broken_shebang_detected_as_broken(tmp_path, monkeypatch):CODE
LOWtests/test_probe.py40def test_healthy_command_returns_ok_with_output(tmp_path, monkeypatch):CODE
LOWtests/test_probe.py52def test_nonzero_exit_classified_as_error(tmp_path, monkeypatch):CODE
LOWtests/test_probe.py74def test_retries_help_transient_failures(tmp_path, monkeypatch):CODE
LOWtests/test_probe.py87def test_reinstall_hint_mentions_both_installers():CODE
LOWtests/test_xhs_format.py58 def test_single_note_keeps_useful_fields(self):CODE
LOWtests/test_xhs_format.py73 def test_single_note_drops_useless_fields(self):CODE
LOWtests/test_xhs_format.py84 def test_search_results_wrapper(self):CODE
LOWtests/test_xhs_format.py127 def test_non_dict_passthrough(self):CODE
LOWtests/test_youtube_channel.py28def test_can_handle_matches_youtube_hosts():CODE
LOWtests/test_youtube_channel.py43def test_has_js_runtime_config_missing_file_is_false(tmp_path):CODE
LOWtests/test_youtube_channel.py47def test_has_js_runtime_config_true_when_flag_present(tmp_path):CODE
LOWtests/test_youtube_channel.py53def test_has_js_runtime_config_false_when_flag_absent(tmp_path):CODE
LOWtests/test_youtube_channel.py59def test_has_js_runtime_config_swallows_oserror():CODE
LOWtests/test_youtube_channel.py68def test_check_off_when_ytdlp_missing():CODE
LOWtests/test_youtube_channel.py76def test_check_error_when_ytdlp_broken():CODE
LOWtests/test_youtube_channel.py85def test_check_error_when_ytdlp_unrunnable():CODE
LOWtests/test_youtube_channel.py95def test_check_warn_when_no_js_runtime_but_backend_active():CODE
LOWtests/test_youtube_channel.py105def test_check_warn_when_node_only_and_config_missing_flag():CODE
LOWtests/test_youtube_channel.py127def test_check_ok_reports_transcription_when_provider_and_ffmpeg_present():CODE
LOWtests/test_youtube_channel.py139def test_check_ok_flags_missing_ffmpeg_for_transcription():CODE
LOWtests/test_skill_command.py16 def test_skill_resources_include_both_locales(self):CODE
LOWtests/test_skill_command.py26 def test_install_skill_creates_skill_md(self):CODE
LOWtests/test_skill_command.py52 def test_uninstall_skill_removes_dir(self):CODE
LOWtests/test_skill_command.py74 def test_install_creates_dir_if_parent_exists(self):CODE
LOWtests/test_skill_command.py96 def test_install_uses_english_skill_for_english_locale(self):CODE
LOWtests/test_doctor.py31 def test_check_all_collects_channel_results(self, tmp_config, monkeypatch):CODE
LOWtests/test_doctor.py109def test_stale_active_backend_does_not_leak_into_errored_result(monkeypatch):CODE
LOWtests/test_transcribe.py46 def test_routes_to_groq_endpoint(self, monkeypatch, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py63 def test_routes_to_openai_endpoint(self, monkeypatch, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py78 def test_raises_when_key_missing(self, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py82 def test_raises_on_http_error(self, monkeypatch, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py101 def test_groq_succeeds_no_openai_call(self, monkeypatch, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py134 def test_skip_unconfigured_provider(self, monkeypatch, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py148 def test_all_fail_raises_with_last_error(self, monkeypatch, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py164 def test_local_file_skips_yt_dlp(self, monkeypatch, fake_config, tmp_path, chunk_file):CODE
LOWtests/test_transcribe.py192 def test_chunks_concatenated_with_newlines(CODE
LOWtests/test_transcribe.py220 def test_no_provider_configured_fails_fast(self, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py224 def test_invalid_provider_string(self, fake_config, chunk_file):CODE
LOWtests/test_transcribe.py228 def test_auto_temp_dir_is_cleaned_up(self, monkeypatch, fake_config, tmp_path):CODE
LOWtests/test_transcribe.py272 def test_explicit_out_dir_is_preserved(self, monkeypatch, fake_config, tmp_path):CODE
LOWtests/test_transcribe.py301 def test_rejects_private_network_url_before_yt_dlp(self, monkeypatch, tmp_path):CODE
LOWtests/test_transcribe.py312 def test_passes_public_url_after_end_of_options_marker(self, monkeypatch, tmp_path):CODE
LOWtests/test_transcribe.py329 def test_preserves_bare_public_urls_supported_by_yt_dlp(self, monkeypatch, tmp_path):CODE
LOWtests/test_transcribe.py343 def test_does_not_dns_resolve_public_hostnames(self, monkeypatch, tmp_path):CODE
LOWtests/test_transcribe.py371 def test_delegates_to_transcribe(self, monkeypatch, fake_config):CODE
LOWtests/test_transcribe.py396 def test_openai_whisper_feature_registered(self, fake_config):CODE
LOWtests/test_opencli_backend.py35def test_broken_node_env_gives_npm_hint():CODE
LOWtests/test_opencli_backend.py42def test_daemon_running_extension_connected_is_ready():CODE
LOWtests/test_opencli_backend.py53def test_extension_never_installed_not_ready_with_store_guide():CODE
LOWtests/test_opencli_backend.py65def test_sleeping_extension_counts_as_ready():CODE
LOWtests/test_opencli_backend.py81def test_daemon_not_running_parsed_correctly():CODE
LOWtests/test_opencli_backend.py92def test_probe_uses_daemon_status_not_doctor():CODE
LOWtests/test_channels.py39 def test_facebook_can_handle_common_urls(self):CODE
LOWtests/test_channels.py47 def test_instagram_can_handle_common_urls(self):CODE
LOWtests/test_channels.py54 def test_opencli_ready_reports_ok(self, monkeypatch):CODE
LOWtests/test_channels.py190 def test_get_hot_topics_respects_limit(self, monkeypatch):CODE
LOWtests/test_channels.py208 def test_get_hot_topics_truncates_content(self, monkeypatch):CODE
LOWtests/test_channels.py386 def test_search_returns_unavailable_notice(self):CODE
108 more matches not shown…
Excessive Try-Catch Wrapping54 hits · 48 pts
SeverityFileLineSnippetContext
MEDIUMagent_reach/cli.py520 print("Error: no input on stdin", file=sys.stderr)CODE
MEDIUMagent_reach/cli.py525 print(f"Error: invalid JSON: {e}", file=sys.stderr)CODE
LOWagent_reach/cli.py1537 except Exception:CODE
LOWagent_reach/cli.py37 except Exception:CODE
LOWagent_reach/cli.py306 except Exception:CODE
LOWagent_reach/cli.py401 except Exception:CODE
LOWagent_reach/cli.py423 except Exception as e:CODE
LOWagent_reach/cli.py495 except Exception as e:CODE
LOWagent_reach/cli.py572 except Exception:CODE
LOWagent_reach/cli.py582 except Exception:CODE
LOWagent_reach/cli.py608 except Exception:CODE
LOWagent_reach/cli.py618 except Exception:CODE
LOWagent_reach/cli.py632 except Exception:CODE
LOWagent_reach/cli.py651 except Exception:CODE
LOWagent_reach/cli.py682 except Exception as e:CODE
LOWagent_reach/cli.py720 except Exception:CODE
LOWagent_reach/cli.py786 except Exception:CODE
LOWagent_reach/cli.py837 except Exception:CODE
LOWagent_reach/cli.py860 except Exception:CODE
LOWagent_reach/cli.py939 except Exception as e:CODE
LOWagent_reach/cli.py956 except Exception:CODE
LOWagent_reach/cli.py1004 except Exception:CODE
LOWagent_reach/cli.py1013 except Exception:CODE
LOWagent_reach/cli.py1106 except Exception as e:CODE
LOWagent_reach/cli.py1304 except Exception as e:CODE
LOWagent_reach/cli.py1317 except Exception:CODE
LOWagent_reach/cli.py1347 except Exception as e:CODE
LOWagent_reach/cli.py1350 except Exception as e:CODE
LOWagent_reach/cli.py1369 except Exception as e:CODE
LOWagent_reach/cli.py1405 except Exception as e:CODE
LOWagent_reach/cli.py1432 except Exception as e:CODE
LOWagent_reach/cli.py1452 except Exception:CODE
LOWagent_reach/cli.py1638 except Exception:CODE
LOWagent_reach/cli.py1667 except Exception:CODE
LOWagent_reach/doctor.py23 except Exception as e: # noqa: BLE001 — doctor must survive any channelCODE
LOWagent_reach/cookie_extract.py93 except Exception as e:CODE
LOWagent_reach/cookie_extract.py108 except Exception as e:CODE
LOWagent_reach/cookie_extract.py198 except Exception:CODE
LOWagent_reach/cookie_extract.py223 except Exception:CODE
LOWagent_reach/cookie_extract.py242 except Exception as e:CODE
LOWagent_reach/integrations/mcp_server.py54 except Exception as e:CODE
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh221 except Exception as e:CODE
MEDIUMagent_reach/scripts/transcribe_xiaoyuzhou.sh215def polish(text, depth=0):CODE
LOWagent_reach/channels/rss.py22 except Exception as e:CODE
MEDIUMagent_reach/channels/rss.py16def check(self, config=None):CODE
LOWagent_reach/channels/xiaoyuzhou.py53 except Exception:CODE
LOWagent_reach/channels/xueqiu.py70 except Exception:CODE
LOWagent_reach/channels/xueqiu.py101 except Exception:CODE
LOWagent_reach/channels/xueqiu.py178 except Exception as e:CODE
LOWagent_reach/channels/bilibili.py31 except Exception:CODE
LOWagent_reach/channels/xiaohongshu.py36 except Exception:CODE
LOWagent_reach/channels/v2ex.py46 except Exception as e:CODE
LOWagent_reach/channels/v2ex.py140 except Exception:CODE
MEDIUMagent_reach/channels/v2ex.py39def check(self, config=None):CODE
Structural Annotation Overuse23 hits · 40 pts
SeverityFileLineSnippetContext
LOWdocs/install.md49### Step 1: Install the basicsCOMMENT
LOWdocs/install.md91### Step 2: Ask the user which optional channels they wantCOMMENT
LOWdocs/install.md122### Step 3: Fix what's brokenCOMMENT
LOWdocs/install.md130### Step 3: Configure things that need user inputCOMMENT
LOWdocs/install.md305### Step 4: Final checkCOMMENT
LOWdocs/install.md309### Step 5: Set up daily monitoring (OpenClaw only)COMMENT
LOWdocs/update.md29### Step 1: Check current versionCOMMENT
LOWdocs/update.md37### Step 2: Update Agent Reach packageCOMMENT
LOWdocs/update.md48### Step 3: Refresh upstream toolsCOMMENT
LOWdocs/update.md78### Step 4: Coexistence (DO NOT uninstall old tools)COMMENT
LOWdocs/update.md85### Step 5: VerifyCOMMENT
LOWdocs/update.md106### Step 6: Report to userCOMMENT
LOWagent_reach/cli.py1542 # Step 2: GitHub tokenCOMMENT
LOWagent_reach/cli.py1558 # Step 3: Reddit — rdt-cliCOMMENT
LOWagent_reach/cli.py1564 # Step 4: Groq (Whisper)COMMENT
LOWagent_reach/cli.py1505 # Step 1: Exa (via mcporter, no API key required)COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh53# Step 1: 提取音频 URL 和标题COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh67# Step 2: 下载音频COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh74# Step 3: 获取时长COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh80# Step 4: 转为低码率单声道 MP3COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh86# Step 5: 按大小切片COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh108# Step 6: 调用 Groq Whisper API 转录COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh238# Step 7: 合并输出COMMENT
Verbosity Indicators11 hits · 22 pts
SeverityFileLineSnippetContext
LOWagent_reach/cli.py1542 # Step 2: GitHub tokenCOMMENT
LOWagent_reach/cli.py1558 # Step 3: Reddit — rdt-cliCOMMENT
LOWagent_reach/cli.py1564 # Step 4: Groq (Whisper)COMMENT
LOWagent_reach/cli.py1505 # Step 1: Exa (via mcporter, no API key required)COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh53# Step 1: 提取音频 URL 和标题COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh67# Step 2: 下载音频COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh74# Step 3: 获取时长COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh80# Step 4: 转为低码率单声道 MP3COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh86# Step 5: 按大小切片COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh108# Step 6: 调用 Groq Whisper API 转录COMMENT
LOWagent_reach/scripts/transcribe_xiaoyuzhou.sh238# Step 7: 合并输出COMMENT
Deep Nesting25 hits · 16 pts
SeverityFileLineSnippetContext
LOWtests/test_skill_command.py26CODE
LOWagent_reach/cli.py50CODE
LOWagent_reach/cli.py171CODE
LOWagent_reach/cli.py355CODE
LOWagent_reach/cli.py466CODE
LOWagent_reach/cli.py532CODE
LOWagent_reach/cli.py702CODE
LOWagent_reach/cli.py817CODE
LOWagent_reach/cli.py842CODE
LOWagent_reach/cli.py977CODE
LOWagent_reach/cli.py1019CODE
LOWagent_reach/cli.py1154CODE
LOWagent_reach/cli.py1175CODE
LOWagent_reach/cli.py1375CODE
LOWagent_reach/cli.py1496CODE
LOWagent_reach/cli.py1645CODE
LOWagent_reach/cli.py1706CODE
LOWagent_reach/cli.py383CODE
LOWagent_reach/doctor.py47CODE
LOWagent_reach/cookie_extract.py42CODE
LOWagent_reach/cookie_extract.py176CODE
LOWagent_reach/channels/xueqiu.py74CODE
LOWagent_reach/channels/twitter.py19CODE
LOWagent_reach/channels/bilibili.py46CODE
LOWagent_reach/channels/xiaohongshu.py62CODE
Fake / Example Data20 hits · 14 pts
SeverityFileLineSnippetContext
LOWtests/test_channels.py193 fake_data = [CODE
LOWtests/test_channels.py202 def read(self): return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py212 fake_data = [CODE
LOWtests/test_channels.py220 def read(self): return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py147 fake_data = [CODE
LOWtests/test_channels.py178 return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py233 fake_data = [CODE
LOWtests/test_channels.py248 def read(self): return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py353 fake_user = {CODE
LOWtests/test_channels.py371 def read(self): return json.dumps(fake_user).encode()CODE
LOWtests/test_channels.py452 fake_data = {CODE
LOWtests/test_channels.py486 return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py505 fake_data = {CODE
LOWtests/test_channels.py520 return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py550 fake_data = {CODE
LOWtests/test_channels.py565 return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py582 fake_data = {CODE
LOWtests/test_channels.py607 return json.dumps(fake_data).encode()CODE
LOWtests/test_channels.py622 fake_data = {CODE
LOWtests/test_channels.py640 return json.dumps(fake_data).encode()CODE
Unused Imports13 hits · 13 pts
SeverityFileLineSnippetContext
LOWtests/test_probe.py10CODE
LOWagent_reach/__init__.py7CODE
LOWagent_reach/transcribe.py14CODE
LOWagent_reach/doctor.py110CODE
LOWagent_reach/backends/__init__.py10CODE
LOWagent_reach/backends/__init__.py10CODE
LOWagent_reach/backends/__init__.py10CODE
LOWagent_reach/backends/__init__.py10CODE
LOWagent_reach/backends/__init__.py10CODE
LOWagent_reach/utils/paths.py3CODE
LOWagent_reach/utils/text.py3CODE
LOWagent_reach/utils/process.py3CODE
LOWagent_reach/channels/rss.py18CODE
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHagent_reach/channels/reddit.py163 '"modhash": null, "saved_at": 0, "last_verified_at": null}\n\n'CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_skill_command.py55 # Create a fake skill installationCOMMENT
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMagent_reach/cli.py168# ── Command handlers ────────────────────────────────COMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWagent_reach/cli.py1292 # Check if xiaohongshu-mcp container is runningCOMMENT
LOWagent_reach/cookie_extract.py121 # Check if cookie belongs to this platformCOMMENT
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWagent_reach/__init__.py9__all__ = ["AgentReach"]CODE
LOWagent_reach/channels/__init__.py58__all__ = [CODE