Intent emits 15 event types across four categories—signal.*, intent.*, spec.*, and contract.*—plus two system.* event types. These events form the complete audit trail of the notice→spec→execute→observe loop, enabling observability, reproducibility, and trust scoring.
Each event is immutable, timestamped, and appended to events.jsonl. Events can be ingested by the OTel Collector for distributed tracing, or analyzed directly via log queries in Grafana Loki.
signal.* Events
signal.created
Signal
When: Signal captured from any tier (CLI, MCP, agent, Slack, email).
| Field | Type | Description |
|---|---|---|
| signal_id | string | Unique signal identifier (SIG-*) |
| source | string | Origin: "cli" | "mcp" | "email" | "slack" | "agent" |
| content | string | Raw signal text or observation |
| confidence | number | 0.0–1.0 initial confidence (before enrichment) |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "signal.created",
"signal_id": "SIG-042",
"source": "cli",
"content": "API latency p99 > 2s in production",
"confidence": 0.75,
"timestamp": "2026-03-30T14:23:45Z"
}
signal.enriched
Signal
When: Dedup/context/trust pipeline completes enrichment of a signal.
| Field | Type | Description |
|---|---|---|
| signal_id | string | Unique signal identifier (SIG-*) |
| trust_score | number | 0.0–1.0 enriched trust score |
| tags | array | Context tags added by enrichment pipeline |
| references | array | Related signal IDs identified during dedup |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "signal.enriched",
"signal_id": "SIG-042",
"trust_score": 0.92,
"tags": ["performance", "prod", "p99"],
"references": ["SIG-039", "SIG-041"],
"timestamp": "2026-03-30T14:24:12Z"
}
signal.clustered
Signal
When: Signal assigned to a cluster (semantic grouping of related signals).
| Field | Type | Description |
|---|---|---|
| signal_id | string | Unique signal identifier (SIG-*) |
| cluster_id | string | Cluster identifier (CL-*) |
| cluster_name | string | Human-readable cluster label |
| similarity_score | number | 0.0–1.0 semantic similarity to cluster centroid |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "signal.clustered",
"signal_id": "SIG-042",
"cluster_id": "CL-012",
"cluster_name": "API Latency Spike",
"similarity_score": 0.87,
"timestamp": "2026-03-30T14:25:00Z"
}
signal.promoted
Signal
When: Signal cluster becomes an intent (human or auto approval).
| Field | Type | Description |
|---|---|---|
| signal_id | string | Unique signal identifier (SIG-*) |
| cluster_id | string | Source cluster (CL-*) |
| intent_id | string | Newly created intent (INT-*) |
| trace_id | string | OTel trace identifier (TRACE-*) |
| reason | string | Promotion rationale |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "signal.promoted",
"signal_id": "SIG-042",
"cluster_id": "CL-012",
"intent_id": "INT-015",
"trace_id": "TRACE-015",
"reason": "4 correlated signals above threshold",
"timestamp": "2026-03-30T14:26:00Z"
}
signal.dismissed
Signal
When: Signal marked irrelevant (duplicate, noise, or out of scope).
| Field | Type | Description |
|---|---|---|
| signal_id | string | Unique signal identifier (SIG-*) |
| reason | string | Dismissal reason |
| dismissed_by | string | User or "auto" |
| dismissed_at | ISO 8601 | Dismissal timestamp |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "signal.dismissed",
"signal_id": "SIG-043",
"reason": "duplicate of SIG-042",
"dismissed_by": "auto",
"dismissed_at": "2026-03-30T14:24:30Z",
"timestamp": "2026-03-30T14:24:30Z"
}
intent.* Events
intent.proposed
Intent
When: Cluster promoted to intent (ready for spec authoring).
| Field | Type | Description |
|---|---|---|
| intent_id | string | Unique intent identifier (INT-*) |
| trace_id | string | OTel trace identifier (TRACE-*) |
| signals | array | Contributing signal IDs |
| title | string | Human-readable intent summary |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "intent.proposed",
"intent_id": "INT-015",
"trace_id": "TRACE-015",
"signals": ["SIG-039", "SIG-041", "SIG-042", "SIG-044"],
"title": "Investigate API latency spike in prod",
"timestamp": "2026-03-30T14:26:30Z"
}
intent.accepted
Intent
When: Human or auto-approval accepts intent (moves to spec phase).
| Field | Type | Description |
|---|---|---|
| intent_id | string | Unique intent identifier (INT-*) |
| accepted_by | string | User handle or "auto" |
| confidence | number | 0.0–1.0 acceptance confidence |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "intent.accepted",
"intent_id": "INT-015",
"accepted_by": "@brien",
"confidence": 0.92,
"timestamp": "2026-03-30T14:30:00Z"
}
spec.* Events
spec.created
Spec
When: Spec authored (human writes or agent proposes).
| Field | Type | Description |
|---|---|---|
| spec_id | string | Unique spec identifier (SPEC-*) |
| intent_id | string | Parent intent (INT-*) |
| trace_id | string | OTel trace identifier (TRACE-*) |
| title | string | Spec title |
| contracts | array | Contract IDs defined in the spec |
| author | string | Author (user handle or agent name) |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "spec.created",
"spec_id": "SPEC-042",
"intent_id": "INT-015",
"trace_id": "TRACE-015",
"title": "Profile API and identify bottleneck",
"contracts": ["CON-091", "CON-092", "CON-093"],
"author": "claude-code",
"timestamp": "2026-03-30T14:45:00Z"
}
spec.approved
Spec
When: Spec passes readiness check (all contracts defined, fields complete).
| Field | Type | Description |
|---|---|---|
| spec_id | string | Unique spec identifier (SPEC-*) |
| completeness_score | number | 0.0–1.0 spec completeness |
| checks_passed | array | List of passed readiness checks |
| approved_by | string | User handle or "auto" |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "spec.approved",
"spec_id": "SPEC-042",
"completeness_score": 1.0,
"checks_passed": ["contracts_defined", "fields_complete", "assertions_valid"],
"approved_by": "@brien",
"timestamp": "2026-03-30T14:42:00Z"
}
contract.* Events
contract.started
Contract
When: Agent begins execution of a contract.
| Field | Type | Description |
|---|---|---|
| contract_id | string | Unique contract identifier (CON-*) |
| spec_id | string | Parent spec (SPEC-*) |
| trace_id | string | OTel trace identifier (TRACE-*) |
| agent | string | Executing agent name |
| started_at | ISO 8601 | Execution start timestamp |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "contract.started",
"contract_id": "CON-091",
"spec_id": "SPEC-042",
"trace_id": "TRACE-015",
"agent": "claude-code",
"started_at": "2026-03-30T14:45:30Z",
"timestamp": "2026-03-30T14:45:30Z"
}
contract.assertion.passed
Contract
When: Verification command returns 0 (assertion succeeds).
| Field | Type | Description |
|---|---|---|
| contract_id | string | Parent contract (CON-*) |
| assertion_id | string | Assertion identifier |
| assertion_name | string | Human-readable assertion label |
| evidence | string | Command output or proof artifact |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "contract.assertion.passed",
"contract_id": "CON-091",
"assertion_id": "assert-1",
"assertion_name": "api_profile_generated",
"evidence": "profile.json (2.4KB)",
"timestamp": "2026-03-30T15:02:15Z"
}
contract.assertion.failed
Contract
When: Verification fails (non-zero exit or exception).
| Field | Type | Description |
|---|---|---|
| contract_id | string | Parent contract (CON-*) |
| assertion_id | string | Assertion identifier |
| assertion_name | string | Human-readable assertion label |
| error | string | Error message or stack trace |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "contract.assertion.failed",
"contract_id": "CON-092",
"assertion_id": "assert-2",
"assertion_name": "lint_passes",
"error": "eslint: 3 errors in src/api/handler.ts",
"timestamp": "2026-03-30T15:03:45Z"
}
contract.completed
Contract
When: All assertions evaluated (contract execution complete).
| Field | Type | Description |
|---|---|---|
| contract_id | string | Unique contract identifier (CON-*) |
| spec_id | string | Parent spec (SPEC-*) |
| duration | number | Execution duration in seconds |
| assertions_passed | number | Count of passed assertions |
| assertions_failed | number | Count of failed assertions |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "contract.completed",
"contract_id": "CON-091",
"spec_id": "SPEC-042",
"duration": 18.45,
"assertions_passed": 3,
"assertions_failed": 0,
"timestamp": "2026-03-30T15:02:30Z"
}
system.* Events
system.health
System
When: Periodic heartbeat (every 60s by default).
| Field | Type | Description |
|---|---|---|
| timestamp | ISO 8601 | Heartbeat timestamp |
| servers_active | number | Count of active MCP servers |
| event_count | number | Total events processed since startup |
| uptime_seconds | number | Server uptime in seconds |
| memory_usage_percent | number | Memory utilization percentage |
{
"event_type": "system.health",
"timestamp": "2026-03-30T15:05:00Z",
"servers_active": 3,
"event_count": 1847,
"uptime_seconds": 864000,
"memory_usage_percent": 34.2
}
system.error
System
When: Error condition detected (agent crash, network failure, validation error).
| Field | Type | Description |
|---|---|---|
| error_type | string | Error classification (e.g. MCP_CONNECTION_TIMEOUT) |
| error_code | string | Machine-readable error code |
| message | string | Human-readable error description |
| stack | string | Stack trace (optional) |
| context | object | Additional context (server, endpoint, etc.) |
| timestamp | ISO 8601 | Event emission timestamp |
{
"event_type": "system.error",
"error_type": "MCP_CONNECTION_TIMEOUT",
"error_code": "ERR_MCP_001",
"message": "notice MCP server did not respond within 30s",
"context": {"server": "notice", "endpoint": "signal.ingest"},
"timestamp": "2026-03-30T15:10:45Z"
}
Learn More
- See live events: Observe page — Real-time event stream from Intent itself
- See the OTel ingestion stack: Observability page — How these events are collected, stored, and visualized
- See the data model: Schemas page — Field definitions, types, and constraints for all event types
- Understand the loop: Flow diagram — How events connect through notice→spec→execute→observe