Agents and tools attach durable outputs to a run:
use Clutch\Laravel\Artifacts\Artifact;
use Clutch\Laravel\Runtime\RunContext;
$artifact = Artifact::fromStorage(disk: 's3', path: 'reports/content-gap-2026-08-24.pdf')
->name('Content gap report')
->mimeType('application/pdf')
->metadata(['pages' => 18]);
RunContext::current()->artifacts()->add($artifact);
Or write the bytes as part of attaching them:
Artifact::fromContents($markdown, 'reports/gap.md')->name('Content gap report');
Read them back from a result or a run:
$artifacts = $result->artifacts;
$artifacts = Clutch::run($runId)->artifacts;
Contents stay on the filesystem disk you configured. The database holds metadata, ownership, a SHA-256 for integrity, and a storage reference. The bytes never land in an event payload.