The Agent OS
Conscience Protocol
A vendor-neutral, open standard for AI agent governance events. Any framework, runtime, or platform that implements these four event types gains native Agent OS compatibility — and becomes part of the governance infrastructure layer.
Protocol Overview
The Agent OS Conscience Protocol defines a minimal, structured event vocabulary for AI agent governance. When an agent takes a significant action — makes a consequential decision, encounters an unexpected situation, gets overridden by a human, or completes a task — it emits a structured event. These events are the raw material of governance.
The protocol is intentionally narrow: four event types, a compact shared envelope, and type-specific payloads. Implementations are free to extend the payload with additional fields, but the core schema must be preserved for cross-system compatibility.
Governance as infrastructure, not SaaS. The Conscience Protocol is not an Agent OS product feature — it is an open specification. Any agent, framework, or runtime can emit protocol-compliant events. Agent OS is the reference implementation and the primary dashboard for consuming them. This is the same positioning strategy as OpenTelemetry to Datadog, or OAuth to Okta.
Decision Record
Emitted when an agent makes a consequential decision. The agent's reasoning, confidence, and action are recorded before execution. Creates an auditable decision trail.
Human-in-the-Loop Gate
Emitted when an agent pauses for human input. Includes the decision context, available options, and a timeout. Humans approve, deny, or redirect — agent resumes with the outcome.
Human Correction
Emitted when a human overrides an agent decision after the fact. Records what the agent did, what the human changed it to, and the stated reason. Creates the correction dataset.
Task Completion
Emitted at the end of a task or session. Summarises what happened, what was learned, and what edge cases were encountered. The foundation of agent improvement loops.
Design Philosophy
Minimal surface area
The protocol defines only what is necessary for governance: identity (who), timing (when), action (what), reasoning (why), and outcome (result). No telemetry, no performance metrics, no framework-specific metadata. Keep the core small so every implementation can comply.
Append-only by design
Conscience events are immutable records. They are written once and never modified. This is not a constraint — it is a guarantee. Governance is only meaningful if the record cannot be altered after the fact. Implementations must not provide update or delete endpoints for emitted events.
Human decision preserved at the boundary
The INTERRUPT and OVERRIDE event types are specifically designed to capture the boundary between autonomous agent action and human judgment. Every human decision that touches an agent workflow is an event. This is how accountability works at scale.
On confidence fields. All four event types include a confidence field (0.0–1.0). This is not optional decoration — it is the primary signal for governance thresholds. When confidence falls below an operator-defined threshold, the platform can automatically escalate to INTERRUPT. Agents that omit confidence are ungovernable by threshold.
Versioning
The protocol uses semantic versioning. The current version is v1.0. All protocol-compliant events must include a protocol_version field in the envelope.
Compatibility guarantee
Minor versions (v1.1, v1.2) add optional fields only. No required fields will be added in a minor release. Major versions may add required fields or change field semantics — implementations should negotiate version support at connection time.
Supported versions
| Version | Status | Release Date | Support |
|---|---|---|---|
| v1.0 | Current | May 2026 | Full — active development |
| v0.9 | Legacy | Jan 2026 | Read-only — no new features |
CONSCIENCE — Decision Record
Emitted before or at the moment of a consequential agent action. A CONSCIENCE event is a structured decision record: what the agent is about to do, why it chose to do it, what alternatives were considered, and how confident it is in the decision.
Schema
| Field | Type | Required | Description |
|---|---|---|---|
| event_type | string | Required | Must be "CONSCIENCE" |
| agent_id | string | Required | Unique identifier for the emitting agent |
| session_id | string | Required | Identifier for the current task/session context |
| timestamp | string | Required | ISO 8601 datetime with timezone offset |
| protocol_version | string | Required | Protocol version, e.g. "1.0" |
| action | string | Required | Short description of the action being taken |
| reasoning | string | Required | Agent's explanation of why this action was selected |
| confidence | float | Required | 0.0 (no confidence) to 1.0 (certain). Used for threshold-based escalation. |
| alternatives_considered | string[] | Optional | Other actions the agent evaluated before selecting this one |
| metadata | object | Optional | Arbitrary key-value pairs for framework-specific context |
Example payload
{
"event_type": "CONSCIENCE",
"agent_id": "research-agent-7f3a",
"session_id": "sess_0b9c4e2d",
"timestamp": "2026-05-07T14:22:11+11:00",
"protocol_version": "1.0",
"action": "Send outreach email to [email protected] re: Q2 pipeline",
"reasoning": "Prospect opened last two emails and visited pricing page 3× in 48h. Buying signal above threshold. Standard outreach cadence step 2.",
"confidence": 0.87,
"alternatives_considered": [
"Wait 48h for additional signal",
"Escalate to human for review"
],
"metadata": {
"prospect_id": "crm_8811",
"cadence_step": 2,
"framework": "langchain"
}
}
INTERRUPT — Human-in-the-Loop Gate
Emitted when an agent pauses execution to request human input. The event includes the full decision context, a set of structured options, and a timeout after which the agent may proceed autonomously. The responding human's selection is appended to the event as a resolution record.
Schema
| Field | Type | Required | Description |
|---|---|---|---|
| event_type | string | Required | Must be "INTERRUPT" |
| agent_id | string | Required | Unique identifier for the emitting agent |
| session_id | string | Required | Current task/session identifier |
| timestamp | string | Required | ISO 8601 datetime with timezone |
| protocol_version | string | Required | Protocol version |
| context | string | Required | Full situation description for the human reviewer |
| question | string | Required | The specific decision being delegated to the human |
| options | object[] | Required | Array of {id, label, description} objects the human can select |
| timeout_seconds | integer | Required | Seconds before the agent proceeds with its default action |
| default_option_id | string | Required | The option id the agent selects if timeout elapses with no response |
| severity | string | Optional | One of: low, medium, high, critical. Controls notification urgency. |
| resolution | object | Optional | Added after human response: {selected_option, resolved_by, resolved_at} |
Example payload
{
"event_type": "INTERRUPT",
"agent_id": "deal-scout-v2",
"session_id": "sess_4c71bb0f",
"timestamp": "2026-05-07T09:15:44+11:00",
"protocol_version": "1.0",
"context": "Target company Acme Corp has 3 conflicting signals: (1) revenue growth 40% YoY, (2) founder LinkedIn activity suggests fundraising not exit, (3) sector peers have 2.1× average EV/EBITDA compression over 12m.",
"question": "Should I include Acme Corp in this week's curated shortlist?",
"options": [
{ "id": "include", "label": "Include", "description": "Add to shortlist — growth signal overrides sector compression" },
{ "id": "exclude", "label": "Exclude", "description": "Remove — founder signal indicates low exit intent" },
{ "id": "monitor", "label": "Monitor", "description": "Keep watching, resurface in 30 days if signals align" }
],
"timeout_seconds": 86400,
"default_option_id": "monitor",
"severity": "medium"
}
OVERRIDE — Human Correction
Emitted when a human explicitly changes or reverses an agent's completed action. OVERRIDE events are the primary signal for identifying systematic agent errors. Every override becomes a training example — a before/after pair with human-provided reasoning for why the agent was wrong.
Schema
| Field | Type | Required | Description |
|---|---|---|---|
| event_type | string | Required | Must be "OVERRIDE" |
| agent_id | string | Required | Agent whose decision is being overridden |
| session_id | string | Required | Session context identifier |
| timestamp | string | Required | When the override occurred (ISO 8601) |
| protocol_version | string | Required | Protocol version |
| original_action | string | Required | What the agent did (or was about to do) |
| override_action | string | Required | What the human changed it to |
| override_reason | string | Required | Human's stated reason for the correction |
| overriding_user_id | string | Required | Identity of the human who performed the override |
| original_conscience_event_id | string | Optional | Links back to the CONSCIENCE event that produced the original action |
| severity | string | Optional | minor, moderate, major, critical |
Example payload
{
"event_type": "OVERRIDE",
"agent_id": "content-agent-prod",
"session_id": "sess_d40f11ec",
"timestamp": "2026-05-07T16:04:29+11:00",
"protocol_version": "1.0",
"original_action": "Published blog post 'Q1 Results Summary' with 47% open rate prediction",
"override_action": "Retracted post — replaced with manually reviewed version removing revenue figures",
"override_reason": "Revenue figures not yet public — agent pulled from internal Notion, should not have been included",
"overriding_user_id": "user_joel_vantage",
"original_conscience_event_id": "evt_9a2b3c4d",
"severity": "critical"
}
DEBRIEF — Task Completion
Emitted at the end of a task, session, or significant workflow step. A DEBRIEF event summarises what happened, captures anomalies and edge cases, and flags any patterns that emerged during execution. DEBRIEFs are the raw material for agent improvement — feed them back into training data pipelines or review queues.
Schema
| Field | Type | Required | Description |
|---|---|---|---|
| event_type | string | Required | Must be "DEBRIEF" |
| agent_id | string | Required | Emitting agent identifier |
| session_id | string | Required | Session being debriefed |
| timestamp | string | Required | ISO 8601 completion time |
| protocol_version | string | Required | Protocol version |
| task_summary | string | Required | One-paragraph description of what was accomplished |
| outcome | string | Required | One of: success, partial, failure, timeout |
| confidence | float | Required | Agent's confidence in the overall task outcome (0.0–1.0) |
| decisions_made | integer | Optional | Count of CONSCIENCE events emitted this session |
| interrupts_triggered | integer | Optional | Count of INTERRUPT events emitted this session |
| edge_cases | string[] | Optional | Unexpected situations the agent encountered |
| learned | string[] | Optional | Structured observations the agent flagged for review |
| next_session_context | object | Optional | State to carry forward into the next session (arbitrary key-value) |
Example payload
{
"event_type": "DEBRIEF",
"agent_id": "market-research-agent",
"session_id": "sess_78cc910a",
"timestamp": "2026-05-07T18:30:00+11:00",
"protocol_version": "1.0",
"task_summary": "Completed weekly competitive analysis for FinTech sector. Processed 240 company filings, identified 7 M&A signals, and generated 12 company profiles for review.",
"outcome": "success",
"confidence": 0.91,
"decisions_made": 34,
"interrupts_triggered": 2,
"edge_cases": [
"Company XYZ has two conflicting ASIC filings — flagged for manual review",
"Sector classification mismatch for 4 companies (listed as FinTech but primary revenue is logistics)"
],
"learned": [
"ASIC filing lag averages 47 days — use LinkedIn activity as leading indicator for M&A intent"
],
"next_session_context": {
"last_processed_date": "2026-05-07",
"pending_manual_review": ["company_xyz_id"]
}
}
Implementation — Node.js
The Agent OS Node.js client is the reference implementation of the Conscience Protocol. Install it from npm:
npm install @agent-os/conscience
import { AgentOS } from '@agent-os/conscience';
const client = new AgentOS({
apiKey: process.env.AGENT_OS_KEY,
agentId: 'my-research-agent'
});
// Emit a decision record before acting
const event = await client.conscience({
session_id: 'sess_abc123',
action: 'Send weekly summary email to stakeholders',
reasoning: 'Weekly cadence trigger fired. 3 high-priority items identified.',
confidence: 0.94,
alternatives_considered: ['Defer to next business day']
});
console.log('Event ID:', event.id);
// Proceed with the action...
// Pause execution for human approval
const { event, resolution } = await client.interrupt({
session_id: 'sess_abc123',
context: 'Deal confidence 0.72 — below 0.80 threshold for autonomous send',
question: 'Should I include Acme Corp in this week\'s shortlist?',
options: [
{ id: 'include', label: 'Include', description: 'Add to shortlist' },
{ id: 'exclude', label: 'Exclude', description: 'Skip this cycle' },
{ id: 'monitor', label: 'Monitor', description: 'Watch and resurface in 30 days' }
],
timeout_seconds: 86400,
default_option_id: 'monitor',
severity: 'medium'
});
// .interrupt() blocks until resolved or timeout elapses
console.log('Human selected:', resolution.selected_option);
// Record a human correction to a previous action
await client.override({
session_id: 'sess_abc123',
original_action: 'Published post including Q1 revenue figures',
override_action: 'Retracted post — figures not yet public',
override_reason: 'Revenue not announced — agent pulled from internal Notion',
overriding_user_id: 'user_joel',
original_conscience_event_id: event.id,
severity: 'critical'
});
// Close session with a completion summary
await client.debrief({
session_id: 'sess_abc123',
task_summary: 'Processed 240 filings, identified 7 M&A signals.',
outcome: 'success',
confidence: 0.91,
decisions_made: 34,
interrupts_triggered: 2,
edge_cases: ['XYZ Corp has conflicting ASIC filings — flagged for review'],
learned: ['ASIC filing lag ~47 days — use LinkedIn as leading indicator']
});
Implementation — Python
pip install agent-os-conscience
from agent_os import AgentOS
client = AgentOS(
api_key=os.environ["AGENT_OS_KEY"],
agent_id="my-research-agent"
)
event = client.conscience(
session_id="sess_abc123",
action="Send weekly summary email to stakeholders",
reasoning="Weekly cadence trigger fired. 3 high-priority items.",
confidence=0.94,
alternatives_considered=["Defer to next business day"]
)
print(f"Event ID: {event.id}")
event, resolution = client.interrupt(
session_id="sess_abc123",
context="Deal confidence 0.72 — below 0.80 threshold",
question="Include Acme Corp in shortlist?",
options=[
{"id": "include", "label": "Include", "description": "Add to shortlist"},
{"id": "exclude", "label": "Exclude", "description": "Skip this cycle"},
{"id": "monitor", "label": "Monitor", "description": "Watch 30 days"},
],
timeout_seconds=86400,
default_option_id="monitor",
severity="medium"
)
print(f"Selected: {resolution.selected_option}")
client.override(
session_id="sess_abc123",
original_action="Published post with Q1 revenue figures",
override_action="Retracted — figures not yet public",
override_reason="Revenue not announced — agent sourced from internal Notion",
overriding_user_id="user_joel",
original_conscience_event_id=event.id,
severity="critical"
)
client.debrief(
session_id="sess_abc123",
task_summary="Processed 240 filings, identified 7 M&A signals.",
outcome="success",
confidence=0.91,
decisions_made=34,
interrupts_triggered=2,
edge_cases=["XYZ Corp conflicting ASIC filings — flagged"],
learned=["ASIC lag ~47 days — use LinkedIn as leading indicator"]
)
Implementation — curl / Raw HTTP
All protocol events are submitted via a single POST endpoint. No SDK required — any HTTP client works.
curl -s -X POST https://vantageaiadvisory.com/agent-auth-api/conscience \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_OS_KEY" \
-d '{
"event_type": "CONSCIENCE",
"agent_id": "my-agent",
"session_id": "sess_abc123",
"timestamp": "2026-05-07T14:22:11+11:00",
"protocol_version": "1.0",
"action": "Send outreach email to prospect",
"reasoning": "Buying signals above threshold",
"confidence": 0.87
}'
curl -s -X POST https://vantageaiadvisory.com/agent-auth-api/interrupts \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_OS_KEY" \
-d '{
"event_type": "INTERRUPT",
"agent_id": "my-agent",
"session_id": "sess_abc123",
"timestamp": "2026-05-07T14:22:11+11:00",
"protocol_version": "1.0",
"context": "Confidence below threshold",
"question": "Proceed with send?",
"options": [
{"id": "yes", "label": "Yes", "description": "Send now"},
{"id": "no", "label": "No", "description": "Cancel"}
],
"timeout_seconds": 3600,
"default_option_id": "no"
}'
curl -s -X POST https://vantageaiadvisory.com/agent-auth-api/interrupts/{eventId}/resolve \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AGENT_OS_KEY" \
-d '{"selected_option": "yes"}'
Framework Implementation Status
The following frameworks and runtimes have been evaluated for native Agent OS Conscience Protocol support. "Native" means the framework emits protocol-compliant events without any wrapper code.
Legend: C = CONSCIENCE | I = INTERRUPT | O = OVERRIDE | D = DEBRIEF
Implement the Protocol in Your Framework
Adding Agent OS Conscience Protocol support to your framework or platform means your users get governance out of the box — no additional integration required. Implementation is a community contribution and carries no licensing cost.
What's required for "Native" status
A framework qualifies as Native when it emits all four event types automatically at the appropriate lifecycle points, with no user-written wrapper code. The event payloads must pass the protocol validator at all required fields.
Implementation checklist
| Requirement | Description |
|---|---|
| CONSCIENCE on decision | Emit before any consequential action, with action, reasoning, and confidence populated |
| INTERRUPT on threshold | When confidence falls below operator-defined threshold, pause and emit INTERRUPT before proceeding |
| OVERRIDE on human change | When a human modifies agent output via the framework's UI, emit OVERRIDE with before/after and reason |
| DEBRIEF on completion | Emit at task/session end with outcome, confidence, and optional learned array |
| Version field | All events must include protocol_version: "1.0" |
| ISO 8601 timestamps | All timestamp fields must include timezone offset (not UTC-only) |
Start emitting governance events today
Get an API key, point your agent at the endpoint, and start building an auditable decision trail in minutes.