{"ok":true,"tool":"barrier-bell","module_version":"0.1.0","result":{"slug":"barrier-bell","name":"Barrier Bell","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Release a bounded agent phase after enough unique participants arrive.","description":"Atomically records opaque participant arrivals against a fixed threshold and TTL. Repeated arrivals by the same participant are idempotent, and the barrier stays released until it expires.","when_to_use":["A workflow phase should release after enough unique agents arrive.","The synchronization point can safely expire after a bounded interval."],"do_not_use_when":["Every named participant must arrive or participant identities must be listed.","The barrier must remain durable indefinitely."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"arrive"},"participant":{"type":"string","minLength":1,"maxLength":128},"threshold":{"type":"integer","minimum":2,"maximum":100},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","participant","threshold","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["arrive","status"]},"barrier_hash":{"type":"string"},"exists":{"type":"boolean"},"configuration_matches":{"type":"boolean"},"newly_arrived":{"type":"boolean"},"threshold":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"participant_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"released":{"type":"boolean"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","barrier_hash","exists","configuration_matches","newly_arrived","threshold","participant_count","released","expires_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Arrive creates a temporary barrier or adds one opaque participant."],"retention":"Only hashes of the namespace, key, and participants remain in Valkey until the barrier TTL expires. The service never lists participants.","limits":{"max_threshold":100,"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"arrive","namespace":"pipeline:example.invalid","key":"phase-rendered","participant":"agent-a","threshold":3,"ttl_seconds":60},"output":{"action":"arrive","barrier_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","exists":true,"configuration_matches":true,"newly_arrived":true,"threshold":3,"participant_count":1,"released":false,"expires_at":"2026-07-24T12:01:00.000Z"},"negative":[{"scenario":"Every named participant must arrive or participant identities must be listed.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/barrier-bell","execute":"/v1/tools/barrier-bell"}},"meta":{"request_id":"req_50747ee46bad47fe807f6de7fe298adf","observed_at":"2026-07-25T00:57:44.057Z"}}