targetArtifactId, else to the run's sourceArtifactId,
else fall back to the legacy chain.An unrecognized value is treated as no directive at all — not merely as no targeting — and
logged. name and description are discarded with it: a behavior this consumer cannot
parse means the producer disagrees with it about the wire format, which is no basis for
trusting the object's other fields.
OptionaldescriptionDescription for an artifact this step creates. Same applicability as name.
OptionalnameName for an artifact this step CREATES. Applies whenever the step creates a new artifact header — 'create-new', and equally the legacy fallback when no previous artifact was found — and is ignored when an existing artifact is versioned, which keeps the name it already has.
Trimmed, and clamped to the column's 255 characters rather than rejected, so an over-long model-written title costs a truncation instead of the whole artifact. When supplied, it also takes precedence over the name attribute extracted from the first version's content.
OptionaltargetArtifact to version when behavior is 'version-source' and it differs from the run's sourceArtifactId.
This is model output, so the framework does not take it on trust. It is honored only if it is
a UUID-shaped string naming an artifact that exists AND that the run's user either owns or
holds an explicit CanEdit grant on. Any of those failing logs and falls back to the run's
sourceArtifactId, then to the legacy chain — a named target can never widen what the user
is already allowed to write.
How the framework should persist a step's payload as an artifact. Set by the agent — the only party that knows whether the payload is a finished deliverable, a draft awaiting feedback, or a plan proposal. When absent,
AgentRunner.ProcessAgentArtifactsapplies its legacy priority chain (run's sourceArtifactId → previous artifact on the message → new artifact), so existing agents are unaffected.Precedence: caller
createArtifacts=false→ agentArtifactCreationMode='Never'→ this directive → legacy chain. The two vetoes still win.Since
6.1.0