基于 AI Agent + MCP 工具链 + 渗透 Skill 编排, 配合大语言模型, 自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。
This report summarizes scanner evidence for Unclecheng-li/VulnClaw, a Python project with 3,530 GitHub stars. SynthScan examined 189,154 lines of code across 690 source files, recording 2881 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 21.3 (Elevated 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? 1849 finding(s).
Are imports declared and package/API names verified? 337 finding(s).
Are wrappers, guards, and repeated structures necessary? 2381 finding(s).
Which changes need focused human review? 2881 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 2881 distinct pattern matches across 21 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 | frontend/src/App.tsx | 222 | function openBoundaryForActiveTask() { | CODE |
| LOW | frontend/src/utils/preferences.ts | 82 | function normalizeBoundaryDefaults(value: unknown): BoundaryDefaults { | CODE |
| LOW | frontend/src/utils/taskLabels.ts | 123 | export function countConstraintViolations( | CODE |
| LOW | frontend/src/pages/SafetyBoundaryPage.tsx | 90 | function boundaryDefaultsToConstraints(defaults: BoundaryDefaults): Record<string, unknown> { | CODE |
| LOW⚡ | tests/test_codescan.py | 56 | def test_rule_compile_and_match(): | STRING |
| LOW⚡ | tests/test_codescan.py | 84 | def test_scan_finds_expected_vulns(tmp_path): | CODE |
| LOW | tests/test_codescan.py | 96 | def test_scan_layer_filtering(tmp_path): | CODE |
| LOW | tests/test_codescan.py | 113 | def test_scan_skips_git_and_node_modules(tmp_path): | CODE |
| LOW | tests/test_context_budget.py | 46 | def test_group_truncation_keeps_assistant_tool_exchange_together(): | CODE |
| LOW | tests/test_context_budget.py | 66 | def test_prepare_context_compacts_history_and_records_durable_digest(): | CODE |
| LOW | tests/test_context_budget.py | 84 | def test_tool_schema_and_output_reserve_are_part_of_budget(): | CODE |
| LOW | tests/test_context_budget.py | 106 | def test_disabled_auto_compaction_preserves_history_until_hard_limit(): | CODE |
| LOW | tests/test_context_budget.py | 121 | def test_legacy_solve_compaction_settings_migrate_to_global_policy(): | CODE |
| LOW | tests/test_context_budget.py | 136 | def test_new_context_settings_take_precedence_over_legacy_aliases(): | CODE |
| LOW | tests/traffic/test_report_export.py | 20 | def test_verified_finding_inlines_http_capture(tmp_path): | CODE |
| LOW | tests/traffic/test_report_export.py | 32 | def _run_http_capture_inlining_assertions(tmp_path): | CODE |
| LOW | tests/traffic/test_report_export.py | 76 | def test_verified_finding_inlines_http_capture_english(tmp_path): | CODE |
| LOW | tests/traffic/test_report_export.py | 128 | def test_shared_resolver_finds_config_default_when_no_run_captures(tmp_path, monkeypatch): | CODE |
| LOW | tests/traffic/test_report_export.py | 161 | def test_write_resolver_never_falls_back_to_stale_store(tmp_path, monkeypatch): | CODE |
| LOW | tests/traffic/test_report_export.py | 184 | def test_report_without_captures_is_unaffected(tmp_path): | CODE |
| LOW | tests/traffic/test_normalize_replay.py | 27 | def test_burp_history_normalizes_with_proxy_source(tmp_path): | CODE |
| LOW | tests/traffic/test_normalize_replay.py | 51 | def test_chrome_devtools_normalizes_with_browser_source(tmp_path): | CODE |
| LOW | tests/traffic/test_normalize_replay.py | 72 | def test_replay_issues_with_overrides_and_records_manual_replay(tmp_path): | CODE |
| LOW | tests/traffic/test_store.py | 33 | def test_in_scope_request_writes_one_line_and_blobs(tmp_path): | CODE |
| LOW | tests/traffic/test_store.py | 61 | def test_request_id_stable_across_resume(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_store.py | 81 | def test_out_of_scope_host_is_dropped(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_store.py | 89 | def test_subdomain_scope_mode(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_store.py | 97 | def test_sitemap_reflects_hosts_and_paths(tmp_path): | CODE |
| LOW | tests/traffic/test_replay_body.py | 13 | def test_replay_body_override_updates_content_length(tmp_path, length_header, body): | CODE |
| LOW | tests/traffic/test_replay_body.py | 48 | def test_replay_without_body_override_preserves_request(tmp_path): | CODE |
| LOW | tests/traffic/test_backends.py | 52 | def test_availability_helpers_return_bool(): | CODE |
| LOW | tests/traffic/test_backends.py | 57 | def test_mitm_addon_captures_in_scope_flow(tmp_path): | CODE |
| LOW | tests/traffic/test_backends.py | 71 | def test_mitm_addon_drops_out_of_scope_flow(tmp_path): | CODE |
| LOW | tests/traffic/test_backends.py | 79 | def test_exchange_from_flow_maps_fields(): | CODE |
| LOW | tests/traffic/test_backends.py | 127 | def test_browser_bridge_captures_in_scope_with_body(tmp_path): | CODE |
| LOW | tests/traffic/test_backends.py | 143 | def test_exchange_from_playwright_handles_callable_and_attr(): | CODE |
| LOW | tests/traffic/test_tools.py | 48 | def test_traffic_list_enumerates_and_filters(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_tools.py | 59 | def test_traffic_view_returns_stored_pair(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_tools.py | 68 | def test_traffic_view_missing_id(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_tools.py | 73 | def test_traffic_repeat_records_manual_replay(tmp_path): | CODE |
| LOW | tests/traffic/test_tools.py | 90 | def test_traffic_sitemap_reflects_capture(tmp_path): | CODE |
| LOW | tests/traffic/test_tools.py | 98 | def test_schemas_cover_all_tool_names(): | CODE |
| LOW⚡ | tests/traffic/test_tools.py | 117 | async def test_execute_mcp_tool_routes_traffic(tmp_path): | CODE |
| LOW⚡ | tests/traffic/test_tools.py | 127 | def test_build_openai_tools_includes_traffic(): | CODE |
| LOW⚡ | tests/traffic/test_tools.py | 135 | async def test_traffic_repeat_blocked_by_host_constraint(tmp_path): | CODE |
| LOW | tests/traffic/test_tools.py | 153 | def test_traffic_repeat_guard_allows_in_scope_and_uses_stored_url(tmp_path): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 10 | def test_mapper_maps_findings_to_techniques(): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 18 | def test_tool_techniques_lookup(): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 24 | def test_navigator_layer_is_valid_json(): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 32 | def test_format_report_markdown(): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 38 | def test_list_tactics_and_techniques(): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 44 | async def test_tool_markdown_default(): | CODE |
| LOW⚡ | tests/intel/test_attack.py | 50 | async def test_tool_navigator_format(): | CODE |
| LOW | tests/intel/test_attack.py | 69 | async def test_tool_session_fallback(): | CODE |
| LOW | tests/intel/test_agent_seam.py | 6 | def test_builder_includes_intel_schemas(): | CODE |
| LOW | tests/intel/test_agent_seam.py | 13 | async def test_execute_routes_intel_tool(monkeypatch): | CODE |
| LOW⚡ | tests/intel/test_findings.py | 21 | def test_finding_risk_uses_severity_weight(): | CODE |
| LOW⚡ | tests/intel/test_findings.py | 26 | def test_finding_risk_prefers_cvss(): | CODE |
| LOW⚡ | tests/intel/test_findings.py | 31 | def test_score_findings_counts_and_total(): | CODE |
| LOW⚡ | tests/intel/test_findings.py | 42 | def test_score_findings_open_only_false_includes_rejected(): | CODE |
| 1616 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 47 | # ── 沙箱依赖(python_execute 运行时)────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_codescan.py | 52 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/test_codescan.py | 54 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/test_codescan.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_codescan.py | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_codescan.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_codescan.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_codescan.py | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_codescan.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/intel/test_osint.py | 53 | # ── pure helpers ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/intel/test_osint.py | 71 | # ── HTTP features via MockTransport ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/intel/test_osint.py | 149 | # ── DNS fallback ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/intel/test_osint.py | 164 | # ── formatting ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/intel/test_osint.py | 183 | # ── tool ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_kb_fallback.py | 46 | # ── Automatic degradation when ChromaDB unavailable ────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_kb_fallback.py | 70 | # ── Keyword retrieval functionality ────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_kb_fallback.py | 115 | # ── Status reporting ───────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_kb_fallback.py | 133 | # ── Retrieval result caching (via kb_context) ──────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_kb_fallback.py | 304 | # ── Full-corpus loading from store ─────────────────────────────────── | COMMENT |
| MEDIUM | tests/kb/test_kb_fallback.py | 199 | # ── Language gate (ticket #65) ──────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_ranking.py | 4 | # ── bigram_tokenize ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_ranking.py | 45 | # ── BM25 ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/kb/test_ranking.py | 84 | # ── RerankedRetriever (two-stage glue) ─────────────────────────────── | COMMENT |
| MEDIUM | tests/kb/test_ranking.py | 129 | # ── KnowledgeRetriever rerank opt-in ───────────────────────────────── | COMMENT |
| MEDIUM | tests/kb/test_kb.py | 4 | # ── store.py ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/kb/test_kb.py | 268 | # ── retriever.py ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/kb/test_kb.py | 398 | # ── updater.py ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/config/test_token_provider.py | 26 | # ── static mode ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/config/test_token_provider.py | 46 | # ── oauth store + resolution ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/config/test_token_provider.py | 81 | # ── Sign in with ChatGPT (Codex OAuth client) ──────────────────────── | COMMENT |
| MEDIUM | tests/config/test_config.py | 6 | # ── schema.py ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/config/test_config.py | 330 | # ── settings.py ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/tui/events.rs | 619 | // ── Execution approval modal (C-1/C-2) ───────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent.py | 7 | # ── context.py ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent.py | 560 | # ── memory.py ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent.py | 852 | # ── prompts.py ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent.py | 967 | # ── core.py ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/agent/test_finding_similarity.py | 15 | # ── normalize_text ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_finding_similarity.py | 37 | # ── text_similarity ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/agent/test_finding_similarity.py | 63 | # ── url_similarity ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_finding_similarity.py | 97 | # ── normalize_vuln_type ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_finding_similarity.py | 134 | # ── finding_similarity ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_finding_similarity.py | 184 | # ── deduplicate_findings ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_finding_similarity.py | 238 | # ── SessionState integration ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_recon_tools.py | 55 | # ── JS 提取(纯函数)──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/agent/test_recon_tools.py | 119 | # ── 空间测绘:查询构造 + 解析 ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_recon_tools.py | 172 | # ── 目录枚举:全局伪装 200 识别 ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_recon_tools.py | 214 | # ── 子域名枚举:被动聚合 + 字典爆破关闭时不解析 ───────────────────── | COMMENT |
| MEDIUM | tests/agent/test_chatgpt_proxy.py | 14 | # ── Pure translation functions ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_chatgpt_proxy.py | 138 | # ── Integration: proxy server ↔ mock ChatGPT backend ───────────────── | COMMENT |
| MEDIUM⚡ | tests/agent/test_agent_graph.py | 41 | # ── Node lifecycle ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/agent/test_agent_graph.py | 221 | # ── Persistence ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent_graph.py | 133 | # ── Root-completion rule (fail-loud) ───────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent_graph.py | 176 | # ── Bounded fan-out caps ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/agent/test_agent_graph.py | 266 | # ── Resume ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/mcp/test_mcp_lifecycle.py | 95 | # ── start / stop ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/mcp/test_mcp_lifecycle.py | 157 | # ── graceful termination (SIGTERM-then-SIGKILL semantics) ──────────── | COMMENT |
| MEDIUM⚡ | tests/mcp/test_mcp_lifecycle.py | 204 | # ── auto-restart ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/mcp/test_mcp_lifecycle.py | 361 | # ── stats tracking ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/mcp/test_mcp_lifecycle.py | 302 | # ── health check ───────────────────────────────────────────────────── | COMMENT |
| 295 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/config/test_token_provider.py | 147 | except Exception: | CODE |
| HIGH | tests/meta/test_release_workflow.py | 25 | except FileNotFoundError: | CODE |
| HIGH | tests/meta/test_release_workflow.py | 39 | except ValueError: | CODE |
| HIGH | tests/agent/test_llm_client_streaming.py | 935 | except asyncio.CancelledError: | CODE |
| HIGH | tests/mcp/test_mcp.py | 268 | except Exception: | CODE |
| HIGH | tests/cli/test_wizard.py | 66 | except Exception: | CODE |
| HIGH | tests/report/test_report.py | 297 | except Exception: | CODE |
| HIGH | vulnclaw/targets.py | 152 | except ValueError: | CODE |
| HIGH | vulnclaw/tui_backend.py | 559 | except asyncio.CancelledError: | CODE |
| HIGH | vulnclaw/tui_backend.py | 770 | except asyncio.CancelledError: | CODE |
| HIGH | vulnclaw/orchestrator.py | 243 | except Exception: | CODE |
| HIGH | vulnclaw/intel/findings.py | 61 | except (TypeError, ValueError): | CODE |
| HIGH | vulnclaw/intel/osint.py | 343 | except ImportError: | CODE |
| HIGH | vulnclaw/kb/store.py | 26 | except OSError: | CODE |
| HIGH | vulnclaw/kb/store.py | 134 | except OSError: | CODE |
| HIGH | vulnclaw/kb/experience.py | 406 | except OSError: | CODE |
| HIGH | vulnclaw/web/auth.py | 64 | except OSError: | CODE |
| HIGH | vulnclaw/agent/recon_tools.py | 811 | except OSError: | CODE |
| HIGH | vulnclaw/agent/recon_tools.py | 867 | except Exception: | CODE |
| HIGH | vulnclaw/agent/recon_tools.py | 420 | except Exception: | CODE |
| HIGH | vulnclaw/agent/recon_tools.py | 564 | except Exception: | CODE |
| HIGH | vulnclaw/agent/recon_tools.py | 735 | except Exception: | CODE |
| HIGH | vulnclaw/agent/prompt_context.py | 317 | except Exception: | CODE |
| HIGH | vulnclaw/agent/solver.py | 227 | except (TypeError, ValueError): | CODE |
| HIGH | vulnclaw/agent/solver.py | 829 | except Exception: | CODE |
| HIGH | vulnclaw/agent/solver.py | 810 | except Exception: | CODE |
| HIGH | vulnclaw/agent/memory.py | 170 | except OSError: | CODE |
| HIGH | vulnclaw/agent/memory.py | 101 | except OSError: | CODE |
| HIGH | vulnclaw/agent/context_vault.py | 318 | except OSError: | CODE |
| HIGH | vulnclaw/agent/core.py | 291 | except Exception: | CODE |
| HIGH | vulnclaw/agent/network_scan.py | 467 | except Exception: | CODE |
| HIGH | vulnclaw/agent/network_scan.py | 475 | except Exception: | CODE |
| HIGH | vulnclaw/agent/exec_gate.py | 440 | except RuntimeError: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 597 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 636 | except OSError: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 1607 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 1761 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 2482 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 630 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 1084 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 1623 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 2387 | except OSError: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 2661 | except Exception: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 479 | except subprocess.TimeoutExpired: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 616 | except (ProcessLookupError, PermissionError, OSError): | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 2405 | except OSError: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 2442 | except OSError: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 2450 | except OSError: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 469 | except subprocess.TimeoutExpired: | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 463 | except OSError: | CODE |
| HIGH | vulnclaw/agent/skill_context.py | 158 | except Exception: | CODE |
| HIGH | vulnclaw/mcp/_probe_mixin.py | 317 | except BaseException: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 303 | except RuntimeError: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 538 | except BaseException: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 632 | except Exception: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 702 | except Exception: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 1120 | except Exception: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 1125 | except Exception: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 1130 | except Exception: | CODE |
| HIGH | vulnclaw/mcp/lifecycle.py | 1139 | except Exception: | CODE |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 1 | CODE | |
| LOW | tests/test_codescan.py | 7 | CODE | |
| LOW | tests/test_context_budget.py | 1 | CODE | |
| LOW | tests/traffic/test_report_export.py | 3 | CODE | |
| LOW | tests/traffic/test_normalize_replay.py | 3 | CODE | |
| LOW | tests/traffic/test_store.py | 3 | CODE | |
| LOW | tests/traffic/test_backends.py | 3 | CODE | |
| LOW | tests/traffic/test_tools.py | 3 | CODE | |
| LOW | tests/config/test_llm_probe.py | 3 | CODE | |
| LOW | tests/config/test_token_provider.py | 3 | CODE | |
| LOW | tests/security/test_spawn_boundary.py | 8 | CODE | |
| LOW | tests/security/test_gate_wiring.py | 3 | CODE | |
| LOW | tests/security/test_l4_modes.py | 3 | CODE | |
| LOW | tests/security/test_exec_policy.py | 3 | CODE | |
| LOW | tests/security/test_exec_gate.py | 3 | CODE | |
| LOW | tests/security/test_command_classifier.py | 3 | CODE | |
| LOW | tests/security/test_spawn_hardening.py | 3 | CODE | |
| LOW | tests/security/test_approval_schema.py | 7 | CODE | |
| LOW | tests/plugins/test_builtin_plugins.py | 1 | CODE | |
| LOW | tests/plugins/test_plugin_cli.py | 1 | CODE | |
| LOW | tests/plugins/test_plugin_runtime.py | 1 | CODE | |
| LOW | tests/plugins/test_plugin_integration.py | 1 | CODE | |
| LOW | tests/web/test_auth.py | 8 | CODE | |
| LOW | tests/meta/test_release.py | 1 | CODE | |
| LOW | tests/meta/test_release_workflow.py | 1 | CODE | |
| LOW | tests/agent/test_distiller.py | 1 | CODE | |
| LOW | tests/agent/test_feedback_distillation.py | 1 | CODE | |
| LOW | tests/agent/test_constraint_policy_infer.py | 8 | CODE | |
| LOW | tests/agent/test_finding_similarity.py | 3 | CODE | |
| LOW | tests/agent/test_recon_tools.py | 1 | CODE | |
| LOW | tests/agent/test_agent_context_protocol.py | 14 | CODE | |
| LOW | tests/agent/test_parallel_agents.py | 3 | CODE | |
| LOW | tests/agent/test_stream_robustness.py | 13 | CODE | |
| LOW | tests/agent/test_context_vault.py | 11 | CODE | |
| LOW | tests/agent/test_ctf_mode.py | 3 | CODE | |
| LOW | tests/agent/test_regression_prior_fixes.py | 14 | CODE | |
| LOW | tests/agent/test_subagent_architecture.py | 1 | CODE | |
| LOW | tests/agent/test_input_analysis_i18n.py | 10 | CODE | |
| LOW | tests/agent/test_chatgpt_proxy.py | 3 | CODE | |
| LOW | tests/agent/test_agent_graph.py | 3 | CODE | |
| LOW | tests/agent/test_roles.py | 3 | CODE | |
| LOW | tests/agent/test_llm_client_streaming.py | 3 | CODE | |
| LOW | tests/agent/test_loop_controller_i18n.py | 1 | CODE | |
| LOW | tests/agent/test_tool_parallel.py | 3 | CODE | |
| LOW | tests/agent/test_hackerone_scope.py | 3 | CODE | |
| LOW | tests/agent/test_constraint_tool_action.py | 3 | CODE | |
| LOW | tests/mcp/test_mcp_lifecycle.py | 3 | CODE | |
| LOW | tests/mcp/test_mcp_fetch_cookies.py | 8 | CODE | |
| LOW | tests/cli/test_config_panel_paste.py | 3 | CODE | |
| LOW | tests/cli/test_wizard.py | 3 | CODE | |
| LOW | tests/cli/test_task_service_codescan.py | 8 | CODE | |
| LOW | tests/cli/test_tui_backend.py | 1 | CODE | |
| LOW | tests/cli/test_cli_noninteractive.py | 3 | CODE | |
| LOW | tests/cli/test_tui_protocol.py | 1 | CODE | |
| LOW | tests/cli/test_entrypoint.py | 3 | CODE | |
| LOW | tests/cli/test_experience_cli.py | 3 | CODE | |
| LOW | tests/cli/test_helpers.py | 3 | CODE | |
| LOW | tests/run/test_feedback.py | 1 | CODE | |
| LOW | tests/run/test_headless.py | 3 | CODE | |
| LOW | tests/run/test_run_persistence.py | 1 | CODE | |
| 258 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/config/test_token_provider.py | 147 | except Exception: | CODE |
| LOW | tests/mcp/test_mcp.py | 268 | except Exception: | CODE |
| LOW | tests/cli/test_wizard.py | 66 | except Exception: | CODE |
| LOW⚡ | tests/report/test_report.py | 297 | except Exception: | CODE |
| LOW | vulnclaw/tui_backend.py | 276 | except Exception as exc: # noqa: BLE001 - task failures are protocol data | CODE |
| LOW | vulnclaw/tui_backend.py | 761 | except Exception as exc: # noqa: BLE001 - preserve the backend session | CODE |
| LOW | vulnclaw/tui_backend.py | 791 | except Exception: | CODE |
| LOW | vulnclaw/tui_backend.py | 814 | except Exception: | CODE |
| LOW | vulnclaw/orchestrator.py | 182 | except Exception as exc: | CODE |
| LOW | vulnclaw/orchestrator.py | 239 | except Exception as exc: | CODE |
| LOW | vulnclaw/orchestrator.py | 243 | except Exception: | CODE |
| LOW | vulnclaw/traffic/models.py | 40 | except Exception: | CODE |
| LOW | vulnclaw/traffic/mitm_addon.py | 33 | except Exception: | CODE |
| LOW | vulnclaw/traffic/tools.py | 171 | except Exception as exc: # network / transport errors | CODE |
| LOW | vulnclaw/traffic/browser.py | 32 | except Exception: | CODE |
| LOW | vulnclaw/traffic/browser.py | 49 | except Exception: | CODE |
| LOW | vulnclaw/intel/osint.py | 302 | except Exception: | CODE |
| LOW | vulnclaw/intel/osint.py | 345 | except Exception: | CODE |
| LOW | vulnclaw/intel/osint.py | 703 | except Exception as exc: # never raise into the agent loop | CODE |
| LOW | vulnclaw/intel/remediation.py | 266 | except Exception as e: | CODE |
| LOW | vulnclaw/intel/remediation.py | 295 | except Exception as e: | CODE |
| LOW⚡ | vulnclaw/kb/retriever.py | 38 | except Exception as exc: # pragma: no cover - exercised when chromadb missing | CODE |
| LOW | vulnclaw/kb/retriever.py | 200 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | vulnclaw/kb/retriever.py | 206 | except Exception as exc: | CODE |
| LOW | vulnclaw/kb/retriever.py | 265 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | vulnclaw/kb/ranking.py | 130 | except Exception: | CODE |
| LOW | vulnclaw/target_state/planner.py | 247 | except Exception: | CODE |
| LOW | vulnclaw/codescan/scanner.py | 249 | except Exception: # noqa: BLE001 — L3 must never break the scan | CODE |
| LOW | vulnclaw/config/__init__.py | 23 | except Exception: | STRING |
| LOW | vulnclaw/config/llm_probe.py | 65 | except Exception: | CODE |
| LOW | vulnclaw/config/llm_probe.py | 88 | except Exception as exc: # OAuth refresh failure, unknown auth mode, ... | CODE |
| LOW | vulnclaw/config/llm_probe.py | 93 | except Exception as exc: | CODE |
| LOW | vulnclaw/config/llm_probe.py | 105 | except Exception as exc: | CODE |
| LOW | vulnclaw/config/settings.py | 644 | except Exception: | CODE |
| LOW | vulnclaw/config/url_utils.py | 23 | except Exception: | CODE |
| LOW | vulnclaw/plugins/runtime.py | 69 | except Exception as exc: | CODE |
| LOW | vulnclaw/web/services/task_service.py | 80 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 343 | except Exception as e: # 单引擎失败不影响其他引擎 | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 347 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 399 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 402 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 420 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 564 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 568 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 715 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 735 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 782 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 867 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 878 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 888 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/loop_controller.py | 273 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/loop_controller.py | 391 | except Exception: | CODE |
| LOW | vulnclaw/agent/loop_controller.py | 409 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/kb_context.py | 57 | except Exception as exc: # defensive — never break the agent loop | CODE |
| LOW | vulnclaw/agent/kb_context.py | 105 | except Exception as exc: # defensive — retrieval must never break the loop | CODE |
| LOW | vulnclaw/agent/prompt_context.py | 317 | except Exception: | CODE |
| LOW | vulnclaw/agent/solver.py | 636 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/solver.py | 810 | except Exception: | CODE |
| LOW | vulnclaw/agent/solver.py | 829 | except Exception: | CODE |
| LOW | vulnclaw/agent/tool_call_manager.py | 89 | except Exception as exc: | CODE |
| 142 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 434 | # Step 1: 启动 Chrome 远程调试 | COMMENT |
| LOW | README.md | 440 | # Step 2: 启用 VulnClaw 配置 | COMMENT |
| LOW⚡ | README.md | 465 | # Step 1: 克隆并构建 | COMMENT |
| LOW⚡ | README.md | 470 | # Step 2: 加载到 Burp Suite → Extensions → Add → Type: Java → 选择 burp-mcp-all.jar | COMMENT |
| LOW⚡ | README.md | 472 | # Step 3: 在 Burp 的 MCP 标签页勾选 "Enabled" | COMMENT |
| LOW⚡ | README.md | 474 | # Step 4: 启用 VulnClaw 配置 | COMMENT |
| LOW | README_EN.md | 443 | # Step 1: Start Chrome with remote debugging | COMMENT |
| LOW | README_EN.md | 449 | # Step 2: Enable in VulnClaw | COMMENT |
| LOW⚡ | README_EN.md | 474 | # Step 1: Clone and build | COMMENT |
| LOW⚡ | README_EN.md | 479 | # Step 2: Load into Burp Suite → Extensions → Add → Type: Java → select burp-mcp-all.jar | COMMENT |
| LOW⚡ | README_EN.md | 481 | # Step 3: Enable in Burp's MCP tab | COMMENT |
| LOW⚡ | README_EN.md | 483 | # Step 4: Enable in VulnClaw | COMMENT |
| LOW⚡ | docs/mcp-deployment.md | 114 | #### Step 1: 克隆并构建 | COMMENT |
| LOW⚡ | docs/mcp-deployment.md | 124 | #### Step 2: 加载到 Burp Suite | COMMENT |
| LOW⚡ | docs/mcp-deployment.md | 131 | #### Step 3: 启用 MCP Server | COMMENT |
| LOW⚡ | vulnclaw/config/token_provider.py | 209 | # WARNING: This authenticates against OpenAI's first-party Codex OAuth client. | COMMENT |
| LOW | …6-04-19_php-weak-comparison_double-write-md5-bypass.md | 100 | # Step 1: 设置 L1 + L2 session | COMMENT |
| LOW | …6-04-19_php-weak-comparison_double-write-md5-bypass.md | 104 | # Step 2: 触发 L3 + 获取 flag | COMMENT |
| LOW⚡ | vulnclaw/agent/builtin_tools.py | 2555 | # Step 1: Get login page for initial CSRF and session | COMMENT |
| LOW | vulnclaw/agent/builtin_tools.py | 2585 | # Step 2: Try each password | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 50 | ## Step 1: Confirm device and app presence | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 67 | ## Step 2: Prepare packet visibility first | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 77 | ## Step 3: Drive the real business flow | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 89 | ## Step 4: After each important action, inspect runtime evidence | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 105 | ## Step 5: Branch by packet result | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 35 | ### Step 1: Prepare the runtime view | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 58 | ### Step 2: Create a visual checkpoint | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 68 | ### Step 3: Analyze the current screen | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 93 | ### Step 4: Execute the next UI action | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 126 | ### Step 5: Tie UI action to packet capture | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 139 | ### Step 6: Promote the packet into replay analysis | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 55 | ### Step 1: Confirm device and app presence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 72 | ### Step 2: Prepare packet visibility first | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 82 | ### Step 3: Drive the app to the target feature | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 108 | ### Step 4: Inspect the screenshot before reversing | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 125 | ### Step 5: Review logs for cheap evidence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 137 | ### Step 6: Check Burp and Charles | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 151 | ### Step 7: Branch by packet visibility | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 9 | ## Step 1: 从页面提取作者标识 | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 62 | ## Step 2: GitHub 追踪 | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 126 | ## Step 3: 跨平台关联 | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 157 | ## Step 4: 信息汇总模板 | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 50 | ## Step 1: Confirm device and app presence | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 67 | ## Step 2: Prepare packet visibility first | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 77 | ## Step 3: Drive the real business flow | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 89 | ## Step 4: After each important action, inspect runtime evidence | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 105 | ## Step 5: Branch by packet result | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 35 | ### Step 1: Prepare the runtime view | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 58 | ### Step 2: Create a visual checkpoint | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 68 | ### Step 3: Analyze the current screen | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 93 | ### Step 4: Execute the next UI action | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 126 | ### Step 5: Tie UI action to packet capture | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 139 | ### Step 6: Promote the packet into replay analysis | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 55 | ### Step 1: Confirm device and app presence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 72 | ### Step 2: Prepare packet visibility first | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 82 | ### Step 3: Drive the app to the target feature | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 108 | ### Step 4: Inspect the screenshot before reversing | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 125 | ### Step 5: Review logs for cheap evidence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 137 | ### Step 6: Check Burp and Charles | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 151 | ### Step 7: Branch by packet visibility | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/task_service.py | 215 | CODE | |
| LOW | vulnclaw/tui_backend.py | 679 | CODE | |
| LOW | vulnclaw/tui_backend.py | 745 | CODE | |
| LOW | vulnclaw/tui_backend.py | 682 | CODE | |
| LOW | vulnclaw/orchestrator.py | 40 | CODE | |
| LOW | vulnclaw/intel/compliance.py | 255 | CODE | |
| LOW | vulnclaw/intel/osint.py | 357 | CODE | |
| LOW | vulnclaw/intel/osint.py | 398 | CODE | |
| LOW | vulnclaw/intel/attack.py | 780 | CODE | |
| LOW | vulnclaw/intel/topology.py | 430 | CODE | |
| LOW | vulnclaw/intel/remediation.py | 244 | CODE | |
| LOW | vulnclaw/intel/cve.py | 84 | CODE | |
| LOW | vulnclaw/kb/store.py | 94 | CODE | |
| LOW | vulnclaw/kb/store.py | 140 | CODE | |
| LOW | vulnclaw/kb/store.py | 297 | CODE | |
| LOW | vulnclaw/kb/store.py | 350 | CODE | |
| LOW | vulnclaw/config/settings.py | 161 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 372 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 448 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 668 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 819 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 701 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 390 | CODE | |
| LOW | vulnclaw/agent/prompt_context.py | 15 | CODE | |
| LOW | vulnclaw/agent/solver.py | 215 | CODE | |
| LOW | vulnclaw/agent/solver.py | 581 | CODE | |
| LOW | vulnclaw/agent/memory.py | 185 | CODE | |
| LOW | vulnclaw/agent/token_counter.py | 42 | CODE | |
| LOW | vulnclaw/agent/token_counter.py | 125 | CODE | |
| LOW | vulnclaw/agent/context_vault.py | 125 | CODE | |
| LOW | vulnclaw/agent/context_vault.py | 322 | CODE | |
| LOW | vulnclaw/agent/hackerone_scope.py | 223 | CODE | |
| LOW | vulnclaw/agent/context_budget.py | 212 | CODE | |
| LOW | vulnclaw/agent/chatgpt_proxy.py | 175 | CODE | |
| LOW | vulnclaw/agent/chatgpt_proxy.py | 289 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 425 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 860 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 972 | CODE | |
| LOW | vulnclaw/agent/input_analysis.py | 143 | CODE | |
| LOW | vulnclaw/agent/input_analysis.py | 305 | CODE | |
| LOW | vulnclaw/agent/network_scan.py | 449 | CODE | |
| LOW | vulnclaw/agent/finding_parser.py | 111 | CODE | |
| LOW | vulnclaw/agent/ctf_mode.py | 29 | CODE | |
| LOW | vulnclaw/agent/exec_gate.py | 40 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 141 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 412 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 1042 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 1185 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 1427 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 1583 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 2486 | CODE | |
| LOW | vulnclaw/agent/skill_context.py | 86 | CODE | |
| LOW | vulnclaw/agent/reasoning_state.py | 232 | CODE | |
| LOW | vulnclaw/agent/agent_graph.py | 158 | CODE | |
| LOW | vulnclaw/agent/parallel_agents.py | 235 | CODE | |
| LOW | vulnclaw/agent/subagent/service.py | 294 | CODE | |
| LOW | vulnclaw/agent/subagent/service.py | 666 | CODE | |
| LOW | vulnclaw/agent/subagent/merge.py | 374 | CODE | |
| LOW | vulnclaw/agent/subagent/budget.py | 146 | CODE | |
| LOW | vulnclaw/agent/subagent/integration.py | 316 | CODE | |
| 20 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/feedback.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/run_context.py | 117 | def update_manifest(self, **updates: Any) -> None: | CODE |
| LOW | vulnclaw/traffic/__init__.py | 27 | __all__ = [ | CODE |
| LOW | vulnclaw/intel/remediation.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | vulnclaw/kb/retriever.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/kb/__init__.py | 19 | __all__ = [ | CODE |
| LOW | vulnclaw/codescan/__init__.py | 19 | __all__ = ["CodeFinding", "ScanResult", "scan_code", "scan_code_llm"] | CODE |
| LOW | vulnclaw/config/settings.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/config/settings.py | 161 | def set_config_value(key: str, value: str) -> None: | CODE |
| LOW | vulnclaw/plugins/__init__.py | 33 | __all__ = [ | CODE |
| LOW | vulnclaw/plugins/web/__init__.py | 14 | __all__ = [ | CODE |
| LOW | vulnclaw/web/__init__.py | 7 | __all__ = ["__version__"] | CODE |
| LOW | vulnclaw/web/task_manager.py | 61 | def set_restoring(self, task_id: str, *, snapshot_id: str | None = None) -> None: | CODE |
| LOW | vulnclaw/web/task_manager.py | 70 | def set_running(self, task_id: str) -> None: | CODE |
| LOW | vulnclaw/web/task_manager.py | 93 | def set_failed(self, task_id: str, error: str) -> None: | CODE |
| LOW | vulnclaw/web/task_manager.py | 101 | def set_stopped(self, task_id: str) -> None: | CODE |
| LOW | vulnclaw/agent/constraint_policy.py | 19 | __all__ = [ | CODE |
| LOW | vulnclaw/agent/kb_context.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/think_filter.py | 13 | __all__ = ["strip_think_tags", "format_think_tags"] | CODE |
| LOW | vulnclaw/agent/tool_call_manager.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/context_vault.py | 289 | def set_output_dir(self, output_dir: Path | None) -> None: | CODE |
| LOW | vulnclaw/agent/agent_state.py | 607 | def update_context_digest(self, summary: str, evidence_ids: list[str]) -> None: | CODE |
| LOW | vulnclaw/agent/__init__.py | 12 | __all__ = [ | CODE |
| LOW | vulnclaw/agent/core.py | 775 | def _update_recon_dimension_completion(self, response: str) -> None: | CODE |
| LOW | vulnclaw/agent/team.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/distiller.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | vulnclaw/agent/context.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/context.py | 1032 | def set_save_path(self, path: Path) -> None: | CODE |
| LOW | vulnclaw/agent/llm_client.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/recon_tracker.py | 140 | def update_recon_dimension_completion(agent: AgentContext, response: str) -> None: | CODE |
| LOW | vulnclaw/agent/exec_gate.py | 420 | async def _settle(self, pending: _Pending, request_hash: str, state: str) -> None: | CODE |
| LOW⚡ | vulnclaw/agent/agent_context.py | 130 | def _update_recon_dimension_completion(self, response: str) -> None: | CODE |
| LOW | vulnclaw/agent/finding_similarity.py | 23 | __all__ = [ | CODE |
| LOW | vulnclaw/agent/agent_graph.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/subagent/integration.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 79 | def set_server_running(self, name: str, running: bool, pid: Optional[int] = None) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 89 | def set_server_execution_mode(self, name: str, mode: str) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 94 | def set_server_health(self, name: str, health_status: str) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 99 | def set_server_attach_result(self, name: str, attempted: bool, succeeded: bool) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 105 | def set_server_error(self, name: str, error: str, error_type: str | None = None) -> None: | CODE |
| LOW | vulnclaw/mcp/registry.py | 140 | def set_last_call_latency(self, name: str, latency_ms: float) -> None: | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 132 | def set_task_constraints(self, constraints: Any) -> None: | CODE |
| LOW | vulnclaw/cli/config_panel.py | 455 | def set_viewport_height(self, height: int | None) -> None: | CODE |
| LOW | vulnclaw/cli/config_panel.py | 586 | def _set_value(self, row: Row, value: Any) -> None: | CODE |
| LOW | vulnclaw/cli/config_panel.py | 637 | def set_edit_text(self, text: str) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 780 | def _set_prompt_input(session: dict[str, Any], label: str, callback: PromptCallback, default: str = "") -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 784 | def _set_prompt_choice(session: dict[str, Any], label: str, choices: list[str], callback: PromptCallback) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 788 | def _set_prompt_confirm(session: dict[str, Any], label: str, callback: Callable[[bool], None]) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 792 | def _set_prompt_message(session: dict[str, Any], text: str) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 796 | def _set_prompt_chain(session: dict[str, Any], fields: list, idx: int, callback: Callable[[], None]) -> None: | CODE |
| LOW | vulnclaw/cli/tui.py | 69 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/report/__init__.py | 25 | __all__ = [ | CODE |
| LOW | vulnclaw/report/generator.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/report/verifier.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/skills/crypto_tools.py | 24 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/security/test_exec_policy.py | 205 | ("cd /tmp && ls", "allow"), | CODE |
| HIGH⚡ | tests/security/test_command_classifier.py | 26 | "whoami && uname -a", # sequencing of allowed commands | CODE |
| HIGH⚡ | tests/security/test_command_classifier.py | 27 | "cd /tmp && ls -la", # env-agnostic cd + allow | CODE |
| HIGH | tests/security/test_approval_schema.py | 28 | "question": "whoami && ls -la", | CODE |
| HIGH | vulnclaw/intel/remediation_rules.py | 662 | sudo apt update && sudo apt upgrade -y | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 1371 | return f"[!] 工具 {tool_name} 返回空结果 (undefined),调用可能失败" | CODE |
| HIGH | vulnclaw/skills/loader.py | 195 | # gate. Any other value (missing, null, 0, "false", …) keeps | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | CONTRIBUTING_EN.md | 17 | | |-- orchestrator.py # Shared task orchestration for CLI / Web | CODE |
| MEDIUM⚡ | tests/config/test_config.py | 170 | # Upper bounds are DoS guardrails: e.g. max_concurrent=100000 must be | COMMENT |
| MEDIUM | …ized/rapid-checklist/references/testing-methodology.md | 550 | > 官方地址: https://genai.owasp.org/resource/agentic-ai/ | CODE |
| MEDIUM | …curity/references/04-ai-and-mcp-security-integrated.md | 5439 | https://allabouttesting.org/owasp-agentic-ai-threat-t9-identity-spoofing-impersonation-in-ai-systems/ | CODE |
| MEDIUM | …zed/ai-mcp-security/references/ai-identity-security.md | 462 | https://allabouttesting.org/owasp-agentic-ai-threat-t9-identity-spoofing-impersonation-in-ai-systems/ | CODE |
| MEDIUM | …d/secknowledge-skill/references/testing-methodology.md | 550 | > 官方地址: https://genai.owasp.org/resource/agentic-ai/ | CODE |
| MEDIUM | …lized/secknowledge-skill/references/ai-identity-app.md | 460 | https://allabouttesting.org/owasp-agentic-ai-threat-t9-identity-spoofing-impersonation-in-ai-systems/ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/test_context_budget.py | 80 | assert agent.context.state.agent_state.context_digest.summary.startswith("[context digest v1]") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/mcp/test_mcp.py | 332 | assert any(item.execution_mode in {"placeholder", "local"} for item in view.services) | CODE |
| LOW | tests/mcp/test_mcp.py | 383 | assert state.execution_mode == "placeholder" | CODE |
| LOW | vulnclaw/agent/core.py | 355 | api_key=token or "placeholder", | CODE |
| LOW | vulnclaw/agent/distiller.py | 275 | api_key=resolve_llm_token(config.llm) or "placeholder", | CODE |
| LOW | vulnclaw/mcp/registry.py | 44 | execution_mode: str = "placeholder" # local/sdk/subprocess/sse/placeholder | CODE |
| LOW | vulnclaw/mcp/diagnostics.py | 29 | execution_mode = state.execution_mode if state else "placeholder" | CODE |
| LOW | vulnclaw/mcp/diagnostics.py | 36 | elif execution_mode == "placeholder": | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 329 | self.registry.set_server_execution_mode(name, "sdk" if attached else "placeholder") | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 343 | self.registry.set_server_execution_mode(name, "sse" if attached else "placeholder") | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 357 | self.registry.set_server_execution_mode(name, "http" if attached else "placeholder") | CODE |
| LOW | vulnclaw/cli/main.py | 498 | if srv_state.health_status in ("degraded", "unavailable") and srv_state.execution_mode in ("placeholder",): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/kb/test_kb.py | 135 | # Create a new store loading from the same dir | COMMENT |
| MEDIUM | tests/agent/test_agent.py | 613 | # Create a new store instance pointing to the same dir | COMMENT |
| MEDIUM | vulnclaw/agent/team.py | 238 | # Create a minimal error result so the wave can continue | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/task_service.py | 401 | CODE | |
| LOW | vulnclaw/orchestrator.py | 40 | CODE | |
| LOW | vulnclaw/config/finding_similarity.py | 149 | CODE | |
| LOW | vulnclaw/agent/core.py | 644 | CODE | |
| LOW | vulnclaw/agent/subagent/service.py | 82 | CODE | |
| LOW | vulnclaw/cli/tui.py | 342 | CODE | |
| LOW | vulnclaw/report/filter.py | 156 | CODE | |
| LOW | vulnclaw/report/filter.py | 230 | CODE | |
| LOW | vulnclaw/report/filter.py | 244 | CODE | |
| LOW | vulnclaw/report/filter.py | 266 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | vulnclaw/codescan/rules.py | 165 | # --- AI-generated code smells --- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tui/src/windows_clipboard.rs | 1 | //! System clipboard access without third-party crates or subprocesses. | COMMENT |
| LOW | tui/src/app.rs | 281 | pub base_url: String, | COMMENT |
| LOW | tests/tui/events.rs | 21 | COMMENT | |
| LOW | vulnclaw/agent/exec_gate.py | 281 | # ── auto_review: Codex-style command classification ─────────────── | COMMENT |
| LOW | …lized/ctf-crypto/references/lattice-and-lwe-attacks.md | 81 | COMMENT | |
| LOW | scripts/vulnclaw-setup-wizard.sh | 181 | if (( ${#SKIPPED[@]} )); then | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | vulnclaw/agent/llm_client.py | 428 | Keep retrying retriable LLM calls until success, max retries, or manual interruption. Args: max_retries: Ma | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | vulnclaw/skills/dispatcher.py | 77 | # Full/deep recon — trigger osint-recon for comprehensive 4-dimension collection | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | vulnclaw/agent/builtin_tools.py | 2555 | # Step 1: Get login page for initial CSRF and session | COMMENT |
| LOW | vulnclaw/agent/builtin_tools.py | 2585 | # Step 2: Try each password | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/cli/main.py | 3559 | # Check if user specified a path | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/task_service.py | 401 | async def execute_task( | CODE |