Skip to main content

Message Model

Parabiont carries one signed envelope per transfer. The envelope contains a capsule and a detached signature.

{
"capsule": {
"version": "parabiont-context/v0.1",
"bond_id": "5e2a1f3c-9b7d-4a1e-8f2c-3d4b5a6c7d8e",
"audience": "gemini-local",
"purpose": "project-development",
"issued_at": 1790000000,
"expires_at": 1790000600,
"policy_digest": "<64 hex chars>",
"state": [
{
"id": "product-lophiarch",
"kind": "fact",
"topic": "positioning",
"text": "Lophiarch is a policy-gated reconnaissance tool."
}
]
},
"signature": "<base64 Ed25519 signature>"
}

Envelope​

The envelope has exactly two keys: capsule and signature. Any extra key is rejected. The signature is Ed25519 over the canonical JSON of the capsule.

Canonical JSON means sorted keys, compact separators, no ASCII escaping, and UTF-8 encoding. Both sides must produce the same bytes or verification fails.

Capsule Fields​

FieldTypeDescription
versionstringMust be parabiont-context/v0.1.
bond_idUUID stringIdentifies this attachment; lowercase hex with hyphens.
audiencestringLowercase identifier of the intended receiver.
purposestringLowercase identifier of the engagement or task.
issued_atintegerUnix seconds when the capsule was packed.
expires_atintegerUnix seconds when the lease ends.
policy_digeststringSHA-256 of the canonical policy document.
statearray1–500 approved context items.

State Items​

Each item is the minimal approved projection of a candidate item:

FieldConstraints
idLetters, digits, hyphens; 1–64 chars.
kindfact, decision, task, or constraint.
topicLowercase letters, digits, hyphens; 1–64 chars.
text1–10000 chars.

Labels are intentionally not carried. They were used during filtering, not as part of the payload. A receiver re-evaluates the item under its own policy with the technical label applied.

Verification Rules​

A receiver rejects the envelope when:

  • The envelope has keys other than capsule and signature.
  • The capsule fails schema validation.
  • The signature does not verify against the issuer's public key.
  • The current time is outside [issued_at, expires_at).
  • The lease is longer than the receiver's configured lease_seconds.
  • audience, purpose, or policy_digest does not match the receiver policy.
  • Any item fails the receiver's own policy re-evaluation.
  • The re-evaluated state differs from the signed state.

Re-evaluation matters: the signature authenticates that an operator reviewed the content, not that the receiver's policy still allows it.

Bond Storage​

The receiver records the bond in SQLite. Revocation is local state: a revoked bond blocks future reads and re-delivery through that receiver. It cannot un-deliver content that a model has already consumed.