Schema · coordinator/message
Coordinator message v0
One typed message between agents, sessions and the coordinator (RFC 0147.1). Delivery is at-least-once; receivers dedupe on id. Bodies carry ids, refs and short text only, never content, and a body is at most 8 KiB (the byte total is a server rule; fields are capped here). release.go is accepted only from an approvals sender.
https://schemas.inorbit.hr/coordinator/message/v0.jsonEach version is a file at its own address. The raw file is plain JSON, served without a sign-in.
- v0draftMay still be corrected; kept for five minutes.schemas.inorbit.hr/coordinator/message/v0.json ↗
Fields of v0, the newest version, by path. A name ending in [] is each item of a list. Every field not listed is refused.
schemastringrequiredAlways
"coordinator/message/v0"idstringrequiredpattern ^[0-9A-HJKMNP-TV-Z]{26}$kindenumrequiredOne of
"session.hello""session.heartbeat""session.bye""task.assign""task.progress""task.result""ask.open""ask.answer""review.request""review.result""handoff""plan.plan""plan.item""plan.link""plan.activity""plan.remove""release.ready""release.batch""release.go""release.status""release.rolled""ack""nack"fromobjectrequiredfrom.agentstringrequiredpattern ^(coordinator|session|worker|subagent|runner|approvals|owner):[A-Za-z0-9._-]{1,100}$from.sessionstringoptionalat least 1 charactersat most 100 charactersfrom.providerenumoptionalOne of
"claude""codex""other"from.accountstringoptionalat least 1 charactersat most 100 characterstoanyrequiredthread_idstringoptionalat least 1 charactersat most 100 characterscorrelation_idstringoptionalat least 1 charactersat most 100 charactersreply_tostringoptionalpattern ^[0-9A-HJKMNP-TV-Z]{26}$planobjectoptionalplan.planstringrequiredat least 1 charactersat most 80 charactersplan.itemstringoptionalat least 1 charactersat most 100 charactersatstringrequiredpattern ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$at most 40 charactersexpires_atstringoptionalpattern ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$at most 40 characterspriorityenumoptionalOne of
"low""normal""high""urgent"bodyobjectrequired
Valid documents with made-up values, as the repository's tests check them.
{
"schema": "coordinator/message/v0",
"id": "01J9Z3K5Q7R8S9T0V1W2X3Y00Q",
"kind": "ack",
"from": {
"agent": "worker:tm-c1",
"session": "tm-c1-message-schema",
"provider": "claude",
"account": "engineering"
},
"to": {
"role": "coordinator"
},
"at": "2026-10-17T17:00:00Z",
"body": {
"message_id": "01J9Z3K5Q7R8S9T0V1W2X3Y001"
},
"reply_to": "01J9Z3K5Q7R8S9T0V1W2X3Y001"
}The repository's tests also check 9 documents that this schema must refuse.
Replace the file name with yours.
"json.schemas": [
{ "fileMatch": ["my-file.json"], "url": "https://schemas.inorbit.hr/coordinator/message/v0.json" }
]check-jsonschema --schemafile https://schemas.inorbit.hr/coordinator/message/v0.json my-file.jsonajv validate --spec=draft2020 -s <(curl -s https://schemas.inorbit.hr/coordinator/message/v0.json) -d my-file.jsoncurl -s https://schemas.inorbit.hr/coordinator/message/v0.jsonThe raw file of v0, as published.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.inorbit.hr/coordinator/message/v0.json",
"title": "Coordinator message v0",
"description": "One typed message between agents, sessions and the coordinator (RFC 0147.1). Delivery is at-least-once; receivers dedupe on id. Bodies carry ids, refs and short text only, never content, and a body is at most 8 KiB (the byte total is a server rule; fields are capped here). release.go is accepted only from an approvals sender.",
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"id",
"kind",
"from",
"to",
"at",
"body"
],
"properties": {
"schema": {
"const": "coordinator/message/v0"
},
"id": {
"type": "string",
"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
},
"kind": {
"enum": [
"session.hello",
"session.heartbeat",
"session.bye",
"task.assign",
"task.progress",
"task.result",
"ask.open",
"ask.answer",
"review.request",
"review.result",
"handoff",
"plan.plan",
"plan.item",
"plan.link",
"plan.activity",
"plan.remove",
"release.ready",
"release.batch",
"release.go",
"release.status",
"release.rolled",
"ack",
"nack"
]
},
"from": {
"type": "object",
"additionalProperties": false,
"required": [
"agent"
],
"properties": {
"agent": {
"type": "string",
"pattern": "^(coordinator|session|worker|subagent|runner|approvals|owner):[A-Za-z0-9._-]{1,100}$"
},
"session": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"provider": {
"enum": [
"claude",
"codex",
"other"
]
},
"account": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"to": {
"oneOf": [
{
"type": "object",
"additionalProperties": false,
"required": [
"agent"
],
"properties": {
"agent": {
"type": "string",
"pattern": "^(coordinator|session|worker|subagent|runner|approvals|owner):[A-Za-z0-9._-]{1,100}$"
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"role"
],
"properties": {
"role": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"thread_id"
],
"properties": {
"thread_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"broadcast"
],
"properties": {
"broadcast": {
"const": true
}
}
},
{
"type": "object",
"additionalProperties": false,
"required": [
"approvals"
],
"properties": {
"approvals": {
"const": true
}
}
}
]
},
"thread_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"correlation_id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"reply_to": {
"type": "string",
"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
},
"plan": {
"type": "object",
"additionalProperties": false,
"required": [
"plan"
],
"properties": {
"plan": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"item": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"at": {
"type": "string",
"maxLength": 40,
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$"
},
"expires_at": {
"type": "string",
"maxLength": 40,
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,9})?(Z|[+-]\\d{2}:\\d{2})$"
},
"priority": {
"enum": [
"low",
"normal",
"high",
"urgent"
]
},
"body": {
"type": "object"
}
},
"allOf": [
{
"if": {
"properties": {
"kind": {
"const": "session.hello"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_session_hello"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "session.heartbeat"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_session_heartbeat"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "session.bye"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_session_bye"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "task.assign"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_task_assign"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "task.progress"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_task_progress"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "task.result"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_task_result"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "ask.open"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_ask_open"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "ask.answer"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_ask_answer"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "review.request"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_review_request"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "review.result"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_review_result"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "handoff"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_handoff"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "plan.plan"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_plan_plan"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "plan.item"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_plan_item"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "plan.link"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_plan_link"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "plan.activity"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_plan_activity"
},
"plan": {
"required": [
"item"
]
}
},
"required": [
"plan"
]
}
},
{
"if": {
"properties": {
"kind": {
"const": "plan.remove"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_plan_remove"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "release.ready"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_release_ready"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "release.batch"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_release_batch"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "release.go"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_release_go"
},
"from": {
"type": "object",
"properties": {
"agent": {
"pattern": "^approvals:"
}
}
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "release.status"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_release_status"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "release.rolled"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_release_rolled"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "ack"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_ack"
}
}
}
},
{
"if": {
"properties": {
"kind": {
"const": "nack"
}
},
"required": [
"kind"
]
},
"then": {
"properties": {
"body": {
"$ref": "#/$defs/body_nack"
}
}
}
}
],
"$defs": {
"body_session_hello": {
"type": "object",
"additionalProperties": false,
"required": [
"role"
],
"properties": {
"role": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"capabilities": {
"type": "array",
"maxItems": 32,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"worktree": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"branch": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"body_session_heartbeat": {
"type": "object",
"additionalProperties": false,
"required": [
"status"
],
"properties": {
"status": {
"enum": [
"idle",
"working",
"blocked"
]
},
"item": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"note": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
}
},
"body_session_bye": {
"type": "object",
"additionalProperties": false,
"required": [
"reason"
],
"properties": {
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
}
},
"body_task_assign": {
"type": "object",
"additionalProperties": false,
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"brief": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"ref": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"body_task_progress": {
"type": "object",
"additionalProperties": false,
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"percent": {
"type": "integer",
"minimum": 0,
"maximum": 100
}
}
},
"body_task_result": {
"type": "object",
"additionalProperties": false,
"required": [
"outcome"
],
"properties": {
"outcome": {
"enum": [
"done",
"failed",
"cancelled"
]
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"pr": {
"type": "object",
"additionalProperties": false,
"required": [
"repo",
"number"
],
"properties": {
"repo": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
}
}
}
},
"body_ask_open": {
"type": "object",
"additionalProperties": false,
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"minLength": 1,
"maxLength": 1000
},
"options": {
"type": "array",
"minItems": 2,
"maxItems": 4,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
},
"body_ask_answer": {
"type": "object",
"additionalProperties": false,
"required": [
"answer"
],
"properties": {
"answer": {
"type": "string",
"minLength": 1,
"maxLength": 1000
}
}
},
"body_review_request": {
"type": "object",
"additionalProperties": false,
"required": [
"pr"
],
"properties": {
"pr": {
"type": "object",
"additionalProperties": false,
"required": [
"repo",
"number"
],
"properties": {
"repo": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
}
},
"focus": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
}
},
"body_review_result": {
"type": "object",
"additionalProperties": false,
"required": [
"pr",
"verdict"
],
"properties": {
"pr": {
"type": "object",
"additionalProperties": false,
"required": [
"repo",
"number"
],
"properties": {
"repo": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
}
},
"verdict": {
"enum": [
"pass",
"hold",
"fail"
]
},
"findings": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
}
},
"body_handoff": {
"type": "object",
"additionalProperties": false,
"required": [
"summary"
],
"properties": {
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"refs": {
"type": "array",
"maxItems": 16,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
}
},
"body_plan_plan": {
"type": "object",
"additionalProperties": false,
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"summary": {
"type": "string",
"minLength": 1,
"maxLength": 1000
}
}
},
"body_plan_item": {
"type": "object",
"additionalProperties": false,
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"kind": {
"enum": [
"goal",
"step",
"prd",
"rfc",
"adr",
"study",
"diagram",
"pr",
"note"
]
},
"parent": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"status": {
"enum": [
"proposed",
"building",
"ready",
"done",
"dropped"
]
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
}
},
"body_plan_link": {
"type": "object",
"additionalProperties": false,
"required": [
"from",
"to"
],
"properties": {
"from": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"to": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"body_plan_activity": {
"type": "object",
"additionalProperties": false,
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
}
},
"body_plan_remove": {
"type": "object",
"additionalProperties": false,
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
},
"body_release_ready": {
"type": "object",
"additionalProperties": false,
"required": [
"pr",
"head"
],
"properties": {
"pr": {
"type": "object",
"additionalProperties": false,
"required": [
"repo",
"number"
],
"properties": {
"repo": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
}
},
"head": {
"type": "string",
"pattern": "^[0-9a-f]{40}$"
}
}
},
"body_release_batch": {
"type": "object",
"additionalProperties": false,
"required": [
"batch",
"prs"
],
"properties": {
"batch": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"prs": {
"type": "array",
"minItems": 1,
"maxItems": 64,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"repo",
"number"
],
"properties": {
"repo": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"number": {
"type": "integer",
"minimum": 1,
"maximum": 2147483647
}
}
}
}
}
},
"body_release_go": {
"type": "object",
"additionalProperties": false,
"required": [
"batch"
],
"properties": {
"batch": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"note": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
}
},
"body_release_status": {
"type": "object",
"additionalProperties": false,
"required": [
"batch",
"state"
],
"properties": {
"batch": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"state": {
"enum": [
"queued",
"gating",
"merging",
"rolling",
"done",
"failed"
]
},
"detail": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
}
},
"body_release_rolled": {
"type": "object",
"additionalProperties": false,
"required": [
"batch",
"commit"
],
"properties": {
"batch": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"commit": {
"type": "string",
"pattern": "^[0-9a-f]{40}$"
},
"deployments": {
"type": "array",
"maxItems": 32,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
}
}
},
"body_ack": {
"type": "object",
"additionalProperties": false,
"required": [
"message_id"
],
"properties": {
"message_id": {
"type": "string",
"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
}
}
},
"body_nack": {
"type": "object",
"additionalProperties": false,
"required": [
"message_id",
"reason"
],
"properties": {
"message_id": {
"type": "string",
"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
},
"reason": {
"enum": [
"unknown_kind",
"invalid",
"forbidden",
"expired",
"unknown_target",
"plan_mismatch",
"stale_head",
"main_moved"
]
},
"detail": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
}
}
}
}