General plug-and-play inference library for Recursive Language Models (RLMs), supporting various sandboxes.
This report presents the forensic synthetic code analysis of alexzhang13/rlm, a Python project with 5,257 GitHub stars. SynthScan v2.0 examined 36,548 lines of code across 155 source files, recording 740 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 34.3 places this repository in the Strong AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 740 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_ipython_repl.py | 121 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 123 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 147 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 149 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 168 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 170 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 196 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 198 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 237 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 239 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 266 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 268 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 310 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 312 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 370 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 372 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 458 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 460 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 495 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 497 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 515 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 517 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 530 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 532 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 544 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 546 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 549 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 551 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 601 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 603 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 715 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 717 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 766 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_ipython_repl.py | 768 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_ipython_repl.py | 24 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_ipython_repl.py | 26 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_ipython_repl.py | 84 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_ipython_repl.py | 86 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_depth_metadata.py | 44 | # ======================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_depth_metadata.py | 46 | # ======================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_depth_metadata.py | 379 | # ======================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_depth_metadata.py | 381 | # ======================================================================== | COMMENT |
| MEDIUM⚡ | tests/repl/test_custom_tools.py | 95 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/repl/test_custom_tools.py | 97 | # ============================================================================= | COMMENT |
| MEDIUM | tests/repl/test_custom_tools.py | 25 | # ============================================================================= | COMMENT |
| MEDIUM | tests/repl/test_custom_tools.py | 27 | # ============================================================================= | COMMENT |
| MEDIUM | tests/repl/test_custom_tools.py | 51 | # ============================================================================= | COMMENT |
| MEDIUM | tests/repl/test_custom_tools.py | 53 | # ============================================================================= | COMMENT |
| MEDIUM | tests/repl/test_custom_tools.py | 333 | # ============================================================================= | COMMENT |
| MEDIUM | tests/repl/test_custom_tools.py | 335 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/core/comms_utils.py | 16 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/core/comms_utils.py | 18 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/core/comms_utils.py | 141 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/core/comms_utils.py | 143 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/core/comms_utils.py | 199 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/core/comms_utils.py | 201 | # ============================================================================= | COMMENT |
| MEDIUM | rlm/logger/verbose.py | 20 | # ============================================================================ | COMMENT |
| MEDIUM | rlm/logger/verbose.py | 22 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | rlm/environments/local_repl.py | 50 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | rlm/environments/local_repl.py | 52 | # ============================================================================= | COMMENT |
| 72 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_multi_turn_integration.py | 41 | def test_environment_reused_in_persistent_mode(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 65 | def test_context_accumulation_across_calls(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 91 | def test_history_accumulation_across_calls(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 119 | def test_variable_persistence_across_completions(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 152 | def test_prompt_includes_context_count(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 175 | def test_prompt_includes_history_count(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 202 | def test_can_access_previous_context_in_code(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 228 | def test_can_access_history_in_code(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 258 | def test_non_persistent_creates_fresh_environment(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 279 | def test_default_is_non_persistent(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 291 | def test_context_manager_cleanup(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 332 | def test_unsupported_environment_raises_error(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 342 | def test_local_environment_supported(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 353 | def test_docker_environment_supported(self): | CODE |
| LOW | tests/test_multi_turn_integration.py | 369 | def test_three_turn_conversation(self): | CODE |
| LOW | tests/test_parsing.py | 28 | def test_multiple_code_blocks(self): | CODE |
| LOW | tests/test_parsing.py | 48 | def test_non_repl_code_blocks_ignored(self): | CODE |
| LOW | tests/test_parsing.py | 62 | def test_multiline_code_block(self): | STRING |
| LOW⚡ | tests/test_parsing.py | 81 | def test_answer_dict_ready_true_sets_final_answer(self): | CODE |
| LOW⚡ | tests/test_parsing.py | 90 | def test_answer_dict_unset_keeps_final_answer_none(self): | CODE |
| LOW⚡ | tests/test_parsing.py | 99 | def test_answer_dict_rebind_with_ready(self): | CODE |
| LOW⚡ | tests/test_parsing.py | 108 | def test_answer_content_can_be_non_string(self): | CODE |
| LOW | tests/test_parsing.py | 137 | def test_excludes_private_vars(self): | CODE |
| LOW | tests/test_parsing.py | 153 | def test_iteration_with_code_blocks(self): | CODE |
| LOW | tests/test_parsing.py | 167 | def test_iteration_without_code_blocks(self): | CODE |
| LOW | tests/test_parsing.py | 177 | def test_truncates_long_results(self): | CODE |
| LOW | tests/test_parsing.py | 208 | def test_list_of_message_dicts(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 13 | def test_add_context_versioning(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 24 | def test_update_handler_address(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 31 | def test_add_context_auto_increment(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 43 | def test_contexts_accessible_in_code(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 54 | def test_context_alias_points_to_first(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 91 | def test_add_multiple_histories(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 108 | def test_history_accessible_via_code(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 134 | def test_can_iterate_histories_in_code(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 159 | def test_variables_persist_with_contexts(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 174 | def test_variables_persist_with_histories(self): | CODE |
| LOW | tests/test_local_repl_persistent.py | 189 | def test_full_persistent_session_simulation(self): | CODE |
| LOW⚡ | tests/test_imports.py | 49 | def test_openai_client_import(self): | CODE |
| LOW⚡ | tests/test_imports.py | 56 | def test_anthropic_client_import(self): | CODE |
| LOW⚡ | tests/test_imports.py | 63 | def test_portkey_client_import(self): | CODE |
| LOW⚡ | tests/test_imports.py | 249 | def test_no_duplicate_names_in_rlm_all(self): | CODE |
| LOW⚡ | tests/test_imports.py | 259 | def test_no_duplicate_names_in_logger_all(self): | CODE |
| LOW⚡ | tests/test_imports.py | 269 | def test_all_declarations_match_exports(self): | CODE |
| LOW⚡ | tests/test_imports.py | 456 | def test_all_environment_classes_importable(self): | CODE |
| LOW | tests/test_imports.py | 36 | def test_clients_module_import(self): | CODE |
| LOW | tests/test_imports.py | 108 | def test_core_lm_handler_import(self): | CODE |
| LOW | tests/test_imports.py | 114 | def test_core_comms_utils_import(self): | CODE |
| LOW | tests/test_imports.py | 136 | def test_environments_module_import(self): | CODE |
| LOW | tests/test_imports.py | 178 | def test_get_environment_function(self): | CODE |
| LOW | tests/test_imports.py | 188 | def test_logger_module_import(self): | CODE |
| LOW | tests/test_imports.py | 346 | def test_no_naming_conflicts_across_modules(self): | CODE |
| LOW | tests/test_imports.py | 424 | def test_all_client_classes_importable(self): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 47 | def test_satisfies_persistence_protocol(self, repl): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 52 | def test_add_context_versioning_and_access(self, repl): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 59 | def test_add_context_auto_increment(self, repl): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 66 | def test_context_alias_points_to_first(self, repl): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 79 | def test_add_history_versioning(self, repl): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 88 | def test_history_alias_points_to_first(self, repl): | CODE |
| LOW⚡ | tests/test_docker_repl_persistent.py | 93 | def test_add_history_deep_copy(self, repl): | CODE |
| 238 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_multi_turn_integration.py | 0 | render a model response that submits ``content`` as the final answer. | STRING |
| HIGH | tests/test_subcall.py | 0 | render a model response that submits ``content`` as the final answer. | STRING |
| HIGH | tests/test_depth_metadata.py | 0 | render a model response that submits ``content`` as the final answer. | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | import json import threading import uuid from flask import flask, request, jsonify app = flask(__name__) # request queue | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | import json import threading import uuid from flask import flask, request, jsonify app = flask(__name__) # request queue | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | import json import threading import uuid from flask import flask, request, jsonify app = flask(__name__) # request queue | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | data = request.json request_id = str(uuid.uuid4()) event = threading.event() with lock: pending_requests[request_id] = { | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | data = request.json request_id = str(uuid.uuid4()) event = threading.event() with lock: pending_requests[request_id] = { | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | data = request.json request_id = str(uuid.uuid4()) event = threading.event() with lock: pending_requests[request_id] = { | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | with lock: pending = [ {"id": rid, "request": entry["request"]} for rid, entry in pending_requests.items() if entry["res | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | with lock: pending = [ {"id": rid, "request": entry["request"]} for rid, entry in pending_requests.items() if entry["res | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | with lock: pending = [ {"id": rid, "request": entry["request"]} for rid, entry in pending_requests.items() if entry["res | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | data = request.json request_id = data.get("id") response = data.get("response") with lock: if request_id in pending_requ | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | data = request.json request_id = data.get("id") response = data.get("response") with lock: if request_id in pending_requ | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | data = request.json request_id = data.get("id") response = data.get("response") with lock: if request_id in pending_requ | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | import sys import io import json import base64 import traceback import os import requests try: import dill except import | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | import sys import io import json import base64 import traceback import os import requests try: import dill except import | STRING |
| HIGH | rlm/environments/prime_repl.py | 0 | import sys import io import json import base64 import traceback import os import requests try: import dill except import | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | import sys import io import json import base64 import traceback import os import requests try: import dill except import | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "single", "prompt": prompt, "model": model}}, t | STRING |
| HIGH | rlm/environments/prime_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "single", "prompt": prompt, "model": model}}, t | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "single", "prompt": prompt, "model": model}}, t | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "single", "prompt": prompt, "model": model}}, t | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "batched", "prompts": prompts, "model": model, | STRING |
| HIGH | rlm/environments/prime_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "batched", "prompts": prompts, "model": model, | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | try: response = requests.post( f"{{broker_url}}/enqueue", json={{"type": "batched", "prompts": prompts, "model": model, | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | poll the broker for pending llm requests and handle them. | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | poll the broker for pending llm requests and handle them. | STRING |
| HIGH | rlm/environments/prime_repl.py | 0 | poll the broker for pending llm requests and handle them. | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | poll the broker for pending llm requests and handle them. | STRING |
| HIGH | rlm/environments/daytona_repl.py | 0 | ' else: context_json = json.dumps(context_payload) escaped_json = context_json.replace("\\", "\\\\").replace("'", "\\'") | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | ' else: context_json = json.dumps(context_payload) escaped_json = context_json.replace("\\", "\\\\").replace("'", "\\'") | STRING |
| HIGH | rlm/environments/prime_repl.py | 0 | ' else: context_json = json.dumps(context_payload) escaped_json = context_json.replace("\\", "\\\\").replace("'", "\\'") | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | ' else: context_json = json.dumps(context_payload) escaped_json = context_json.replace("\\", "\\\\").replace("'", "\\'") | STRING |
| HIGH | rlm/environments/e2b_repl.py | 0 | build a script that executes code with state persistence. llm queries go through the local broker server. | STRING |
| HIGH | rlm/environments/prime_repl.py | 0 | build a script that executes code with state persistence. llm queries go through the local broker server. | STRING |
| HIGH | rlm/environments/modal_repl.py | 0 | build a script that executes code with state persistence. llm queries go through the local broker server. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | training/environments/oolong/oolong/env.py | 46 | except Exception: | CODE |
| LOW | training/environments/oolong/oolong/env.py | 61 | except Exception: | CODE |
| LOW | training/environments/oolong/oolong/env.py | 66 | except Exception: | CODE |
| LOW | training/src/rlm_train/worker.py | 133 | except Exception: | CODE |
| LOW | training/src/rlm_train/worker.py | 224 | except Exception: | CODE |
| LOW | training/src/rlm_train/worker.py | 232 | except Exception as e: | CODE |
| LOW | training/src/rlm_train/env.py | 182 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | training/src/rlm_train/env.py | 234 | except Exception: | CODE |
| LOW | training/src/rlm_train/proxy.py | 71 | except Exception: | CODE |
| LOW⚡ | training/src/rlm_train/proxy.py | 139 | except Exception as e: | CODE |
| LOW⚡ | training/src/rlm_train/proxy.py | 147 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | training/src/rlm_train/proxy.py | 153 | except Exception: | CODE |
| LOW | training/src/rlm_train/proxy.py | 164 | except Exception as e: | CODE |
| LOW | training/src/rlm_train/proxy.py | 175 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | training/src/rlm_train/proxy.py | 185 | except Exception: | CODE |
| LOW | training/src/rlm_train/proxy.py | 202 | except Exception: | CODE |
| LOW | training/src/rlm_train/proxy.py | 205 | except Exception as e: # noqa: BLE001 | CODE |
| LOW⚡ | tests/test_imports.py | 437 | except Exception: | CODE |
| LOW⚡ | tests/test_imports.py | 445 | except Exception: | CODE |
| LOW⚡ | tests/test_imports.py | 453 | except Exception: | CODE |
| LOW | tests/test_imports.py | 475 | except Exception: | CODE |
| LOW | tests/test_imports.py | 484 | except Exception: | CODE |
| LOW | tests/test_docker_repl_persistent.py | 21 | except Exception: | CODE |
| LOW | tests/test_docker_repl_robustness.py | 34 | except Exception: | CODE |
| LOW | tests/clients/portkey.py | 19 | except Exception as e: | CODE |
| LOW | rlm/core/rlm.py | 754 | except Exception as e: | CODE |
| LOW | rlm/core/rlm.py | 801 | except Exception: | CODE |
| LOW | rlm/core/rlm.py | 852 | except Exception as e: | CODE |
| LOW | rlm/core/rlm.py | 869 | except Exception: | CODE |
| LOW | rlm/core/lm_handler.py | 47 | except Exception as e: | CODE |
| MEDIUM | rlm/core/lm_handler.py | 20 | def handle(self): | CODE |
| LOW | rlm/core/types.py | 33 | except Exception: | CODE |
| LOW | rlm/core/types.py | 285 | except Exception: | CODE |
| LOW | rlm/core/types.py | 302 | except Exception: | CODE |
| LOW | rlm/core/comms_utils.py | 223 | except Exception as e: | CODE |
| LOW | rlm/core/comms_utils.py | 266 | except Exception as e: | CODE |
| LOW⚡ | rlm/environments/local_repl.py | 46 | except Exception: | CODE |
| LOW | rlm/environments/local_repl.py | 279 | except Exception as e: | CODE |
| LOW | rlm/environments/local_repl.py | 310 | except Exception as e: | CODE |
| LOW | rlm/environments/local_repl.py | 329 | except Exception as e: | CODE |
| LOW | rlm/environments/local_repl.py | 361 | except Exception as e: | CODE |
| LOW | rlm/environments/local_repl.py | 378 | except Exception as e: | CODE |
| LOW | rlm/environments/local_repl.py | 569 | except Exception as e: | CODE |
| LOW | rlm/environments/local_repl.py | 596 | except Exception: | CODE |
| LOW⚡ | rlm/environments/daytona_repl.py | 254 | except Exception as e: | CODE |
| LOW | rlm/environments/daytona_repl.py | 238 | except Exception as e: | CODE |
| LOW | rlm/environments/daytona_repl.py | 339 | except Exception as e: | CODE |
| LOW | rlm/environments/daytona_repl.py | 517 | except Exception: | STRING |
| LOW | rlm/environments/daytona_repl.py | 563 | except Exception: | STRING |
| LOW | rlm/environments/daytona_repl.py | 687 | except Exception: | STRING |
| LOW | rlm/environments/daytona_repl.py | 693 | except Exception: | STRING |
| MEDIUM | rlm/environments/ipython_repl.py | 148 | def handle(self) -> None: | CODE |
| MEDIUM | rlm/environments/ipython_repl.py | 663 | def _setup_in_process(self) -> None: | CODE |
| MEDIUM | rlm/environments/ipython_repl.py | 1507 | def __del__(self) -> None: | CODE |
| LOW | rlm/environments/ipython_repl.py | 158 | except Exception as e: | CODE |
| LOW | rlm/environments/ipython_repl.py | 161 | except Exception: | CODE |
| LOW | rlm/environments/ipython_repl.py | 211 | except Exception as e: | CODE |
| LOW | rlm/environments/ipython_repl.py | 231 | except Exception as e: | CODE |
| LOW | rlm/environments/ipython_repl.py | 433 | except Exception: | CODE |
| LOW | rlm/environments/ipython_repl.py | 872 | except Exception as e: | CODE |
| 58 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/src/app/page.tsx | 115 | print(result.response)`} /> | CODE |
| HIGH | docs/src/app/page.tsx | 131 | print(result.response)`} /> | CODE |
| HIGH | docs/src/app/page.tsx | 147 | print(result.response)`} /> | CODE |
| HIGH | docs/src/app/api/page.tsx | 26 | print(result.response)`} /> | CODE |
| HIGH⚡ | docs/src/app/trajectories/page.tsx | 61 | print(f"Iteration {iteration['iteration']}") | CODE |
| HIGH⚡ | docs/src/app/trajectories/page.tsx | 62 | print(f"Prompt: {iteration['prompt'][:100]}...") | CODE |
| HIGH⚡ | docs/src/app/trajectories/page.tsx | 63 | print(f"Code: {iteration.get('code', 'N/A')}") | CODE |
| HIGH⚡ | docs/src/app/trajectories/page.tsx | 64 | print(f"Result: {iteration.get('result', {}).get('stdout', 'N/A')}") | CODE |
| HIGH⚡ | docs/src/app/trajectories/page.tsx | 65 | print("---")`} /> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | training/environments/oolong/oolong/env.py | 3 | CODE | |
| LOW | training/environments/oolong/oolong/__init__.py | 1 | CODE | |
| LOW | training/src/rlm_train/rubric.py | 3 | CODE | |
| LOW | training/src/rlm_train/worker.py | 3 | CODE | |
| LOW | training/src/rlm_train/env.py | 3 | CODE | |
| LOW | training/src/rlm_train/proxy.py | 3 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 1 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 2 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 2 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 3 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 3 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 3 | CODE | |
| LOW | training/src/rlm_train/__init__.py | 4 | CODE | |
| LOW | training/src/rlm_train/repl/subprocess.py | 3 | CODE | |
| LOW | training/src/rlm_train/repl/__init__.py | 1 | CODE | |
| LOW | training/src/rlm_train/repl/__init__.py | 1 | CODE | |
| LOW | training/src/rlm_train/repl/__init__.py | 2 | CODE | |
| LOW | training/src/rlm_train/repl/base.py | 1 | CODE | |
| LOW | tests/test_ipython_repl.py | 10 | CODE | |
| LOW | tests/test_ipython_repl.py | 30 | CODE | |
| LOW | tests/test_ipython_repl.py | 31 | CODE | |
| LOW | rlm/__init__.py | 1 | CODE | |
| LOW | rlm/__init__.py | 2 | CODE | |
| LOW | rlm/__init__.py | 2 | CODE | |
| LOW | rlm/__init__.py | 2 | CODE | |
| LOW | rlm/__init__.py | 2 | CODE | |
| LOW | rlm/__init__.py | 2 | CODE | |
| LOW | rlm/logger/__init__.py | 1 | CODE | |
| LOW | rlm/logger/__init__.py | 2 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/__init__.py | 3 | CODE | |
| LOW | rlm/environments/ipython_repl.py | 18 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | training/environments/oolong/oolong/env.py | 91 | CODE | |
| LOW | training/src/rlm_train/worker.py | 351 | CODE | |
| LOW | training/src/rlm_train/worker.py | 171 | CODE | |
| LOW | training/src/rlm_train/worker.py | 309 | CODE | |
| LOW | training/src/rlm_train/proxy.py | 39 | CODE | |
| LOW | training/src/rlm_train/proxy.py | 157 | CODE | |
| LOW | training/src/rlm_train/proxy.py | 212 | CODE | |
| LOW | tests/test_subcall.py | 361 | CODE | |
| LOW | rlm/clients/__init__.py | 11 | CODE | |
| LOW | rlm/clients/gemini.py | 97 | CODE | |
| LOW | rlm/clients/openai.py | 54 | CODE | |
| LOW | rlm/clients/openai.py | 148 | CODE | |
| LOW | rlm/clients/anthropic.py | 66 | CODE | |
| LOW | rlm/core/rlm.py | 326 | CODE | |
| LOW | rlm/core/types.py | 270 | CODE | |
| LOW | rlm/environments/local_repl.py | 335 | CODE | |
| LOW | rlm/environments/local_repl.py | 514 | CODE | |
| LOW | rlm/environments/local_repl.py | 547 | CODE | |
| LOW | rlm/environments/daytona_repl.py | 156 | CODE | |
| LOW | rlm/environments/daytona_repl.py | 568 | CODE | |
| LOW | rlm/environments/__init__.py | 45 | CODE | |
| LOW | rlm/environments/ipython_repl.py | 1143 | CODE | |
| LOW | rlm/environments/ipython_repl.py | 1263 | CODE | |
| LOW | rlm/environments/ipython_repl.py | 1303 | CODE | |
| LOW | rlm/environments/e2b_repl.py | 393 | CODE | |
| LOW | rlm/environments/docker_repl.py | 217 | CODE | |
| LOW | rlm/environments/docker_repl.py | 74 | CODE | |
| LOW | rlm/environments/prime_repl.py | 463 | CODE | |
| LOW | rlm/environments/modal_repl.py | 396 | CODE | |
| LOW | rlm/utils/parsing.py | 110 | CODE | |
| LOW | rlm/utils/token_utils.py | 92 | CODE | |
| LOW | examples/depth_metadata_example.py | 31 | CODE | |
| LOW | examples/depth_metadata_example.py | 77 | CODE | |
| LOW | examples/rlm_query_batched_example.py | 31 | CODE | |
| LOW | examples/rlm_query_batched_example.py | 74 | CODE | |
| LOW | examples/daytona_repl_example.py | 38 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_ipython_repl.py | 731 | # parent REPL. Any other scaffold (llm_query, SHOW_VARS, ...) | COMMENT |
| MEDIUM⚡ | tests/test_local_repl.py | 219 | # After scaffold restore, the rebound dict has been wrapped back into the | COMMENT |
| MEDIUM | rlm/environments/local_repl.py | 564 | # Restore scaffold so model overwrites (context = ..., llm_query = ...) don't persist | COMMENT |
| MEDIUM | rlm/environments/daytona_repl.py | 345 | # Restore scaffold aliases if overwritten by executed code | COMMENT |
| MEDIUM | rlm/environments/ipython_repl.py | 595 | # mode the LM can reach this REPL via any scaffold bound method's | STRING |
| MEDIUM | rlm/environments/ipython_repl.py | 602 | # scaffold is plain functions with no ``__self__``. | STRING |
| MEDIUM | rlm/environments/ipython_repl.py | 700 | # Inject scaffold functions | STRING |
| MEDIUM | rlm/environments/ipython_repl.py | 754 | # Bootstrap scaffold inside the kernel | STRING |
| MEDIUM | rlm/environments/ipython_repl.py | 1107 | # scaffold bound method) to call back into the parent. The | STRING |
| MEDIUM | rlm/environments/ipython_repl.py | 1216 | # Re-inject scaffold in case user code overwrote it | STRING |
| MEDIUM | rlm/environments/e2b_repl.py | 240 | # Restore scaffold aliases if overwritten by executed code | COMMENT |
| MEDIUM | rlm/environments/docker_repl.py | 388 | # Restore scaffold aliases if overwritten by executed code | COMMENT |
| MEDIUM | rlm/environments/prime_repl.py | 256 | # Restore scaffold aliases if overwritten by executed code | COMMENT |
| MEDIUM | rlm/environments/modal_repl.py | 257 | # Restore scaffold aliases if overwritten by executed code | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/getting-started.md | 67 | ### Step 1: Set Up API Keys | COMMENT |
| LOW | docs/getting-started.md | 78 | ### Step 2: Basic Usage | COMMENT |
| LOW | docs/getting-started.md | 101 | ### Step 3: Enable Verbose Output | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 36 | // Step 1: Protect strings by replacing with markers | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 44 | // Step 2: Highlight keywords | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 48 | // Step 3: Highlight functions | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 51 | // Step 4: Highlight numbers | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 54 | // Step 5: Highlight comments | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 57 | // Step 6: Restore strings with highlighting | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | rlm/environments/daytona_repl.py | 42 | "apt-get update && apt-get install -y build-essential \ | CODE |
| HIGH | rlm/environments/docker_repl.py | 747 | "rm -rf /workspace/* /workspace/.[!.]* 2>/dev/null || true", | STRING |
| HIGH⚡ | rlm/environments/prime_repl.py | 420 | f"cat {self.broker_job.stdout_log_file} 2>/dev/null || echo 'No stdout log'", | STRING |
| HIGH⚡ | rlm/environments/prime_repl.py | 424 | f"cat {self.broker_job.stderr_log_file} 2>/dev/null || echo 'No stderr log'", | STRING |
| HIGH | rlm/environments/prime_repl.py | 355 | apt_cmd = "apt-get update && apt-get install -y " + " ".join(APT_PACKAGES) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docs/src/components/CodeBlock.tsx | 36 | // Step 1: Protect strings by replacing with markers | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 44 | // Step 2: Highlight keywords | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 48 | // Step 3: Highlight functions | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 51 | // Step 4: Highlight numbers | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 54 | // Step 5: Highlight comments | COMMENT |
| LOW⚡ | docs/src/components/CodeBlock.tsx | 57 | // Step 6: Restore strings with highlighting | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | training/environments/oolong/oolong/env.py | 186 | __all__ = ["load_environment"] | CODE |
| LOW | training/environments/oolong/oolong/__init__.py | 3 | __all__ = ["load_environment"] | CODE |
| LOW | training/src/rlm_train/worker.py | 161 | def _setup_namespace(self) -> None: | CODE |
| LOW | training/src/rlm_train/env.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | training/src/rlm_train/proxy.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | training/src/rlm_train/__init__.py | 8 | __all__ = [ | CODE |
| LOW | training/src/rlm_train/repl/__init__.py | 4 | __all__ = ["ReplBackend", "ExecResult", "SubprocessReplBackend"] | CODE |
| LOW | rlm/__init__.py | 10 | __all__ = [ | CODE |
| LOW | rlm/logger/__init__.py | 4 | __all__ = ["RLMLogger", "VerbosePrinter"] | CODE |
| LOW | rlm/environments/local_repl.py | 441 | def update_handler_address(self, address: tuple[str, int]) -> None: | CODE |
| LOW | rlm/environments/__init__.py | 28 | __all__ = [ | CODE |
| LOW | rlm/environments/ipython_repl.py | 1079 | def update_handler_address(self, address: tuple[str, int]) -> None: | CODE |
| LOW⚡ | rlm/environments/ipython_repl.py | 663 | def _setup_in_process(self) -> None: | STRING |
| LOW | rlm/environments/ipython_repl.py | 713 | def _setup_subprocess(self) -> None: | STRING |
| LOW | rlm/environments/base_env.py | 314 | def update_handler_address(self, address: tuple[str, int]) -> None: | CODE |
| LOW | rlm/environments/docker_repl.py | 573 | def update_handler_address(self, address: tuple[str, int]) -> None: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_subcall.py | 46 | # Create a fake child RLM class to capture initialization params | COMMENT |
| MEDIUM | tests/clients/test_timeout.py | 62 | # Create a mock client that raises timeout | COMMENT |
| MEDIUM | rlm/environments/daytona_repl.py | 497 | # Create a session for the broker server | STRING |
| MEDIUM | rlm/environments/e2b_repl.py | 313 | # Create the sandbox using the recommended Sandbox.create() API | STRING |
| MEDIUM | rlm/environments/prime_repl.py | 338 | # Create the client | STRING |
| MEDIUM | rlm/environments/prime_repl.py | 341 | # Create the sandbox | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/getting-started.md | 356 | "API_KEY": "your-api-key", # Non-callable values become variables | CODE |
| HIGH | docs/getting-started.md | 381 | "API_KEY": {"tool": "your-api-key", "description": "API key for the weather service"}, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | training/environments/oolong/oolong/env.py | 149 | CODE | |
| LOW | training/src/rlm_train/env.py | 32 | CODE | |
| LOW | rlm/core/rlm.py | 49 | CODE | |
| LOW | rlm/core/rlm.py | 704 | CODE | |
| LOW | rlm/environments/local_repl.py | 153 | CODE | |
| LOW | rlm/environments/daytona_repl.py | 378 | CODE | |
| LOW | rlm/environments/ipython_repl.py | 520 | CODE | |
| LOW | rlm/environments/docker_repl.py | 425 | CODE | |
| LOW | rlm/environments/prime_repl.py | 289 | CODE | |
| LOW | rlm/environments/modal_repl.py | 290 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_imports.py | 332 | # Check if dependency is available | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rlm/environments/ipython_repl.py | 581 | self._lock = threading.RLock() | COMMENT |
| LOW | rlm/environments/ipython_repl.py | 601 | # is already shielded by process isolation: the kernel-side | COMMENT |