Integration contracts
Pantheon Blueprint is an architecture assembled from upstream products and a small set of required adapters, policies, and durable workflows.
No supplied upstream component automatically provides the complete Pantheon Blueprint wiring.
Installing Hermes, Executor, AFFiNE, Mem0, and n8n does not by itself create the identity, authority, provenance, approval, indexing, update, or audit behavior described in the architecture. The base installation must keep each dependent capability disabled until its contract in this document is implemented and its acceptance test passes.
This page owns interface-specific contracts and their verification. Readiness and assurance owns the shared maturity labels, gate matrix, and generic evidence requirements used to judge the system as a whole.
This document defines logical operations. Names such as mimir.search are
Pantheon Blueprint contract names, not claims that an upstream product exposes
an endpoint with that name.
Classification
Each integration is classified as one of:
| Classification | Meaning |
|---|---|
| Upstream-supported | The pinned upstream product documents the underlying capability. Pantheon Blueprint still configures and constrains it. |
| Pantheon Blueprint custom adapter/policy | Pantheon Blueprint must supply glue, a wrapper, a schema, policy, or durable workflow. |
| Optional/experimental | Useful, but not required for the secure base system and not enabled by default. |
| Blocked pending validation | Keep the dependent capability off until behavior is proven against the pinned release. |
One contract may use an upstream-supported substrate while still requiring an Pantheon Blueprint adapter.
Contract inventory
| Contract | Upstream substrate | Pantheon Blueprint classification | Default enablement |
|---|---|---|---|
| Channel normalization | Hermes messaging gateway and sessions | Upstream-supported substrate + custom policy | Read-only interfaces after identity tests |
| Workload authentication to Heimdall | Executor MCP endpoint and connection catalogue | Custom adapter; shared-caller multiplexing blocked pending validation | Separate workload endpoints only |
| Per-agent Executor separation | Multiple deployable Executor processes/instances | Pantheon Blueprint security baseline | Required until multiplexing passes |
| Mimir search | Mem0 search capability | Custom adapter | Read-only after classification tests |
| Canonical AFFiNE read/write | Version-pinned AFFiNE connector selected by the deployer | Custom adapter; writes blocked pending identity validation | Reads first; writes off |
| AFFiNE-to-Mem0 indexing | AFFiNE export/connector + Mem0 storage/search | Custom adapter | Off until full rebuild passes |
| Conversation completion and Muninn checkpoints | Hermes session persistence, API, and export | Upstream-supported export + custom completion/checkpoint adapter | Manual runs first |
| Huginn capture handoff | n8n workflows, webhooks, and task nodes | Custom workflow contract | One unauthenticated read-only source first |
| Durable approval and channel resume | Executor policy substrate + Hermes delivery surfaces | Custom service; blocked pending end-to-end validation | High-risk tools off |
| Scoped maintenance session | Durable approval, Git forge, CI, and deployment substrates | Custom control service; blocked pending end-to-end validation | Off; diagnosis remains read-only |
| Ody update broker | Hermes update surface and deployment controller | Custom privileged broker | Off until rollback test passes |
| Audit record sink | Product logs and Grafana-compatible telemetry | Custom security record path | Local append first; remote redacted copy |
Common conventions
Envelopes
All requests crossing a trust boundary use a versioned envelope:
{
"schema": "pantheon.request.v1",
"request_id": "<opaque-request-id>",
"task_id": "<opaque-task-id>",
"occurred_at": "<rfc3339-timestamp>",
"caller": {
"workload": "<derived-workload-id>",
"user": "<derived-user-id>"
},
"purpose": "<bounded-purpose>",
"classification": "private",
"payload": {}
}
caller is populated by trusted ingress or transport authentication. The model
must not be able to override it.
Errors
Adapters return stable error classes without leaking credentials or private content:
{
"schema": "pantheon.error.v1",
"request_id": "<opaque-request-id>",
"code": "policy_denied",
"retryable": false,
"safe_message": "<human-safe-summary>",
"detail_reference": "<private-audit-reference>"
}
Suggested codes include:
authentication_failedpolicy_deniedapproval_requiredapproval_expiredconnector_unavailableupstream_version_unsupportedclassification_deniedconflictvalidation_failedrate_limitedinternal_error
Idempotency
Externally visible writes, draft creation, capture storage, approval consumption, indexing, and update requests need idempotency keys derived from stable source identifiers and normalized intent. A retry must not create a second action.
Version pins
The private deployment manifest records:
components:
hermes: "<pinned-version-or-digest>"
executor: "<pinned-version-or-digest>"
affine: "<pinned-version-or-digest>"
mem0: "<pinned-version-or-digest>"
n8n: "<pinned-version-or-digest>"
contracts:
channel_normalization: "v1"
workload_authentication: "v1"
mimir_search: "v1"
knowledge_write: "v1"
approval: "v1"
Revalidate affected contracts before promoting a component or contract version.
1. Channel normalization
Hermes documents a unified messaging gateway, persisted sessions, and multiple channel sources. Pantheon Blueprint adds a normalized owner and reply-route contract.
Classification: Upstream-supported substrate + Pantheon Blueprint custom policy.
| Property | Contract |
|---|---|
| Inputs | Authenticated browser/Hermex request, Signal event, scoped email event, or AFFiNE AI proxy request |
| Outputs | Normalized channel envelope delivered to the correct Ody profile and conversation |
| Authority | The channel adapter authenticates or maps the sender; Ody cannot choose its own owner or reply route |
| Persistence | Hermes session plus a minimal channel-routing record; raw channel credentials remain outside the session |
| Failure behavior | Reject unknown senders, ambiguous shared-room identity, malformed attachments, and unavailable reply routes; never merge into a different owner's session |
| Acceptance test | The same owner reaches Ody on each enabled interface; another sender cannot inherit history; replies return only to the originating route |
Example:
schema: pantheon.channel-message.v1
message_id: "<opaque-message-id>"
owner_id: "<derived-owner-id>"
channel: "signal"
channel_session: "<opaque-channel-session>"
ody_session: "<opaque-hermes-session>"
received_at: "<rfc3339-timestamp>"
text_reference: "<private-content-reference>"
attachment_references: []
reply_route: "<opaque-route-token>"
classification: "private"
The adapter should store or transmit content only where required. Telemetry uses opaque references, sizes, and hashes rather than message text.
Upstream basis:
2. Workload authentication to Heimdall
Executor provides the integration, connection, policy, and MCP gateway substrate. Pantheon Blueprint requires a trusted binding between the calling workload and the Executor endpoint or connection set.
Classification: Pantheon Blueprint custom adapter/policy. Authenticated shared-caller multiplexing is blocked pending validation.
| Property | Contract |
|---|---|
| Inputs | Mutually authenticated or signed request from one fixed workload endpoint |
| Outputs | Authenticated caller context attached to tool discovery and invocation |
| Authority | The transport or trusted gateway derives workload identity; model arguments have no authority |
| Persistence | Workload public keys or token hashes, policy version, and revocation state |
| Failure behavior | Missing, invalid, expired, or mismatched identity fails closed before tool discovery |
| Acceptance test | Each workload can use only its endpoint and catalogue; replay and cross-workload credentials fail; logs show the derived caller |
Logical request:
{
"schema": "pantheon.tool-request.v1",
"request_id": "<opaque-request-id>",
"tool": "<registered-semantic-tool>",
"arguments": {},
"task_id": "<opaque-task-id>",
"purpose": "<bounded-purpose>"
}
The request deliberately has no connector profile, downstream account, owner email, or secret field.
Upstream basis:
The exact documentation paths may move. Pin behavior to the deployed release and its source, not merely the current website.
3. Safe baseline: separate Executor path per agent
Until authenticated caller multiplexing is proven, use a separate Executor instance, process, profile, or isolated connector endpoint for each workload. An instance is the strongest default where a profile is not documented as a security boundary.
Classification: Pantheon Blueprint custom deployment policy.
Reference layout:
heimdall_endpoints:
ody:
endpoint: "<private-endpoint-a>"
allowed_connections:
- "<ody-connection-reference>"
muninn:
endpoint: "<private-endpoint-b>"
allowed_connections:
- "<muninn-connection-reference>"
huginn:
endpoint: "<private-endpoint-c>"
allowed_connections:
- "<huginn-connection-reference>"
| Property | Contract |
|---|---|
| Inputs | Tool request arriving on a workload-specific private endpoint |
| Outputs | Catalogue and execution limited to that endpoint's fixed connectors |
| Authority | Network policy, workload authentication, and instance configuration jointly select the downstream identity |
| Persistence | Separate connection state, OAuth state, policies, and audit stream per workload |
| Failure behavior | One instance or connection failure does not fall back to another workload's identity |
| Acceptance test | Attempts to request, name, or route to another workload's connection fail; revoking one identity does not affect the others |
Do not place three connections in one shared catalogue and rely on the model to choose the correct one.
This baseline may be replaced by a shared Executor service only after the exact release demonstrates authenticated caller-to-connection mapping, non-overridable selection, separate refresh-token state, correct downstream attribution, and complete audit correlation.
4. Mimir search
Mem0 supplies the search substrate. Pantheon Blueprint constrains results to references to canonical AFFiNE pages.
Classification: Upstream-supported substrate + Pantheon Blueprint custom adapter.
The Mimir knowledge model defines the page
conventions behind this index. Canonical AFFiNE pages use exactly seven
conventional primary object types: Project, Area, Person/Organisation,
Topic, Decision, Source, and Procedure. Search results and index
metadata preserve the stable AFFiNE page ID and revision, classification,
canonical_state, review_state, permitted provenance and source references,
and deterministic content hash where relevant and policy permits them as safe
metadata.
| Property | Contract |
|---|---|
| Inputs | Query, authenticated owner, workload, permitted classification set, result limit, and task purpose |
| Outputs | Ranked AFFiNE references with indexed revision, canonical and review state where policy permits, score, and safe excerpt |
| Authority | Heimdall filters namespaces and classifications; Mem0 relevance never grants access |
| Persistence | Mem0 index generations plus source-revision metadata; the request is auditable |
| Failure behavior | Stale, malformed, unauthorized, or orphaned references are omitted; unavailable Mem0 produces an explicit retrieval failure rather than fabricated memory |
| Acceptance test | Cross-classification queries return nothing unauthorized; each result resolves to the indexed AFFiNE page and revision |
Example result:
{
"schema": "pantheon.mimir-search-result.v1",
"query_id": "<opaque-query-id>",
"index_generation": "<opaque-generation-id>",
"results": [
{
"affine_page_id": "<stable-page-id>",
"affine_revision": "<source-revision>",
"chunk_id": "<deterministic-chunk-id>",
"content_hash": "<sha256>",
"classification": "private",
"score": 0.82,
"excerpt": "<bounded-safe-excerpt>"
}
]
}
The result object is bounded transport metadata, not a second canonical record schema. Provenance and source references are returned only when authorized and safe for the caller.
Ody must fetch material canonical content through the AFFiNE reader before making an important claim. Mem0 does not become a second source of truth.
Upstream basis:
5. Canonical AFFiNE reader and writer
Pantheon Blueprint requires a version-pinned connector that can read and, when explicitly enabled, write the selected AFFiNE deployment while preserving downstream user attribution.
Classification: Pantheon Blueprint custom adapter. Writes are blocked pending connector, identity, and audit validation.
Pantheon Blueprint does not prescribe or invent an AFFiNE API or MCP endpoint in this contract. The deployer must select an actively maintained connector, pin its version and source, document its supported operations, and validate it against the pinned AFFiNE release.
Canonical reads and writes operate on AFFiNE pages following the conventions in the Mimir knowledge model. AFFiNE remains the canonical representation; this contract does not introduce a separate Mimir record envelope. The deployment-selected connector operations remain version-pinned and validated, and this contract does not prescribe their implementation.
| Property | Contract |
|---|---|
| Inputs | Stable workspace/page reference, expected revision, semantic read or proposed diff, provenance, classification, and idempotency key |
| Outputs | Canonical page content and revision for reads; new revision and downstream audit identity for writes |
| Authority | Heimdall selects a fixed caller-specific connector identity and applies read/write scope |
| Persistence | AFFiNE remains canonical; adapter stores only connector state, idempotency, and audit references |
| Failure behavior | Revision conflict, missing attribution, unsupported operation, or partial update fails without silent overwrite |
| Acceptance test | Read returns the expected canonical revision; writes preserve the expected downstream user, reject stale revisions, and are idempotent |
Logical write request:
schema: pantheon.affine-change.v1
change_id: "<opaque-change-id>"
workspace_id: "<stable-workspace-id>"
page_id: "<stable-page-id>"
expected_revision: "<source-revision>"
mode: "create-review-draft"
provenance:
source_type: "conversation"
source_id: "<opaque-source-id>"
diff_reference: "<private-diff-reference>"
classification: "private"
idempotency_key: "<opaque-idempotency-key>"
pantheon.affine-change.v1 remains the change transport envelope. The referenced
diff proposes an AFFiNE page that follows the Mimir page conventions, including
the applicable conventional type, canonical_state, review_state,
classification, and authorized provenance or source references. Sensitive
content is not embedded in the transport envelope.
The initial writer should support only review-inbox draft creation. Canonical page mutation, supersession, and deletion are separately gated capabilities.
Upstream basis:
Consult the selected AFFiNE and connector documentation for actual installation and operation names.
6. Deterministic AFFiNE-to-Mem0 indexer
The indexer translates accepted AFFiNE content into a rebuildable Mem0 generation. Neither upstream product supplies the complete Pantheon Blueprint authority and generation contract.
Classification: Pantheon Blueprint custom adapter.
| Property | Contract |
|---|---|
| Inputs | Consistent set of canonical AFFiNE pages with stable page IDs and revisions, one of the seven conventional object types, canonical_state, review_state, classification, and provenance or source references |
| Outputs | New Mem0 generation containing deterministic chunks and content hashes, only classification-permitted page metadata, and a validation manifest |
| Authority | Read-only AFFiNE indexer identity; write-only or generation-scoped Mem0 identity |
| Persistence | Generation manifest, page/chunk hashes, validation outcome, active-generation pointer |
| Failure behavior | Malformed page conventions or metadata fail validation; a failed or partial generation remains inactive and the current active index remains untouched |
| Acceptance test | Delete a disposable index, rebuild it twice, and obtain identical source/chunk manifests and representative search behavior |
Manifest:
schema: pantheon.index-generation.v1
generation_id: "<opaque-generation-id>"
created_at: "<rfc3339-timestamp>"
affine_snapshot: "<opaque-snapshot-reference>"
normalizer_version: "<pinned-normalizer-version>"
chunker_version: "<pinned-chunker-version>"
page_count: 42
chunk_count: 128
manifest_hash: "<sha256>"
validation:
references_valid: true
classifications_valid: true
representative_queries_passed: true
status: "staged"
Promotion changes only the active index generation. It does not edit or delete
AFFiNE. Old index-generation retention follows an explicit operational policy.
The Mem0 projection is disposable and rebuildable. Canonical AFFiNE chunks are
written with infer=false so Mem0 stores deterministic canonical text without
independently extracting or rewriting facts.
7. Hermes transcript outbox and Muninn checkpoints
Gated foundation — not deployed production behavior.
Hermes documents persisted sessions and a session API. The pinned Hermes
v0.19.0 compatibility review found no suitable built-in redacted incremental
export or reliable completion event for long-lived Signal and WebUI sessions,
so Pantheon Blueprint supplies a narrow compatibility adapter. This is a version-specific
finding, not a claim about current or future Hermes releases.
Classification: Upstream-supported session/API substrate + gated Pantheon Blueprint compatibility adapter.
| Property | Contract |
|---|---|
| Inputs | Explicitly allowed transcript windows whose source and owner are policy-allowlisted |
| Outputs | Minimized, HMAC-pseudonymized immutable transcript objects plus ordered, hash-chained manifests |
| Authority | Exporter reads only the documented Hermes API; Muninn never reads Hermes or the outbox directly; Heimdall mediates authenticated read, lease, checkpoint, and compare-and-swap operations |
| Persistence | Content-addressed append-only objects, immutable manifests, bounded leases, and a contiguous compare-and-swap checkpoint |
| Qualification | At least one user and final-assistant message, no pending tool call, a configured quiet period, and the identical source revision observed twice |
| Failure behavior | Identity ambiguity, malformed content, redaction failure, or a credential-bearing URL defers the window without publication; checkpoint never skips or rewinds |
| Acceptance test | Repeat a bounded synthetic export, prove idempotent publication and ordered leasing, then advance the checkpoint only after the corresponding AFFiNE draft persists |
Generic manifest:
schema: pantheon.transcript-manifest.v1
sequence: 7
previous_manifest_hash: "<sha256>"
objects:
- object_hash: "<sha256>"
source_class: "<allowed-source-class>"
owner_reference: "<hmac-pseudonym>"
session_reference: "<hmac-pseudonym>"
source_revision: "<hmac-pseudonym>"
manifest_hash: "<sha256>"
Generic checkpoint:
schema: pantheon.muninn-checkpoint.v1
committed_sequence: 7
committed_manifest_hash: "<sha256>"
lease_reference: "<opaque-lease-reference>"
last_success_at: "<rfc3339-timestamp>"
The handoff accepts only the exact next sequence and matching manifest hash under an active lease. It advances only after successful draft persistence; failure leaves the checkpoint unchanged for an idempotent retry.
WebUI limitation: the reviewed v0.19.0 path does not provide the trusted
user identity required for unattended owner allowlisting. Unattended WebUI
export therefore remains disabled; only an explicitly selected synthetic or
manual canary is permitted.
Validation required: prove twice-observed quiescence, redaction and credential-URL rejection, manifest-chain integrity, lease conflicts, and skip/rewind rejection. Prove the exporter has no Hermes state, workspace, or database mount, and that only Heimdall can reach the private handoff. Atomic publication also depends on same-filesystem hard-link semantics. Private HTTP remains a residual risk and requires a private encrypted network plus explicit host-firewall enforcement.
See Hermes-to-Muninn transcript outbox for the complete state flow, canary sequence, disabled-by-default controls, and residual risks.
Upstream basis:
8. Huginn capture staging and event handoff
n8n supplies scheduling, workflow, webhook, and connector building blocks. Pantheon Blueprint defines the immutable capture and curation-event boundary.
Classification: Upstream-supported workflow substrate + Pantheon Blueprint custom workflow contract.
| Property | Contract |
|---|---|
| Inputs | Approved monitor definition, source allowlist, schedule, fetch policy, and previous capture reference |
| Outputs | Immutable raw capture plus a small curation event |
| Authority | Huginn may fetch only through approved workers and append captures; it has no canonical AFFiNE write authority |
| Persistence | n8n workflow/run state, immutable capture object, hash chain or prior reference, event delivery state |
| Failure behavior | Fetch, normalization, storage, or event failure is explicit; no event is published before durable capture persistence |
| Acceptance test | Changed content produces one staged capture and one idempotent event; unchanged content produces no duplicate; hostile content cannot reach private networks or canonical AFFiNE |
Monitor:
schema: pantheon.monitor.v1
monitor_id: "<opaque-monitor-id>"
source: "<approved-public-url>"
schedule: "<bounded-schedule>"
retrieval_profile: "<fixed-worker-profile>"
maximum_bytes: 1048576
change_policy: "content-hash"
enabled: false
Capture event:
{
"schema": "pantheon.capture-ready.v1",
"event_id": "<opaque-event-id>",
"capture_id": "<opaque-capture-id>",
"monitor_id": "<opaque-monitor-id>",
"captured_at": "<rfc3339-timestamp>",
"content_hash": "<sha256>",
"media_type": "text/html",
"classification": "untrusted-external",
"prior_capture_id": "<optional-opaque-id>"
}
The event contains a reference, not the full hostile document. Muninn retrieves the capture through a bounded read path and creates a review draft only.
Upstream basis:
9. Durable approval and WebUI/Signal resume
Executor documents per-tool policy as an upstream concept. Its merged native elicitation fix preserves native MCP elicitation for self-hosted in-memory sessions. Pantheon Blueprint still requires a pinned release, local validation, durable pending state, exact action binding, and delivery/resume bridges for Hermes WebUI and Signal.
Classification: Pantheon Blueprint custom service; blocked pending end-to-end validation.
| Property | Contract |
|---|---|
| Inputs | Exact normalized tool request, caller, owner, connector identity, risk, and semantic summary |
| Outputs | Pending approval ID, final decision, and at most one resumed execution |
| Authority | Only the authenticated owner can decide; the approval service verifies stored hashes and allowed interfaces |
| Persistence | Durable state machine, decision timestamps, nonce, action hash, expiry, consumption, and delivery ledger |
| Failure behavior | Restart preserves or safely expires pending state; changed, replayed, expired, denied, or ambiguous requests fail closed |
| Acceptance test | Approve, deny, expire, replay, mutate, restart, and cross-interface cases behave exactly as documented with no duplicate action |
Approval record:
schema: pantheon.approval.v1
approval_id: "<opaque-approval-id>"
short_id: "<non-secret-short-id>"
owner_id: "<derived-owner-id>"
workload_id: "<derived-workload-id>"
task_id: "<opaque-task-id>"
tool_id: "<registered-tool-id>"
connector_reference: "<server-selected-reference>"
argument_hash: "<sha256>"
semantic_summary: "<safe-human-summary>"
risk: "high"
state: "pending"
created_at: "<rfc3339-timestamp>"
expires_at: "<rfc3339-timestamp>"
allowed_interfaces:
- "webui"
- "signal"
Resume:
{
"schema": "pantheon.approval-decision.v1",
"approval_id": "<opaque-approval-id>",
"decision": "approve_once",
"owner_id": "<derived-from-interface-authentication>",
"decided_at": "<rfc3339-timestamp>"
}
A Signal command such as /approve <short-id> is a desired user experience.
Parsing the command is not enough: it must resolve the same durable record,
verify the Signal sender, consume one exact stored action, and update the WebUI.
Keep write and high-risk tools disabled until this contract passes. Do not reconstruct a pending tool call from conversational memory.
Upstream basis:
10. Ody update broker
Hermes and the deployment platform may each provide update operations. Pantheon Blueprint requires a narrow broker that converts an owner request into a pinned, reviewable, recoverable stack update.
Assistant-led source changes also require the separate immutable and expiring authority contract in Scoped maintenance sessions. Session activation may permit bounded branch and test work, but it does not authorize merge, deployment, secret access, or networking changes. No upstream component is assumed to provide this complete contract.
Classification: Pantheon Blueprint custom privileged adapter.
| Property | Contract |
|---|---|
| Inputs | Allowed component, release channel, current version, requested target or check-for-update intent |
| Outputs | Pinned deployment proposal, approval request when required, health result, and rollback result |
| Authority | Broker has access only to predefined stacks and release sources; Ody cannot supply arbitrary commands, paths, images, or deployment resource IDs |
| Persistence | Proposal, version/digest, prior recovery point, policy, approval, deployment job, health evidence |
| Failure behavior | Unsupported target or failed verification does not deploy; failed health gate rolls back or stops for human recovery |
| Acceptance test | Reject arbitrary stack/image input; perform a safe pinned update; force a health failure and restore the recorded previous version |
Request:
schema: pantheon.update-request.v1
request_id: "<opaque-request-id>"
component: "ody"
intent: "check-and-propose"
channel: "stable"
current_version: "<pinned-current-version>"
requested_by: "<derived-owner-id>"
Proposal:
schema: pantheon.update-proposal.v1
proposal_id: "<opaque-proposal-id>"
component: "ody"
from: "<pinned-current-version>"
to: "<pinned-target-version-or-digest>"
source: "<authoritative-release-source>"
change_summary_reference: "<private-summary-reference>"
recovery_point: "<opaque-recovery-reference>"
health_suite: "<versioned-test-suite>"
state: "awaiting-approval"
The broker, not the model, maps component: ody to the private deployment
resource. The agent never receives the deployment controller's administrative
credential.
11. Audit record sink
Product logs and Grafana Cloud are useful observability sources. Pantheon Blueprint requires a security record that correlates authenticated caller, policy, approval, connector, action, and result without recording secrets.
Classification: Pantheon Blueprint custom adapter/policy.
| Property | Contract |
|---|---|
| Inputs | Authenticated gateway lifecycle events and decisions |
| Outputs | Append-oriented local security records plus a redacted observability copy |
| Authority | Only trusted gateway/adapter identities append; agents cannot edit or delete records |
| Persistence | Durable local or object-backed record with explicit retention; Grafana Cloud receives a reduced copy |
| Failure behavior | High-risk actions fail closed if the required durable record cannot be written; lower-risk behavior follows documented policy |
| Acceptance test | Trace a complete action through request, policy, approval, connector, downstream identity, and result; verify tamper/replay signals and absence of secrets |
Record:
{
"schema": "pantheon.audit.v1",
"event_id": "<opaque-event-id>",
"event_type": "tool.completed",
"occurred_at": "<rfc3339-timestamp>",
"request_id": "<opaque-request-id>",
"task_id": "<opaque-task-id>",
"workload_id": "<derived-workload-id>",
"owner_id": "<pseudonymous-owner-id>",
"tool_id": "<registered-tool-id>",
"connector_reference": "<server-selected-reference>",
"policy_version": "<policy-version>",
"decision": "allowed",
"approval_id": "<optional-opaque-id>",
"argument_hash": "<sha256>",
"result_hash": "<sha256>",
"result_classification": "private",
"status": "success"
}
Do not place full prompts, arguments, results, recipient addresses, URLs with tokens, credentials, cookies, or model reasoning in this record.
Executor-specific caveat:
Executor logs may be useful without satisfying durable security-audit requirements.
Validate pre-action durability, post-action completion, crash gaps, redaction, connection attribution, approval correlation, idempotency, retention, and tamper evidence. Add a trusted wrapper or independent append sink where the pinned release is insufficient. Grafana Cloud observes the redacted copy and never authorizes or resumes an action.
Optional and experimental contracts
These capabilities are not part of the minimum secure installation:
| Capability | Status | Enablement gate |
|---|---|---|
| Shared Executor with authenticated caller multiplexing | Blocked pending validation | All identity-selection and revocation tests pass |
| AFFiNE AI with Ody's normal tool catalogue | Optional/experimental | Identity, recursion, tool-policy, and write-attribution tests pass |
| Authenticated browser sessions | Optional/experimental | Disposable isolation, credential scope, and private-network denial pass |
| Automatic low-risk canonical promotion | Optional/experimental | Explicit policy classes, provenance, conflict, rollback, and audit tests pass |
| Automatic application updates | Optional/experimental | Pinned proposal, approval, health, rollback, and audit tests pass |
| Model-based injection or action screening | Optional/experimental | Used only as defense in depth; deterministic policy remains authoritative |
Capability gating
The base setup should expose the smallest useful path:
owner
→ browser Ody interface
→ workload-specific Heimdall endpoint
→ read-only Mimir search
→ canonical AFFiNE read
→ answer
Enable additional contracts in this order:
- Channel normalization for one interface
- Separate workload-specific Heimdall paths
- Read-only Mimir search and canonical AFFiNE reads
- Deterministic AFFiNE-to-Mem0 rebuild
- Manual Muninn export and draft creation
- Hourly and nightly Muninn schedules
- One unauthenticated Huginn monitor and capture handoff
- Durable browser approval
- Signal approval resume
- One low-impact attributed write
- Update broker and append-oriented audit
For every step:
- record the pinned upstream and contract versions;
- run positive, negative, restart, and retry tests;
- store redacted evidence in the private repository;
- keep the prior capability state recoverable;
- leave the capability disabled if any authority or failure behavior is ambiguous.
Integration readiness record
The private deployment should maintain one record per contract:
schema: pantheon.integration-readiness.v1
contract: "canonical-affine-writer"
contract_version: "v1"
classification: "pantheon-custom-adapter"
upstream:
product: "<product-name>"
version: "<pinned-version-or-digest>"
implementation_reference: "<private-code-or-config-reference>"
enabled: false
authority_reviewed: false
failure_behavior_tested: false
restart_tested: false
acceptance_evidence: []
known_gaps:
- "<non-secret-gap-description>"
last_reviewed_at: "<rfc3339-timestamp>"
An empty evidence list means the capability is not ready, regardless of whether the relevant containers are running.
Official upstream sources
Use upstream sources to confirm the substrate available in the pinned release:
- Hermes Agent documentation
- Hermes Messaging Gateway
- Hermes Sessions
- Hermes API Server
- Executor documentation
- AFFiNE self-hosting
- Mem0 open-source overview
- n8n hosting documentation
Upstream documentation describes product behavior. This document defines how Pantheon Blueprint composes those behaviors into a bounded system.