Synedrix OS - Agent Registry
This document defines the canonical registry entries for all agents owned by Synedrix OS. These agents are cross-domain: they operate identically regardless of which domain pack is active. Domain packs contribute their own agent entries using the same registry schema defined in §2; those entries are not listed here.
Status: Canonical OS-level reference · Date: October 2026 Scope: OS-owned agents — control, intelligence, and observability families
1. Purpose
The agent registry is the authoritative catalog of what agents exist in the system, what they are responsible for, what they are permitted to do, and where they sit in the authority and escalation structure. Without a formal registry, multi-agent systems accumulate implicit assumptions about agent roles and permissions that are difficult to audit or evolve safely.
This document covers the OS layer of the registry. It:
- Defines the twelve OS-owned agents and their full contracts
- Specifies the authority boundary and tool access for each
- Documents how OS agents interact with each other and with domain agents
- Provides the registration schema that domain packs must use when contributing their own agents
2. Agent Registry Schema
Every agent registered in Synedrix OS, including whether OS-owned or domain-contributed, must declare all fields in this schema.
| Field | Type | Description |
|---|---|---|
agent_id | string | Stable unique identifier, e.g. os-agt-001 |
name | string | Human-readable name |
family | enum | control · intelligence · observability · domain · customer |
owner | enum | synedrix-os · <domain-pack-id> · <business-instance-id> (Business Instance Extension agents, §6.1) · <domain-pack-id>.<module-id> (Capability Module agents, §6.1) |
mission | string | Single-sentence statement of the agent’s sole responsibility |
input_contract | object | Schema of structured inputs the agent accepts |
output_contract | object | Schema of structured outputs the agent always produces |
tools_allowed | string[] | Explicit list of tools and adapters the agent may invoke |
systems_allowed | string[] | External systems the agent may read from or write to |
memory_scope | object | Which memory stores the agent may read and write, and at what privilege |
decision_scope | enum | recommend - may propose actions only · approve - may validate/block proposals · execute - may trigger side effects |
execution_scope | string | Specific side effects the agent is authorized to trigger |
approval_required | object | Whether policy approval or HITL review is required before execution: keys policy and hitl, both always present, each boolean, and for the memory agents also broker. Every agent declares it, including agents that do not execute, and omitting it or either key fails the check (ADR-OS-017 §3.4); a delegating execute-scope agent declares { policy: false, hitl: false } (see §4.1) |
risk_tier | enum | low · medium · high · critical. high and critical obligations are set by ADR-OS-017 §6.2 |
governance_class | enum | autonomous · policy-gated · hitl-required. A gate agent (decision_scope: approve) declares autonomous |
authority | object | can_recommend, can_draft, can_execute, can_approve, can_delegate (booleans), per the Agent Spec. Execution means a change of state in a system other than the acting agent’s own outputs (§4.1) |
task_surface | object | Task classes the agent handles, each autonomous or approval_required, per the Agent Spec. A gate agent’s gate-function classes (for example validate-policy) are listed in neither and are marked gate (ADR-OS-017 §3.3) |
escalation_path | string[] | Ordered list of escalation targets when the agent cannot proceed |
owner_workflows | string[] | Workflow IDs where this agent plays a primary role |
status | enum | planned · active · paused · deprecated |
version | string | Semantic version of this agent definition |
3. OS Agent Summary
Twelve agents are owned and shipped by Synedrix OS across three families.
| Agent ID | Name | Family | Layer | Decision scope | Status |
|---|---|---|---|---|---|
os-agt-001 | Orchestrator Agent | Control | 3 | execute | Active |
os-agt-002 | Policy Guard Agent | Control | 9 | approve | Active |
os-agt-003 | Registry & Capability Agent | Control | 5 | recommend | Active |
os-agt-004 | HITL Gateway Agent | Control | 9 | approve | Active |
os-agt-005 | Analytics Agent | Intelligence | 10 | recommend | Active |
os-agt-006 | Forecasting Agent | Intelligence | 10 | recommend | Active |
os-agt-007 | Anomaly Detection Agent | Intelligence | 10 | recommend | Active |
os-agt-008 | Audit & Lineage Agent | Observability | 10 | recommend | Active |
os-agt-009 | General Chat Agent | Intelligence | 4 | recommend | Active |
os-agt-010 | Memory Curator Agent | Control | 7 | execute | Active |
os-agt-011 | Consolidation & Reflection Agent | Intelligence | 7 | recommend | Active |
os-agt-012 | Memory Access Broker Agent | Control | 9 | approve | Active |
The twelve agents by family:
flowchart TB
OS["Synedrix OS: 12 agents"]
subgraph control["Control family"]
os_agt_001["Orchestrator Agent (os-agt-001)"]
os_agt_002["Policy Guard Agent (os-agt-002)"]
os_agt_003["Registry & Capability Agent (os-agt-003)"]
os_agt_004["HITL Gateway Agent (os-agt-004)"]
os_agt_010["Memory Curator Agent (os-agt-010)"]
os_agt_012["Memory Access Broker Agent (os-agt-012)"]
end
OS --> control
subgraph intelligence["Intelligence family"]
os_agt_005["Analytics Agent (os-agt-005)"]
os_agt_006["Forecasting Agent (os-agt-006)"]
os_agt_007["Anomaly Detection Agent (os-agt-007)"]
os_agt_009["General Chat Agent (os-agt-009)"]
os_agt_011["Consolidation & Reflection Agent (os-agt-011)"]
end
OS --> intelligence
subgraph observability["Observability family"]
os_agt_008["Audit & Lineage Agent (os-agt-008)"]
end
OS --> observability
3.2 Canonical identifier forms
Per Naming Convention Spec §3, agents also carry a canonical
{layer}-{archetype}-{capability-slug}-{seq} identifier. Both forms are valid until migration completes.
| Legacy ID | Canonical ID |
|---|---|
os-agt-009 | os-int-general-chat-001 |
os-agt-010 | os-ctl-memory-curator-001 |
os-agt-011 | os-int-memory-consolidation-001 |
os-agt-012 | os-ctl-memory-broker-001 |
4. OS Agent Definitions
os-agt-001 - Orchestrator Agent
Family: Control · Owner: Synedrix OS
Mission: Decompose incoming goals and events into executable task graphs, route work to the correct specialist agents or workflows, manage sequencing, retries, and approvals, and ensure every execution path reaches a declared terminal state.
| Field | Value |
|---|---|
| Input contract | { goal_id, goal_type, intent_payload, priority, correlation_id, domain_context? } |
| Output contract | { task_graph, agent_assignments, execution_status, terminal_state, correlation_id } |
| Tools allowed | Workflow router · Task graph builder · Retry manager · Escalation dispatcher · Agent invocation interface |
| Systems allowed | n8n (read/write) · Redis hot state (read/write) · Supabase workflow registry (read) · Agent registry (read) |
| Memory scope | Operational memory: read/write · Workflow audit state: write · Semantic memory: read-only |
| Decision scope | execute - may invoke agents, trigger workflows, and transition task states |
| Execution scope | Agent invocation · Workflow instantiation · Retry triggering · Approval checkpoint insertion · Escalation dispatch |
| Approval required | { policy: false, hitl: false } - not required for orchestration itself. Approval gates are inserted into the task graph as declared by each workflow contract. |
| Escalation path | Policy Guard Agent → HITL Gateway Agent → human operator |
| Owner workflows | All workflows - the Orchestrator Agent is a participant in every workflow execution |
| Version | 0.2 |
Authority boundary: The Orchestrator Agent routes and sequences work but does not itself execute domain-specific business logic, make domain decisions, or write to external systems directly. All side effects are delegated to specialist agents through governed invocation.
os-agt-002 - Policy Guard Agent
Family: Control · Owner: Synedrix OS
Mission: Evaluate proposed actions against the active policy ruleset before execution proceeds, enforce authority boundaries, apply risk thresholds, and emit a binding allow / block / escalate decision that the Orchestrator Agent must respect.
| Field | Value | ||
|---|---|---|---|
| Input contract | { action_type, action_payload, requesting_agent_id, workflow_id, domain, correlation_id, policy_context? } | ||
| Output contract | `{ decision: allow\ | block\ | escalate, policy_rule_triggered?, risk_score?, reason, requires_hitl: bool, correlation_id }` |
| Tools allowed | Policy rule engine · Risk scoring adapter · Authority boundary checker · Audit log writer | ||
| Systems allowed | Supabase policy store (read) · Supabase audit trail (write) · Redis idempotency store (read/write) | ||
| Memory scope | Policy state: read · Audit state: write · Operational memory: read-only | ||
| Decision scope | approve - produces binding allow/block/escalate decisions; does not itself execute actions | ||
| Execution scope | Audit record write · Escalation flag set · Policy event emission | ||
| Approval required | { policy: false, hitl: false } - none - the Policy Guard Agent is itself a governance control, not a governed actor | ||
| Escalation path | HITL Gateway Agent → human risk owner | ||
| Owner workflows | All approval-gated and high-impact workflows · WF-OS-POLICY-EVAL | ||
| Version | 0.3 |
Authority boundary: The Policy Guard Agent evaluates and decides, it never executes business actions itself. Its block decision is final within the current workflow invocation; no human decision, including a HITL approval, reverses it. To change the outcome, a human changes the policy or thresholds and the action is re-proposed and re-evaluated (ADR-OS-018).
os-agt-003 - Registry & Capability Agent
Family: Control · Owner: Synedrix OS
Mission: Resolve which agents, workflows, and capabilities are available, active, and correctly scoped for a given goal or task, and return a structured capability map that the Orchestrator Agent uses for routing.
| Field | Value |
|---|---|
| Input contract | { goal_type, domain?, required_capabilities[], task_context?, correlation_id } |
| Output contract | { capability_map: [{ agent_id, workflow_id?, capability, availability_status, version }], unresolved_capabilities[], correlation_id } |
| Tools allowed | Agent registry reader · Workflow registry reader · Capability index searcher |
| Systems allowed | Supabase agent registry (read) · Supabase workflow registry (read) · Redis capability cache (read) |
| Memory scope | Registry state: read-only · Semantic memory: read-only (for capability similarity matching) |
| Decision scope | recommend - produces capability maps for the Orchestrator Agent to act on; does not invoke agents directly |
| Execution scope | Registry cache refresh (write to Redis) |
| Approval required | { policy: false, hitl: false } - none |
| Escalation path | Orchestrator Agent (unresolved capability gap) → human operator |
| Owner workflows | WF-OS-CAPABILITY-RESOLUTION · Any workflow with dynamic agent selection |
| Version | 0.2 |
Authority boundary: The Registry & Capability Agent reads registry state and returns routing recommendations. It never modifies agent or workflow registry entries, registration is a human operator action, not an agent action.
os-agt-004 - HITL Gateway Agent
Family: Control · Owner: Synedrix OS
Mission: Manage the human-in-the-loop approval surface for all workflows that require human review - route approval requests to the correct reviewer, capture structured decisions, enforce review timeouts, and return binding outcomes back to the requesting workflow.
| Field | Value | ||
|---|---|---|---|
| Input contract | { approval_request_id, workflow_id, action_type, action_payload, requester_agent_id, reviewer_role, timeout_seconds, correlation_id } | ||
| Output contract | `{ decision: approved\ | rejected\ | timeout, reviewer_id?, rationale?, decided_at?, correlation_id }` |
| Tools allowed | Human interface notification dispatcher · Approval state writer · Timeout manager · Hookdeck Outpost (notification delivery) | ||
| Systems allowed | Supabase approval state (read/write) · Hookdeck Outpost (write) · Redis timeout keys (read/write) | ||
| Memory scope | Approval state: read/write · Audit state: write | ||
| Decision scope | approve - captures and relays human decisions; does not make autonomous approval decisions | ||
| Execution scope | Approval record write · Notification dispatch · Timeout escalation trigger | ||
| Approval required | { policy: false, hitl: false } - not applicable - this agent is the approval surface itself | ||
| Escalation path | Senior reviewer → human operator (on timeout or contested decision) | ||
| Owner workflows | All HITL-gated workflows · WF-OS-APPROVAL-ROUTING | ||
| Version | 0.2 |
Authority boundary: The HITL Gateway Agent is a routing and capture mechanism, it does not interpret, modify, or override the human decision it receives. On timeout it escalates rather than deciding autonomously.
os-agt-005 - Analytics Agent
Family: Intelligence · Owner: Synedrix OS
Mission: Aggregate cross-domain operational metrics, generate structured performance reports, and surface business-level signals that support human decision-making and domain pack monitoring, without owning or acting on the domain data it summarizes.
| Field | Value |
|---|---|
| Input contract | { report_type, domains[], time_window, metrics_requested[], filters?, correlation_id } |
| Output contract | { report_id, report_type, period, metrics: [{ name, value, unit, trend, domain }], anomaly_flags[], generated_at, correlation_id } |
| Tools allowed | QuestDB query adapter · Supabase analytics read · PostHog event query · Langfuse metric query |
| Systems allowed | QuestDB (read) · Supabase (read) · PostHog (read) · Langfuse (read) |
| Memory scope | Time-series memory: read · Operational memory: read · Semantic memory: read (for context enrichment) |
| Decision scope | recommend - produces reports and signals; does not act on findings |
| Execution scope | Report record write to Supabase · Anomaly flag emission as OS event |
| Approval required | { policy: false, hitl: false } - none for report generation · Anomaly flags that trigger downstream workflows are governed by those workflows’ own contracts |
| Escalation path | Anomaly Detection Agent (for signal amplification) → Orchestrator Agent (for workflow trigger) → human domain steward (of the affected business function) |
| Owner workflows | WF-OS-ANALYTICS-REPORT · WF-OS-METRICS-AGGREGATION |
| Version | 0.3 |
Authority boundary: The Analytics Agent reads broadly but writes nothing except its own report records and anomaly event emissions. It must not modify source data or trigger execution workflows directly.
os-agt-006 - Forecasting Agent
Family: Intelligence · Owner: Synedrix OS
Mission: Generate forward-looking projections from historical time-series and operational data across domains, and return structured forecast outputs that domain agents and human operators can use for planning and threshold calibration.
| Field | Value |
|---|---|
| Input contract | { forecast_type, target_metric, domain, history_window, horizon, model_params?, correlation_id } |
| Output contract | { forecast_id, target_metric, domain, horizon, projections: [{ timestamp, value, confidence_interval }], model_used, generated_at, correlation_id } |
| Tools allowed | QuestDB time-series read adapter · Statistical/ML model invocation adapter · Langfuse trace writer |
| Systems allowed | QuestDB (read) · Qdrant (read - for similar historical pattern retrieval) · Langfuse (write - trace) |
| Memory scope | Time-series memory: read · Semantic memory: read (pattern retrieval) · Forecast record store: write |
| Decision scope | recommend - produces projections only; does not trigger actions based on forecast results |
| Execution scope | Forecast record write to Supabase |
| Approval required | { policy: false, hitl: false } - none - forecasts are informational outputs |
| Escalation path | Analytics Agent (for context) → human domain steward (if projection triggers planning decision) |
| Owner workflows | WF-OS-FORECAST-GENERATION |
| Version | 0.2 |
Authority boundary: The Forecasting Agent produces probabilistic outputs. It must not represent forecasts as decisions or thresholds. Acting on a forecast is always the responsibility of the requesting workflow or human operator.
os-agt-007 - Anomaly Detection Agent
Family: Intelligence · Owner: Synedrix OS
Mission: Continuously monitor operational signals, workflow metrics, and event streams across all active domains, identify patterns that fall outside configured normal bounds, and emit structured anomaly events for downstream triage and response.
| Field | Value | |
|---|---|---|
| Input contract | { monitoring_scope: domains[], signal_types[], detection_config: { thresholds, window, sensitivity }, correlation_id } | |
| Output contract | `{ anomaly_id?, status: anomaly_detected\ | nominal, signal_type?, domain?, deviation_score?, context_snapshot?, recommended_action?, correlation_id }` |
| Tools allowed | QuestDB streaming read adapter · Redis signal cache · Grafana/Prometheus metric query · Anomaly model adapter | |
| Systems allowed | QuestDB (read) · Redis (read) · Prometheus (read) · Supabase anomaly log (write) | |
| Memory scope | Time-series memory: read · Hot state: read · Anomaly log: write | |
| Decision scope | recommend - emits anomaly events and recommended actions; does not execute remediation directly | |
| Execution scope | Anomaly event emission · Anomaly log record write | |
| Approval required | { policy: false, hitl: false } - none for detection and emission · Any remediation triggered by an anomaly event is governed by the responding workflow’s contract | |
| Escalation path | Analytics Agent (for context enrichment) → Orchestrator Agent (for automated response workflow) → HITL Gateway Agent (for human review) → human domain steward (of the affected business function) | |
| Owner workflows | WF-OS-ANOMALY-DETECTION · WF-OS-INCIDENT-TRIAGE | |
| Version | 0.3 |
Authority boundary: The Anomaly Detection Agent observes and signals, it never acts on what it detects. Remediation is a separate workflow that must be explicitly triggered and governed.
os-agt-008 - Audit & Lineage Agent
Family: Observability · Owner: Synedrix OS
Mission: Correlate workflow execution traces, agent invocation records, policy decisions, and tool call logs into structured run lineage, and respond to explainability queries with a complete, sourced reconstruction of what happened, why, and under whose authority.
| Field | Value | |||
|---|---|---|---|---|
| Input contract | `{ query_type: lineage_trace\ | decision_explanation\ | policy_audit\ | run_summary, entity_id?, workflow_id?, correlation_id, time_range? }` |
| Output contract | { lineage_id, query_type, entity_id?, workflow_id?, steps: [{ timestamp, actor, action, inputs, outputs, policy_decision?, authority }], audit_complete: bool, correlation_id } | |||
| Tools allowed | Supabase audit trail reader · Neo4j lineage graph reader · Langfuse trace reader · Log aggregation query adapter | |||
| Systems allowed | Supabase (read) · Neo4j (read) · Langfuse (read) · Grafana/Loki log store (read) | |||
| Memory scope | Audit state: read · Graph memory: read · LLM trace memory: read | |||
| Decision scope | recommend - produces lineage and audit outputs; does not modify any records | |||
| Execution scope | None - this agent is read-only by design | |||
| Approval required | { policy: false, hitl: false } - none for standard lineage queries · Access to sensitive policy decision details may require role-based authorization check via Policy Guard Agent | |||
| Escalation path | Human compliance owner (for audit findings requiring action) | |||
| Owner workflows | WF-OS-AUDIT-QUERY · WF-OS-LINEAGE-TRACE · WF-OS-INCIDENT-POSTMORTEM | |||
| Version | 0.2 |
Authority boundary: The Audit & Lineage Agent is strictly read-only and always will be. It may never modify, redact, or amend audit records. Any amendment to audit state is a human operator action with its own audit trail.
os-agt-009 - General Chat Agent
Family: Intelligence · Owner: Synedrix OS · Layer: 4 (Agent Runtime) · Canonical ID: os-int-general-chat-001
Mission: Answer natural-language questions about Synedrix OS by retrieving grounded context from a semantic knowledge base and composing a cited response, for standalone chat surfaces (e.g. a public website) that sit outside any domain pack.
| Field | Value |
|---|---|
| Input contract | { correlation_id, causation_id, agent_id, execution_pattern: "iterative", deployment_mode: "self-hosted-hybrid", active_tool_set[], input: { messages[] } } |
| Output contract | Canonical Outcome Envelope (status, result: { messages[], sources[] }, execution_context, timing, errors[]) |
| Tools allowed | Semantic knowledge-base retrieval tool (Qdrant, read-only) · Local/self-hosted model inference (LiteLLM gateway) |
| Systems allowed | Qdrant (read) · LiteLLM gateway (inference only, no data at rest) · Langfuse (write - trace) |
| Memory scope | Semantic memory: read-only · No access to operational, conversation, or canonical relational memory |
| Decision scope | recommend - answers questions and cites sources; triggers no side effects |
| Execution scope | None beyond its own trace emission to Langfuse |
| Approval required | { policy: false, hitl: false } - no write-class tool is bound; this declaration must flip to true and the agent re-certified through the governance bridge before any write-capable tool is added (see DGX Vercel Chat Agent Deployment §8) |
| Escalation path | HITL Gateway Agent (os-agt-004) → human operator |
| Owner workflows | None - directly invoked as a standalone LangGraph service, not orchestrated by an n8n workflow. See DGX Vercel Chat Agent Deployment for the invocation path and its bounded governance-bridge exception. |
| Runtime engine | langgraph |
| Version | 0.3 |
Authority boundary: The General Chat Agent retrieves and answers; it never writes to any system of record and holds no execution authority. Its direct Vercel-to-LangGraph invocation path bypasses the n8n orchestration layer that normally carries the governance bridge — this is compliant only while decision_scope: recommend holds and no write-class tool is bound. Any expansion of its tool set to include a write-class tool requires routing through n8n/Orchestrator or embedding an equivalent Policy Guard/HITL call inside the graph before that tool may be enabled.
Organisational-interface conditions (ADR-OS-015 §4.4): os-agt-009 is not the organisational interface, and may not classify and route requests to os-agt-001 or os-agt-005, until all of the following hold: its approval_required.policy flips to true; it is re-certified through the governance bridge; its invocation path carries the bridge, or an equivalent in-path governance control is specified; and its memory_profile is reviewed against the wider recall surface routing implies. Until then, any depiction of os-agt-009 as an organisational interface is marked as target state.
os-agt-010 - Memory Curator Agent
Family: Control · Owner: Synedrix OS · Layer: 7 (Memory & Data) · Canonical ID: os-ctl-memory-curator-001
Mission: Commit every durable memory record on behalf of the agents that propose them — forming, consolidating, promoting, expiring and erasing records under the memory lifecycle — so that no agent writes durable memory directly and every record carries complete provenance.
| Field | Value |
|---|---|
| Input contract | { operation: form|consolidate|promote|demote|expire|erase, proposals[], correlation_id, causation_id, broker_decision, policy_decision? } |
| Output contract | { committed[]: { memory_id, tier, consolidation_state }, rejected[]: { proposal_ref, reason }, events_emitted[], correlation_id } |
| Tools allowed | Memory record writer (Supabase) · Qdrant projection writer · NAMS graph writer (Neo4j, bolt) · Tombstone writer · Event emitter |
| Systems allowed | Supabase (read/write) · Qdrant (read/write) · Neo4j via NAMS (read/write) · Redis (read) |
| Memory scope | Episodic memory: read/write · Semantic memory: read/write · Procedural memory: read/write · Profile memory: read/write · Graph memory: write · Canonical memory: read/write (memory tables only) · Working memory: read-only |
| Decision scope | execute - the only agent permitted to commit durable memory records |
| Execution scope | Memory record creation · Consolidation commit · Tier promotion and demotion · Validity-interval closure · Supersession · Erasure and tombstone creation · memory.* event emission |
| Approval required | { policy: false, hitl: false, broker: true } - every operation requires an os-agt-012 scope decision; the agent-level policy is false because policy approval is not uniform and is declared per task class (§4.1): erasure, promotion into relational, visibility widening beyond tenant, and promotion of records carrying regulated compliance_labels additionally require os-agt-002 policy approval (see Memory Fabric Spec §7.3) |
| Escalation path | Memory Access Broker Agent (os-agt-012) → Policy Guard Agent (os-agt-002) → HITL Gateway Agent (os-agt-004) → human operator |
| Owner workflows | WF-OS-MEMORY-CONSOLIDATE · WF-OS-MEMORY-ERASURE |
| Runtime engine | n8n-aiagent - commits are deterministic; no cyclic reasoning is required |
| Version | 0.2 |
Authority boundary: The Memory Curator commits but never decides what should be remembered. Formation and consolidation proposals originate elsewhere — from any agent for formation, from os-agt-011 for consolidation and reflection — and the Curator’s role is to validate the envelope, enforce provenance, apply the write across the write-authoritative store and its projections, and emit the event. It has no authority to originate a memory record of its own, and no authority to commit an operation that os-agt-012 has not scoped or that os-agt-002 has blocked. It may never destroy lineage: erasure removes content and leaves a tombstone.
os-agt-011 - Consolidation & Reflection Agent
Family: Intelligence · Owner: Synedrix OS · Layer: 7 (Memory & Data) · Canonical ID: os-int-memory-consolidation-001
Mission: Analyse accumulated memory records to propose consolidations, higher-order reflections, distilled procedural skills, tier promotions and conflict resolutions — producing recommendations only, never writes.
| Field | Value |
|---|---|
| Input contract | { scope: { tenant_id, tier[], window }, candidates[]: memory_id, correlation_id, causation_id, thresholds } |
| Output contract | Canonical Outcome Envelope with result: { proposals[]: { operation, target_tier, derived_from[], content, confidence, rationale }, conflicts[]: { memory_ids[], resolution_proposed } } |
| Tools allowed | Memory record reader (Supabase, read-only) · Qdrant similarity search (read-only) · NAMS entity deduplication (read-only) · Local/self-hosted model inference (LiteLLM gateway) |
| Systems allowed | Supabase (read) · Qdrant (read) · Neo4j via NAMS (read) · LiteLLM gateway (inference only) · Langfuse (write - trace) |
| Memory scope | Episodic memory: read · Semantic memory: read · Procedural memory: read · Profile memory: read · Graph memory: read · Temporal memory: read · No write access to any tier |
| Decision scope | recommend - proposes consolidations, reflections, skills and promotions; commits nothing |
| Execution scope | None beyond its own trace emission to Langfuse |
| Approval required | { policy: false, hitl: false } - this agent triggers no side effects; every proposal it produces is gated downstream by os-agt-012 and committed only by os-agt-010 |
| Escalation path | Memory Curator Agent (os-agt-010) → HITL Gateway Agent (os-agt-004) → human operator |
| Owner workflows | WF-OS-MEMORY-CONSOLIDATE |
| Runtime engine | langgraph - consolidation is reflect-and-revise: a proposal is generated, critiqued against the existing record set, and revised |
| Version | 0.2 |
Authority boundary: The Consolidation & Reflection Agent reads broadly and writes nothing. Reading broadly is precisely why it holds no write authority: an agent that can both survey the whole fabric and commit to it could rewrite memory to match its own inference without a second opinion. Every proposal it emits is a recommendation carrying its derived_from chain and a rationale, and is only durable once os-agt-012 has scoped it and os-agt-010 has committed it. It may not resolve a detected conflict unilaterally — it proposes a resolution and the contested records remain flagged until the proposal is committed.
os-agt-012 - Memory Access Broker Agent
Family: Control · Owner: Synedrix OS · Layer: 9 (Governance & Controls) · Canonical ID: os-ctl-memory-broker-001
Mission: Mediate every memory recall and every memory write proposal, resolving the requester’s declared scope against its memory_profile before any store is queried, and emitting an allow, partial or deny decision.
| Field | Value |
|---|---|
| Input contract | { request_type: recall|propose|promote, requesting_agent, tiers[], scope, filters?, correlation_id, causation_id } |
| Output contract | { decision: allow|partial|deny, scope_applied, tiers_granted[], tiers_denied[], filter_predicates, reason?, correlation_id } |
| Tools allowed | Memory profile reader (Supabase, read-only) · Agent registry reader (read-only) · Tool authorization resolver · Event emitter |
| Systems allowed | Supabase (read) · Agent registry (read) |
| Memory scope | Canonical memory: read (memory profile and registry tables only) · Recall decision log: write · No access to memory record content in any tier |
| Decision scope | approve - validates and blocks memory access; performs no reads of memory content and no writes to memory records |
| Execution scope | None - emits decisions and memory.recall.* events only |
| Approval required | { policy: false, hitl: false } - not required for the brokering decision itself. Denials are terminal for the request; the requester escalates rather than retries. |
| Escalation path | Policy Guard Agent (os-agt-002) → HITL Gateway Agent (os-agt-004) → human operator |
| Owner workflows | WF-OS-MEMORY-RECALL · WF-OS-MEMORY-CONSOLIDATE · WF-OS-MEMORY-ERASURE |
| Runtime engine | n8n-aiagent - deterministic scope intersection; no model inference on the decision path |
| Version | 0.2 |
Authority boundary: The Memory Access Broker decides whether and at what scope memory may be read or written, and never sees the memory content itself. That separation is deliberate: the broker is on the path of every recall in the system, so granting it content access would make it the single most privileged reader in the OS. It resolves scope before the store is queried and returns filter predicates that are pushed down into the query — it never inspects and filters results after retrieval, because out-of-scope memory that has already entered the process has already leaked. A denial is terminal; the requesting agent escalates through its own path rather than reissuing a narrowed request automatically.
4.1 Authority and task surface declarations
These declarations instantiate authority and task_surface for the twelve OS agents, so the autonomy ladder of ADR-OS-010 can be derived for each task class. They apply the conventions of ADR-OS-017: the agent-level approval field is approval_required (an object), risk_tier takes the four values in §2, and every agent declares governance_class. os-agt-002’s risk_tier is critical, which supersedes control-plane. The other tiers, the can_* flags and the task-class names are proposals taken from each agent’s existing input contract, execution scope and owner workflows, and the agent’s owner confirms them.
Own-output convention. Writes to an agent’s own outputs, caches, telemetry, declared events and designated audit records are not execution. Only a change of state in another system counts, and only that sets can_execute. A store that another agent reads as an input to a decision is not an own output, because a write to it changes what another agent decides; writing it is execution (ADR-OS-017 §3.1, limit 4). This is why os-agt-005, 006 and 007 stay can_execute: false although their execution scope lists writes to a report, forecast or anomaly store. os-agt-003 is an open case: its refresh-capability-cache task writes the Redis capability cache that os-agt-001 consults when it decomposes and dispatches, which limit 4 reads as execution. The registry keeps os-agt-003 at can_execute: false and recommend scope as provisional, and the owner decides whether the agent is re-scoped or the cache is treated as a designated output.
Agent-level declarations.
| Agent | Name | decision_scope | authority flags set | risk_tier | governance_class | approval_required |
|---|---|---|---|---|---|---|
os-agt-001 | Orchestrator | execute | recommend · draft · execute · delegate | high | autonomous | { policy: false, hitl: false } |
os-agt-002 | Policy Guard | approve | approve | critical | autonomous | { policy: false, hitl: false } |
os-agt-003 | Registry & Capability | recommend | recommend | medium | autonomous | { policy: false, hitl: false } |
os-agt-004 | HITL Gateway | approve | approve | high | autonomous | { policy: false, hitl: false } |
os-agt-005 | Analytics | recommend | recommend | low | autonomous | { policy: false, hitl: false } |
os-agt-006 | Forecasting | recommend | recommend | low | autonomous | { policy: false, hitl: false } |
os-agt-007 | Anomaly Detection | recommend | recommend | medium | autonomous | { policy: false, hitl: false } |
os-agt-008 | Audit & Lineage | recommend | none | medium | autonomous | { policy: false, hitl: false } |
os-agt-009 | General Chat | recommend | none | medium | autonomous | { policy: false, hitl: false } |
os-agt-010 | Memory Curator | execute | execute | critical | pending (ADR-OS-010 §8) | { policy: false, hitl: false, broker: true } |
os-agt-011 | Consolidation & Reflection | recommend | recommend | low | autonomous | { policy: false, hitl: false } |
os-agt-012 | Memory Access Broker | approve | approve | critical | autonomous | { policy: false, hitl: false } |
os-agt-001 delegates: it decomposes and dispatches, and the dispatched task carries its own gate, so it declares an explicit { policy: false, hitl: false } rather than leaving the field implied. os-agt-008 and os-agt-009 set no flag: they answer queries and write nothing, and can_recommend is declared false explicitly because it defaults to true. The gate agents (os-agt-002, 004, 012) set only can_approve.
Task surface. autonomous marks a class that needs no approval gate. A gate agent’s gate-function classes are listed in neither list and are marked gate, because the agent is itself the control and the class is not an action awaiting approval (ADR-OS-017 §3.3). They sit off the ladder, and governance_class stays autonomous. os-agt-001’s decompose-goal drafts a task graph and changes no external state, so it is L2; dispatch-task is not graded because the dispatched task carries its own level. The level is derived by the ADR-OS-010 mapping (most restrictive bound wins) and is a read-only view, never an input to authorisation.
| Agent | Task class | Class kind | side_effect_class | Derived level |
|---|---|---|---|---|
os-agt-001 | decompose-goal | autonomous | none | L2 |
os-agt-001 | dispatch-task | autonomous | low | not graded |
os-agt-002 | validate-policy | gate | none | not graded (gate) |
os-agt-003 | resolve-capabilities | autonomous | none | L1 |
os-agt-003 | refresh-capability-cache | autonomous | none | L1 |
os-agt-004 | route-approval | gate | none | not graded (gate) |
os-agt-004 | capture-decision | gate | none | not graded (gate) |
os-agt-004 | escalate-timeout | gate | none | not graded (gate) |
os-agt-005 | generate-report | autonomous | none | L1 |
os-agt-005 | aggregate-metrics | autonomous | none | L1 |
os-agt-006 | generate-forecast | autonomous | none | L1 |
os-agt-007 | detect-anomaly | autonomous | none | L1 |
os-agt-008 | trace-lineage | autonomous | none | L0 |
os-agt-008 | explain-decision | autonomous | none | L0 |
os-agt-008 | audit-policy | autonomous | none | L0 |
os-agt-008 | summarise-run | autonomous | none | L0 |
os-agt-009 | answer-question | autonomous | none | L0 |
os-agt-010 | form | approval required | low | L4 |
os-agt-010 | consolidate | approval required | low | L4 |
os-agt-010 | demote | approval required | low | L4 |
os-agt-010 | expire | approval required | low | L4 |
os-agt-010 | promote | approval required | high | L4, flagged no human gate |
os-agt-010 | erase | approval required | irreversible | L4, flagged no human gate |
os-agt-011 | propose-memory-change | autonomous | none | L1 |
os-agt-012 | broker-recall | gate | none | not graded (gate) |
os-agt-012 | broker-write-proposal | gate | none | not graded (gate) |
os-agt-010 carries one class per operation in its input contract. All six are approval_required; form, consolidate, demote and expire are low, promote is high because it can widen visibility or cross into relational, and erase is irreversible. The agent-level object declares only the gate every operation shares, an os-agt-012 scope decision (broker: true). Policy approval is declared per class, because Memory Fabric Spec §7.3 requires it for some operations only:
| Task class | approval_required |
|---|---|
form, consolidate, demote, expire | { broker: true } |
promote | { broker: true }, plus policy: true where the promotion enters relational, widens visibility beyond tenant, or carries a regulated compliance_labels value into a longer-retention class |
erase | { broker: true, policy: true } |
Consistency check. The rules of ADR-OS-010 §4 item 6, plus the checks the declarations make possible, were applied to these declarations: scope against flags, level against the decision_scope ceiling, a class never both autonomous and approval-required, governance_class against the class gates, risk_tier values, an execute-scope agent declaring approval_required, and, as a flag rather than a rule, an irreversible class with no human gate. Four findings are open, and the declarations are published as they are until the owners and the ADR decide:
os-agt-010eraseisirreversibleand no human gate is declared. Under ADR-OS-010 §3.1 anirreversibletask with policy approval is L4, and the read-only view flags it (andpromote, which ishigh) as having no human gate. That is not a rule failure: the ADR does not require HITL for irreversible work (§4 item 9). The canon declares{ broker: true, policy: true }forerase, with no human gate, and the Memory Fabric Spec §7.3 does not require one. Whethereraseshould gain ahitlrequirement is an enforcement decision, since erasure leaves a tombstone and lineage survives. This registry does not decide it, and keeps the canon’s declaration. The owner ofos-agt-010decides, and the decision goes in a later registry version.- Rule R1 as worded fails every recommend-only class marked
autonomous. R1 ("can_executefalse with a class markedautonomous") is still the accepted rule, so an implementation of it rejects theautonomousclasses ofos-agt-003,005,006,007,008,009and011. They are listed here as failures against the rule as written, not as passes. This registry readsautonomousas “no approval gate needed”, which a recommend-only class legitimately is, and ADR-OS-010 records the proposed narrowing to a class whoseside_effect_classis notnone; that ADR is amended first, and this finding closes with it. os-agt-003writes a store another agent reads as a decision input. The capability cache thatrefresh-capability-cachewrites is consulted byos-agt-001, which the own-output convention reads as execution, yetos-agt-003isrecommendscope withcan_execute: false. Either the agent is re-scoped or the cache is designated an output. The owner ofos-agt-003decides.os-agt-010has nogovernance_class. Whether anos-agt-012broker decision counts as a policy gate is undecided (ADR-OS-010 §8), so the value is pending. The per-class approval table above carries what can be said now.
Two further notes. The gate agents have declared effects the ladder does not grade, and they stay off it. os-agt-004 notifications to approvers are the gate’s designated output channel, so they count as its own output under the convention above and do not set can_execute; the owner of os-agt-004 confirms that reading.
Obligations of the higher tiers. os-agt-001 and os-agt-004 are high; os-agt-002, os-agt-010 and os-agt-012 are critical. The Agent Evaluation Spec makes policy compliance checks blocking and requires a 1.0 compliance rate for high and critical agents alike, and the Agent Registry Spec requires strict observability for both tiers. Under ADR-OS-017 §6.2 these obligations apply to all five agents. Whether the existing evaluation suites for these agents meet them has not been checked.
5. Agent Interaction Patterns
OS agents interact in predictable patterns across all domain packs. The six most common:
5.1 Goal decomposition and routing
This is the entry pattern for every goal Synedrix OS receives, regardless of domain. It exists to keep two concerns separate: what agents and workflows currently exist and are healthy (os-agt-003’s job) from how a specific goal should be decomposed and sequenced (os-agt-001’s job). The Orchestrator Agent never queries the registry directly by hand-coded assumption — it always asks the Registry & Capability Agent, so that agent availability, versioning, and deprecation are resolved in one place rather than duplicated across every workflow.
flowchart TD
H([Human Intent]):::term --> O1[Orchestrator Agent os-agt-001: decompose goal_id goal_type intent_payload into a task graph]:::agent
O1 --> R[Registry & Capability Agent os-agt-003: resolve required_capabilities against the live registry]:::agent
R -- all capabilities resolved --> O2[Orchestrator Agent: receives capability_map, assigns tasks, invokes domain agents]:::agent
R -- unresolved_capabilities --> O3[Orchestrator Agent: escalates to human operator per os-agt-003 escalation path, task graph pauses at the unresolved node rather than partially executing]:::warn
O2 --> D[domain agents execute assigned tasks]:::agent
D -- any task proposes a high-impact action --> G{Pre-execution policy gate §5.2}:::check
D --> O4[Orchestrator Agent: collects task outcomes, transitions the task graph to a terminal_state]:::agent
Walking through the contract fields that actually flow between these steps:
- Human Intent → Orchestrator Agent. The triggering event carries
goal_id,goal_type,intent_payload,priority, and a freshly mintedcorrelation_idthat is propagated, unchanged, through every subsequent step of the pattern — this is what lets the Audit & Lineage Agent (§5.4) reconstruct the full path later. The Orchestrator Agent’s decomposition output is atask_graph: an ordered (and possibly branching) set of task nodes, each naming the capability it needs rather than a specific agent — capability resolution is deliberately deferred to the next step so the task graph itself never hard-codes which agent version handles a task. - Orchestrator Agent → Registry & Capability Agent. For each distinct capability named in the task graph, the Orchestrator Agent issues a
{ goal_type, domain?, required_capabilities[], task_context?, correlation_id }request. The Registry & Capability Agent isrecommend-scoped: it returns acapability_map(each entry naming the resolvedagent_id, optionalworkflow_id,capability,availability_status, andversion) but never invokes anything itself. - The unresolved-capability branch. If any requested capability has no active, correctly-scoped agent — for example a domain pack agent that is
deprecatedor not yet registered — it lands inunresolved_capabilities[]instead ofcapability_map. Per os-agt-003’s registry entry, this is the one case where the pattern breaks out to a human operator rather than looping back to the Orchestrator Agent for a retry: a missing capability is a registration gap, not a transient failure, so retrying automatically would just repeat the same gap. - Orchestrator Agent → domain agents. Once
capability_mapis fully resolved, the Orchestrator Agent assigns each task-graph node to its resolvedagent_idand invokes it with the task’s scoped inputs plus the samecorrelation_id. This is the only step in the pattern where a side effect (an actual agent invocation) occurs — consistent with the Orchestrator Agent being the soleexecute-scoped agent in this flow; both the Registry & Capability Agent and, in the next pattern, the Policy Guard Agent only ever recommend or approve. - High-impact actions branch out, not through. If a domain agent’s assigned task proposes a high-impact action (a financial transaction, a regulated message, an irreversible external write), that task does not proceed directly to execution — it enters the pre-execution policy gate described in §5.2 before the Orchestrator Agent is allowed to mark it complete. Goal decomposition and routing resolves who does the work; the policy gate separately governs whether a specific action is allowed to happen.
- Terminal state. The Orchestrator Agent is responsible for ensuring every task-graph node reaches a declared terminal state (completed, failed, or escalated) — per its registry entry, “ensure every execution path reaches a declared terminal state” is part of its core mission, not an optional cleanup step. A task graph with a node stuck indeterminately is treated as an orchestration defect.
5.2 Pre-execution policy gate
flowchart TD
D[Domain Agent proposes high-impact action]:::agent --> P{Policy Guard Agent evaluate against policy ruleset}:::check
P -- allow --> O1[Orchestrator Agent proceed with execution]:::agent
P -- block --> O2[Orchestrator Agent halt, emit policy.blocked event]:::warn
P -- escalate --> H[HITL Gateway Agent route to human reviewer]:::agent
H -- approved --> O3[Orchestrator Agent proceed]:::agent
H -- rejected --> O4[Orchestrator Agent halt and notify]:::warn
H -- timeout --> O5[Orchestrator Agent escalate to operator]:::warn
5.3 Cross-domain anomaly response
flowchart TD A[Anomaly Detection Agent: detects deviation, emits anomaly.detected event]:::agent --> O[Orchestrator Agent: receives event, instantiates response workflow]:::agent O --> AN[Analytics Agent: produces context report for the anomaly]:::agent AN --> P[Policy Guard Agent: evaluates proposed remediation]:::check P --> H[HITL Gateway Agent: if human review required]:::agent H --> S[Domain specialist agent: executes approved remediation]:::agent S --> AL[Audit & Lineage Agent: records full trace on query]:::agent
5.4 Explainability query
flowchart TD Q([Human Operator or Compliance Reviewer: submits lineage or audit query]):::term --> A[Audit & Lineage Agent: correlates traces, policy decisions, agent records]:::agent A --> R([Structured lineage response returned]):::term
5.5 Domain pack owning a real-time pipeline
The Trading domain pack is a clear example of a pack that owns transport- and execution-level infrastructure of its own. It is worth reading as the general case: a pack may own its own channel or pipeline, and doing so does not make that channel an OS concern.
flowchart TD
IN([Inbound market data, exchange feed / broker webhook]):::term --> MD[Market Data Ingest trd-ctl-master-orchestrator-001 — signal ingested, correlation_id assigned]:::agent
MD --> AN[Technical / On-Chain / Sentiment / Macro Analysts trd-int-*-001 — signal validation, contributing_agents metadata]:::agent
AN --> ST[Strategy Agents trd-exe-bull-strategist-001, trd-exe-bear-strategist-001, … — BULL/BEAR tagged signals]:::agent
ST --> CO[Consensus Agent trd-ctl-consensus-001 — quorum aggregation 4-of-7 / 5-of-8, 500ms window]:::agent
CO --> RM{Risk Manager VETO trd-ctl-risk-manager-001 — canonical + enriched VETO checks}:::check
RM --> PG[Policy Guard Agent os-agt-002 — evaluates the proposed trade action]:::check
PG --> PO[Portfolio Optimizer / Position Sizer trd-exe-*-001]:::agent
PO --> EX[Execution Agent trd-exe-execution-001 — broker-isolated order placement]:::agent
EX --> PT[Performance Tracker trd-int-performance-tracker-001 — fill confirmation, PnL]:::agent
subgraph hitl [Trading HITL escalation path]
Q[HITL Queue Manager WF-TRD-HITL-QUEUE-MANAGER-001]:::agent --> G[HITL Gateway Agent os-agt-004 with channel: trading + order context]:::agent
G --> HU([Human operator reviews, approves, rejects, or modifies within risk bounds]):::term
HU --> EX2[Execution Agent trd-exe-execution-001 resumes or cancels the order]:::agent
end
Note what the OS contributes and what it does not. It orchestrates (os-agt-001), evaluates policy (os-agt-002), and carries the human decision (os-agt-004). It owns no part of the market-data path, the strategy/consensus logic or the broker execution surface, because those are specific to one domain pack and no other pack needs them. A second pack introducing, say, a commerce fulfillment pipeline would own its own transport the same way rather than asking the OS to grow a layer for it.
The Trading pack’s agent entries are defined in Synedrix Trading Domain Pack, not here.
5.6 Memory recall and durable commit
This is the entry pattern for every memory interaction, and it exists to keep three concerns apart that a single memory service would collapse: may this agent see this (os-agt-012), what is worth remembering (os-agt-011), and what is actually written (os-agt-010). No agent performs more than one of the three.
flowchart TD
N([Agent needs context]):::term --> T[tool:memory-recall bound only if present in the resolved active_tool_set]:::agent
T --> B{Memory Access Broker os-agt-012: intersect requested scope with the agent memory_profile.recall_scope}:::check
B -- deny --> D[memory.recall.denied, the agent escalates, it does not retry a narrowed request]:::warn
B -- allow --> F[filter predicates pushed down into the Qdrant/Postgres/Cypher query]:::agent
F --> RR[records returned WITH provenance and validity_interval attached]:::agent
RR --> S([memory.recall.served]):::term
L([Agent learns something durable]):::term --> PR[tool:memory-propose proposal only — returns a proposal id, never a committed record]:::agent
PR --> W[background WF-OS-MEMORY-CONSOLIDATE]:::agent
W --> C[Consolidation & Reflection Agent os-agt-011: propose merges, promotions, distilled skills]:::agent
C --> BR[Memory Access Broker os-agt-012: scope-validate each proposal]:::check
BR --> PG[Policy Guard Agent os-agt-002: gate promotions that require approval]:::check
PG --> CU[Memory Curator Agent os-agt-010: commit]:::agent
CU --> EV([memory.record.formed / .consolidated / .promoted]):::term
Three things in this path are load-bearing. Scope resolution happens before the store is queried, not after results return — out-of-scope memory that has already entered the process has already leaked, so filtering afterwards is not a control. The proposal path is asynchronous by design, so an agent never waits on extraction and never gains write authority as a side effect of learning something. And the commit is separated from the recommendation, so the agent that surveys the whole fabric (os-agt-011) is not the agent that can rewrite it.
Erasure follows the same shape with a different terminal: a human or compliance workflow initiates, os-agt-002 approves, os-agt-010 destroys content across the write-authoritative store and every projection, and a tombstone plus the surviving graph lineage keep the audit trail whole. See Memory Fabric Spec §8.4.
6. Domain Pack Agent Contribution
Domain packs contribute their own agent entries to the shared registry using the same schema defined in §2. Requirements:
- Every domain agent must have a unique
agent_idprefixed with the domain pack layer code, e.g.trd-agt-001for a Trading pack agent,com-agt-001for a Commerce pack agent. ownermust be set to the contributing domain pack ID, notsynedrix-os.familymust bedomainorcustomer— domain packs may not register agents in thecontrolorobservabilityfamilies.- Domain agents must declare their
escalation_pathexplicitly and the terminal node must always be reachable via an OS control agent (os-agt-001oros-agt-004). - Domain agents with
execution_scopethat includes financial transactions, regulated messaging, or irreversible external writes must declareapproval_required.policy: true.
Domain pack agent entries are maintained in the domain pack’s own canonical document and contributed to the shared runtime registry at deployment time.
6.1 Business Instance Extension and Capability Module Agent Contribution
Business Instance Extensions (BIEs) and Capability Modules contribute agents to the shared registry using the same schema defined in §2, per ADR-OS-005. The invariants are the same ones §6 already states for domain-pack agents, restated here for the two owner forms §2’s widened owner enum adds:
- Business Instance Extension agents.
familymust becustomer.ownermust be set to the business instance’s own identifier — notsynedrix-osand not the domain pack ID, even when the BIE targets a specific pack. Registered at BIE-deployment time, never injected into a running workflow (§7’s append-only invariant applies unchanged). - Capability Module agents.
familymust bedomain.ownermust be set to the contributing domain pack ID (a Capability Module is vendor-owned IP, not customer-owned), qualified with the module identifier so it is distinguishable from the pack’s own core agents. - Both owner forms must declare
escalation_pathexplicitly, terminating at an OS control agent (os-agt-001oros-agt-004) — identical to the domain-pack rule in §6. - Both owner forms with
execution_scopecovering financial transactions, regulated messaging, or irreversible external writes must declareapproval_required.policy: true— identical to the domain-pack rule in §6. - The stable
agent_idprefix convention for BIE and Capability Module agents (analogous totrd-agt-001,com-agt-001for domain packs) is not yet minted in the Naming Convention Spec’s layer-code table — an open item recorded in ADR-OS-005 §8, deferred to a future Naming Convention Spec bump informed by the first real implementation.
7. Registry Invariants
- The OS agent registry is append-only at runtime - no running workflow may add, remove, or modify an agent entry.
- OS-owned agents (
owner: synedrix-os) may not be overridden, shadowed, or disabled by domain packs. - An agent with
decision_scope: executemust have a non-emptyapproval_requireddeclaration. A delegating agent declares an explicit object, for example{ policy: false, hitl: false }. - Every agent declares
governance_classandrisk_tier, except thatos-agt-010’sgovernance_classwaits on ADR-OS-010 §8 (whether a broker decision counts as a policy gate);risk_tieris one oflow,medium,highorcritical. A gate agent declaresgovernance_class: autonomous. - A
highorcriticalagent has blocking policy compliance checks, a 1.0 compliance rate and strict observability.os-agt-002iscritical. - A task class is never both
autonomousand approval-required, and its derived autonomy level never exceeds the ceiling set by its agent’sdecision_scope. - A write to an agent’s own outputs, caches, telemetry, declared events or designated audit records is not execution and does not set
can_execute. A store that another agent reads as an input to a decision is not an own output, and writing it is execution. - No agent may have
systems_allowedentries that bypass the Tool Abstraction layer. - Every agent must have at least one entry in
escalation_path. Audit & Lineage Agent(os-agt-008) must never appear in anytools_allowedlist - it is a query target, not a callable tool.- Agent identifiers are not reused. The one exception is the v0.4 reallocation of
os-agt-009–os-agt-013recorded in §3.1, which was taken deliberately to leave the registry contiguous and is not a precedent. New OS agents allocate fromos-agt-013onward.
7.1 Memory control-plane invariants
These extend the registry invariants above and are specified in full in Memory Fabric Spec §10.
Memory Curator Agent(os-agt-010) is the only agent permitted to commit durable memory records. Any other agent writing directly to the episodic, semantic, procedural or profile tiers is non-compliant.Memory Access Broker Agent(os-agt-012) is on the path of every memory recall and every write proposal. Scope is resolved before the store is queried, never applied to results afterwards.Consolidation & Reflection Agent(os-agt-011) holds no write access to any memory tier. It reads broadly precisely because it commits nothing.- No memory record crosses a tier boundary without a
memory.record.promotedevent carrying the inheritedcorrelation_idandcausation_id. - Memory recall is a tool call bound in the resolved
active_tool_set. Ambient memory injection into an agent’s context is non-compliant. - Erasure leaves a tombstone; lineage in graph memory survives the erasure of content.
8. Relationship to Other Canonical Documents
| Document | Relationship |
|---|---|
| Synedrix OS - Taxonomy & Platform Spec | Establishes the OS agent families; this document is the authoritative per-agent registry for all OS-owned entries |
| Synedrix OS - Responsibility Matrix | Row “Agent registry schema - Owns” refers to the schema defined in §2 of this document |
| Synedrix OS - Workflow Contract Spec | Workflow agent_roles field references agent IDs defined in this registry |
| Synedrix OS - Layer Taxonomy Table | Agent Runtime and Agent Registry layers are the runtime home of core definitions |
| Synedrix OS - Technical Platform Thesis | Agent registry model fields in §“Agent registry model” are the source schema for §2 above |
| Synedrix OS Observability Metrics Spec | Defines the metric families that OS agents must emit and consume; os-agt-007 emits anomaly events; os-agt-008 consumes lineage records |
| Synedrix OS Memory Fabric Spec | Defines the memory tiers, lifecycle and invariants that os-agt-010, os-agt-011 and os-agt-012 implement |
| Synedrix OS ADR-OS-002 | The decision that created the three memory control-plane agents registered here |
| Synedrix Trading Domain Pack | The Trading pack owns its own market-data, strategy, consensus and execution infrastructure at Layers 11 and 12; this registry defines the OS agents it composes with |
| ADR-OS-010 | The autonomy ladder derived from the §4.1 declarations |
| ADR-OS-017 | The authority field conventions §2 and §4.1 apply |
| Synedrix OS ADR-OS-005 | The decision that widened §2’s owner enum and added §6.1’s Business Instance Extension and Capability Module agent contribution rules |
9. Versioning
- Version: 0.8
- Supersedes: synedrix-os-agent-registry-v0.7
- Status: Canonical OS agent registry
- Applies to: Synedrix OS core platform, all domain packs, and Business Instance Extensions / Capability Modules
- Next steps: domain packs to contribute their own agent entries using the §2 schema; the first real BIE or Capability Module implementation to inform the
agent_idprefix convention flagged in §6.1 and ADR-OS-005 §8.
Related Documents
Canonical Reference
- Synedrix OS - Consolidated Canonical Reference — Consolidated synthesis; §4 summarizes all 12 OS-owned agents defined here.
Registry Schema and Naming
- Synedrix OS - Agent Registry Spec — Registry schema; the YAML structure used by all entries in this file.
- Synedrix OS — Naming Convention Spec — Canonical agent IDs; §3.4 lists the canonical OS agent IDs that supersede the os-agt-00x format used here. The memory agents’ canonical forms are listed in §3.2 above.
- Synedrix OS - Agent Spec — Full agent anatomy; the normative schema referenced by each registry entry.
Runtime and Evaluation
- Synedrix OS - Agent Runtime Policy Spec — Runtime policy schema; governs how each registered agent is executed and model-routed.
- Synedrix OS - Agent Evaluation Spec — Evaluation spec; promotion gates require passing eval suites before an agent becomes active.
- Synedrix OS - Agent DB Schema — Relational schema; persists the registry entries, lifecycle events, invocation starts and outcomes for these agents.
Architecture
- Synedrix OS - Taxonomy & Platform Spec — Canonical taxonomy and the OS agent families.
- Synedrix OS - Core Principles — The 12 governing principles every registry entry is accountable to.
- Synedrix OS - Layer Taxonomy Table — The canonical layer architecture each agent is assigned to.
Observability
- Synedrix OS Observability Metrics Spec — Canonical metric families; os-agt-007 (Anomaly Detection) emits events defined in this spec, and the memory control-plane agents emit the memory metric families.
Synedrix OS · August 2026