Skip to content

Host-driven capability contract negotiation

A host may submit an explicit output contract and receive deterministic compatibility results for declared capability contracts. Negotiation distinguishes exact, compatible, convertible, incompatible, unknown, policy-denied, and unavailable candidates.

from schemarouter import CapabilityNegotiationRequest, negotiate_capabilities

result = negotiate_capabilities(
    CapabilityNegotiationRequest(required_outputs=required_fields),
    capabilities,
    authorized_capability_ids=host_allow_set,
    unavailable_capability_ids=unavailable,
    context=compatibility_context,
)

Authorization is an intersection, never an expansion. An empty host allow-set remains empty in effect, and unavailable candidates are distinguished from contract mismatches. Unit conversion is only reported when explicitly declared in the compatibility context; SchemaRouter does not perform the conversion.

Negotiation is a contract query, not planning or execution. Existing stateless query-based routing remains independent and supported.