Open-source AI penetration testing tool to find and fix your app’s vulnerabilities.
This report presents the forensic synthetic code analysis of usestrix/strix, a Python project with 59,075 GitHub stars. SynthScan v2.0 examined 91,990 lines of code across 425 source files, recording 1579 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 19.2 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1579 distinct pattern matches across 17 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 | strix/interface/update_check.py | 238 | def prompt_update_if_available(console: Console) -> bool: | CODE |
| LOW | strix/interface/utils.py | 60 | def format_vulnerability_report(report: dict[str, Any]) -> Text: # noqa: PLR0915 | CODE |
| LOW | strix/interface/utils.py | 229 | def _build_vulnerability_stats(stats_text: Text, report_state: Any) -> None: | CODE |
| LOW | strix/interface/utils.py | 471 | def _derive_target_label_for_run_name(targets_info: list[dict[str, Any]] | None) -> str: # noqa: PLR0911 | CODE |
| LOW | strix/interface/utils.py | 700 | def _resolve_default_branch_name(repo_path: Path, env: dict[str, str]) -> str | None: | CODE |
| LOW | strix/interface/utils.py | 874 | def build_diff_scope_instruction(scopes: list[RepoDiffScope]) -> str: | CODE |
| LOW | strix/interface/utils.py | 943 | def _should_activate_auto_scope( | CODE |
| LOW | strix/interface/utils.py | 1036 | def resolve_diff_scope_context( | CODE |
| LOW | strix/interface/utils.py | 1474 | def rewrite_localhost_targets(targets_info: list[dict[str, Any]], host_gateway: str) -> None: | CODE |
| LOW | strix/interface/scan_setup.py | 61 | async def preflight_model_connection( | CODE |
| LOW | strix/interface/main.py | 251 | def display_completion_message(args: argparse.Namespace, results_path: Path) -> None: | CODE |
| LOW | strix/interface/main.py | 350 | def _print_model_connection_error(exc: BaseException, model_name: str) -> None: | CODE |
| LOW | strix/interface/auth_cli.py | 206 | def _try_start_callback_server() -> _CallbackServer | None: | CODE |
| LOW | strix/interface/tui/sidecar.py | 86 | def _accept_authenticated_connection( | CODE |
| LOW | strix/interface/tui/sidecar.py | 135 | async def _launch_posix_tui_process( | CODE |
| LOW | strix/interface/tui/sidecar.py | 154 | async def _launch_windows_tui_process( | CODE |
| LOW | strix/interface/tui/live_view.py | 139 | def _hydrate_sdk_session_history(self, run_dir: Path, agent_ids: Any) -> None: | CODE |
| LOW | strix/interface/tui/live_view.py | 231 | def _ingest_raw_response_event(self, agent_id: str, data: Any) -> None: | CODE |
| LOW | strix/interface/tui/live_view.py | 238 | def _ingest_session_history_item( | CODE |
| LOW | strix/interface/tui/live_view.py | 293 | def _record_assistant_message(self, agent_id: str, content: str, *, final: bool) -> None: | CODE |
| LOW | strix/interface/tui/runtime.py | 274 | def _runtime_sync_fingerprint(self) -> str: | CODE |
| LOW | strix/interface/tui/backend/server.py | 398 | async def _send_collection_bootstrap( | CODE |
| LOW | strix/interface/tui/backend/server.py | 424 | async def _send_collection_if_changed(self, name: str) -> None: | CODE |
| LOW | strix/interface/tui/backend/messages.py | 17 | def send_user_message_to_agent( | CODE |
| LOW | strix/interface/tui/backend/projection.py | 91 | def collection_item_projection(item: dict[str, Any]) -> dict[str, Any]: | CODE |
| LOW | …/interface/viewer/frontend/src/lib/local-run-parser.ts | 137 | function emptyVulnerabilityDefaults(): Omit< | CODE |
| LOW | strix/tools/reporting/tool.py | 59 | def _normalize_code_locations( | CODE |
| LOW | strix/tools/reporting/tool.py | 205 | def _validate_analysis_fields( | CODE |
| LOW | strix/tools/reporting/tool.py | 237 | def _validate_fix_verification( | CODE |
| LOW | strix/tools/reporting/tool.py | 446 | async def create_vulnerability_report( | CODE |
| LOW | strix/tools/reporting/tool.py | 940 | def _validate_contextual_cvss( | CODE |
| LOW | strix/tools/reporting/tool.py | 983 | def _resolve_dependency_rating( | CODE |
| LOW | strix/tools/reporting/tool.py | 1001 | def _build_dependency_metadata( | CODE |
| LOW | strix/tools/reporting/tool.py | 1065 | def _build_dependency_evidence( | CODE |
| LOW | strix/tools/proxy/tools.py | 430 | def _format_replay_tool_result(replay: dict[str, Any]) -> str: | CODE |
| LOW | strix/tools/proxy/caido_api.py | 130 | async def list_requests_with_client( | CODE |
| LOW | strix/tools/proxy/caido_api.py | 612 | def _clean_sitemap_request_summary(req: dict[str, Any] | None) -> dict[str, Any] | None: | STRING |
| LOW | strix/tools/proxy/caido_api.py | 692 | async def view_sitemap_entry_with_client( | CODE |
| LOW | strix/tools/threat_model/tools.py | 208 | def hydrate_threat_models_from_disk(state_dir: Path) -> None: | CODE |
| LOW | strix/tools/mcp/client.py | 150 | def _mcp_result_to_tool_output(server: MCPServer, result: Any) -> Any: | CODE |
| LOW | strix/tools/agents_graph/tools.py | 31 | def _render_completion_report( | CODE |
| LOW | strix/core/sessions.py | 159 | async def strip_all_images_from_session(session: Session) -> bool: | CODE |
| LOW | strix/core/runner.py | 134 | def _merge_root_prompt_context( | CODE |
| LOW | strix/core/runner.py | 149 | def _compose_root_instructions_override( | CODE |
| LOW⚡ | strix/core/execution.py | 175 | async def _seed_and_prepare_first_input( | CODE |
| LOW | strix/core/execution.py | 75 | def _structured_provider_refusal(result: Any) -> str | None: | CODE |
| LOW | strix/core/execution.py | 132 | def _is_transient_model_error(exc: BaseException) -> bool: | CODE |
| LOW | strix/core/execution.py | 147 | def _transient_model_retry_delay(attempt: int) -> float: | CODE |
| LOW | strix/core/execution.py | 152 | async def _salvage_stream_to_session( | CODE |
| LOW | strix/core/execution.py | 832 | async def _append_tool_required_message( | CODE |
| LOW | strix/core/execution.py | 924 | async def notify_parent_on_terminal( | CODE |
| LOW | strix/core/execution.py | 966 | async def _notify_root_on_budget_reserve(coordinator: AgentCoordinator) -> None: | CODE |
| LOW | strix/core/agents.py | 140 | async def claim_reserve_notification(self) -> str | None: | CODE |
| LOW | strix/core/agents.py | 386 | async def cancel_descendants_graceful(self, agent_id: str) -> list[str]: | CODE |
| LOW | strix/core/inputs.py | 30 | def _accepts_required_tool_choice(model_name: str | None) -> bool: | CODE |
| LOW⚡ | strix/config/models.py | 64 | def request_timeout_extra_args(timeout_s: float | None) -> dict[str, float] | None: | CODE |
| LOW⚡ | strix/config/models.py | 71 | def _retry_statusless_provider_errors(context: RetryPolicyContext) -> bool: | CODE |
| LOW | strix/config/models.py | 498 | def _create_fallback_provider(self, prefix: str) -> ModelProvider: | CODE |
| LOW | strix/config/models.py | 604 | def configure_sdk_model_defaults(settings: Settings) -> None: | CODE |
| LOW | strix/config/models.py | 625 | def _mirror_api_key_to_provider_env(model_name: str | None, api_key: str) -> None: | CODE |
| 1013 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/cli_args.py | 3 | CODE | |
| LOW | strix/interface/update_check.py | 10 | CODE | |
| LOW | strix/interface/__init__.py | 1 | CODE | |
| LOW | strix/interface/interactive.py | 3 | CODE | |
| LOW | strix/interface/scan_setup.py | 10 | CODE | |
| LOW | strix/interface/auth_cli.py | 8 | CODE | |
| LOW | strix/interface/tui/sidecar.py | 3 | CODE | |
| LOW | strix/interface/tui/live_view.py | 3 | CODE | |
| LOW | strix/interface/tui/__init__.py | 3 | CODE | |
| LOW | strix/interface/tui/runtime.py | 3 | CODE | |
| LOW | strix/interface/tui/history.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/server.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/controller.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/live_view.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/protocol.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/__init__.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/__init__.py | 4 | CODE | |
| LOW | strix/interface/tui/backend/messages.py | 3 | CODE | |
| LOW | strix/interface/tui/backend/projection.py | 3 | CODE | |
| LOW | strix/interface/viewer/auth.py | 12 | CODE | |
| LOW | strix/interface/viewer/server.py | 15 | CODE | |
| LOW | strix/interface/viewer/transcript.py | 3 | CODE | |
| LOW | strix/interface/viewer/report_pdf.py | 14 | CODE | |
| LOW | strix/interface/viewer/__init__.py | 7 | CODE | |
| LOW | strix/interface/viewer/__init__.py | 9 | CODE | |
| LOW | strix/interface/viewer/cli.py | 3 | CODE | |
| LOW | strix/tools/output_store.py | 9 | CODE | |
| LOW | strix/tools/nullish.py | 8 | CODE | |
| LOW | strix/tools/reporting/tool.py | 8 | CODE | |
| LOW | strix/tools/web_search/tool.py | 3 | CODE | |
| LOW | strix/tools/proxy/tools.py | 3 | CODE | |
| LOW | strix/tools/proxy/caido_api.py | 3 | CODE | |
| LOW | strix/tools/threat_model/tools.py | 17 | CODE | |
| LOW | strix/tools/mcp/config.py | 8 | CODE | |
| LOW | strix/tools/mcp/naming.py | 8 | CODE | |
| LOW | strix/tools/mcp/registry.py | 23 | CODE | |
| LOW | strix/tools/mcp/client.py | 15 | CODE | |
| LOW | strix/tools/mcp/session.py | 43 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 3 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 5 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 5 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 5 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 6 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 6 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 6 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 11 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 11 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 11 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 16 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 17 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| LOW | strix/tools/mcp/__init__.py | 18 | CODE | |
| 150 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/cli_args.py | 28 | except Exception: | CODE |
| LOW | strix/interface/cli_args.py | 324 | except Exception as e: | STRING |
| MEDIUM | strix/interface/cli_args.py | 23 | def get_version() -> str: | CODE |
| LOW | strix/interface/update_check.py | 114 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/interface/update_check.py | 133 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/interface/update_check.py | 152 | except Exception: # noqa: BLE001, S110 | CODE |
| LOW | strix/interface/update_check.py | 163 | except Exception: # noqa: BLE001, S110 | CODE |
| LOW | strix/interface/update_check.py | 368 | except Exception: | CODE |
| LOW | strix/interface/update_check.py | 373 | except Exception: | CODE |
| LOW | strix/interface/update_check.py | 415 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM | strix/interface/update_check.py | 97 | def _fetch_latest_version() -> str | None: | CODE |
| MEDIUM | strix/interface/update_check.py | 146 | def _read_cache() -> dict[str, object]: | CODE |
| LOW | strix/interface/cli.py | 180 | except Exception: | CODE |
| LOW | strix/interface/cli.py | 210 | except Exception as e: | CODE |
| LOW | strix/interface/utils.py | 485 | except Exception: | CODE |
| LOW | strix/interface/utils.py | 501 | except Exception: | CODE |
| LOW | strix/interface/utils.py | 513 | except Exception: | CODE |
| LOW | strix/interface/main.py | 246 | except Exception as exc: | CODE |
| LOW | strix/interface/main.py | 464 | except Exception: | CODE |
| LOW | strix/interface/auth_cli.py | 135 | except Exception: # noqa: BLE001 - opening a browser is best-effort | CODE |
| LOW | strix/interface/tui/runtime.py | 131 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 162 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 200 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 299 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 379 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/backend/server.py | 238 | except Exception as exc: # noqa: BLE001 - command failures are protocol results | CODE |
| MEDIUM | strix/interface/tui/backend/server.py | 157 | def _read_loop(self) -> None: | CODE |
| LOW | strix/interface/tui/backend/controller.py | 488 | except Exception: # noqa: BLE001 - viewer startup failures must not crash the TUI | CODE |
| LOW | strix/interface/tui/backend/messages.py | 47 | except Exception: | CODE |
| LOW | strix/interface/tui/backend/messages.py | 57 | except Exception: | CODE |
| LOW | strix/interface/viewer/server.py | 166 | except Exception: | CODE |
| LOW | strix/interface/viewer/server.py | 192 | except Exception: | CODE |
| LOW | strix/interface/viewer/server.py | 612 | except Exception: # noqa: BLE001 - launching the browser is best-effort | CODE |
| LOW | strix/tools/reporting/tool.py | 144 | except Exception as exc: | CODE |
| LOW | strix/tools/web_search/tool.py | 107 | except Exception: | CODE |
| LOW | strix/tools/proxy/tools.py | 58 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 77 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 239 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 321 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 426 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 494 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 522 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 652 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/caido_api.py | 256 | except Exception: # noqa: BLE001 - tolerate any malformed raw bytes; None signals "unparseable" to the caller. | CODE |
| LOW | strix/tools/mcp/session.py | 211 | except Exception: | CODE |
| LOW | strix/tools/mcp/session.py | 364 | except Exception: | CODE |
| LOW | strix/tools/mcp/session.py | 443 | except Exception: # noqa: BLE001 - any call failure is treated as a session death | CODE |
| LOW | strix/tools/mcp/session.py | 463 | except Exception: # noqa: BLE001 - any retry failure means the connection is dead | CODE |
| LOW | strix/tools/mcp/session.py | 484 | except Exception: | CODE |
| LOW | strix/tools/todo/tools.py | 99 | except Exception: | CODE |
| LOW | strix/tools/notes/tools.py | 107 | except Exception: | CODE |
| LOW | strix/tools/agents_graph/tools.py | 506 | except Exception as e: | CODE |
| LOW | strix/llm/context_budget.py | 42 | except Exception: # noqa: BLE001 - unmapped models raise; caller falls back. | CODE |
| LOW | strix/llm/context_budget.py | 88 | except Exception: # noqa: BLE001 - tokenizer may be unavailable for some models. | CODE |
| LOW | strix/llm/warmup.py | 63 | except Exception: # noqa: BLE001 - a failed warm-up must never fail the run. | CODE |
| LOW | strix/llm/compaction.py | 329 | except Exception: | CODE |
| LOW | strix/core/sessions.py | 118 | except Exception: | CODE |
| LOW | strix/core/sessions.py | 151 | except Exception: | CODE |
| LOW | strix/core/runner.py | 333 | except Exception: | CODE |
| LOW | strix/core/runner.py | 448 | except Exception: | CODE |
| 39 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 100 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 102 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 147 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 149 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 342 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 344 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 372 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 374 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 394 | # ============================================================================ | STRING |
| MEDIUM | pyproject.toml | 396 | # ============================================================================ | STRING |
| MEDIUM | pyproject.toml | 409 | # ============================================================================ | STRING |
| MEDIUM | pyproject.toml | 411 | # ============================================================================ | STRING |
| MEDIUM⚡ | strix/report/sarif.py | 382 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | strix/report/sarif.py | 384 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | strix/report/sarif.py | 1150 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | strix/report/sarif.py | 1152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 424 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 426 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 641 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 643 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 750 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 752 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 857 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 859 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 1113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 1115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 1168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | strix/report/sarif.py | 1170 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/update_check.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/__init__.py | 4 | __all__ = ["main"] | CODE |
| LOW | strix/interface/cli.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/cli.py | 175 | def update_status() -> None: | CODE |
| LOW | strix/interface/utils.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/utils.py | 1638 | def update_layer_status(layers_info: dict[str, str], layer_id: str, layer_status: str) -> None: | CODE |
| LOW | strix/interface/interactive.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/interactive.py | 35 | __all__ = [ | CODE |
| LOW | strix/interface/environment.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/scan_setup.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/main.py | 63 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/auth_cli.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/auth_cli.py | 419 | __all__ = ["run_auth"] | CODE |
| LOW | strix/interface/tui/live_view.py | 48 | def set_user_instruction(self, text: str | None, *, timestamp: str | None = None) -> None: | CODE |
| LOW | strix/interface/tui/__init__.py | 6 | __all__ = ["TuiLiveView"] | CODE |
| LOW | strix/interface/tui/runtime.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/tui/history.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/tui/backend/server.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/tui/backend/controller.py | 118 | def set_change_callback(self, callback: ChangeCallback) -> None: | CODE |
| LOW | strix/interface/tui/backend/controller.py | 136 | def set_mcp_connections(self, roster: list[dict[str, Any]]) -> None: | CODE |
| LOW | strix/interface/tui/backend/__init__.py | 7 | __all__ = ["TuiBackendServer", "TuiController"] | CODE |
| LOW | strix/interface/tui/backend/messages.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/viewer/auth.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/viewer/auth.py | 251 | __all__ = [ | CODE |
| LOW | strix/interface/viewer/server.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/viewer/server.py | 616 | __all__ = ["authorized_url", "bundle_dir", "bundle_is_built", "serve"] | CODE |
| LOW | strix/interface/viewer/transcript.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/viewer/transcript.py | 97 | __all__ = [ | CODE |
| LOW | strix/interface/viewer/report_pdf.py | 667 | __all__ = [ | CODE |
| LOW | strix/interface/viewer/__init__.py | 12 | __all__ = ["serve"] | CODE |
| LOW | strix/interface/viewer/cli.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/viewer/cli.py | 146 | __all__ = ["run_view"] | CODE |
| LOW | strix/tools/output_store.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/reporting/tool.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/web_search/tool.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/proxy/tools.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/proxy/caido_api.py | 753 | __all__ = [ | CODE |
| LOW | strix/tools/threat_model/tools.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/mcp/client.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/mcp/session.py | 67 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/mcp/session.py | 188 | def set_on_dead(self, callback: Callable[[], None] | None) -> None: | CODE |
| LOW | strix/tools/mcp/__init__.py | 34 | __all__ = [ | CODE |
| LOW | strix/tools/mcp/loader.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/todo/tools.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/notes/tools.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/finish/tool.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/respond/__init__.py | 6 | __all__ = ["respond_to_user"] | CODE |
| LOW | strix/tools/agents_graph/tools.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/context_budget.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/warmup.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/compaction.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/sessions.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/runner.py | 68 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/hooks.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/execution.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/agents.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/agents.py | 67 | def set_snapshot_path(self, path: Path) -> None: | CODE |
| LOW | strix/core/agents.py | 92 | def set_budget_extender(self, extend: Callable[[], None]) -> None: | CODE |
| LOW⚡ | strix/config/models.py | 61 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/config/codex.py | 36 | logger = logging.getLogger(__name__) | CODE |
| 27 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/cli_args.py | 54 | CODE | |
| LOW | strix/interface/update_check.py | 119 | CODE | |
| LOW | strix/interface/update_check.py | 315 | CODE | |
| LOW | strix/interface/cli.py | 41 | CODE | |
| LOW | strix/interface/utils.py | 60 | CODE | |
| LOW | strix/interface/utils.py | 874 | CODE | |
| LOW | strix/interface/utils.py | 1474 | CODE | |
| LOW | strix/interface/utils.py | 1638 | CODE | |
| LOW | strix/interface/utils.py | 1651 | CODE | |
| LOW | strix/interface/environment.py | 22 | CODE | |
| LOW | strix/interface/tui/runtime.py | 223 | CODE | |
| LOW | strix/interface/viewer/server.py | 147 | CODE | |
| LOW | strix/interface/viewer/server.py | 171 | CODE | |
| LOW | strix/interface/viewer/server.py | 237 | CODE | |
| LOW | strix/interface/viewer/transcript.py | 63 | CODE | |
| LOW | strix/tools/reporting/tool.py | 59 | CODE | |
| LOW | strix/tools/reporting/tool.py | 89 | CODE | |
| LOW | strix/tools/proxy/tools.py | 110 | CODE | |
| LOW | strix/tools/proxy/caido_api.py | 294 | CODE | |
| LOW | strix/tools/proxy/caido_api.py | 510 | CODE | |
| LOW | strix/tools/mcp/session.py | 234 | CODE | |
| LOW | strix/tools/mcp/session.py | 378 | CODE | |
| LOW | strix/tools/notes/tools.py | 290 | CODE | |
| LOW | strix/llm/compaction.py | 146 | CODE | |
| LOW | strix/core/runner.py | 182 | CODE | |
| LOW | strix/core/execution.py | 643 | CODE | |
| LOW | strix/core/inputs.py | 108 | CODE | |
| LOW | strix/config/models.py | 953 | CODE | |
| LOW | strix/config/tool_call_ids.py | 37 | CODE | |
| LOW | strix/config/loader.py | 56 | CODE | |
| LOW | strix/config/loader.py | 90 | CODE | |
| LOW | strix/runtime/caido_bootstrap.py | 32 | CODE | |
| LOW | strix/agents/factory.py | 343 | CODE | |
| LOW | strix/report/writer.py | 194 | CODE | |
| LOW | strix/skills/__init__.py | 60 | CODE | |
| LOW | strix/telemetry/logging.py | 119 | CODE | |
| LOW | strix/telemetry/logging.py | 174 | CODE | |
| LOW | tests/test_tui_backend_server.py | 105 | CODE | |
| LOW | tests/test_tui_backend_server.py | 396 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 420 | `,f="/",p="*",g="",b="comment",y="declaration";function _(S,w){if(typeof S!="string")throw new TypeError("First argument | CODE |
| CRITICAL⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 447 | `))}function h(y,_,N,S){const w=N.enter("tableCell"),C=N.enter("phrasing"),E=N.containerPhrasing(y,{...S,before:o,after: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 86 | export LLM_API_KEY="your-api-key" | CODE |
| HIGH | README.md | 298 | export LLM_API_KEY="your-api-key" | CODE |
| HIGH | README.md | 302 | export PERPLEXITY_API_KEY="your-api-key" # for search capabilities | CODE |
| HIGH | CONTRIBUTING.md | 35 | export LLM_API_KEY="your-api-key" | CODE |
| HIGH | scripts/install.sh | 339 | echo -e " ${MUTED}export LLM_API_KEY='your-api-key'${NC}" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 419 | */const LT=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 | COMMENT |
| LOW⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 449 | `,1;if(al>1e5&&al>Re.index*3)throw new Error("potential infinite loop, way more iterations than matches");return xt+=Ye, | CODE |
| LOW⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 450 | `},_]}}return Jh=s,Jh}var em,_v;function wj(){if(_v)return em;_v=1;const e=p=>({IMPORTANT:{scope:"meta",begin:"!importan | CODE |
| LOW⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 451 | ]`,N={scope:"string",variants:[g,p,b,y]},S={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[ | CODE |
| LOW | strix/skills/tooling/agent_browser.md | 201 | agent-browser fill @e3 "user@example.com" | CODE |
| LOW⚡ | tests/test_viewer_auth.py | 33 | auth.write_auth(email="user@example.com", token="tok-123", verified_at=_iso(timedelta(days=30))) # nosec B106 | CODE |
| LOW⚡ | tests/test_viewer_auth.py | 37 | assert record["email"] == "user@example.com" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | strix/interface/viewer/cli.py | 65 | "Build it with: [cyan]cd strix/interface/viewer/frontend && npm ci && npm run build[/]" | CODE |
| HIGH | tests/test_viewer.py | 180 | session_id text not null, | STRING |
| HIGH | tests/test_viewer.py | 181 | message_data text not null, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 165 | # Enable comprehensive rule sets | COMMENT |
| MEDIUM | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 49 | `).replace(WS,"")}function b0(n,i){return i=x0(i),x0(n)===i}function Et(n,i,l,u,x,v){switch(l){case"children":typeof u== | CODE |
| MEDIUM⚡ | strix/interface/viewer/static/assets/index-Bpn8GiSb.js | 419 | */const LT=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/tui/live_view.py | 441 | COMMENT | |
| LOW | strix/interface/tui/internal/app/view.go | 641 | b.WriteString(w.Render("v" + appVersion)) | COMMENT |
| LOW | strix/interface/tui/internal/render/mcp.go | 1 | package render | COMMENT |
| LOW | strix/interface/viewer/server.py | 121 | assets_dir: Path, | COMMENT |
| LOW | strix/core/runner.py | 421 | # the prompt context unchanged. | COMMENT |
| LOW | strix/runtime/docker_client.py | 281 | # Best-effort kill: NotFound/APIError cover a gone or unhappy | COMMENT |
| LOW | strix/report/coverage.py | 61 | _INCOMPLETE_RUN_STATUSES = frozenset({"failed", "interrupted", "stopped", "running"}) | COMMENT |
| LOW | strix/report/sarif.py | 101 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/tools/reporting/tool.py | 446 | CODE | |
| LOW | strix/tools/reporting/tool.py | 1001 | CODE | |
| LOW | strix/tools/reporting/tool.py | 1101 | CODE | |
| LOW | strix/tools/reporting/tool.py | 1297 | CODE | |
| LOW | strix/core/runner.py | 182 | CODE | |
| LOW | strix/agents/factory.py | 644 | CODE | |
| LOW | strix/report/state.py | 233 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | strix/skills/vulnerabilities/llm_prompt_injection.md | 111 | ### LlamaIndex / RAG Pipelines | COMMENT |
| MEDIUM | strix/skills/vulnerabilities/llm_prompt_injection.md | 130 | ### RAG Poisoning | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | strix/tools/proxy/tools.py | 119 | List captured HTTP requests from the Caido proxy with HTTPQL filtering. Caido HTTPQL syntax (operators differ by fi | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | strix/tools/proxy/caido_api.py | 342 | # Create an empty replay session, then dispatch via ``send()``. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/skills/technologies/grafana_prometheus.md | 89 | # Step 1: create/edit a data source with an attacker-chosen base URL, e.g. | COMMENT |
| LOW | strix/skills/technologies/grafana_prometheus.md | 92 | # Step 2: relay through THAT data source's id (path appended to its base URL): | COMMENT |