A tool result carries artifacts alongside its data, never inside it
A tool can return something structured (a chart, a record, a file reference) that the model should not have to read as prose. It travels beside the result, not inside it.
The rule
Normative: this is the rule
- A tool result is
{success, data, error}. - A result whose call attached structured artifacts carries an additional
artifactskey, present only when at least one artifact was attached, so an artifact-free result keeps the plain three-key shape unchanged. - Artifacts are attached additively, and are never folded into
data: the two are disjoint.
What it means
An artifact-free result is indistinguishable from a plain three-key result —
artifacts only appears once at least one artifact was attached. A caller
that never expects artifacts can keep reading {success, data, error} and
never notice the key exists. data and artifacts stay disjoint: an
artifact is never folded into data alongside the prose-facing values, and
attaching one never changes what data already holds.
Example
{ "success": true, "data": { "ok": true }, "error": null }{
"success": true,
"data": { "ok": true },
"error": null,
"artifacts": [{ "type": "link", "payload": { "url": "https://example.com" } }]
}Rule identifiers are permanent and are never renumbered. Each implementation publishes its own standing against these rules; this specification does not.spec 1.0-draft · RT-TOOL-1 · changed in spec 1.0