Skip to content

Event schema

Every event is a CloudEvents 1.0 JSON document with extension attributes prefixed myrtille. The schema is the most durable part of Myrtille: it is useful without the town, and any change goes through an architecture decision and a schema version.

{
"specversion": "1.0",
"id": "01J9ZX3K8Q4N2M7P6R5S4T3V2W",
"source": "courier/coolify/inst-7f3a",
"type": "eu.myrtille.deploy.failed",
"time": "2026-10-14T16:02:11.482Z",
"subject": "coolify:app:9c1e",
"datacontenttype": "application/json",
"myrtilleschema": "1",
"myrtilletown": "acme",
"myrtilledistrict": "production",
"myrtillecitizen": "coolify:app:9c1e",
"myrtilleseverity": "error",
"myrtilleidempotency": "sha256:...",
"data": { "deploymentId": "coolify:deploy:2b44", "message": "Build failed: exit code 1" }
}
  • type follows eu.myrtille.<domain>.<verb> and belongs to a closed catalogue.
  • subject and myrtillecitizen are opaque citizen identifiers: <courier>:<kind>:<ref>.
  • myrtilleseverity is one of debug, info, notice, warning, error, critical.
  • myrtilleidempotency is a stable hash of the source content: duplicates are ignored.
  • data is validated per type and never contains a secret, an environment value or a full log.
  • Log lines are not events: they stream on demand and are never persisted.
Domain Types
citizen discovered, removed, state, heartbeat
deploy started, progress, succeeded, failed, cancelled
container started, stopped, restarted, unhealthy, oom, restart_limit
server reachable, unreachable, disk_warning
backup succeeded, failed
task started, progress, succeeded, failed
preview opened, ready, closed
agent session.started, session.ended, turn.started, turn.ended, tool.started, tool.ended, tool.failed, subagent.started, subagent.ended, task.created, task.completed, permission.requested, permission.decided, notification
mission requested, started, progress, completed, failed
mail created, decided, expired, dismissed
action requested, confirmed, executed, failed, denied
courier connected, disconnected, reconciled, error
local service.up, service.down

idle, running, waiting, error, done, offline, unknown. A citizen without news for longer than its time-to-live becomes unknown; a disconnected source makes its citizens offline. Grey is honest: uncertainty is always visible.