What you get
- Values are any JSON:
0.92,true,["a","b"],{"due":"2026-08-01"}. - Merge-patch writes: send only the keys you’re changing.
setupserts (JSONnulldeletes)appendextends arrays atomicallyappendUniqueskips duplicates so re-run agents are idempotent
- Per-key audit trail: who set what, when, with previous values.
- Queryable:
eq,neq,exists,missing,gt/gte/lt/lte(numbers and ISO-date strings),contains(array containment), andin/not-in(the value is any, or none, of a list of candidates). Filters are AND-ed together, withorderByranking. - Discoverable:
GET /search/metadata/keyslists the key namespace with usage counts so writers converge on existing keys, andGET /search/metadata/valueslists the values in use for one key.
Patch example
Query example
Keeping keys consistent
Metadata is free-form by default, which is what makes it useful to an agent that discovers a need mid-run. When a set of pages should agree on a shape, promote it to a record type: the same store, with a declared schema and validation on the way in.Next: Record types
Schemas over metadata, so a space of pages is also a queryable dataset.