From 0fba8163ca23fccdefb397640b7ec23ab722efb9 Mon Sep 17 00:00:00 2001 From: Matt Aitchison Date: Thu, 4 Jun 2026 20:38:52 -0500 Subject: [PATCH] docs: note FileArtifact handles are run-scoped and don't survive across runs --- lib/crewai/src/crewai/tools/file_artifact.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/crewai/src/crewai/tools/file_artifact.py b/lib/crewai/src/crewai/tools/file_artifact.py index 57de55a4b..8a91b65f0 100644 --- a/lib/crewai/src/crewai/tools/file_artifact.py +++ b/lib/crewai/src/crewai/tools/file_artifact.py @@ -16,6 +16,12 @@ The handle is namespaced (``crewai+file://``) so resolution only ever fires on tokens this module minted, never on arbitrary user data. Stored bytes are scoped to a crew/task execution id and cleared when that execution finishes; a TTL prune is the safety net for runs that never call :func:`clear_artifact_scope`. + +Limitation: handles are ephemeral and scoped to a single run. A handle only +resolves while its run's artifacts are live. If a placeholder's text is persisted +(conversation memory, a checkpoint) and a *later* run echoes that handle, it will +no longer resolve and the literal token is passed through unchanged -- so binary +producer->consumer chains must complete within one run. """ from __future__ import annotations