General plug-and-play inference library for Recursive Language Models (RLMs), supporting various sandboxes.
This report summarizes scanner evidence for alexzhang13/rlm, a Python project with 5,678 GitHub stars. SynthScan examined 36,550 lines of code across 155 source files, recording 785 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 40.0 (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? 382 finding(s).
Are imports declared and package/API names verified? 55 finding(s).
Are wrappers, guards, and repeated structures necessary? 656 finding(s).
Which changes need focused human review? 785 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 785 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | training/src/rlm_train/worker.py | 133 | except Exception: | CODE |
| HIGH | training/src/rlm_train/repl/subprocess.py | 153 | except TimeoutError: | CODE |
| HIGH | training/src/rlm_train/repl/subprocess.py | 81 | except (TimeoutError, BrokenPipeError, ConnectionResetError, WorkerProtocolError): | CODE |
| HIGH | training/src/rlm_train/repl/subprocess.py | 87 | except ProcessLookupError: | CODE |
| HIGH | training/src/rlm_train/repl/subprocess.py | 98 | except (asyncio.CancelledError, Exception): | CODE |
| HIGH | tests/test_imports.py | 437 | except Exception: | CODE |
| HIGH | tests/test_imports.py | 445 | except Exception: | CODE |
| HIGH | tests/test_imports.py | 453 | except Exception: | CODE |
| HIGH | tests/test_imports.py | 475 | except Exception: | CODE |
| HIGH | tests/test_imports.py | 484 | except Exception: | CODE |
| HIGH | tests/test_depth_metadata.py | 107 | except RuntimeError: | CODE |
| HIGH | tests/test_depth_metadata.py | 132 | except RuntimeError: | CODE |
| HIGH | rlm/core/rlm.py | 801 | except Exception: | CODE |
| HIGH | rlm/core/rlm.py | 869 | except Exception: | CODE |
| HIGH | rlm/core/lm_handler.py | 42 | except (BrokenPipeError, ConnectionError, ConnectionResetError, OSError): | CODE |
| HIGH | rlm/environments/local_repl.py | 596 | except Exception: | CODE |
| HIGH | rlm/environments/local_repl.py | 46 | except Exception: | CODE |
| HIGH | rlm/environments/daytona_repl.py | 561 | except requests.exceptions.RequestException: | CODE |
| HIGH | rlm/environments/daytona_repl.py | 563 | except Exception: | CODE |
| HIGH | rlm/environments/daytona_repl.py | 687 | except Exception: | CODE |
| HIGH | rlm/environments/daytona_repl.py | 693 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1497 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1510 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1480 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1484 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 156 | except (BrokenPipeError, ConnectionError, ConnectionResetError, OSError): | CODE |
| HIGH | rlm/environments/ipython_repl.py | 649 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1341 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1456 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1462 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 1468 | except Exception: | CODE |
| HIGH | rlm/environments/ipython_repl.py | 161 | except Exception: | CODE |
| HIGH | rlm/environments/e2b_repl.py | 356 | except Exception: | CODE |
| HIGH | rlm/environments/e2b_repl.py | 386 | except requests.exceptions.RequestException: | CODE |
| HIGH | rlm/environments/e2b_repl.py | 388 | except Exception: | CODE |
| HIGH | rlm/environments/e2b_repl.py | 500 | except Exception: | CODE |
| HIGH | rlm/environments/docker_repl.py | 110 | except (BrokenPipeError, ConnectionError, OSError): | CODE |
| HIGH | rlm/environments/prime_repl.py | 588 | except Exception: | CODE |
| HIGH | rlm/environments/prime_repl.py | 411 | except Exception: | CODE |
| HIGH | rlm/environments/prime_repl.py | 456 | except requests.exceptions.RequestException: | CODE |
| HIGH | rlm/environments/prime_repl.py | 458 | except Exception: | CODE |
| HIGH | rlm/environments/prime_repl.py | 582 | except Exception: | CODE |
| HIGH | rlm/environments/modal_repl.py | 389 | except requests.exceptions.RequestException: | CODE |
| HIGH | rlm/environments/modal_repl.py | 391 | except Exception: | CODE |
| HIGH | rlm/environments/modal_repl.py | 503 | except Exception: | CODE |
| 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 |
|---|---|---|---|---|
| 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 |
|---|---|---|---|---|
| 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 |
|---|---|---|---|---|
| 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 |