ControlFlow (archived — use marvin)

raw JSON →
0.12.1 verified Tue May 12 auth: no python install: stale quickstart: stale deprecated

ARCHIVED. ControlFlow was a PrefectHQ agentic workflow framework. The repository was archived on August 22, 2025. Its engine was merged into marvin v3. Last version on PyPI: 0.12.1 (Feb 2025). Do not use for new projects — use marvin instead. The controlflow package still installs from PyPI but receives no updates.

pip install marvin
error AttributeError: module 'controlflow.tools' has no attribute 'code'
cause The specific tool modules like `code` or `web` within `controlflow.tools` need to be explicitly imported before being accessed as attributes of `controlflow.tools`.
fix
Add explicit imports for the required tools, e.g., import controlflow.tools.web and import controlflow.tools.code at the top of your file.
error Tasks Fail with 'Error 429 - Too Many Requests' when executing a Tavily Agent task from a Deployment
cause The ControlFlow agent is encountering rate limits imposed by the external API it's interacting with (e.g., Tavily), leading to task failures.
fix
Implement robust retry logic with exponential backoff for API calls, check and potentially increase your API service's rate limits, or adjust the frequency and volume of agent tasks to stay within allowed limits.
error Confusion or issues using 'ControlFlow agent' concepts with Prefect 3.x
cause The `controlflow` library was designed primarily for Prefect 2.x, where 'agents' were a core concept. In Prefect 3.x, agents have been replaced by 'workers,' causing a mismatch in terminology and operational expectations.
fix
Align your workflow with Prefect 3.x's 'worker' model and recognize that controlflow's agent-centric features may not be directly compatible or require adaptation. For new projects, consider migrating to marvin v3, which incorporated controlflow's engine and is actively maintained.
error General problems or lack of support when using `controlflow` for new projects
cause The `controlflow` library is officially archived and no longer receives updates or support; its core engine has been merged into `marvin v3`. Using an archived library for new development can lead to unpatched bugs and compatibility issues.
fix
For any new development, use marvin v3 or its current successor, as it provides the updated and actively maintained agentic workflow framework that evolved from controlflow.
breaking ControlFlow repository archived August 22, 2025. No more updates, bug fixes, or security patches. The controlflow PyPI package still installs but is dead.
fix pip install marvin — marvin v3 supersedes controlflow entirely. All cf.* equivalents exist as marvin.*.
breaking ControlFlow had a hard dependency on prefect which caused version conflicts with prefect 3.0.0. marvin removes this dependency.
fix Migrate to marvin. No prefect dependency required for agent workflows.
breaking @cf.flow decorator removed in marvin v3. Replace with marvin.Thread() context manager.
fix with marvin.Thread(): marvin.run(...)
gotcha ControlFlow used LangChain as its LLM backend. marvin v3 uses Pydantic AI — broader provider support but different configuration patterns.
fix Remove LangChain dependencies. Configure providers via pydantic-ai settings.
gotcha LLMs trained before mid-2025 will generate controlflow code (import controlflow as cf). This is dead code — redirect to marvin.
fix Replace all 'import controlflow as cf' with 'import marvin'. Map cf.run → marvin.run, cf.Task → marvin.Task, cf.Agent → marvin.Agent.
breaking Installation of marvin (or its dependencies, like temporalio, which requires Rust compilation) in alpine environments may fail due to missing system libraries (e.g., libgcc_s.so.1) or linker incompatibilities. This is common with musl libc-based alpine images which may not provide the necessary C/C++ build tools or glibc compatibility required by Rust packages.
fix Use a glibc-based Python image (e.g., Debian or Ubuntu) instead of alpine, or ensure that a complete build toolchain and glibc compatibility packages (e.g., `apk add build-base gcc gcompat`) are installed in the alpine environment before attempting to install marvin.
pip install controlflow
python os / libc variant status wheel install import disk
3.10 alpine (musl) controlflow - - - -
3.10 alpine (musl) marvin - - - -
3.10 slim (glibc) controlflow - - - -
3.10 slim (glibc) marvin - - 6.38s 583M
3.11 alpine (musl) controlflow - - - -
3.11 alpine (musl) marvin - - - -
3.11 slim (glibc) controlflow - - - -
3.11 slim (glibc) marvin - - 8.45s 624M
3.12 alpine (musl) controlflow - - - -
3.12 alpine (musl) marvin - - - -
3.12 slim (glibc) controlflow - - - -
3.12 slim (glibc) marvin - - 9.17s 609M
3.13 alpine (musl) controlflow - - - -
3.13 alpine (musl) marvin - - - -
3.13 slim (glibc) controlflow - - - -
3.13 slim (glibc) marvin - - 8.46s 607M
3.9 alpine (musl) controlflow - - - -
3.9 alpine (musl) marvin - - 7.84s 147.6M
3.9 slim (glibc) controlflow - - - -
3.9 slim (glibc) marvin - - 7.61s 218M

Marvin v3 replacement for ControlFlow.

# controlflow is archived — use marvin instead
# pip install marvin
import marvin

# Direct equivalent of controlflow's cf.run
result = marvin.run('Write a short poem about artificial intelligence')
print(result)