Automated Penetration Testing Agentic Framework Powered by Large Language Models
This report presents the forensic synthetic code analysis of GreyDGL/PentestGPT, a Python project with 14,239 GitHub stars. SynthScan v2.0 examined 20,592 lines of code across 146 source files, recording 373 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 21.4 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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 373 distinct pattern matches across 15 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 | pentestgpt_agent/tests/test_episode.py | 135 | async def test_successful_episode_is_recoverable_from_its_trace(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 172 | async def test_provider_crash_leaves_a_complete_failure_trace(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 195 | async def test_reasoning_and_raw_provider_payloads_are_never_persisted(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 227 | async def test_operational_events_and_terminal_result_share_one_ordered_trace( | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 264 | async def test_episode_trace_and_wrapper_monitor_accept_live_operational_events( | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 326 | async def test_missing_terminal_event_is_an_explicit_episode_failure(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 349 | async def test_trace_load_preserves_events_before_a_torn_jsonl_tail(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 372 | async def test_trace_records_the_provider_configuration_that_shaped_the_episode( | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 414 | def test_claude_safety_rejection_has_a_typed_informative_failure() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_episode.py | 448 | def test_existing_provider_stop_reasons_remain_typed() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 66 | def test_valid_supervisor_decision_atomically_adds_and_leases_one_task( | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 104 | def test_discovered_url_path_is_inside_its_authorized_origin(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 141 | def test_url_scope_rejects_targets_outside_the_authorized_origin( | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 183 | def test_url_subtree_scope_rejects_prefix_and_ambiguous_path_escapes( | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 214 | def test_supervisor_cannot_create_a_speculative_task_backlog(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 241 | def test_new_task_must_be_selected_immediately_instead_of_deferred(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 307 | def test_unknown_basis_observation_is_rejected(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 336 | def test_basis_producer_must_be_a_dependency(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 402 | def test_exploit_requires_the_latest_test_evidence_on_the_same_surface( | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 478 | def test_exploit_provenance_requires_the_exact_test_target_including_query( | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 522 | def test_supervisor_cannot_finish_while_work_is_open(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 566 | def test_finish_requires_an_explicit_existing_canonical_basis(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 625 | def test_finish_basis_must_come_from_a_completed_task(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 694 | def test_test_task_cannot_embed_exploitation_as_its_objective( | CODE |
| LOW | pentestgpt_agent/tests/test_plan.py | 727 | def test_plan_text_and_reference_collections_are_bounded(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_local_benchmark.py | 185 | async def test_local_template_injection_benchmark_reaches_a_grounded_flag( | CODE |
| LOW | pentestgpt_agent/tests/test_dependency.py | 8 | def test_unified_agent_is_loaded_from_the_external_dependency() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 37 | def _latest_observation_basis(prompt: str) -> list[str]: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 539 | async def test_one_grounded_task_can_drive_a_run_to_completion(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 602 | async def test_max_turn_failure_after_an_action_is_atomically_terminal( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 667 | async def test_provider_failure_before_actions_retries_once_in_the_same_run( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 722 | async def test_malformed_result_after_an_action_is_a_terminal_validation_failure( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 773 | async def test_uncaptured_done_evidence_degrades_to_grounded_progress_and_retries( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 833 | async def test_reopening_a_completed_run_does_not_invoke_a_provider(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 900 | async def test_restart_commits_a_completed_executor_trace_without_replaying_it( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 982 | async def test_restart_retries_a_failed_executor_trace_only_when_it_has_no_actions( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1068 | async def test_restart_recovers_a_terminal_executor_event_when_output_write_was_interrupted( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1153 | async def test_restart_retries_when_crash_created_only_the_executor_episode_directory( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1221 | async def test_restart_commits_a_completed_supervisor_trace_without_replaying_it( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1281 | async def test_invalid_supervisor_plan_retries_in_a_new_logged_episode(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1325 | async def test_exhausted_supervisor_contract_failures_settle_the_run(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1376 | async def test_decision_limit_atomically_settles_the_run(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1424 | async def test_known_structured_transport_failure_is_recovered_without_replaying_actions( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1470 | async def test_exact_result_at_max_turns_is_recovered_without_replaying_actions( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1516 | async def test_earlier_grounded_result_is_recovered_after_ungrounded_retry( | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1560 | async def test_decision_budget_is_persistent_across_process_restart(tmp_path: Path) -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_loop.py | 1640 | async def test_restart_settles_a_malformed_trace_without_leaving_an_active_lease( | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 18 | def test_transport_recovery_skips_a_later_incomplete_done_candidate() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 56 | def test_transport_recovery_accepts_only_an_exact_executor_contract() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 110 | def test_executor_cannot_complete_from_an_uncaptured_evidence_claim() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 153 | def test_executor_can_complete_by_exactly_reusing_same_task_evidence() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 202 | def test_executor_cannot_reuse_evidence_from_another_task() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 247 | def test_paraphrased_prior_evidence_degrades_without_creating_an_observation() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 291 | def test_actionful_attempt_cannot_degrade_an_unresolved_prior_evidence_quote() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 338 | def test_whitespace_equivalent_text_is_not_an_exact_evidence_quote() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 379 | def test_crlf_transport_normalization_resolves_to_the_exact_receipt_slice() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 419 | def test_exact_ordered_lines_widen_to_one_contiguous_receipt_span() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 467 | def test_line_span_widening_rejects_reordered_receipt_lines() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 506 | def test_exact_unique_line_envelope_recovers_a_rich_reordered_quote() -> None: | CODE |
| LOW | pentestgpt_agent/tests/test_execution.py | 568 | def test_canonical_execution_fields_have_conservative_size_limits() -> None: | CODE |
| 157 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pentestgpt_legacy/smoke_test.py | 13 | CODE | |
| LOW | pentestgpt_legacy/config.py | 9 | CODE | |
| LOW | pentestgpt_legacy/config.py | 11 | CODE | |
| LOW | pentestgpt_legacy/config.py | 11 | CODE | |
| LOW | pentestgpt_legacy/test_connection.py | 8 | CODE | |
| LOW | pentestgpt_legacy/__init__.py | 9 | CODE | |
| LOW | pentestgpt_legacy/main.py | 10 | CODE | |
| LOW | pentestgpt_legacy/llm/config.py | 9 | CODE | |
| LOW | pentestgpt_legacy/llm/registry.py | 14 | CODE | |
| LOW | pentestgpt_legacy/llm/client.py | 10 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 11 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 12 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 12 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 13 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 13 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 13 | CODE | |
| LOW | pentestgpt_legacy/llm/__init__.py | 13 | CODE | |
| LOW | pentestgpt_legacy/llm/factory.py | 3 | CODE | |
| LOW | pentestgpt_legacy/llm/base.py | 9 | CODE | |
| LOW | pentestgpt_legacy/llm/providers/openai_compatible.py | 12 | CODE | |
| LOW | pentestgpt_legacy/llm/providers/__init__.py | 3 | CODE | |
| LOW | pentestgpt_legacy/llm/providers/__init__.py | 4 | CODE | |
| LOW | pentestgpt_legacy/llm/providers/__init__.py | 5 | CODE | |
| LOW | pentestgpt_legacy/llm/providers/anthropic_provider.py | 8 | CODE | |
| LOW | pentestgpt_legacy/llm/providers/gemini_provider.py | 9 | CODE | |
| LOW | pentestgpt_legacy/utils/pentest_gpt.py | 15 | CODE | |
| LOW | pentestgpt_agent/tests/test_local_benchmark.py | 1 | CODE | |
| LOW | pentestgpt_agent/tests/support/local_target.py | 1 | CODE | |
| LOW | pentestgpt_agent/tests/live/test_local_model.py | 1 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/plan.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trace.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trial.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/execution.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/audit.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/memory.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/identifiers.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/agents.py | 3 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/loop.py | 3 | CODE | |
| LOW | unified_agent/task.py | 3 | CODE | |
| LOW | unified_agent/skills.py | 10 | CODE | |
| LOW | unified_agent/events.py | 3 | CODE | |
| LOW | unified_agent/tools.py | 15 | CODE | |
| LOW | unified_agent/__init__.py | 7 | CODE | |
| LOW | unified_agent/__init__.py | 7 | CODE | |
| LOW | unified_agent/__init__.py | 7 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 8 | CODE | |
| LOW | unified_agent/__init__.py | 21 | CODE | |
| LOW | unified_agent/__init__.py | 21 | CODE | |
| LOW | unified_agent/__init__.py | 21 | CODE | |
| LOW | unified_agent/__init__.py | 21 | CODE | |
| 25 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 63 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 65 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 77 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 79 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 115 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 117 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 131 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 133 | # ============================================================================ | COMMENT |
| MEDIUM | tests/conftest.py | 5 | # ============================================================================= | COMMENT |
| MEDIUM | tests/conftest.py | 7 | # ============================================================================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pentestgpt_legacy/config.py | 22 | __all__ = [ | CODE |
| LOW | pentestgpt_legacy/__init__.py | 11 | __all__ = ["__version__"] | CODE |
| LOW | pentestgpt_legacy/llm/__init__.py | 15 | __all__ = [ | CODE |
| LOW | pentestgpt_legacy/llm/providers/__init__.py | 7 | __all__ = ["AnthropicProvider", "GeminiProvider", "OpenAICompatibleProvider"] | CODE |
| LOW | pentestgpt_agent/tests/support/local_target.py | 94 | __all__ = ["LocalTarget", "local_template_target"] | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/plan.py | 335 | __all__ = [ | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trace.py | 427 | __all__ = [ | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trial.py | 366 | __all__ = ["TrialConfig", "main", "run_trial"] | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/execution.py | 385 | __all__ = [ | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/audit.py | 447 | __all__ = ["audit_run", "main"] | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/memory.py | 986 | __all__ = [ | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/identifiers.py | 18 | __all__ = ["validate_opaque_id"] | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/agents.py | 628 | __all__ = [ | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/loop.py | 314 | __all__ = ["PentestLoop"] | CODE |
| LOW | unified_agent/__init__.py | 41 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/docker/test_container_health.py | 89 | result = self._exec_in_container(running_container, "test -d /workspace && echo ok") | CODE |
| HIGH | tests/docker/test_container_health.py | 125 | running_container, "which nc || which netcat || which ncat" | CODE |
| HIGH | tests/docker/test_container_health.py | 168 | result = self._exec_in_container(running_container, "which claude || echo 'not found'") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | setup.sh | 29 | # Check if Docker is installed | COMMENT |
| LOW⚡ | setup.sh | 36 | # Check if Docker is running | COMMENT |
| LOW⚡ | setup.sh | 45 | # Check if Claude Code is installed (not strictly required since it's in Docker) | COMMENT |
| LOW | fix-workspace-permissions.sh | 14 | # Check if workspace exists | COMMENT |
| LOW | tests/docker/test_container_health.py | 46 | # Check if container is running | COMMENT |
| LOW | scripts/entrypoint.sh | 30 | # Check if template exists | COMMENT |
| LOW | scripts/entrypoint.sh | 61 | # Check if CCR is running by testing the port | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pentestgpt_legacy/smoke_test.py | 54 | except Exception as e: | CODE |
| LOW | pentestgpt_legacy/main.py | 135 | except Exception as e: | CODE |
| LOW | pentestgpt_legacy/utils/pentest_gpt.py | 161 | except Exception as e: | CODE |
| LOW | pentestgpt_legacy/utils/pentest_gpt.py | 425 | except Exception as e: | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trace.py | 257 | except Exception as exc: # provider failures become a durable failed result | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trial.py | 170 | except Exception as exc: | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trial.py | 188 | except Exception: | CODE |
| LOW | pentestgpt_agent/src/pentestgpt_agent/trial.py | 355 | except Exception: | CODE |
| LOW | unified_agent/agent.py | 198 | except Exception as e: | CODE |
| LOW | unified_agent/backends/codex.py | 288 | except Exception as e: # JSON-RPC / transport errors from the SDK | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_agent.py | 20 | def __init__(self, events=None, delay=0.0, fail_with=None, fake_name="fake"): | CODE |
| LOW | tests/test_agent.py | 21 | self.name = fake_name | CODE |
| LOW⚡ | tests/test_agent.py | 82 | backend = FakeBackend(events=GOOD_EVENTS, fake_name="codex") | CODE |
| LOW⚡ | tests/test_agent.py | 162 | backend=FakeBackend(events=GOOD_EVENTS, delay=0.2, fake_name="a"), workspace=tmp_path / "wa" | CODE |
| LOW⚡ | tests/test_agent.py | 165 | backend=FakeBackend(events=GOOD_EVENTS, delay=0.2, fake_name="b"), workspace=tmp_path / "wb" | CODE |
| LOW⚡ | tests/test_agent.py | 178 | backend=FakeBackend(events=GOOD_EVENTS, fake_name="a"), workspace=tmp_path / "wa" | CODE |
| LOW⚡ | tests/test_agent.py | 181 | backend=FakeBackend(events=GOOD_EVENTS, fake_name="b"), workspace=tmp_path / "wb" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pentestgpt_legacy/utils/pentest_gpt.py | 207 | CODE | |
| LOW | pentestgpt_legacy/utils/pentest_gpt.py | 262 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/audit.py | 64 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/memory.py | 431 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/loop.py | 83 | CODE | |
| LOW | pentestgpt_agent/src/pentestgpt_agent/loop.py | 184 | CODE | |
| LOW | unified_agent/backends/codex.py | 133 | CODE | |
| LOW | unified_agent/backends/codex.py | 191 | CODE | |
| LOW | unified_agent/backends/claude_code.py | 129 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pentestgpt_agent/tests/test_episode.py | 64 | CODE | |
| MEDIUM | pentestgpt_agent/tests/test_loop.py | 282 | CODE | |
| MEDIUM | pentestgpt_agent/tests/test_loop.py | 307 | CODE | |
| MEDIUM | pentestgpt_agent/tests/test_trial.py | 139 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | .agents/skills/triage/SKILL.md | 16 | > *This was generated by AI during triage.* | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pentestgpt_legacy/utils/pentest_gpt.py | 81 | # Chunk size for parsing, scaled to the reasoning model's context window. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/skills/diagnosing-bugs/scripts/hitl-loop.template.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/docker-login.sh | 1 | #!/usr/bin/env bash | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …s/skills/diagnosing-bugs/scripts/hitl-loop.template.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | unified_agent/agent.py | 105 | CODE |