Automated Penetration Testing Agentic Framework Powered by Large Language Models
This report summarizes scanner evidence for GreyDGL/PentestGPT, a Python project with 15,889 GitHub stars. SynthScan examined 20,592 lines of code across 146 source files, recording 375 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 21.8 (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? 239 finding(s).
Are imports declared and package/API names verified? 95 finding(s).
Are wrappers, guards, and repeated structures necessary? 259 finding(s).
Which changes need focused human review? 375 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 375 distinct pattern matches across 16 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 | 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 |
|---|---|---|---|---|
| HIGH | pentestgpt_agent/src/pentestgpt_agent/loop.py | 218 | except AgentContractError: | CODE |
| HIGH | pentestgpt_agent/src/pentestgpt_agent/loop.py | 242 | except ExecutionValidationError: | 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 |