Open-source AI penetration testing tool to find and fix your app’s vulnerabilities.
This report summarizes scanner evidence for usestrix/strix, a Python project with 67,766 GitHub stars. SynthScan examined 123,942 lines of code across 487 source files, recording 2361 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 20.2 (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? 1815 finding(s).
Are imports declared and package/API names verified? 287 finding(s).
Are wrappers, guards, and repeated structures necessary? 2004 finding(s).
Which changes need focused human review? 2361 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 2361 distinct pattern matches across 18 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 | strix/interface/platform_cli.py | 618 | def _revoke_replaced_legacy_session( | CODE |
| LOW | strix/interface/update_check.py | 238 | def prompt_update_if_available(console: Console) -> bool: | CODE |
| LOW | strix/interface/cli.py | 125 | def display_vulnerability_deleted(report: dict[str, Any]) -> None: | CODE |
| LOW | strix/interface/utils.py | 61 | def format_vulnerability_report(report: dict[str, Any]) -> Text: # noqa: PLR0915 | CODE |
| LOW | strix/interface/utils.py | 230 | def _build_vulnerability_stats(stats_text: Text, report_state: Any) -> None: | CODE |
| LOW | strix/interface/utils.py | 472 | def _derive_target_label_for_run_name(targets_info: list[dict[str, Any]] | None) -> str: # noqa: PLR0911 | CODE |
| LOW | strix/interface/utils.py | 701 | def _resolve_default_branch_name(repo_path: Path, env: dict[str, str]) -> str | None: | CODE |
| LOW | strix/interface/utils.py | 875 | def build_diff_scope_instruction(scopes: list[RepoDiffScope]) -> str: | CODE |
| LOW | strix/interface/utils.py | 944 | def _should_activate_auto_scope( | CODE |
| LOW | strix/interface/utils.py | 1037 | def resolve_diff_scope_context( | CODE |
| LOW | strix/interface/utils.py | 1476 | def rewrite_localhost_targets(targets_info: list[dict[str, Any]], host_gateway: str) -> None: | CODE |
| LOW | strix/interface/scan_setup.py | 83 | def check_header_safe_credentials(settings: Settings) -> None: | CODE |
| LOW | strix/interface/scan_setup.py | 103 | async def preflight_model_connection( | CODE |
| LOW | strix/interface/main.py | 186 | def display_completion_message(args: argparse.Namespace, results_path: Path) -> None: | CODE |
| LOW | strix/interface/main.py | 314 | def _print_model_connection_error(exc: BaseException) -> 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 | 141 | def _hydrate_sdk_session_history(self, run_dir: Path, agent_ids: Any) -> None: | CODE |
| LOW | strix/interface/tui/live_view.py | 233 | def _ingest_raw_response_event(self, agent_id: str, data: Any) -> None: | CODE |
| LOW | strix/interface/tui/live_view.py | 240 | def _ingest_session_history_item( | CODE |
| LOW | strix/interface/tui/live_view.py | 295 | def _record_assistant_message(self, agent_id: str, content: str, *, final: bool) -> None: | CODE |
| LOW | strix/interface/tui/runtime.py | 333 | 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/interface/cloud/runner.py | 244 | def _argv_uses_raw_binary_stdout(cmd: Cmd, argv: list[str]) -> bool: | CODE |
| LOW | strix/interface/cloud/runner.py | 276 | def _request_with_idempotency( | CODE |
| LOW | strix/interface/cloud/runner.py | 310 | def _idempotency_response_is_retryable(response: requests.Response) -> bool: | CODE |
| LOW | strix/interface/cloud/runner.py | 322 | def _scan_rejection_is_definitive(response: requests.Response) -> bool: | CODE |
| LOW | strix/interface/cloud/runner.py | 487 | def _set_default_scan_engagement(body: dict[str, Any], *, has_local_source: bool = False) -> None: | CODE |
| LOW | strix/interface/cloud/runner.py | 789 | def _interrupted_scan_launch_error(idempotency_key: str | None = None) -> http.CloudError: | CODE |
| LOW | strix/interface/cloud/runner.py | 808 | def _ambiguous_scan_launch_error( | CODE |
| LOW | strix/interface/cloud/runner.py | 840 | def _attach_idempotency_recovery(payload: dict[str, Any], idempotency_key: str | None) -> None: | CODE |
| LOW | strix/interface/cloud/runner.py | 1067 | def _validated_operation_result(result: Any, cmd: Cmd) -> Any: | CODE |
| LOW | strix/interface/cloud/billing.py | 531 | def _final_spend_request_status(stdout: str) -> str | None: | CODE |
| LOW | strix/interface/cloud/billing.py | 600 | def _link_wallet_authenticated(npx: str) -> bool: | CODE |
| LOW | strix/interface/cloud/render.py | 1039 | def _supply_chain_finding_rows(records: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | strix/interface/cloud/render.py | 1291 | def _vulnerability_history_rows(records: list[dict[str, Any]]) -> list[dict[str, Any]]: | CODE |
| LOW | strix/interface/cloud/render.py | 1425 | def _print_copyable_selectors( | CODE |
| LOW | strix/interface/cloud/render.py | 1557 | def _print_supply_chain_summary(console: Console, data: dict[str, Any]) -> None: | CODE |
| LOW | strix/interface/cloud/render.py | 1579 | def _supply_chain_repository_rows(data: dict[str, Any]) -> list[dict[str, Any]]: | CODE |
| LOW⚡ | strix/interface/cloud/render.py | 1605 | def _supply_chain_risk_summary(summary: dict[str, Any]) -> str: | CODE |
| LOW⚡ | strix/interface/cloud/render.py | 1615 | def _supply_chain_severity_summary(value: Any) -> str: | CODE |
| LOW⚡ | strix/interface/cloud/render.py | 1623 | def _supply_chain_scan_summary(value: Any) -> str: | CODE |
| LOW⚡ | strix/interface/cloud/render.py | 1631 | def _supply_chain_policy_summary(value: Any) -> str: | CODE |
| LOW | strix/interface/cloud/http.py | 140 | def _validate_stored_token_origin(record: dict[str, Any]) -> None: | CODE |
| LOW | strix/interface/cloud/source_scan.py | 206 | def _validate_source_digest_approval(args: argparse.Namespace, bundle: SourceBundle) -> str | None: | CODE |
| LOW | strix/interface/cloud/source_scan.py | 277 | def _validate_completed_upload(completed: Any, *, expected_id: str) -> None: | CODE |
| LOW | strix/interface/cloud/source_scan.py | 322 | def _interrupted_source_upload_error( | CODE |
| LOW | strix/interface/cloud/source_scan.py | 342 | def _retained_source_upload_error( | CODE |
| LOW | strix/interface/cloud/source_scan.py | 386 | def _attach_idempotency_recovery(payload: dict[str, Any], idempotency_key: str | None) -> None: | CODE |
| LOW | strix/interface/cloud/workspaces.py | 231 | def _workspace_switch_unknown(detail: str) -> http.CloudError: | CODE |
| LOW | strix/tools/reporting/tool.py | 64 | def _normalize_code_locations( | CODE |
| LOW | strix/tools/reporting/tool.py | 183 | def _normalize_http_exchange_ids(raw: Any) -> tuple[list[str] | None, list[str]]: | CODE |
| LOW | strix/tools/reporting/tool.py | 231 | async def _verify_http_exchange_ids( | CODE |
| LOW | strix/tools/reporting/tool.py | 303 | def _validate_analysis_fields( | CODE |
| 1675 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/platform_cli.py | 9 | CODE | |
| LOW | strix/interface/cli_args.py | 3 | CODE | |
| LOW | strix/interface/url_safety.py | 3 | CODE | |
| LOW | strix/interface/update_check.py | 10 | CODE | |
| LOW | strix/interface/__init__.py | 1 | CODE | |
| LOW | strix/interface/resume_picker.py | 8 | CODE | |
| LOW | strix/interface/completions.py | 3 | CODE | |
| LOW | strix/interface/interactive.py | 3 | CODE | |
| LOW | strix/interface/scan_setup.py | 10 | CODE | |
| LOW | strix/interface/terminal_text.py | 3 | CODE | |
| LOW | strix/interface/auth_cli.py | 8 | CODE | |
| LOW | strix/interface/platform_identity.py | 3 | 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/interface/cloud/payment_proxy.py | 9 | CODE | |
| LOW | strix/interface/cloud/runner.py | 7 | CODE | |
| LOW | strix/interface/cloud/billing.py | 3 | CODE | |
| LOW | strix/interface/cloud/render.py | 3 | CODE | |
| LOW | strix/interface/cloud/arguments.py | 3 | CODE | |
| LOW | strix/interface/cloud/session.py | 3 | CODE | |
| LOW | strix/interface/cloud/__init__.py | 9 | CODE | |
| LOW | strix/interface/cloud/spec.py | 8 | CODE | |
| LOW | strix/interface/cloud/http.py | 3 | CODE | |
| LOW | strix/interface/cloud/source_scan.py | 3 | CODE | |
| LOW | strix/interface/cloud/source_upload.py | 3 | CODE | |
| LOW | strix/interface/cloud/workspaces.py | 9 | 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 | 46 | 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 | |
| 207 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/cli_args.py | 33 | except Exception: | CODE |
| LOW | strix/interface/cli_args.py | 363 | except Exception as e: | STRING |
| MEDIUM | strix/interface/cli_args.py | 28 | 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 | 206 | except Exception: | CODE |
| LOW | strix/interface/cli.py | 236 | except Exception as e: | CODE |
| LOW | strix/interface/utils.py | 486 | except Exception: | CODE |
| LOW | strix/interface/utils.py | 502 | except Exception: | CODE |
| LOW | strix/interface/utils.py | 514 | except Exception: | CODE |
| LOW | strix/interface/main.py | 181 | except Exception as exc: | CODE |
| LOW | strix/interface/main.py | 520 | except Exception as exc: | 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 | 138 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 153 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 202 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 241 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 360 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/runtime.py | 440 | 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 | 364 | except Exception as exc: | CODE |
| LOW | strix/interface/tui/backend/controller.py | 490 | 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 | 149 | except Exception as exc: | CODE |
| LOW | strix/tools/reporting/tool.py | 248 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/tools/reporting/tool.py | 663 | except Exception as e: | CODE |
| LOW | strix/tools/reporting/tool.py | 739 | except Exception as e: | CODE |
| LOW | strix/tools/reporting/tool.py | 940 | except Exception as e: | CODE |
| LOW | strix/tools/reporting/tool.py | 2061 | except Exception as e: | CODE |
| LOW | strix/tools/web_search/tool.py | 222 | except Exception: | CODE |
| LOW | strix/tools/proxy/tools.py | 59 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 103 | except Exception: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 265 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 347 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 452 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 520 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 548 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | strix/tools/proxy/tools.py | 678 | 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 | 277 | 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 | 586 | 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 | 38 | 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/llm/request_log.py | 232 | except Exception: | CODE |
| 52 more matches not shown… | ||||
| 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 | 201 | def update_status() -> None: | CODE |
| LOW | strix/interface/utils.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/utils.py | 1642 | 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 | 42 | __all__ = [ | CODE |
| LOW | strix/interface/environment.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/scan_setup.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/interface/main.py | 60 | 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 | 49 | 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 | 119 | def set_change_callback(self, callback: ChangeCallback) -> None: | CODE |
| LOW | strix/interface/tui/backend/controller.py | 137 | 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 | 700 | __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 | 158 | __all__ = ["run_view"] | CODE |
| LOW | strix/interface/cloud/runner.py | 487 | def _set_default_scan_engagement(body: dict[str, Any], *, has_local_source: bool = False) -> None: | CODE |
| LOW | strix/tools/output_store.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/reporting/tool.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/web_search/tool.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/proxy/tools.py | 22 | 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/registry.py | 133 | def set_status_sink(self, sink: Callable[[], None] | None) -> None: | CODE |
| LOW | strix/tools/mcp/registry.py | 138 | def _set_state(self, state: McpConnectionState) -> None: | CODE |
| LOW | strix/tools/mcp/registry.py | 428 | def set_status_sink(self, sink: Callable[[], None] | None) -> None: | CODE |
| LOW | strix/tools/mcp/client.py | 59 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/mcp/session.py | 78 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/mcp/session.py | 243 | def set_on_dead(self, callback: Callable[[], None] | None) -> None: | CODE |
| LOW | strix/tools/mcp/__init__.py | 43 | __all__ = [ | CODE |
| LOW | strix/tools/mcp/loader.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/tools/wait_for_user/__init__.py | 6 | __all__ = ["wait_for_user"] | 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/agents_graph/tools.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/context_budget.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/warmup.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/compaction.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/request_log.py | 62 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/llm/request_log.py | 146 | def set_retry_attempt(attempt: int) -> None: | CODE |
| LOW | strix/llm/request_log.py | 1430 | __all__ = [ | CODE |
| LOW | strix/core/sessions.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | strix/core/runner.py | 71 | logger = logging.getLogger(__name__) | CODE |
| 40 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 99 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 101 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 146 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 148 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 346 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 348 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 376 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 378 | # ============================================================================ | COMMENT |
| MEDIUM | pyproject.toml | 398 | # ============================================================================ | STRING |
| MEDIUM | pyproject.toml | 400 | # ============================================================================ | STRING |
| MEDIUM | pyproject.toml | 413 | # ============================================================================ | STRING |
| MEDIUM | pyproject.toml | 415 | # ============================================================================ | 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 |
|---|---|---|---|---|
| HIGH | strix/interface/url_safety.py | 41 | except ValueError: | CODE |
| HIGH | strix/interface/update_check.py | 152 | except Exception: # noqa: BLE001, S110 | CODE |
| HIGH | strix/interface/update_check.py | 163 | except Exception: # noqa: BLE001, S110 | CODE |
| HIGH | strix/interface/utils.py | 1178 | except ValueError: | CODE |
| HIGH | strix/interface/utils.py | 1470 | except ValueError: | CODE |
| HIGH | strix/interface/platform_identity.py | 31 | except (OSError, json.JSONDecodeError): | CODE |
| HIGH | strix/interface/viewer/auth.py | 79 | except ValueError: | CODE |
| HIGH | strix/interface/cloud/payment_proxy.py | 83 | except ValueError: | CODE |
| HIGH | strix/interface/cloud/http.py | 116 | except CloudError: | CODE |
| HIGH | strix/interface/cloud/http.py | 242 | except ValueError: | CODE |
| HIGH | strix/tools/mcp/failures.py | 54 | except ValueError: | CODE |
| HIGH | strix/utils/secret_files.py | 41 | except FileNotFoundError: | CODE |
| HIGH | strix/report/sarif.py | 1133 | except (TypeError, ValueError): | CODE |
| HIGH | strix/report/writer.py | 95 | except ClassNotFound: | CODE |
| HIGH | strix/telemetry/_common.py | 44 | except Exception: # noqa: BLE001, S110 | CODE |
| HIGH | strix/telemetry/posthog.py | 119 | except (TypeError, ValueError, AttributeError): | CODE |
| HIGH | strix/telemetry/scarf.py | 122 | except (TypeError, ValueError, AttributeError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | strix/interface/cli_args.py | 59 | 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 | 61 | CODE | |
| LOW | strix/interface/utils.py | 875 | CODE | |
| LOW | strix/interface/utils.py | 1476 | CODE | |
| LOW | strix/interface/utils.py | 1642 | CODE | |
| LOW | strix/interface/utils.py | 1655 | CODE | |
| LOW | strix/interface/environment.py | 34 | CODE | |
| LOW | strix/interface/tui/runtime.py | 279 | 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/interface/cloud/runner.py | 333 | CODE | |
| LOW | strix/interface/cloud/runner.py | 908 | CODE | |
| LOW | strix/interface/cloud/runner.py | 950 | CODE | |
| LOW | strix/interface/cloud/billing.py | 287 | CODE | |
| LOW | strix/interface/cloud/render.py | 716 | CODE | |
| LOW | strix/interface/cloud/render.py | 795 | CODE | |
| LOW | strix/interface/cloud/render.py | 936 | CODE | |
| LOW | strix/interface/cloud/render.py | 978 | CODE | |
| LOW | strix/interface/cloud/render.py | 1291 | CODE | |
| LOW | strix/interface/cloud/http.py | 214 | CODE | |
| LOW | strix/interface/cloud/source_upload.py | 369 | CODE | |
| LOW | strix/interface/cloud/source_upload.py | 434 | CODE | |
| LOW | strix/interface/cloud/source_upload.py | 588 | CODE | |
| LOW | strix/tools/reporting/tool.py | 64 | CODE | |
| LOW | strix/tools/reporting/tool.py | 94 | CODE | |
| LOW | strix/tools/proxy/tools.py | 136 | 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 | 300 | CODE | |
| LOW | strix/tools/mcp/session.py | 495 | CODE | |
| LOW | strix/tools/mcp/failures.py | 65 | CODE | |
| LOW | strix/tools/mcp/agent_tools.py | 142 | CODE | |
| LOW | strix/tools/notes/tools.py | 290 | CODE | |
| LOW | strix/llm/compaction.py | 146 | CODE | |
| LOW | strix/core/runner.py | 200 | CODE | |
| LOW | strix/core/execution.py | 755 | CODE | |
| LOW | strix/core/inputs.py | 108 | CODE | |
| LOW | strix/config/models.py | 1067 | CODE | |
| LOW | strix/config/tool_call_ids.py | 48 | CODE | |
| LOW | strix/config/loader.py | 106 | CODE | |
| LOW | strix/runtime/caido_bootstrap.py | 32 | CODE | |
| LOW | strix/agents/factory.py | 351 | CODE | |
| LOW | strix/report/writer.py | 223 | CODE | |
| LOW | strix/skills/__init__.py | 67 | CODE | |
| LOW | strix/telemetry/logging.py | 161 | CODE | |
| LOW | strix/telemetry/logging.py | 203 | CODE | |
| LOW | tests/test_tui_backend_server.py | 105 | CODE | |
| LOW | tests/test_tui_backend_server.py | 398 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | strix/interface/viewer/static/assets/index-B1JzV4Vu.js | 425 | `,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-B1JzV4Vu.js | 452 | `))}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 | 88 | export LLM_API_KEY="your-api-key" | CODE |
| HIGH | README.md | 288 | export LLM_API_KEY="your-api-key" | 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-B1JzV4Vu.js | 424 | */const UT=[["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-B1JzV4Vu.js | 454 | `,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-B1JzV4Vu.js | 455 | `},_]}}return em=s,em}var tm,Ev;function kj(){if(Ev)return tm;Ev=1;const e=p=>({IMPORTANT:{scope:"meta",begin:"!importan | CODE |
| LOW⚡ | strix/interface/viewer/static/assets/index-B1JzV4Vu.js | 456 | ]`,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 | 202 | agent-browser fill @e3 "user@example.com" | CODE |
| LOW | tests/test_cloud_cli.py | 2317 | "username": "admin@example.com", | CODE |
| LOW | tests/test_cloud_cli.py | 2330 | "admin@example.com", | CODE |
| LOW | tests/test_cloud_cli.py | 2736 | "username": "admin@example.com", | CODE |
| LOW | tests/test_cloud_cli.py | 3469 | "username": "admin@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 | 188 | session_id text not null, | STRING |
| HIGH | tests/test_viewer.py | 189 | message_data text not null, | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 164 | # Enable comprehensive rule sets | COMMENT |
| MEDIUM | strix/interface/viewer/static/assets/index-B1JzV4Vu.js | 49 | `).replace(nk,"")}function v0(n,i){return i=y0(i),y0(n)===i}function Et(n,i,l,u,x,v){switch(l){case"children":typeof u== | CODE |
| MEDIUM⚡ | strix/interface/viewer/static/assets/index-B1JzV4Vu.js | 424 | */const UT=[["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 | def _session_message_text(item: dict[str, Any]) -> str: | COMMENT |
| LOW | strix/interface/tui/internal/app/view.go | 381 | // inherit an unreadable foreground from the user's terminal profile. | COMMENT |
| LOW | strix/interface/tui/internal/app/view.go | 701 | b.WriteString(lipgloss.NewStyle().Bold(true).Foreground(white).Render("Caido: ") + w.Render(caido)) | 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/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 | 982 | CODE | |
| LOW | strix/tools/reporting/tool.py | 1464 | CODE | |
| LOW | strix/tools/reporting/tool.py | 1786 | CODE | |
| LOW | strix/tools/reporting/tool.py | 1886 | CODE | |
| LOW | strix/tools/reporting/tool.py | 2088 | CODE | |
| LOW | strix/core/runner.py | 200 | CODE | |
| LOW | strix/agents/factory.py | 663 | CODE | |
| LOW | strix/agents/factory.py | 757 | CODE | |
| LOW | strix/agents/prompt.py | 78 | CODE | |
| LOW | strix/report/state.py | 330 | 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 | 145 | 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 | 96 | # Step 1: create/edit a data source with an attacker-chosen base URL, e.g. | COMMENT |
| LOW | strix/skills/technologies/grafana_prometheus.md | 99 | # Step 2: relay through THAT data source's id (path appended to its base URL): | COMMENT |