A tool node emits artifacts on a reserved key that never reaches the model
The rule
- A tool node's output may carry the reserved
artifactskey, a list of{type, payload}maps. - It is a system channel, exempt from output-port exposure, and so survives whether or not the author exposed the port.
- On a successful call those entries are lifted off the node's output and attached to the tool result: an entry with a string
typeand a mappayloadis kept, and any other entry is dropped without failing the call. - The reserved key is always removed from the result's
data, so it never reaches the prose a tool-consuming node feeds the model. - A call that failed or was declined carries no artifacts.
What it means
The reserved key is not a strict channel: an author can put anything on it,
and a malformed entry does not fail the call — it is silently dropped, and
the well-formed entries beside it still get through. Only an entry with both
a string type and a map payload survives; a bare string, an entry missing
type, or a payload that is not a map is discarded on its own, without
touching its neighbours. Whatever happens to the entries, the reserved key
itself is always stripped from the node's output before that output becomes
the result's data — even a node that emitted nothing valid on it still
loses the key from data.
Example
A node's output carries four entries on the reserved key: a bare string, one missing its type, one whose payload is not a map, and one well-formed.
[
"not-an-array",
{ "type": "", "payload": { "a": 1 } },
{ "type": "link", "payload": "not-an-array" },
{ "type": "link", "payload": { "url": "https://ok.example.com" } }
][{ "type": "link", "payload": { "url": "https://ok.example.com" } }]