🧩 FrontierAgent, our agent framework, open-sourced alongside it — native command-line TUI, ReAct and Agent Team modes, one command on macOS and Linux, no preinstall, no hard Docker dependency.
This report summarizes scanner evidence for ApodexAI/FrontierAgent, a Python project with 5,223 GitHub stars. SynthScan examined 161,706 lines of code across 719 source files, recording 4550 pattern matches distributed across 22 syntactic categories. The legacy adjusted pattern signal is 45.4 (High 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? 2080 finding(s).
Are imports declared and package/API names verified? 754 finding(s).
Are wrappers, guards, and repeated structures necessary? 3363 finding(s).
Which changes need focused human review? 4550 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 4550 distinct pattern matches across 22 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 |
|---|---|---|---|---|
| MEDIUM | config/providers.yaml | 30 | # ``model_chains:``) ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_academic_fetch.py | 60 | # ── URL extraction helpers ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_academic_fetch.py | 130 | # ── Async fetch helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/task_board.py | 52 | # ── State helpers (also used by the observer + finalize_answer gate) ──────── | COMMENT |
| MEDIUM | plugins/tools/task_board.py | 83 | # ── Task-board stream projection — pure read helpers ───────────────────────── | COMMENT |
| MEDIUM | plugins/tools/task_board.py | 141 | # ── Planning Mode (two-phase state machine) ───────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/task_board.py | 281 | # ── Tools ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_fetch.py | 281 | # ── Routing ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_overflow.py | 520 | # ── Aggregate budget (per-turn total) ─────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_fetch_aligned.py | 92 | # ── Un-rendered ("app shell") handling ──────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_fetch_aligned.py | 109 | # ── Jina scraping ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_fetch_aligned.py | 326 | # ── LLM extraction ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_fetch_aligned.py | 547 | # ── Single-URL fetch + extract ──────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_fetch_aligned.py | 690 | # ── Tool ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_paths.py | 8 | # ── Virtual → Physical mapping ────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/bash.py | 158 | # ── Tool ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_bash_policy.py | 35 | # ── Mode resolution ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_bash_policy.py | 130 | # ── Layer 1: hard denylist (all modes) ────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_bash_policy.py | 824 | # ── Layer 2: command allowlist (warn / enforce) ───────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_bash_policy.py | 2775 | # ── Public entry point ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_deliverable_policy.py | 385 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/tools/_deliverable_policy.py | 398 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/tools/_deliverable_policy.py | 1367 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/tools/_deliverable_policy.py | 1384 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/tools/_filesystem_state.py | 174 | # ── path questions ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_filesystem_state.py | 302 | # ── installation ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 171 | # ── Unprivileged identity for model-authored subprocesses ───────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 180 | # ── Sandbox profile: who are we protecting from whom ────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 2239 | # ── E2B Config ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 3057 | # ── Current container mounts ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 3092 | # ── E2B ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 3100 | # ── Docker ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 53 | # ── Per-task sandbox override ────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 75 | # ── Shared result/error types ────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 116 | # ── Minimal environment for model-authored subprocesses ─────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 517 | # ── live exec registry (memory watchdog disposal) ────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 838 | # ── Bubblewrap Sandbox (per-task filesystem isolation) ───────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 983 | # ── /proc, and why it differs by profile ───────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 2548 | # ── CJK Font Provisioning ────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 3122 | # ── Fallback: base64 via python3 inside the sandbox ────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 3136 | # ── Async wrappers ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 3285 | # ── Per-sub-agent E2B sandbox pool ───────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 2669 | # ── Sandbox Accessor ──────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/tools/web_search.py | 108 | # ── Profile-driven override ─────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/web_search.py | 204 | # ── Domain-scoped snippet/title content filter ──────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_scrape_cache.py | 14 | # ── Tunables ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/_scrape_cache.py | 105 | # ── Positive scrape cache (cross-run, single-flight) ─────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/read_text.py | 74 | # ── Try host /tmp/agent-outputs/ first ────────────────────── | COMMENT |
| MEDIUM⚡ | plugins/tools/read_text.py | 84 | # ── Try E2B sandbox for absolute paths ──────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/read_text.py | 111 | # ── Local file read with security checks ────────────────────────── | COMMENT |
| MEDIUM | plugins/tools/meta.py | 44 | # ── Default metadata for built-in tools ────────────────────────────────── | COMMENT |
| MEDIUM | deploy/huggingface/events.py | 15 | # ── Lifecycle ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | deploy/huggingface/events.py | 23 | # ── Progress ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | deploy/huggingface/adapter.py | 106 | # ── event transport ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | deploy/huggingface/adapter.py | 159 | # ── runtime → events ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | deploy/huggingface/adapter.py | 435 | # ── artifacts ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | deploy/huggingface/adapter.py | 506 | # ── the adapter ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent_team_inherited_publish_directive.py | 131 | # ── the detector ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent_team_inherited_publish_directive.py | 174 | # ── the inherited directive ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent_team_inherited_publish_directive.py | 233 | # ── the directive the coordinator wrote itself ─────────────────────────────── | COMMENT |
| 891 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/tools/_download_runner.py | 82 | def _pinned_create_connection(ip: str) -> Callable[..., socket.socket]: | CODE |
| LOW | plugins/tools/_download_runner.py | 213 | def _open_following_redirects( | CODE |
| LOW | plugins/tools/_path_auth.py | 87 | def _configured_workspace_root() -> Path | None: | CODE |
| LOW | plugins/tools/_path_auth.py | 132 | def _is_isolated_workspace_root(workspace_root: Path) -> bool: | CODE |
| LOW | plugins/tools/recover_result.py | 72 | def trajectory_recovery_available() -> bool: | CODE |
| LOW | plugins/tools/task_board.py | 64 | def build_task_board_observer(*, cooldown_turns: int = 5) -> TaskBoardObserver: | CODE |
| LOW | plugins/tools/web_fetch.py | 360 | async def _maybe_recover_via_unpaywall( | CODE |
| LOW | plugins/tools/document_node_toolchain.py | 59 | def discover_document_node_toolchain( | CODE |
| LOW | plugins/tools/document_node_toolchain.py | 131 | def render_document_node_toolchain_note( | CODE |
| LOW | plugins/tools/web_search_aligned.py | 238 | def _format_results_plaintext(organic_results: list[dict]) -> str: | CODE |
| LOW | plugins/tools/_bash_policy.py | 299 | def _relocated_protected_roots() -> tuple[str, ...]: | CODE |
| LOW | plugins/tools/_bash_policy.py | 316 | def _under_static_protected_root(path: str) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 339 | def _under_run_read_only_root(path: str) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 364 | def _contains_run_read_only_root(path: str) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 720 | def _redirect_protection_reason(commands: list[list[str]]) -> str | None: | CODE |
| LOW | plugins/tools/_bash_policy.py | 1737 | def _systemctl_requests_shutdown(args: list[str]) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 2028 | def _executed_script_operands(argv: list[str]) -> list[str]: | CODE |
| LOW | plugins/tools/_bash_policy.py | 2136 | def _sed_treats_words_as_data(args: list[str]) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 2184 | def _tar_treats_words_as_data(args: list[str]) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 2272 | def _git_treats_words_as_data(args: list[str]) -> bool: | CODE |
| LOW | plugins/tools/_bash_policy.py | 2460 | def _dynamic_env_split_reason(commands: list[list[str]]) -> str | None: | CODE |
| LOW | plugins/tools/view_image.py | 229 | def _is_vision_service_unavailable(result: str) -> bool: | CODE |
| LOW | plugins/tools/view_image.py | 239 | def _vision_unavailable_fallback(image_path: str, error_msg: str) -> str: | CODE |
| LOW | plugins/tools/_bounded_fetch.py | 188 | def strip_cross_origin_credentials( | CODE |
| LOW | plugins/tools/create_subagent.py | 255 | def _resolve_specialist_prompt( | CODE |
| LOW | plugins/tools/create_subagent.py | 333 | def _disabled_web_tools_notice(runtime: Any | None = None) -> str: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 98 | def _canonicalise_output_references(text: str) -> str: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 358 | def set_deliverable_write_paths( | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 381 | def reset_deliverable_write_paths(token: contextvars.Token) -> None: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 405 | def new_output_write_denial_log() -> tuple[contextvars.Token, list[tuple[str, str]]]: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 416 | def reset_output_write_denial_log(token: contextvars.Token) -> None: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 420 | def _record_output_write_denial(kind: str, target: str) -> None: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 1147 | def _scratch_bash_quota_error(command: str) -> str | None: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 1208 | def _non_publisher_bash_error(command: str) -> str | None: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 1477 | def render_publish_assignment(paths: Iterable[str]) -> str: | CODE |
| LOW | plugins/tools/_deliverable_policy.py | 1524 | def render_workspace_assignment( | CODE |
| LOW | plugins/tools/_filesystem_state.py | 332 | def installed_filesystem_state() -> RuntimeFilesystemState | None: | CODE |
| LOW | plugins/tools/_sandbox.py | 926 | def _extra_tool_root_bind_args() -> list[str]: | CODE |
| LOW | plugins/tools/_sandbox.py | 1248 | def _incremental_text_decoder(stream: Any) -> io.IncrementalNewlineDecoder: | CODE |
| LOW | plugins/tools/_sandbox.py | 1408 | def _check_ulimit_below_cgroup(mem_mb: int) -> None: | CODE |
| LOW | plugins/tools/_sandbox.py | 1447 | def _native_same_uid_is_expected() -> bool: | CODE |
| LOW | plugins/tools/_sandbox.py | 1804 | def _container_inner_bwrap_enabled() -> bool: | CODE |
| LOW | plugins/tools/_sandbox.py | 1819 | def container_uses_inner_bwrap() -> bool: | CODE |
| LOW | plugins/tools/_sandbox.py | 2410 | def _refuse_symlinked_spill_root(path: Path) -> Path: | CODE |
| LOW | plugins/tools/_sandbox.py | 3178 | async def _ensure_ttl_outlives_exec(sandbox: Any, timeout: int) -> None: | CODE |
| LOW | plugins/tools/_sandbox.py | 1969 | def filter_readable_by_tool_user(paths: Sequence[str]) -> list[str] | None: | STRING |
| LOW | plugins/tools/_sandbox.py | 2010 | def _warn_if_inputs_unreadable(inputs_dir: str) -> None: | STRING |
| LOW | plugins/tools/_sandbox.py | 2751 | def _create_provisioned_sandbox( | STRING |
| LOW | plugins/tools/assign_task.py | 82 | def _session_has_publish_work(bus: AgentBus, session: Any) -> bool: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 212 | def normalise_publish_boolean(cls, value: Any) -> Any: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 222 | def normalise_null_output_paths(cls, value: Any) -> Any: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 228 | def normalise_null_replace_manifest(cls, value: Any) -> Any: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 233 | def validate_publish_contract(self) -> AgentTeamAssignmentSpec: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 261 | def _assignment_validation_error(index: int, exc: ValidationError) -> str: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 271 | def _resolve_original_question(scope_metadata: dict[str, Any]) -> str: | CODE |
| LOW⚡ | plugins/tools/assign_task.py | 277 | def _unknown_agent_validation_errors( | CODE |
| LOW | plugins/tools/assign_task.py | 842 | def _top_level_grants_authority( | CODE |
| LOW | plugins/tools/assign_task.py | 870 | def _fold_top_level_publish_metadata( | CODE |
| LOW | plugins/tools/_render_check.py | 131 | def _looks_like_html_document(content: str) -> bool: | CODE |
| LOW | plugins/tools/web_search.py | 122 | def set_domain_blacklist_extra(domains: list[str] | str | None) -> Token: | CODE |
| 1582 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/check_symbols.py | 27 | CODE | |
| LOW | tools/check_lazy_exports.py | 19 | CODE | |
| LOW | tools/import_smoke.py | 27 | CODE | |
| LOW | tools/compare_golden.py | 10 | CODE | |
| LOW | tools/preflight.py | 15 | CODE | |
| LOW | docker/smoke_sglang.py | 4 | CODE | |
| LOW | docker/sglang_entrypoint.py | 4 | CODE | |
| LOW | plugins/tools/file_editor.py | 3 | CODE | |
| LOW | plugins/tools/_download_runner.py | 3 | CODE | |
| LOW | plugins/tools/_academic_fetch.py | 2 | CODE | |
| LOW | plugins/tools/ignore_rules.py | 3 | CODE | |
| LOW | plugins/tools/_bus_scope.py | 3 | CODE | |
| LOW | plugins/tools/_path_auth.py | 3 | CODE | |
| LOW | plugins/tools/recover_result.py | 28 | CODE | |
| LOW | plugins/tools/task_board.py | 3 | CODE | |
| LOW | plugins/tools/task_board.py | 10 | CODE | |
| LOW | plugins/tools/task_board.py | 10 | CODE | |
| LOW | plugins/tools/stop_subagent.py | 3 | CODE | |
| LOW | plugins/tools/_parallel_search.py | 3 | CODE | |
| LOW | plugins/tools/web_fetch.py | 3 | CODE | |
| LOW | plugins/tools/_single_flight.py | 3 | CODE | |
| LOW | plugins/tools/_net_guard.py | 3 | CODE | |
| LOW | plugins/tools/_overflow.py | 3 | CODE | |
| LOW | plugins/tools/grep_search.py | 3 | CODE | |
| LOW | plugins/tools/document_node_toolchain.py | 3 | CODE | |
| LOW | plugins/tools/web_fetch_aligned.py | 8 | CODE | |
| LOW | plugins/tools/web_search_aligned.py | 8 | CODE | |
| LOW | plugins/tools/_paths.py | 3 | CODE | |
| LOW | plugins/tools/bash.py | 3 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 11 | CODE | |
| LOW | plugins/tools/_exec_cgroup.py | 3 | CODE | |
| LOW | plugins/tools/view_image.py | 3 | CODE | |
| LOW | plugins/tools/__init__.py | 3 | CODE | |
| LOW | plugins/tools/_bounded_fetch.py | 3 | CODE | |
| LOW | plugins/tools/_coerce.py | 3 | CODE | |
| LOW | plugins/tools/create_subagent.py | 3 | CODE | |
| LOW | plugins/tools/create_file.py | 2 | CODE | |
| LOW | plugins/tools/_deliverable_policy.py | 8 | CODE | |
| LOW | plugins/tools/_filesystem_state.py | 42 | CODE | |
| LOW | plugins/tools/_sandbox.py | 3 | CODE | |
| LOW | plugins/tools/assign_task.py | 8 | CODE | |
| LOW | plugins/tools/_render_check.py | 3 | CODE | |
| LOW | plugins/tools/finalize_answer.py | 3 | CODE | |
| LOW | plugins/tools/read_file.py | 3 | CODE | |
| LOW | plugins/tools/_code_sanitize.py | 2 | CODE | |
| LOW | plugins/tools/collect_reports.py | 7 | CODE | |
| LOW | plugins/tools/web_search.py | 3 | CODE | |
| LOW | plugins/tools/submit_report.py | 3 | CODE | |
| LOW | plugins/tools/run_python_code.py | 2 | CODE | |
| LOW | plugins/tools/write_file.py | 7 | CODE | |
| LOW | plugins/tools/download_file.py | 3 | CODE | |
| LOW | plugins/tools/glob_search.py | 3 | CODE | |
| LOW | plugins/tools/_scrape_cache.py | 3 | CODE | |
| LOW | plugins/tools/read_text.py | 18 | CODE | |
| LOW | plugins/tools/meta.py | 3 | CODE | |
| LOW | deploy/huggingface/sessions.py | 29 | CODE | |
| LOW | deploy/huggingface/config.py | 9 | CODE | |
| LOW | deploy/huggingface/events.py | 9 | CODE | |
| LOW | deploy/huggingface/adapter.py | 25 | CODE | |
| LOW | deploy/huggingface/mock_llm.py | 19 | CODE | |
| 607 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plugins/tools/_writer_core.py | 122 | except Exception: | CODE |
| HIGH | plugins/tools/_writer_core.py | 280 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 19 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 30 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 140 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 159 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 175 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 194 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 282 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 301 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 343 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 383 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 396 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 165 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 91 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 312 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pptx.py | 280 | except Exception: | CODE |
| HIGH | plugins/tools/_path_auth.py | 138 | except ValueError: | CODE |
| HIGH | plugins/tools/_net_guard.py | 170 | except Exception: | CODE |
| HIGH | plugins/tools/_net_guard.py | 98 | except ValueError: | CODE |
| HIGH | plugins/tools/web_fetch_aligned.py | 221 | except json.JSONDecodeError: | CODE |
| HIGH | plugins/tools/web_fetch_aligned.py | 87 | except (json.JSONDecodeError, ValueError): | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 91 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 315 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 384 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 406 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 645 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 332 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 344 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 541 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 547 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 555 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_xlsx.py | 400 | except Exception: | CODE |
| HIGH | plugins/tools/web_search_aligned.py | 144 | except (json.JSONDecodeError, ValueError): | CODE |
| HIGH | plugins/tools/_bounded_fetch.py | 199 | except Exception: | CODE |
| HIGH | plugins/tools/_bounded_fetch.py | 22 | except ValueError: | CODE |
| HIGH | plugins/tools/_writer_pptx.py | 80 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_core.py | 209 | except UnicodeDecodeError: | CODE |
| HIGH | plugins/tools/_reader_core.py | 323 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_core.py | 599 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_core.py | 555 | except OSError: | CODE |
| HIGH | plugins/tools/_reader_core.py | 743 | except OSError: | CODE |
| HIGH | plugins/tools/_reader_core.py | 788 | except OSError: | CODE |
| HIGH | plugins/tools/_reader_core.py | 115 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_core.py | 754 | except OSError: | CODE |
| HIGH | plugins/tools/_sandbox.py | 2249 | except Exception: | CODE |
| HIGH | plugins/tools/_sandbox.py | 564 | except (OSError, ValueError): | CODE |
| HIGH | plugins/tools/_sandbox.py | 776 | except Exception: | CODE |
| HIGH | plugins/tools/_sandbox.py | 2279 | except Exception: | CODE |
| HIGH | plugins/tools/_sandbox.py | 2730 | except TypeError: | CODE |
| HIGH | plugins/tools/_sandbox.py | 3261 | except (TypeError, ValueError): | CODE |
| HIGH | plugins/tools/_render_check.py | 122 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pdf.py | 66 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pdf.py | 80 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pdf.py | 99 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pdf.py | 122 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pdf.py | 158 | except Exception: | CODE |
| HIGH | plugins/tools/_reader_pdf.py | 202 | except Exception: | CODE |
| HIGH | plugins/tools/download_file.py | 58 | except ValueError: | CODE |
| HIGH | plugins/tools/_reader_docx.py | 45 | except Exception: | CODE |
| 51 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plugins/tools/file_editor.py | 96 | f"test -d {q} && echo DIR || echo FILE", timeout=10, | CODE |
| HIGH | plugins/tools/bash.py | 99 | f'if [ -n "$BASH_VERSION" ]; then ulimit -f {kib_blocks} 2>/dev/null; ' | CODE |
| HIGH | plugins/tools/bash.py | 100 | f"else ulimit -f {posix_blocks} 2>/dev/null; fi; " | CODE |
| HIGH | plugins/tools/_bash_policy.py | 2823 | # (``2>/dev/null;`` / ``>/dev/null)``) — trim it before classifying. | COMMENT |
| HIGH | plugins/tools/_deliverable_policy.py | 320 | "path: `pdftoppm -png in.pdf /workspace/page && cp /workspace/page-1.png " | CODE |
| HIGH | plugins/tools/_deliverable_policy.py | 330 | "/workspace in.pptx && cp /workspace/in.pdf /outputs/<declared-name>.pdf`." | CODE |
| HIGH | plugins/tools/_deliverable_policy.py | 1191 | (``cd /outputs/scratch && cp /workspace/a.png ../leak.png``). Anything | STRING |
| HIGH | plugins/tools/_deliverable_policy.py | 1193 | allowed. Over-approximating (a redirect to /dev/null) only steers the | STRING |
| HIGH⚡ | plugins/tools/_sandbox.py | 2585 | (sudo -n apt-get update -qq 2>/dev/null || apt-get update -qq 2>/dev/null || true) | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 2587 | || apt-get install -y -qq --no-install-recommends fonts-noto-cjk fonts-noto-cjk-extra fonts-liberation fonts-crosex | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 2588 | fc-cache -f >/dev/null 2>&1 || true | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 2592 | python -c "from mplfonts.bin.cli import init; init()" >/dev/null 2>&1 || true | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 2601 | rm -rf "$HOME/.cache/matplotlib" "$HOME/.matplotlib" 2>/dev/null || true | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 2610 | (sudo -n apt-get update -qq 2>/dev/null || apt-get update -qq 2>/dev/null || true) | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 2612 | || apt-get install -y -qq --no-install-recommends poppler-utils 2>/dev/null || true) | CODE |
| HIGH⚡ | plugins/tools/_sandbox.py | 3308 | "rm -rf /tmp/exec_*.py /tmp/agent-outputs/* 2>/dev/null; " | CODE |
| HIGH | plugins/tools/_sandbox.py | 475 | return f"ulimit -v {mem_mb * 1024} 2>/dev/null; " | CODE |
| HIGH | plugins/tools/_sandbox.py | 500 | return f"ulimit -d {mem_mb * 1024} 2>/dev/null; " | CODE |
| HIGH | plugins/tools/_sandbox.py | 832 | parts.append(f"ulimit -v {mem_mb * 1024} 2>/dev/null;") | CODE |
| HIGH | plugins/tools/_sandbox.py | 1559 | f"echo $$ > {shlex.quote(cg.procs_path)} 2>/dev/null; " | CODE |
| HIGH | plugins/tools/_sandbox.py | 2817 | "mkdir -p /tmp/agent-outputs && chmod 755 /tmp/agent-outputs", | STRING |
| HIGH | deploy/huggingface/adapter.py | 216 | self._channel.push(event( | CODE |
| HIGH⚡ | deploy/huggingface/adapter.py | 746 | channel.push(event( | CODE |
| HIGH⚡ | deploy/huggingface/adapter.py | 756 | channel.push(event( | CODE |
| HIGH⚡ | deploy/huggingface/adapter.py | 765 | channel.push(event( | CODE |
| HIGH⚡ | deploy/huggingface/adapter.py | 773 | channel.push(event( | CODE |
| HIGH | deploy/huggingface/adapter.py | 789 | channel.push(event( | CODE |
| HIGH | deploy/huggingface/adapter.py | 819 | channel.push(event( | CODE |
| HIGH | deploy/huggingface/adapter.py | 826 | channel.push(event( | CODE |
| HIGH⚡ | tests/test_path_gate_is_binding.py | 264 | "1,1p' /dev/null; printf INJECTED; # -2", "0-1", "5-2", "1-two", "1-2-3", | CODE |
| HIGH⚡ | tests/test_bash_policy_data_consumers.py | 109 | "echo 'halt' > a.txt && cp a.txt x.sh && bash x.sh", | CODE |
| HIGH⚡ | tests/test_bash_policy_data_consumers.py | 110 | "echo 'halt' > a && mv a x.sh && sh x.sh", | CODE |
| HIGH⚡ | tests/test_bash_policy_data_consumers.py | 111 | "echo 'halt' > a && ln -s a x && . ./x", | CODE |
| HIGH | tests/test_bash_policy_data_consumers.py | 127 | "git add report.md && git commit -m 'document the halt rule'", | CODE |
| HIGH⚡ | tests/test_agent_team_workflow.py | 339 | error = bash_output_write_error("cd /spill/session && grep -c X result.md") | CODE |
| HIGH | tests/test_agent_team_workflow.py | 224 | "cd /spill && echo changed > result.md", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 158 | "cd /workspace && echo 'halt' > x.sh && bash x.sh", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 173 | "echo 'exchange halt' > /workspace/a.md && bash /workspace/build.sh", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 176 | "echo 'halt' > x.txt && wc -l x.txt", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 178 | "echo 'ls' > x.sh && bash x.sh", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 248 | "git add r.md && git commit -m 'add halt policy doc'", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 253 | "ls -la /workspace && wc -l /workspace/r.md", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 254 | "mkdir -p /outputs && cp /workspace/r.md /outputs/", | CODE |
| HIGH⚡ | tests/test_bash_policy_composition.py | 255 | "cd /workspace && zip r.zip r.md", | CODE |
| HIGH | workflows/agent_team/prompts.py | 634 | `curl -o page.html && grep -oE 'href=...'` — is the anti-pattern this rule \ | CODE |
| HIGH | apodex/userenv.py | 298 | # host selected (or intentionally skipped with APODEX_ENV_FILE=/dev/null). | COMMENT |
| HIGH⚡ | apodex/permissions.py | 276 | """A reusable prefix for a bash command (``cd /app && npm test`` → ``npm test``).""" | STRING |
| HIGH | apodex/clipboard.py | 64 | if (url && url.isFileURL) paths.push(unwrap(url.path)); | CODE |
| HIGH | apodex/clipboard.py | 64 | if (url && url.isFileURL) paths.push(unwrap(url.path)); | CODE |
| HIGH | apodex/clipboard.py | 76 | if (!data || data.length === 0) continue; | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 158 | "cat README.md", "git status", "git diff", "pwd && ls"): | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 197 | assert is_read_only_bash("ls -la && cat x") | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 1327 | assert s.allows("bash", {"command": "cd /workspace && npm test --watch"}) # helper cd ignored | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 1329 | assert not s.allows("bash", {"command": "npm test && rm -rf x"}) # compound: rm -rf not allowed | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 1333 | assert rule_for("bash", {"command": "cd /workspace && git push origin main"}) == "Bash(git push)" | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 1409 | "bash", {"command": "git status && git push origin main"} | CODE |
| HIGH⚡ | apodex/tests/test_features.py | 1422 | assert rules.allows("bash", {"command": "echo hi && python -V"}) # a plain helper is still skipped | CODE |
| HIGH | benchmarks/public/judges/widesearch.py | 462 | if gt_sorted.equals(pred_sorted): | CODE |
| HIGH⚡ | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 226 | "final_canonical_id": "<id>" 或 null, | CODE |
| HIGH⚡ | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 465 | return "fast" # unanimous null, kw also null → accept | CODE |
| 20 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/check_lazy_exports.py | 68 | except Exception as e: | CODE |
| LOW | tools/check_lazy_exports.py | 75 | except Exception as e: | CODE |
| LOW | tools/import_smoke.py | 96 | except Exception: | CODE |
| LOW | tools/preflight.py | 80 | except Exception as e: | CODE |
| LOW | tools/preflight.py | 116 | except Exception as e: | CODE |
| LOW | tools/preflight.py | 123 | except Exception as e: | CODE |
| LOW | docker/smoke_sglang.py | 108 | except Exception as exc: | CODE |
| LOW | docker/gpu-entrypoint.sh | 184 | except Exception: | CODE |
| LOW | plugins/tools/_writer_core.py | 122 | except Exception: | CODE |
| LOW | plugins/tools/_writer_core.py | 143 | except Exception as e: | CODE |
| LOW | plugins/tools/_writer_core.py | 280 | except Exception: | CODE |
| LOW | plugins/tools/_writer_core.py | 333 | except Exception: | CODE |
| LOW | plugins/tools/_writer_core.py | 345 | except Exception: | CODE |
| LOW | plugins/tools/_writer_core.py | 383 | except Exception: | CODE |
| LOW | plugins/tools/_writer_core.py | 547 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 78 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 124 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 154 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 182 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 213 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 229 | except Exception as e: | CODE |
| LOW | plugins/tools/file_editor.py | 273 | except Exception as e: | CODE |
| LOW | plugins/tools/_download_runner.py | 675 | except Exception as exc: | CODE |
| MEDIUM | plugins/tools/_reader_pptx.py | 14 | def _run_color(run) -> str: | CODE |
| MEDIUM | plugins/tools/_reader_pptx.py | 366 | def _shape_text(shape) -> str: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 159 | except Exception: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 165 | except Exception: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 175 | except Exception: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 383 | except Exception: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 392 | except Exception as e: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 396 | except Exception: | CODE |
| LOW⚡ | plugins/tools/_reader_pptx.py | 406 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 19 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 30 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 65 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 91 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 110 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 130 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 140 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 194 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 280 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 282 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 301 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 312 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 329 | except Exception as e: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 343 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 362 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 369 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 475 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 554 | except Exception: | CODE |
| LOW | plugins/tools/_reader_pptx.py | 572 | except Exception as e: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 168 | except Exception as exc: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 181 | except Exception as exc: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 217 | except Exception as exc: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 225 | except Exception: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 251 | except Exception as exc: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 259 | except Exception: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 287 | except Exception as exc: | CODE |
| LOW | plugins/tools/_academic_fetch.py | 295 | except Exception: | CODE |
| LOW | plugins/tools/_path_auth.py | 288 | except Exception: | CODE |
| 362 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/tools/file_editor.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_academic_fetch.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_bus_scope.py | 33 | __all__ = ["SWARM_SCOPE_KEY", "resolve_bus_task_id", "resolve_root_task_id"] | CODE |
| LOW | plugins/tools/_path_auth.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/recover_result.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/recover_result.py | 215 | __all__ = ["recover_result"] | CODE |
| LOW | plugins/tools/task_board.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/task_board.py | 480 | __all__ = [ | CODE |
| LOW | plugins/tools/stop_subagent.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/stop_subagent.py | 119 | __all__ = ["stop_subagent"] | CODE |
| LOW | plugins/tools/_parallel_search.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_parallel_search.py | 348 | __all__ = ["parallel_search_batch", "selected_search_provider", "valid_search_provider"] | CODE |
| LOW | plugins/tools/web_fetch.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_net_guard.py | 174 | __all__ = [ | STRING |
| LOW | plugins/tools/_overflow.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/grep_search.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/web_fetch_aligned.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/web_fetch_aligned.py | 768 | __all__ = ["web_fetch_aligned"] | CODE |
| LOW | plugins/tools/web_search_aligned.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/web_search_aligned.py | 362 | __all__ = ["web_search_aligned"] | CODE |
| LOW | plugins/tools/bash.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/bash.py | 39 | __all__ = ["BASH_STDERR_SEPARATOR", "BashCommandAssessment", "assess_bash_command", "bash"] | CODE |
| LOW | plugins/tools/_bash_policy.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_exec_cgroup.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/view_image.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/__init__.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/__init__.py | 105 | __all__ = [ | CODE |
| LOW | plugins/tools/_bounded_fetch.py | 269 | __all__ = [ | CODE |
| LOW | plugins/tools/_coerce.py | 48 | __all__ = ["coerce_json_list", "coerce_json_object"] | CODE |
| LOW | plugins/tools/create_subagent.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/create_subagent.py | 616 | __all__ = ["create_subagent"] | CODE |
| LOW | plugins/tools/create_file.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_filesystem_state.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/_filesystem_state.py | 52 | __all__ = [ | CODE |
| LOW | plugins/tools/_sandbox.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/assign_task.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/assign_task.py | 971 | __all__ = [ | CODE |
| LOW | plugins/tools/_render_check.py | 217 | __all__ = ["MIN_RENDERED_BODY_CHARS", "reader_body", "unrendered_kind"] | CODE |
| LOW | plugins/tools/finalize_answer.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/read_file.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/collect_reports.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/collect_reports.py | 399 | __all__ = ["collect_reports"] | CODE |
| LOW | plugins/tools/web_search.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/submit_report.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/run_python_code.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/write_file.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/download_file.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/download_file.py | 140 | __all__ = ["download_file"] | CODE |
| LOW | plugins/tools/glob_search.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | plugins/tools/read_text.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | deploy/huggingface/sessions.py | 191 | __all__ = [ | CODE |
| LOW | deploy/huggingface/config.py | 700 | __all__ = [ | CODE |
| LOW | deploy/huggingface/events.py | 89 | __all__ = [ | CODE |
| LOW | deploy/huggingface/adapter.py | 84 | logger = logging.getLogger(__name__) | CODE |
| LOW | deploy/huggingface/adapter.py | 1015 | __all__ = [ | CODE |
| LOW | deploy/huggingface/mock_llm.py | 423 | __all__ = [ | CODE |
| LOW | deploy/huggingface/security.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | deploy/huggingface/security.py | 399 | __all__ = [ | CODE |
| LOW | deploy/huggingface/app.py | 63 | logger = logging.getLogger(__name__) | CODE |
| LOW | deploy/huggingface/errors.py | 251 | __all__ = [ | CODE |
| 155 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/check_symbols.py | 57 | CODE | |
| LOW | tools/check_symbols.py | 83 | CODE | |
| LOW | tools/check_symbols.py | 142 | CODE | |
| LOW | plugins/tools/_writer_core.py | 45 | CODE | |
| LOW | plugins/tools/_writer_core.py | 86 | CODE | |
| LOW | plugins/tools/_writer_core.py | 263 | CODE | |
| LOW | plugins/tools/_writer_core.py | 349 | CODE | |
| LOW | plugins/tools/_writer_core.py | 492 | CODE | |
| LOW | plugins/tools/file_editor.py | 32 | CODE | |
| LOW | plugins/tools/_download_runner.py | 500 | CODE | |
| LOW | plugins/tools/_reader_pptx.py | 80 | CODE | |
| LOW | plugins/tools/_reader_pptx.py | 199 | CODE | |
| LOW | plugins/tools/_reader_pptx.py | 267 | CODE | |
| LOW | plugins/tools/_reader_pptx.py | 287 | CODE | |
| LOW | plugins/tools/_reader_pptx.py | 410 | CODE | |
| LOW | plugins/tools/_reader_pptx.py | 524 | CODE | |
| LOW | plugins/tools/_academic_fetch.py | 157 | CODE | |
| LOW | plugins/tools/_academic_fetch.py | 200 | CODE | |
| LOW | plugins/tools/_path_auth.py | 216 | CODE | |
| LOW | plugins/tools/recover_result.py | 82 | CODE | |
| LOW | plugins/tools/task_board.py | 218 | CODE | |
| LOW | plugins/tools/task_board.py | 379 | CODE | |
| LOW | plugins/tools/_parallel_search.py | 120 | CODE | |
| LOW | plugins/tools/grep_search.py | 18 | CODE | |
| LOW | plugins/tools/web_fetch_aligned.py | 227 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 256 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 320 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 362 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 389 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 427 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 565 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 628 | CODE | |
| LOW | plugins/tools/_reader_xlsx.py | 659 | CODE | |
| LOW | plugins/tools/web_search_aligned.py | 73 | CODE | |
| LOW | plugins/tools/web_search_aligned.py | 252 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 364 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 504 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 756 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1026 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1046 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1140 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1377 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1457 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1599 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1653 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1678 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1788 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 1840 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 2100 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 2136 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 2414 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 2558 | CODE | |
| LOW | plugins/tools/_bash_policy.py | 2705 | CODE | |
| LOW | plugins/tools/_writer_docx.py | 262 | CODE | |
| LOW | plugins/tools/_writer_docx.py | 334 | CODE | |
| LOW | plugins/tools/_writer_pptx.py | 136 | CODE | |
| LOW | plugins/tools/_writer_pptx.py | 247 | CODE | |
| LOW | plugins/tools/_reader_core.py | 191 | CODE | |
| LOW | plugins/tools/_reader_core.py | 705 | CODE | |
| LOW | plugins/tools/_reader_core.py | 220 | CODE | |
| 146 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | compose.yaml | 12 | # A missing agent-tool account would expose the harness environment to | COMMENT |
| MEDIUM | compose.yaml | 38 | # The harness receives .env through env_file above. Hide the on-disk | COMMENT |
| MEDIUM | compose.yaml | 59 | # harness container, so it retains the nested bubblewrap backend. | COMMENT |
| MEDIUM | docker/entrypoint.sh | 8 | # Only a root harness can remap the deliberately unprivileged tool account. | COMMENT |
| MEDIUM | plugins/tools/_bash_policy.py | 133 | # cheap first screen; the argv analysis below is the robust complement. | COMMENT |
| MEDIUM⚡ | plugins/tools/view_image.py | 171 | # ALWAYS read through the sandbox — never from the harness process. | COMMENT |
| MEDIUM⚡ | plugins/tools/view_image.py | 179 | # the read still runs as the harness uid, which in container mode is | COMMENT |
| MEDIUM⚡ | plugins/tools/view_image.py | 181 | # narrowly avoided is not to read as the harness at all. | COMMENT |
| MEDIUM | plugins/tools/_writer_docx.py | 230 | # The simple robust approach: rewrite the whole paragraph into its first run and clear the rest (paragraph-level for | COMMENT |
| MEDIUM⚡ | plugins/tools/_deliverable_policy.py | 1006 | # harness at 0755 so a *different* tool uid cannot write it — but that uid is | COMMENT |
| MEDIUM⚡ | plugins/tools/_deliverable_policy.py | 1007 | # best-effort: with no tool account, or a non-root harness, ``CurrentSandbox`` | COMMENT |
| MEDIUM⚡ | plugins/tools/_deliverable_policy.py | 1008 | # warns and runs model commands with the harness's own uid, and then this gate is | COMMENT |
| MEDIUM | plugins/tools/_filesystem_state.py | 70 | #: spellings the harness sees. ``bwrap`` is absent: its canonical | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 173 | # container mode the model's bash/python shares the harness's PID namespace, so | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 174 | # ``cat /proc/<harness-pid>/environ`` reads the real provider credentials | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 187 | # ``service``: a shared worker running someone else's task. Now the harness | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 3063 | # write becomes a hard error. The harness process already has the mount | COMMENT |
| MEDIUM⚡ | plugins/tools/_sandbox.py | 3067 | # This branch is an ordinary ``open()`` in the harness process — as root, in | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 120 | # Build the child environment from zero instead. The harness process keeps its | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 209 | # writable venv lets the model plant code the harness itself later imports), and | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 234 | # directory was per-task HOME. No privilege gain — same uid, and the harness | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 390 | # Do not inherit the harness's TMPDIR: it may name a root-only directory | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 404 | # the harness environment cannot point a command at a previous session's | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 522 | # harness's own children. Only what this backend started is eligible. | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 886 | # the harness venv lives under ``/usr`` (``/usr/local/...`` on the musl images), | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 957 | # in-harness, not here, so the agent's search tools are unaffected). This is | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 989 | # credentials out of the harness process. There, the fresh procfs is the | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 1656 | # failure is silenced): the harness is root, so containment does | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 1892 | # harness environment. A child running under that uid owns its own | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 1896 | # probe needs anything from the harness env: one runs `ls` through /bin/sh, the | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 2294 | # unprivileged uid so they cannot read the harness's /proc/<pid>/environ: | COMMENT |
| MEDIUM | plugins/tools/_sandbox.py | 2389 | # model runs as a DIFFERENT uid than the harness and has to read these | COMMENT |
| MEDIUM | plugins/tools/read_file.py | 265 | # The parser is trusted harness infrastructure: allow_net opens networking so it can | COMMENT |
| MEDIUM | plugins/tools/_writer_xlsx.py | 429 | # Absolute references ($) are more robust; if the user did not supply $, use it as given | COMMENT |
| MEDIUM | deploy/huggingface/app.py | 137 | # ``generated`` marks the harness's own fallback file. Calling that | COMMENT |
| MEDIUM | tests/test_long_run_compaction.py | 931 | """Resolving a directory in order to delete it must not first mkdir it.""" | STRING |
| MEDIUM⚡ | tests/test_bash_policy_relocated_mounts.py | 214 | # file; ``rm -rf build`` stays allowed even if the harness cwd has a | COMMENT |
| MEDIUM | workflows/agent_team/prompts.py | 186 | # harness injection — the harness only supplies the ground truth. | COMMENT |
| MEDIUM | workflows/agent_team/nodes/main_agent.py | 1264 | # /inputs is an external bind-mount; the harness never populates it. | COMMENT |
| MEDIUM | workflows/agent_team/nodes/main_agent.py | 1648 | # paranoid double-check that the harness never writes leaked | COMMENT |
| MEDIUM | workflows/agent_team/observers/unassigned_nudge.py | 39 | # naturally; (b) the agent DID call assign_task but the harness | COMMENT |
| MEDIUM | workflows/stateful_react_agent/nodes/main_agent.py | 869 | # harness never populates it. Log what actually landed there so a | COMMENT |
| MEDIUM | apodex/middleware.py | 4 | # Skills live in the harness repo (plugins/skills/), not the user's cwd the | COMMENT |
| MEDIUM | apodex/tests/test_features.py | 376 | # If we got here without an exception, rendering is robust across themes. | COMMENT |
| MEDIUM | apodex/tests/test_deployment_config.py | 45 | # Compose injects these files into the harness environment, but the | COMMENT |
| MEDIUM⚡ | apodex/tests/test_deployment_config.py | 292 | # The mounts include the host checkout itself, so the harness may only add | COMMENT |
| MEDIUM⚡ | benchmarks/public/judges/reward.py | 364 | """Score the answer using robust fuzzy matching.""" | STRING |
| MEDIUM | …_bench/eval/verifiable/scorers/query_28/auto_scorer.py | 155 | # ─── ⚠️ 边界 (0 分): 学界叙事中常被算含水但 JWST 数据未 robust 检测 ─── | COMMENT |
| MEDIUM | benchmarks/frontierchallenge/pyproject.toml | 23 | # The harness. Pinned: task files declare schema_version 1.1 and every | COMMENT |
| MEDIUM | benchmarks/frontierchallenge/scripts/run_eval.sh | 5 | # GitHub carries the harness and immutable registry; task payloads come from HF. | COMMENT |
| MEDIUM | scripts/run-truncation-ab.sh | 23 | # something else with the same harness (e.g. the per-tool cap: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 101 | # PEP 561 marker, shipped for frontier_agent only. That package is the framework | COMMENT |
| LOW | tools/freeze_golden.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | config/providers.yaml | 1 | # LLM Provider Registry | COMMENT |
| LOW | config/providers.yaml | 21 | # | COMMENT |
| LOW | plugins/tools/_path_auth.py | 41 | _BLOCKED_NAME_WORDS = frozenset({ | COMMENT |
| LOW | plugins/tools/_path_auth.py | 161 | # in that tree is a write target. Everywhere else (and for every write) | COMMENT |
| LOW | plugins/tools/_path_auth.py | 361 | # ``plugins/skills/`` and ``data/`` are service resources, and the | COMMENT |
| LOW | plugins/tools/task_board.py | 141 | # ── Planning Mode (two-phase state machine) ───────────────────────────────── | COMMENT |
| LOW | plugins/tools/web_fetch.py | 41 | ) | COMMENT |
| LOW | plugins/tools/_overflow.py | 21 | # of created stores — so nothing here writes, reads or deletes spill files by | COMMENT |
| LOW | plugins/tools/_reader_xlsx.py | 1 | COMMENT | |
| LOW | plugins/tools/_bash_policy.py | 841 | "sha1sum", "sha224sum", "sha256sum", "sha384sum", "sha512sum", "md5sum", | COMMENT |
| LOW | plugins/tools/_bash_policy.py | 881 | COMMENT | |
| LOW | plugins/tools/_bash_policy.py | 2061 | # Commands that treat their quoted arguments, heredoc bodies and stdin as data. | COMMENT |
| LOW | plugins/tools/_bash_policy.py | 2741 | if mode == "enforce": | COMMENT |
| LOW | plugins/tools/_bash_policy.py | 2821 | continue | COMMENT |
| LOW | plugins/tools/view_image.py | 161 | ] | COMMENT |
| LOW | plugins/tools/create_subagent.py | 281 | # task-level constants — identical for every sub-agent of one task — so | COMMENT |
| LOW | plugins/tools/create_subagent.py | 401 | # Native clients carry no langchain ``Runnable.bind``; bind the | COMMENT |
| LOW | plugins/tools/_writer_docx.py | 1 | COMMENT | |
| LOW | plugins/tools/_writer_pptx.py | 1 | COMMENT | |
| LOW | plugins/tools/create_file.py | 501 | else: | COMMENT |
| LOW | plugins/tools/_deliverable_policy.py | 121 | }) | COMMENT |
| LOW | plugins/tools/_deliverable_policy.py | 141 | "pdftocairo": False, # mode-dependent, see _PDFTOCAIRO_PREFIX_FLAGS | COMMENT |
| LOW | plugins/tools/_deliverable_policy.py | 161 | # that displaced the real output operand, and the only way to know ``-r`` | COMMENT |
| LOW | plugins/tools/_deliverable_policy.py | 381 | def reset_deliverable_write_paths(token: contextvars.Token) -> None: | COMMENT |
| LOW | plugins/tools/_deliverable_policy.py | 1361 | for target in targets: | COMMENT |
| LOW | plugins/tools/_deliverable_policy.py | 1381 | # conflict and say who owns it. Detection is advisory only: a miss yields the | COMMENT |
| LOW | plugins/tools/_sandbox.py | 101 | COMMENT | |
| LOW | plugins/tools/_sandbox.py | 141 | "MATPLOTLIBRC", | COMMENT |
| LOW | plugins/tools/_sandbox.py | 161 | # proxy) wherever model commands run. | COMMENT |
| LOW | plugins/tools/_sandbox.py | 181 | # | COMMENT |
| LOW | plugins/tools/_sandbox.py | 201 | raw = (os.environ.get(_SANDBOX_PROFILE_ENV) or "").strip().lower() | COMMENT |
| LOW | plugins/tools/_sandbox.py | 221 | # ``PIP_TARGET`` is ``pip install --target``, which resolves against the target | COMMENT |
| LOW | plugins/tools/_sandbox.py | 381 | """ | COMMENT |
| LOW | plugins/tools/_sandbox.py | 961 | # ``_bwrap_base_args`` feeds ``bwrap_available()``'s probe, so a rejected | COMMENT |
| LOW | plugins/tools/_sandbox.py | 981 | if overlay: | COMMENT |
| LOW | plugins/tools/_sandbox.py | 1661 | _register_exec(pgid, command, cgroup=cg) | COMMENT |
| LOW | plugins/tools/_sandbox.py | 1721 | finally: | COMMENT |
| LOW | plugins/tools/_sandbox.py | 1741 | # grandchild that left the process group (setsid / | COMMENT |
| LOW | plugins/tools/_sandbox.py | 2381 | explicit = os.environ.get(_SPILL_DIR_ENV, "").strip() | COMMENT |
| LOW | plugins/tools/_sandbox.py | 2541 | return normalized_root | COMMENT |
| LOW | plugins/tools/_sandbox.py | 2841 | "sandbox_backend=e2b requires E2B_API_KEY; refusing to execute " | COMMENT |
| LOW | plugins/tools/_sandbox.py | 3061 | # (128 KB), so routing deliverables through it fails with E2BIG somewhere | COMMENT |
| LOW | plugins/tools/assign_task.py | 401 | bus = registry.get(AgentBus) | COMMENT |
| LOW | plugins/tools/assign_task.py | 641 | previous_manifest = tuple( | COMMENT |
| LOW | plugins/tools/collect_reports.py | 41 | # should register its own observer here rather than widening this interval — | COMMENT |
| LOW | plugins/tools/_writer_xlsx.py | 1 | COMMENT | |
| LOW | plugins/tools/run_python_code.py | 401 | # Count one E2B execution (lifetime is metered at the | COMMENT |
| LOW | plugins/tools/_reader_pdf.py | 1 | COMMENT | |
| LOW | plugins/tools/_scrape_cache.py | 101 | # Module-level singleton. Callers should import this directly. | COMMENT |
| LOW | plugins/tools/meta.py | 41 | result_is_ranked: bool = False | COMMENT |
| LOW | deploy/huggingface/config.py | 21 | SUPPORTED_WORKFLOWS: tuple[str, ...] = ("react",) | COMMENT |
| LOW | deploy/huggingface/publish.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/test_tool_result_truncation.py | 441 | COMMENT | |
| LOW | workflows/agent_team/report_fast_guard.py | 21 | # sentinels, so the two masking passes can never collide when nested. | COMMENT |
| LOW | workflows/agent_team/subagent_runtime.py | 201 | # Some text-mode models under long-context fatigue may emit tool calls as raw | COMMENT |
| LOW | workflows/agent_team/subagent_runtime.py | 521 | # because a sub-agent works one narrow sub-question. | COMMENT |
| LOW | workflows/agent_team/subagent_runtime.py | 541 | # ``<workflow_id>__sub_<session>.json`` next to the existing | COMMENT |
| LOW | workflows/agent_team/subagent_runtime.py | 561 | sub_agent_tool_names: list[str] | None = None | COMMENT |
| 60 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …_bench/eval/verifiable/scorers/query_06/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_12/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_33/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_28/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_11/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_18/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_39/auto_scorer.py | 0 | convert dims into baseline spec consumed by pipeline.alignment. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_06/auto_scorer.py | 0 | reload alignment.json from disk when --skip-align is set. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_13/auto_scorer.py | 0 | reload alignment.json from disk when --skip-align is set. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_12/auto_scorer.py | 0 | reload alignment.json from disk when --skip-align is set. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_11/auto_scorer.py | 0 | reload alignment.json from disk when --skip-align is set. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_18/auto_scorer.py | 0 | reload alignment.json from disk when --skip-align is set. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_08/auto_scorer.py | 0 | read each model's `{dir}/{model}/extraction.json` and return the raw `entities[0].canonical.value` list. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_13/auto_scorer.py | 0 | read each model's `{dir}/{model}/extraction.json` and return the raw `entities[0].canonical.value` list. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_12/auto_scorer.py | 0 | read each model's `{dir}/{model}/extraction.json` and return the raw `entities[0].canonical.value` list. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_11/auto_scorer.py | 0 | read each model's `{dir}/{model}/extraction.json` and return the raw `entities[0].canonical.value` list. | STRING |
| HIGH | …_bench/eval/verifiable/scorers/query_18/auto_scorer.py | 0 | read each model's `{dir}/{model}/extraction.json` and return the raw `entities[0].canonical.value` list. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 24 | <b><a href="https://www.apodex.com/blog/apodex-1.1-scaling-agentic-intelligence-for-complex-work">Tech Blog</a></b> · | CODE |
| MEDIUM | deploy/huggingface/config.py | 360 | # Runaway guardrails. The profile arms these for a TUI session | COMMENT |
| MEDIUM | deploy/huggingface/security.py | 60 | # Sub-agent orchestration: out of P0 scope and multiplies model spend. | COMMENT |
| MEDIUM⚡ | tests/test_runaway_and_repetition_wiring.py | 51 | # ── Reasoning-runaway guardrails are configured, not just supported ── | COMMENT |
| MEDIUM⚡ | workflows/agent_team/prompts.py | 845 | # Max-effort orchestration policy — injected (before the trailing tag) only | COMMENT |
| MEDIUM | workflows/agent_team/README.md | 30 | ## Loop guardrails | COMMENT |
| MEDIUM | workflows/agent_team/profiles/simple.yaml | 42 | # the context window. | COMMENT |
| MEDIUM | workflows/agent_team/profiles/benchmark.yaml | 59 | # Reasoning-runaway guardrails. Abort a streamed reply that is still only | COMMENT |
| MEDIUM | workflows/agent_team/profiles/benchmark.yaml | 91 | # Hard input guard. Keep it below the endpoint context window minus the output | COMMENT |
| MEDIUM | workflows/agent_team/profiles/tui.yaml | 46 | # Reasoning-runaway guardrails. Abort a streamed reply that is still only | COMMENT |
| MEDIUM | workflows/stateful_react_agent/README.md | 25 | ## Loop guardrails | COMMENT |
| MEDIUM | workflows/stateful_react_agent/nodes/main_agent.py | 660 | # left the estimate above max_len*0.6. ``max_len`` = model context window. | COMMENT |
| MEDIUM | workflows/stateful_react_agent/nodes/main_agent.py | 684 | # task-board / sandbox-FS prompt scaffolding, which are meaningless without | COMMENT |
| MEDIUM | workflows/stateful_react_agent/profiles/simple.yaml | 35 | # the context window. | COMMENT |
| MEDIUM | workflows/stateful_react_agent/profiles/tui.yaml | 31 | # Reasoning-runaway guardrails. Abort a streamed reply that is still only | COMMENT |
| MEDIUM | workflows/_shared/cited_report_finalizer.py | 222 | # release") in ``source_url`` when the LLM hallucinates a citation | COMMENT |
| MEDIUM | apodex/config.py | 42 | # Model context window (tokens) — drives the context-fill indicator and the | COMMENT |
| MEDIUM | apodex/render.py | 164 | # Agent Team orchestration. | COMMENT |
| MEDIUM⚡ | apodex/tests/test_features.py | 1690 | assert "one" in out and "TARGET" in out and "three" in out # context window shown | CODE |
| MEDIUM | apodex/profiles/agent_team.yaml | 18 | # ``profile.tools()``; the coordinator's orchestration tools and its | COMMENT |
| MEDIUM | …_bench/eval/verifiable/scorers/query_06/auto_scorer.py | 534 | # null_resolution marked this as verified hallucination → -1 | COMMENT |
| MEDIUM | …_bench/eval/verifiable/scorers/query_22/auto_scorer.py | 624 | # closed (1 drug). resolutions can still mark hallucination for unaligned | COMMENT |
| MEDIUM | …_bench/eval/verifiable/scorers/query_10/auto_scorer.py | 204 | # null_resolution marked this as verified hallucination → -1 penalty | COMMENT |
| MEDIUM | …_bench/eval/verifiable/scorers/query_28/auto_scorer.py | 875 | # No match, no Stage C verdict — treat as hallucination | COMMENT |
| MEDIUM | scripts/run-truncation-ab.sh | 5 | # TOOL_RESULT_TRUNCATION. The context window and the per-tool cap are shrunk on | COMMENT |
| MEDIUM | scripts/run-truncation-ab.sh | 26 | # is only meaningful relative to the context window it competes with. | COMMENT |
| MEDIUM | frontier_agent/core/runtime/loop/tool_exec.py | 96 | # Fan-in / orchestration tools whose results carry a sub-agent's actual | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | workflows/agent_team/prompts.py | 293 | ### Step 1: Understand, then decompose (think first) | COMMENT |
| LOW⚡ | workflows/agent_team/prompts.py | 386 | ### Step 5: Verify the Draft | COMMENT |
| LOW⚡ | workflows/agent_team/prompts.py | 390 | ### Step 6: Revise & Submit | COMMENT |
| LOW | workflows/agent_team/prompts.py | 324 | ### Step 2: Create & Assign Agents | COMMENT |
| LOW | workflows/agent_team/prompts.py | 335 | ### Step 3: Review Reports & Fill Gaps | COMMENT |
| LOW | workflows/agent_team/prompts.py | 348 | ### Step 4: Synthesize Draft Answer — verbatim merge | COMMENT |
| LOW⚡ | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 503 | # Step 2: programmatic checks | COMMENT |
| LOW⚡ | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 511 | # Step 3: fast/slow routing | COMMENT |
| LOW | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 490 | # Step 1: parallel aligner votes | COMMENT |
| LOW | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 528 | # Step 4: consolidate final answer | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | workflows/agent_team/prompts.py | 293 | ### Step 1: Understand, then decompose (think first) | COMMENT |
| LOW⚡ | workflows/agent_team/prompts.py | 386 | ### Step 5: Verify the Draft | COMMENT |
| LOW⚡ | workflows/agent_team/prompts.py | 390 | ### Step 6: Revise & Submit | COMMENT |
| LOW | workflows/agent_team/prompts.py | 324 | ### Step 2: Create & Assign Agents | COMMENT |
| LOW | workflows/agent_team/prompts.py | 335 | ### Step 3: Review Reports & Fill Gaps | COMMENT |
| LOW | workflows/agent_team/prompts.py | 348 | ### Step 4: Synthesize Draft Answer — verbatim merge | COMMENT |
| LOW⚡ | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 503 | # Step 2: programmatic checks | COMMENT |
| LOW⚡ | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 511 | # Step 3: fast/slow routing | COMMENT |
| LOW | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 490 | # Step 1: parallel aligner votes | COMMENT |
| LOW | …ch_bench/eval/verifiable/scorers/pipeline/alignment.py | 528 | # Step 4: consolidate final answer | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plugins/tools/create_file.py | 273 | Create or edit a deliverable file in the sandbox — office (docx/xlsx/pptx) OR text (txt/md/csv/tsv/json/jsonl/html/h | STRING |
| HIGH | plugins/tools/web_search.py | 441 | Search the web for information about a topic. ``q`` accepts a single string or a list of strings. List queries | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/install/tui-endpoint-quickstart.md | 49 | OPENAI_API_KEY=your-api-key | CODE |
| HIGH | docs/install/tui-endpoint-quickstart.zh-CN.md | 46 | OPENAI_API_KEY=your-api-key | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/tools/_writer_pptx.py | 283 | _set_ph(slide, args.get("placeholder", "body"), args["text"]) | CODE |
| LOW | plugins/tools/_writer_pptx.py | 285 | return f"set {args.get('placeholder', 'body')} on slide {args['slide']}" | CODE |
| LOW⚡ | tests/test_hf_space_leaks.py | 293 | with MockLLMServer(script=[text_turn("placeholder")]) as server: | CODE |
| LOW | tests/test_hf_space_leaks.py | 345 | with MockLLMServer(script=[text_turn("placeholder")]) as server: | CODE |
| LOW | tests/test_hf_space_leaks.py | 367 | with MockLLMServer(script=[text_turn("placeholder")]) as server: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | workflows/stateful_react_agent/observers.py | 439 | CODE | |
| LOW | apodex/tui/screens.py | 523 | CODE | |
| LOW | …val/verifiable/scorers/pipeline/extraction_pipeline.py | 871 | CODE | |
| LOW | frontier_agent/core/runtime/loop/_call.py | 16 | CODE | |
| LOW | frontier_agent/core/runtime/loop/agent_loop.py | 94 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/run.sh | 5 | # Usage: | COMMENT |
| LOW | benchmarks/frontierchallenge/scripts/run_eval.sh | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | benchmarks/public/runner/run_one_task.py | 138 | # Create a fresh agent wrapper pointing to this trial | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | apodex/task_runner.py | 244 | async def run_task(self, task: str) -> None: | CODE |
| LOW | apodex/tests/test_userenv.py | 369 | async def run_task(self, task: str) -> None: | CODE |
| LOW | apodex/tests/test_tui.py | 110 | async def run_task(self, task: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontier_agent/scheduling/scheduler.py | 119 | # Check if we have a dynamically compiled version | COMMENT |