an ambient intelligence library
This report summarizes scanner evidence for PrefectHQ/marvin, a Python project with 6,203 GitHub stars. SynthScan examined 29,282 lines of code across 233 source files, recording 735 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 34.9 (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? 510 finding(s).
Are imports declared and package/API names verified? 99 finding(s).
Are wrappers, guards, and repeated structures necessary? 521 finding(s).
Which changes need focused human review? 735 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 735 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_concurrent_execution.py | 23 | def test_dependent_tasks_depends_on(self): | CODE |
| LOW⚡ | tests/test_concurrent_execution.py | 30 | def test_dependent_tasks_parent_child(self): | CODE |
| LOW⚡ | tests/test_concurrent_execution.py | 39 | def test_single_task_is_independent(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 53 | async def test_independent_tasks_run_without_errors(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 70 | async def test_dependent_tasks_run_in_order(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 85 | def test_sync_run_tasks_independent(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 96 | def test_sync_run_tasks_dependent(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 115 | async def test_asyncio_gather_no_context_errors(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 130 | async def test_mixed_execution_patterns(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 153 | async def test_actor_context_across_asyncio_gather(self): | CODE |
| LOW | tests/test_concurrent_execution.py | 175 | def test_actor_context_sequential(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 19 | def test_returns_empty_dict_outside_flow(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 24 | def test_returns_flow_context_when_flow_run_id_present(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 49 | def test_returns_task_context_when_task_run_id_present(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 73 | def test_all_values_are_strings(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 99 | def test_handles_import_error_gracefully(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 116 | def test_returns_new_agent_instance(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 125 | def test_original_agent_unchanged(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 136 | def test_merges_with_existing_settings(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 148 | def test_includes_custom_metadata(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 156 | def test_captures_prefect_context_when_in_flow(self): | CODE |
| LOW | tests/beta/observability/test_openai.py | 181 | def test_deep_merges_extra_body(self): | CODE |
| LOW⚡ | tests/beta/observability/test_openai.py | 202 | def test_returns_store_outside_flow(self): | CODE |
| LOW⚡ | tests/beta/observability/test_openai.py | 207 | def test_includes_custom_metadata(self): | CODE |
| LOW⚡ | tests/beta/observability/test_openai.py | 213 | def test_includes_prefect_context_when_in_flow(self): | CODE |
| LOW | tests/settings/test_settings_object.py | 8 | def test_database_url_default(monkeypatch: pytest.MonkeyPatch): | CODE |
| LOW | tests/settings/test_settings_object.py | 31 | def test_database_url_set_from_env_var( | CODE |
| LOW | tests/settings/test_settings_object.py | 41 | def test_database_url_ignores_unprefixed_env_var_uses_default( | CODE |
| LOW | tests/basic/test_anthropic.py | 4 | def test_anthropic_provider_accepts_pydantic_ai_http_client(monkeypatch): | CODE |
| LOW | tests/basic/test_run.py | 15 | def test_simple_run_with_result_type(test_model: TestModel): | CODE |
| LOW | tests/basic/test_run.py | 23 | def test_simple_run_with_wrong_result_type(test_model: TestModel): | CODE |
| LOW | tests/basic/test_instructions.py | 4 | def test_instructions_context(): | CODE |
| LOW | tests/basic/test_instructions.py | 11 | def test_instructions_context_nested(): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 237 | async def test_task_with_multiple_agents(): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 247 | async def test_task_get_default_agent(): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 253 | async def test_task_mark_successful(): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 261 | async def test_task_optional_result_type(): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 564 | async def test_mark_non_verbose_task_successful(self, thread: Thread): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 571 | async def test_mark_verbose_task_failed(self, thread: Thread): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 581 | async def test_mark_verbose_task_failed_context_thread(self, thread: Thread): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 592 | async def test_mark_non_verbose_task_failed(self, thread: Thread): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 599 | async def test_mark_verbose_task_skipped(self, thread: Thread): | CODE |
| LOW⚡ | tests/basic/tasks/test_tasks.py | 609 | async def test_mark_verbose_task_skipped_context_thread(self, thread: Thread): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 29 | async def test_auto_enum_conversion(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 70 | async def test_multi_label_classifier(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 112 | async def test_classifier_validation_errors(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 134 | async def test_classifier_prompt_instruction(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 154 | async def test_classifier_edge_cases(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 196 | async def test_validation_edge_cases(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 277 | async def test_task_with_custom_validator(): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 300 | async def test_task_parent_child_relationship(): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 309 | async def test_task_parent_child_bidirectional(): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 350 | async def test_task_complex_relationships(): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 416 | async def test_task_context_override(): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 433 | async def test_task_context_reenter(): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 460 | async def test_task_prompt_generation(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 492 | async def test_task_prompt_template(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 503 | async def test_task_prompt_jinja_template(self): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 543 | async def test_mark_verbose_task_successful(self, thread: Thread): | CODE |
| LOW | tests/basic/tasks/test_tasks.py | 553 | async def test_mark_verbose_task_successful_context_thread(self, thread: Thread): | CODE |
| 332 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/deepseek_chat.py | 117 | except Exception as e: | STRING |
| LOW | examples/slackbot/src/slackbot/core.py | 114 | except Exception as exc: | CODE |
| LOW | examples/slackbot/src/slackbot/core.py | 141 | except Exception as exc: | CODE |
| LOW | examples/slackbot/src/slackbot/core.py | 312 | except Exception as e: | CODE |
| LOW | examples/slackbot/src/slackbot/core.py | 355 | except Exception as e: | CODE |
| LOW | examples/slackbot/src/slackbot/api.py | 126 | except Exception: | CODE |
| LOW | examples/slackbot/src/slackbot/api.py | 209 | except Exception: | CODE |
| LOW | examples/slackbot/src/slackbot/api.py | 411 | except Exception as e: | CODE |
| LOW | examples/slackbot/src/slackbot/api.py | 423 | except Exception: | CODE |
| LOW | examples/slackbot/src/slackbot/api.py | 475 | except Exception as e: | CODE |
| LOW | examples/slackbot/src/slackbot/research_agent.py | 132 | except Exception as e: | CODE |
| LOW | examples/slackbot/src/slackbot/settings.py | 137 | except Exception: | CODE |
| LOW | examples/slackbot/src/slackbot/search.py | 91 | except Exception as e: | CODE |
| LOW | examples/slackbot/src/slackbot/search.py | 275 | except Exception as e: | CODE |
| LOW | …mples/slackbot/src/slackbot/_internal/observability.py | 24 | except Exception as exc: | CODE |
| LOW | …es/slackbot/src/slackbot/_internal/tolerant_toolset.py | 50 | except Exception as e: # includes ordinary ExceptionGroups, not cancellation | CODE |
| LOW | …es/slackbot/src/slackbot/_internal/tolerant_toolset.py | 61 | except Exception as e: | CODE |
| LOW | …es/slackbot/src/slackbot/_internal/tolerant_toolset.py | 73 | except Exception as e: | CODE |
| MEDIUM | …es/slackbot/src/slackbot/_internal/tolerant_toolset.py | 46 | def __aenter__(self) -> "TolerantToolset[AgentDepsT]": | CODE |
| LOW | …ples/slackbot/src/slackbot/_internal/person_summary.py | 64 | except Exception: | CODE |
| LOW | …ples/slackbot/src/slackbot/_internal/person_summary.py | 147 | except Exception: | CODE |
| LOW | …les/slackbot/src/slackbot/_internal/personalization.py | 78 | except Exception: | CODE |
| LOW | …les/slackbot/src/slackbot/_internal/personalization.py | 95 | except Exception: | CODE |
| LOW | …mples/slackbot/src/slackbot/_internal/tool_tracking.py | 74 | except Exception: | CODE |
| LOW | examples/slackbot/src/slackbot/github/discussions.py | 313 | except Exception as e: | STRING |
| LOW | examples/slack_search/src/slack_search/server.py | 78 | except Exception: | STRING |
| LOW | examples/slack_search/src/slack_search/server.py | 85 | except Exception as e: | STRING |
| LOW | scripts/analyze_threads.py | 91 | except Exception: | CODE |
| LOW | scripts/analyze_threads.py | 149 | except Exception: | CODE |
| LOW | scripts/analyze_threads.py | 496 | except Exception as e: | STRING |
| LOW | scripts/backfill_asset_embeddings.py | 182 | except Exception as e: | CODE |
| LOW | scripts/create_mintlify_api_ref.py | 136 | except Exception as e: | CODE |
| MEDIUM | scripts/create_mintlify_api_ref.py | 137 | print(f"Error finding modules: {e}") | CODE |
| LOW | scripts/create_mintlify_api_ref.py | 237 | except Exception: | CODE |
| LOW | scripts/create_mintlify_api_ref.py | 256 | except Exception: | CODE |
| LOW | scripts/create_mintlify_api_ref.py | 268 | except Exception: | CODE |
| LOW | scripts/create_mintlify_api_ref.py | 464 | except Exception as e: | CODE |
| MEDIUM | scripts/create_mintlify_api_ref.py | 465 | print(f"Error updating {docs_json_path}: {e}") | CODE |
| LOW⚡ | scripts/create_mintlify_api_ref.py | 517 | except Exception: | CODE |
| LOW⚡ | scripts/create_mintlify_api_ref.py | 526 | except Exception: | CODE |
| MEDIUM⚡ | scripts/create_mintlify_api_ref.py | 533 | print(f"Error loading '{package_name}': {e}") | CODE |
| LOW⚡ | scripts/create_mintlify_api_ref.py | 535 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/create_mintlify_api_ref.py | 536 | print(f"Error: {e}") | CODE |
| LOW | scripts/index_assets.py | 630 | except Exception as e: | CODE |
| LOW | src/marvin/thread.py | 130 | except Exception as e: | CODE |
| LOW | src/marvin/thread.py | 149 | except Exception as e: | CODE |
| LOW⚡ | src/marvin/database.py | 369 | except Exception as e: | CODE |
| LOW | src/marvin/database.py | 380 | except Exception: | CODE |
| LOW | src/marvin/database.py | 414 | except Exception as e: | CODE |
| LOW | src/marvin/database.py | 551 | except Exception as e: | CODE |
| LOW | src/marvin/database.py | 563 | except Exception as e: | CODE |
| LOW | src/marvin/beta/observability/openai.py | 145 | except Exception: | CODE |
| LOW | src/marvin/_internal/integrations/fastmcp.py | 189 | except Exception as e: | CODE |
| LOW | src/marvin/_internal/integrations/mcp.py | 127 | except Exception as e: | CODE |
| LOW | src/marvin/_internal/integrations/mcp.py | 216 | except Exception as e: | CODE |
| LOW | src/marvin/_internal/integrations/mcp.py | 229 | except Exception as e_inner: | CODE |
| LOW | src/marvin/tasks/task.py | 432 | except Exception: | CODE |
| LOW | src/marvin/tasks/task.py | 441 | except Exception as e: | CODE |
| LOW | src/marvin/fns/fn.py | 216 | except Exception: | CODE |
| MEDIUM | src/marvin/cli/config.py | 24 | print(f"Error: Setting '{key}' not found.") | CODE |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/basic/tasks/test_tasks.py | 352 | # Create a network of tasks | COMMENT |
| MEDIUM | tests/basic/utilities/test_jsonschema.py | 1158 | # Create an instance to verify the recursive reference works | COMMENT |
| MEDIUM⚡ | tests/basic/actors/test_agent.py | 192 | # Create a mock AgentRunResult | COMMENT |
| MEDIUM⚡ | tests/basic/actors/test_agent.py | 204 | # Create a mock AgentRunResult | COMMENT |
| MEDIUM⚡ | tests/basic/actors/test_agent.py | 217 | # Create a mock AgentRunResult | COMMENT |
| MEDIUM | tests/basic/actors/test_team.py | 69 | # Create a structure of teams and agents: | COMMENT |
| MEDIUM | tests/basic/actors/test_team.py | 102 | # Create a team composed of other teams | COMMENT |
| MEDIUM | tests/basic/actors/test_team.py | 275 | # Create a team with explicit delegation | COMMENT |
| MEDIUM | tests/basic/engine/test_streaming.py | 23 | # Create an incomplete tool call (ToolCallPartDelta with no tool name) | COMMENT |
| MEDIUM | tests/basic/engine/test_streaming.py | 37 | # Create a PartDeltaEvent that references index 0 | COMMENT |
| MEDIUM | tests/basic/engine/test_orchestrator.py | 213 | # Create a complex user message with text and ImageUrl | COMMENT |
| MEDIUM | tests/agents/test_mcp_integration.py | 222 | # Create an agent with the mock server | COMMENT |
| MEDIUM | tests/agents/test_mcp_integration.py | 364 | # Create a thread and enter/exit its context | COMMENT |
| MEDIUM | examples/task_retries.py | 28 | # Create a task that will likely fail on first attempt | COMMENT |
| MEDIUM | examples/hello_team.py | 21 | # Create a Swarm team | COMMENT |
| MEDIUM | examples/hello_team.py | 24 | # Create a task with the team | COMMENT |
| MEDIUM | examples/slackbot/src/slackbot/wrap.py | 163 | # Create the wrapper with our tracker | COMMENT |
| MEDIUM | examples/slackbot/src/slackbot/github/discussions.py | 209 | # Create the discussion | STRING |
| MEDIUM | src/marvin/database.py | 208 | # Create a composite index on thread_id and timestamp in descending order | COMMENT |
| MEDIUM⚡ | src/marvin/database.py | 361 | # Create a session | COMMENT |
| MEDIUM | src/marvin/database.py | 497 | # Define a lock for thread safety | COMMENT |
| MEDIUM | src/marvin/prompts.py | 204 | # Create the dynamic prompt class | COMMENT |
| MEDIUM | src/marvin/memory/providers/postgres.py | 142 | # Create the pgvector extension if not exists | STRING |
| MEDIUM | src/marvin/cli/migrations.py | 22 | # Create a Typer app for user-facing migration commands | COMMENT |
| MEDIUM | src/marvin/cli/migrations.py | 27 | # Create a Typer app for developer migration commands | COMMENT |
| MEDIUM | src/marvin/cli/migrations.py | 223 | # Create a netloc with masked credentials | COMMENT |
| MEDIUM | src/marvin/utilities/jsonschema.py | 291 | # Create a copy of the schema for each type, but keep all constraints | COMMENT |
| MEDIUM | src/marvin/engine/streaming.py | 75 | # Create a parts manager to accumulate delta events for this run | COMMENT |
| MEDIUM | src/marvin/handlers/print_handler.py | 230 | # Create a stable ID from actor ID and message index | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/provider_specific/aimlapi/structured_output.py | 6 | CODE | |
| LOW | examples/provider_specific/aimlapi/run_agent.py | 6 | CODE | |
| LOW | examples/provider_specific/aimlapi/tools_agent.py | 6 | CODE | |
| LOW | examples/slackbot/tests/conftest.py | 17 | CODE | |
| LOW | examples/slackbot/src/slackbot/wrap.py | 22 | CODE | |
| LOW | examples/slackbot/src/slackbot/wrap.py | 23 | CODE | |
| LOW | examples/slackbot/src/slackbot/wrap.py | 24 | CODE | |
| LOW | …es/slackbot/src/slackbot/_internal/tolerant_toolset.py | 10 | CODE | |
| LOW | …mples/slackbot/src/slackbot/_internal/thread_status.py | 9 | CODE | |
| LOW | …mples/slackbot/src/slackbot/_internal/message_store.py | 26 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 3 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 4 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 4 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 4 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 4 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 4 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 4 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 12 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 12 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 13 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 13 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 13 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 13 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 13 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 20 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 20 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 20 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 20 | CODE | |
| LOW | examples/slack_search/src/slack_search/server.py | 3 | CODE | |
| LOW | examples/slack_search/src/slack_search/__init__.py | 3 | CODE | |
| LOW | src/marvin/__init__.py | 4 | CODE | |
| LOW | src/marvin/__init__.py | 5 | CODE | |
| LOW | src/marvin/__init__.py | 8 | CODE | |
| LOW | src/marvin/__init__.py | 9 | CODE | |
| LOW | src/marvin/__init__.py | 10 | CODE | |
| LOW | src/marvin/__init__.py | 11 | CODE | |
| LOW | src/marvin/__init__.py | 14 | CODE | |
| LOW | src/marvin/__init__.py | 15 | CODE | |
| LOW | src/marvin/__init__.py | 16 | CODE | |
| LOW | src/marvin/__init__.py | 16 | CODE | |
| LOW | src/marvin/__init__.py | 17 | CODE | |
| LOW | src/marvin/__init__.py | 20 | CODE | |
| LOW | src/marvin/__init__.py | 20 | CODE | |
| LOW | src/marvin/__init__.py | 20 | CODE | |
| LOW | src/marvin/__init__.py | 20 | CODE | |
| LOW | src/marvin/__init__.py | 20 | CODE | |
| LOW | src/marvin/__init__.py | 20 | CODE | |
| LOW | src/marvin/__init__.py | 28 | CODE | |
| LOW | src/marvin/__init__.py | 28 | CODE | |
| LOW | src/marvin/__init__.py | 29 | CODE | |
| LOW | src/marvin/__init__.py | 29 | CODE | |
| LOW | src/marvin/__init__.py | 30 | CODE | |
| LOW | src/marvin/__init__.py | 30 | CODE | |
| LOW | src/marvin/__init__.py | 31 | CODE | |
| LOW | src/marvin/__init__.py | 31 | CODE | |
| LOW | src/marvin/__init__.py | 31 | CODE | |
| LOW | src/marvin/__init__.py | 31 | CODE | |
| LOW | src/marvin/__init__.py | 37 | CODE | |
| LOW | src/marvin/__init__.py | 38 | CODE | |
| LOW | src/marvin/__init__.py | 38 | CODE | |
| 32 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/slackbot/src/slackbot/search.py | 29 | Explore and return the public API tree of a specific module and its submodules as a string. This is the primar | STRING |
| HIGH | examples/slackbot/src/slackbot/search.py | 149 | Display the signature of any callable (function, class constructor, method) with clear visual organization. Wo | STRING |
| HIGH | examples/slackbot/src/slackbot/search.py | 202 | Inspect Prefect CLI help, or check another program's CLI behavior. This tool is specifically designed to help | STRING |
| HIGH | src/marvin/fns/plan.py | 156 | Generate a series of new tasks in order to achieve a goal. Args: instructions: The objective to achiev | STRING |
| HIGH | src/marvin/fns/plan.py | 211 | Generate a series of Marvin Tasks that will allow you or other AI agents to achieve a goal. Args: inst | STRING |
| HIGH | src/marvin/fns/cast.py | 46 | Asynchronously transforms input data into a specific type using a language model. This function uses a language mod | STRING |
| HIGH | src/marvin/fns/cast.py | 112 | Transforms input data into a specific type using a language model. This function uses a language model to analyze t | STRING |
| HIGH | src/marvin/fns/classify.py | 81 | Asynchronously classifies input data into one or more predefined labels using a language model. This function uses | STRING |
| HIGH | src/marvin/fns/classify.py | 215 | Classifies input data into one or more predefined labels using a language model. This function uses a language mode | STRING |
| HIGH | src/marvin/fns/summarize.py | 35 | Asynchronously creates a summary of the input data using a language model. This function uses a language model to a | STRING |
| HIGH | src/marvin/fns/summarize.py | 95 | Creates a summary of the input data using a language model. This function uses a language model to analyze the inpu | STRING |
| HIGH | src/marvin/fns/fn.py | 105 | A decorator that predicts the output of a Python function without executing it. Can be used with or without paramet | STRING |
| HIGH | src/marvin/fns/extract.py | 37 | Extracts entities of a specific type from the provided data. This function uses a language model to identify and ex | STRING |
| HIGH | src/marvin/fns/extract.py | 97 | Extracts entities of a specific type from the provided data. This function uses a language model to identify and ex | STRING |
| HIGH | src/marvin/utilities/types.py | 147 | Convert a type to a Labels instance. This should only be called on types that have been verified as classifiers via | STRING |
| HIGH | src/marvin/utilities/jsonschema.py | 80 | Convert JSON schema to appropriate Python type with validation. Args: schema: A JSON Schema dictionary defi | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/slackbot/src/slackbot/settings.py | 137 | except Exception: | CODE |
| HIGH | …mples/slackbot/src/slackbot/_internal/tool_tracking.py | 74 | except Exception: | CODE |
| HIGH | examples/slackbot/src/slackbot/github/client.py | 64 | except AttributeError: | CODE |
| HIGH | examples/slack_search/src/slack_search/_types.py | 133 | except (ValueError, OSError): | CODE |
| HIGH | examples/slack_search/src/slack_search/server.py | 78 | except Exception: | CODE |
| HIGH | scripts/analyze_threads.py | 91 | except Exception: | CODE |
| HIGH | scripts/analyze_threads.py | 149 | except Exception: | CODE |
| HIGH | scripts/create_mintlify_api_ref.py | 268 | except Exception: | CODE |
| HIGH | src/marvin/handlers/print_handler.py | 206 | except rich.errors.LiveError: | CODE |
| HIGH | src/marvin/handlers/print_handler.py | 214 | except rich.errors.LiveError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/slack_search/src/slack_search/server.py | 19 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 21 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | examples/slack_search/src/slack_search/server.py | 104 | # ----------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | examples/slack_search/src/slack_search/server.py | 106 | # ----------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | examples/slack_search/src/slack_search/server.py | 111 | # ----------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | examples/slack_search/src/slack_search/server.py | 113 | # ----------------------------------------------------------------------------- | STRING |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 151 | # ----------------------------------------------------------------------------- | STRING |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 153 | # ----------------------------------------------------------------------------- | STRING |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 447 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 449 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 471 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM | examples/slack_search/src/slack_search/server.py | 473 | # ----------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | .github/workflows/image-build-and-push-internal.yaml | 13 | # ┌───────────── minute (0 - 59) | COMMENT |
| MEDIUM⚡ | .github/workflows/image-build-and-push-internal.yaml | 14 | # │ ┌───────────── hour (0 - 23) | COMMENT |
| MEDIUM⚡ | .github/workflows/image-build-and-push-internal.yaml | 15 | # │ │ ┌───────────── day of the month (1 - 31) | COMMENT |
| MEDIUM⚡ | .github/workflows/image-build-and-push-internal.yaml | 16 | # │ │ │ ┌───────────── month (1 - 12 or JAN-DEC) | COMMENT |
| MEDIUM⚡ | .github/workflows/image-build-and-push-internal.yaml | 17 | # │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/deepseek_chat.py | 89 | CODE | |
| LOW | examples/slackbot/src/slackbot/assets.py | 249 | CODE | |
| LOW | examples/slackbot/src/slackbot/assets.py | 280 | CODE | |
| LOW | examples/slackbot/src/slackbot/search.py | 26 | CODE | |
| LOW | examples/slackbot/src/slackbot/strings.py | 9 | CODE | |
| LOW | examples/slackbot/src/slackbot/_internal/doc_links.py | 26 | CODE | |
| LOW | examples/slackbot/src/slackbot/_internal/doc_links.py | 39 | CODE | |
| LOW | …mples/slackbot/src/slackbot/_internal/message_store.py | 71 | CODE | |
| LOW | …les/slackbot/src/slackbot/_internal/personalization.py | 29 | CODE | |
| LOW | examples/slackbot/src/slackbot/github/client.py | 73 | CODE | |
| LOW | examples/slack_search/src/slack_search/server.py | 24 | CODE | |
| LOW | scripts/analyze_threads.py | 77 | CODE | |
| LOW | scripts/backfill_asset_embeddings.py | 107 | CODE | |
| LOW | scripts/create_mintlify_api_ref.py | 166 | CODE | |
| LOW | scripts/create_mintlify_api_ref.py | 413 | CODE | |
| LOW | scripts/create_mintlify_api_ref.py | 469 | CODE | |
| LOW | scripts/index_assets.py | 170 | CODE | |
| LOW | scripts/index_assets.py | 560 | CODE | |
| LOW | src/marvin/database.py | 68 | CODE | |
| LOW | src/marvin/database.py | 336 | CODE | |
| LOW | src/marvin/database.py | 451 | CODE | |
| LOW | src/marvin/database.py | 483 | CODE | |
| LOW | src/marvin/prompts.py | 95 | CODE | |
| LOW | src/marvin/_internal/integrations/mcp.py | 147 | CODE | |
| LOW | src/marvin/_internal/integrations/mcp.py | 57 | CODE | |
| LOW | src/marvin/memory/memory.py | 143 | CODE | |
| LOW | src/marvin/fns/run.py | 18 | CODE | |
| LOW | src/marvin/agents/agent.py | 139 | CODE | |
| LOW | src/marvin/cli/migrations.py | 205 | CODE | |
| LOW | src/marvin/cli/main.py | 59 | CODE | |
| LOW | src/marvin/utilities/types.py | 73 | CODE | |
| LOW | src/marvin/utilities/jsonschema.py | 441 | CODE | |
| LOW | src/marvin/engine/orchestrator.py | 240 | CODE | |
| LOW | src/marvin/engine/streaming.py | 44 | CODE | |
| LOW | src/marvin/engine/streaming.py | 186 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/marvin/thread.py | 0 | get the currently active orchestrator from context. returns: the current orchestrator instance or none if no orchestrato | STRING |
| HIGH | src/marvin/agents/actor.py | 0 | get the currently active orchestrator from context. returns: the current orchestrator instance or none if no orchestrato | STRING |
| HIGH | src/marvin/engine/orchestrator.py | 0 | get the currently active orchestrator from context. returns: the current orchestrator instance or none if no orchestrato | STRING |
| HIGH | src/marvin/memory/providers/lance.py | 0 | optional; the name of the collection to use. this should be a string optionally formatted with the variable `key`, which | STRING |
| HIGH | src/marvin/memory/providers/qdrant.py | 0 | optional; the name of the collection to use. this should be a string optionally formatted with the variable `key`, which | STRING |
| HIGH | src/marvin/memory/providers/chroma.py | 0 | optional; the name of the collection to use. this should be a string optionally formatted with the variable `key`, which | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/slackbot/src/slackbot/api.py | 314 | # Check if this is the designated channel | COMMENT |
| LOW | examples/slackbot/src/slackbot/search.py | 76 | # Check if it failed due to missing module | COMMENT |
| LOW | examples/slackbot/src/slackbot/search.py | 224 | # Check if a command exists and see its options | STRING |
| LOW | examples/slackbot/src/slackbot/wrap.py | 51 | # Check if we're already in a wrapped call to avoid double-wrapping | COMMENT |
| LOW | …amples/slackbot/src/slackbot/_internal/monkey_patch.py | 73 | # Check if original method is async | COMMENT |
| LOW | …amples/slackbot/src/slackbot/_internal/monkey_patch.py | 82 | # Check if we should skip decoration | COMMENT |
| LOW | …amples/slackbot/src/slackbot/_internal/monkey_patch.py | 98 | # Check if we should skip decoration | COMMENT |
| LOW⚡ | src/marvin/database.py | 364 | # Check if tables exist by attempting a simple query | COMMENT |
| LOW | src/marvin/database.py | 500 | # Check if we're already in an event loop | COMMENT |
| LOW | src/marvin/database.py | 531 | # Check if the threads table exists | COMMENT |
| LOW | src/marvin/_internal/integrations/mcp.py | 95 | # Check if this server instance is already started | COMMENT |
| LOW | src/marvin/tasks/task.py | 456 | # Check if None is allowed in the type (e.g., Optional[str] = str | None) | COMMENT |
| LOW | src/marvin/fns/run.py | 23 | # Check if task1 depends on task2 or vice versa | COMMENT |
| LOW | src/marvin/fns/run.py | 26 | # Check if they share subtasks or parent relationships | COMMENT |
| LOW | src/marvin/engine/orchestrator.py | 154 | # Check if any tasks depend on each other | COMMENT |
| LOW | src/marvin/engine/streaming.py | 158 | # Check if we've reached the final End node | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 25 | export OPENAI_API_KEY=your-api-key | CODE |
| HIGH | examples/provider_specific/azure/run_agent.py | 4 | AZURE_OPENAI_API_KEY=<your-api-key> \ | STRING |
| HIGH | examples/provider_specific/aimlapi/structured_output.py | 2 | » AIML_API_KEY=your-api-key \ | STRING |
| HIGH | examples/provider_specific/aimlapi/run_agent.py | 2 | » AIML_API_KEY=your-api-key \ | STRING |
| HIGH | examples/provider_specific/aimlapi/tools_agent.py | 2 | » AIML_API_KEY=your-api-key \ | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/slackbot/src/slackbot/wrap.py | 184 | __all__ = ["WatchToolCalls", "_progress_message", "_tool_usage_counts", "_current_tool"] | CODE |
| LOW | …ples/slackbot/src/slackbot/_internal/person_summary.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | …les/slackbot/src/slackbot/_internal/personalization.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | examples/slackbot/src/slackbot/github/__init__.py | 27 | __all__ = [ | CODE |
| LOW | examples/slack_search/src/slack_search/__init__.py | 5 | __all__ = ["mcp"] | CODE |
| LOW | src/marvin/database.py | 122 | def set_async_engine(engine: AsyncEngine) -> None: | CODE |
| LOW | src/marvin/__init__.py | 49 | __all__ = [ | CODE |
| LOW | src/marvin/beta/__init__.py | 1 | __all__ = [] | CODE |
| LOW | src/marvin/beta/observability/openai.py | 211 | __all__ = [ | CODE |
| LOW | src/marvin/_internal/integrations/mcp.py | 311 | def set_thread_mcp_manager(manager: "MCPManager | None") -> None: | CODE |
| LOW | src/marvin/agents/__init__.py | 5 | __all__ = ["get_current_actor", "Agent", "Team"] | CODE |
| LOW | src/marvin/utilities/jsonschema.py | 63 | __all__ = ["jsonschema_to_type", "JSONSchema"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/marvin/utilities/jsonschema.py | 313 | # Step 1: replace everything except [0-9a-zA-Z_] with underscores | COMMENT |
| LOW⚡ | src/marvin/utilities/jsonschema.py | 315 | # Step 2: deduplicate underscores | COMMENT |
| LOW⚡ | src/marvin/utilities/jsonschema.py | 317 | # Step 3: if the first char of original name isn't a letter, prepend field_ | COMMENT |
| LOW⚡ | src/marvin/utilities/jsonschema.py | 320 | # Step 4: deduplicate again and strip trailing underscores | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/marvin/utilities/jsonschema.py | 313 | # Step 1: replace everything except [0-9a-zA-Z_] with underscores | COMMENT |
| LOW⚡ | src/marvin/utilities/jsonschema.py | 315 | # Step 2: deduplicate underscores | COMMENT |
| LOW⚡ | src/marvin/utilities/jsonschema.py | 317 | # Step 3: if the first char of original name isn't a letter, prepend field_ | COMMENT |
| LOW⚡ | src/marvin/utilities/jsonschema.py | 320 | # Step 4: deduplicate again and strip trailing underscores | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/slackbot/src/slackbot/wrap.py | 53 | # Already wrapped, just call the original | COMMENT |
| LOW | scripts/create_mintlify_api_ref.py | 238 | # If that fails, just add the name | COMMENT |
| LOW⚡ | src/marvin/database.py | 351 | # If session is provided, just use it | COMMENT |
| LOW | src/marvin/utilities/jsonschema.py | 471 | # Otherwise just use the data | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 317 | # Or orchestrate tasks manually | COMMENT |
| MEDIUM | src/marvin/memory/providers/postgres.py | 55 | # vector = Column(Vector(dim=1536)) # Adjust dimension to match your embedding model | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/hello_generate.py | 7 | # you can use Annotated to add extra detail to your types | COMMENT |
| LOW⚡ | src/marvin/database.py | 357 | # make sure to create them before proceeding | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/marvin/cli/dev.py | 12 | """Run the Marvin documentation locally. Equivalent to 'cd docs && mintlify dev' from the Marvin root.""" | STRING |
| HIGH | src/marvin/utilities/jsonschema.py | 6 | - Basic types (string, number, integer, boolean, null) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/marvin/tasks/task.py | 218 | CODE | |
| LOW | src/marvin/fns/generate.py | 36 | CODE | |
| LOW | src/marvin/fns/generate.py | 95 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/marvin/fns/fn.py | 109 | def my_function(): ... | CODE |
| LOW | src/marvin/fns/fn.py | 112 | def my_function(): ... | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/slackbot/README.md | 21 | # Install dependencies (from the repo root) | COMMENT |