8. CMBs (CAT7) — MMP Specification

8. Cognitive Memory Blocks (CAT7)

A Cognitive Memory Block (CMB) is an immutable structured memory unit. Each CMB decomposes an observation into 7 typed semantic categories (the CAT7 schema). CMBs are the data structure that flows between agents via cmb frames.

Forward compatibility. Implementations MUST silently ignore unrecognised CMB categories. A node that receives a CMB carrying additional categories from a future version MUST process the 7 known CAT7 categories and discard any others without error. This allows schema evolution without breaking existing deployments.

8.1 Why 7 categories

The 7 categories form a minimal, near-orthogonal basis spanning three axes of human communication: what (focus, issue), why (intent, motivation, commitment), and who/when/how (perspective, mood). They are universal and immutable — domain-specific interpretation happens in the category text, not the category name. A coding agent’s focus is “debugging auth module”; a fitness agent’s focus is “30-minute HIIT workout.” same category, different domain lens.

mood is the only fast-coupling category — affective state (valence + arousal) crosses all domain boundaries. The trained SVAF model studied in the SVAF paper converged on the same rule: mood emerged as the highest gate value (0.50) without supervision — a research result consistent with affect being universally relevant across agent types. (The deployed evaluator is the heuristic baseline, Section 9.2.1.) All other categories couple at medium or low rates, with per-agent αf weights controlling relative importance.

New agent types join the mesh by defining their αf category weights — no schema changes, no protocol changes. The 7 categories are fixed. The weights are per-agent.

8.2 Category Schema

Implementations MUST use the following 7 categories in this order:

IndexCategoryAxisCaptures
0 focus Subject What the text is centrally about
1 issue Tension Risks, gaps, assumptions, open questions
2 intent Goal Desired change or purpose
3 motivation Why Reasons, drivers, incentives
4 commitment Promise Who will do what, by when
5 perspective Vantage Whose viewpoint, situational context
6 mood Affect Emotion (valence) + energy (arousal)

Each category carries signed symbolic text and content-address metadata. A receiver derives any machine-comparable embedding locally from that signed text; embedding vectors never cross the wire. The mood category additionally carries optional numeric valence (-1 to 1) and arousal (-1 to 1) values.

A CMB MUST NOT be modified after creation. When an agent remixes a CMB, it MUST create a new CMB whose metadata.lineage contains parents (direct parent CMB keys) and method (the fusion method used). Transitive provenance is obtained by recursively resolving those signed parent records. A sender MUST NOT supply or rely on an unauthenticated transitive-closure field.

8.2.1 Content Address & Canonical Serialization

A CMB’s key is a content address: a SHA-256 hash over a fully specified canonical serialization of the block. The metadata.addressScheme field identifies the derivation; the shared cmb- prefix alone does not. Two independent conforming implementations MUST compute the identical key for the same logical CMB — the key is both the node identity in the lineage DAG and the value the author signature binds (§18.3.1), so any divergence breaks lineage, dedup, citation, and integrity. The published test vectors are the normative contract. The GitHub protocol repository carries a manually synchronized mirror for offline use and contribution workflows.

Superseded 1.x derivation — INFORMATIVE, not normative in 2.0. The earlier format wore the same cmb- prefix over a different digest, which is exactly why it is recorded here rather than dropped: an implementation that meets it by accident produces a plausible key for the wrong content, and the divergence is silent. It is distinguishable by length — 32 hex characters against the current 64 — and the reference runtime rejects it outright (§8.2.1: valid iff 64 lowercase hex, anything else refused rather than reinterpreted). A conformant node therefore MUST NOT mint it and SHOULD NOT accept it; a node holding blocks addressed this way MAY continue to read its own history. 1.x stated that a conforming node MUST verify this form — that requirement is withdrawn, because no deployed node does, and a specification that requires what nothing implements is the defect 2.0 exists to correct. Specified byte-exactly so it can be recognised and refused:

key = "cmb-" + first 32 hex chars of SHA-256( UTF-8( focus.text + "|" + issue.text + "|"
              + intent.text + "|" + motivation.text + "|" + commitment.text + "|"
              + perspective.text + "|" + mood.text ) )

// category order per §8.2; mood contributes its text only; empty categories contribute "";
// no Unicode normalization.

This scheme has three known weaknesses, which the successor resolves: the | join is not injection-proof (a delimiter inside a category can shift a boundary), text is not Unicode-normalised (NFC vs NFD diverge), and the 128-bit truncation gives only 64-bit collision resistance.

Normative record — see §8.8 Record Model. The address is "cmb-" + 64 lowercase hex, and the digest is a promote-odd Merkle root over the seven per-category keys, not a hash of a concatenated preimage. This section gives the cognition-key construction byte-exactly; §8.8 makes the construction implementable and reproducible from that text alone.

Why this section changed in 2.0. Through 1.1.0 this page specified a flat SHA-256 over a length-prefixed concatenation of the seven category texts plus a role tag. The implementation mints the Merkle form. Both wear the same cmb- prefix, so an implementation built to the older text computes a different address for the same content and nothing signals the mismatch — it fails silently, at every record. That is the divergence 2.0 exists to close.

Schemes a node may encounter. The reference implementation classifies three: block-v2 — the Merkle form, and the only form it mints — together with root-v1 and remix-v1, the earlier flat derivations, retained so older records can still be classified. A conforming node MUST mint block-v2.

  • Category text MUST be Unicode NFC-normalised (UAX #15). Category order is the fixed CAT7 order. Mood contributes its text only; valence, arousal and all vector embeddings are excluded from the address.
  • Netstring length-prefixing makes each per-category preimage injection-proof with no escaping and no JSON-canonicalization dependency, so implementations in different languages agree byte-for-byte.
  • A record binds content only — identical content by any author at any time yields one address. Descent is committed alongside the address in the signature (§8.8.4), never folded into it, so that collapse property is preserved.
  • The full 256-bit width is normative: a truncated hash’s birthday bound would admit a grind-then-substitute attack against the signed key.

8.3 Category-by-Category Guide

The schema is fixed. The interpretation is sovereign. each category below gives a definition, the rationale for why the category earns a slot in a 7-category minimal basis, and three cross-domain examples showing how agents from different domains populate the same category.

focus Subject

What the observation is centrally about.

Every observation has a subject. Without focus, a receiver cannot determine if the signal is even in its domain. Focus is the first filter — a fitness agent seeing focus="debugging auth module" knows immediately this is outside its domain.

Coding: “debugging OAuth token refresh logic”

Fitness: “30-minute HIIT workout completed”

Legal: “merger due diligence review”

issue Tension

Risks, gaps, problems, assumptions, open questions.

Issues cross domain boundaries more than most categories. A coding agent’s "user exhausted after 8 hours" is an issue that the fitness agent and music agent both care about. Issue is the tension that drives action — agents without tension have nothing to act on.

Coding: “memory leak causing crashes every 2 hours”

Fitness: “sedentary 3 hours, no movement detected”

Finance: “revenue recognition discrepancy found”

intent Goal

Desired change or purpose.

Intent captures what the agent or user is trying to achieve. It is domain-specific — a coding agent’s intent ("ship the feature") is irrelevant to a music agent. In the SVAF paper’s trained model, intent learned the lowest gate value (0.07) — goals don’t transfer across domains (the deployed evaluator is the heuristic baseline, Section 9.2.1).

Coding: “complete feature implementation by end of sprint”

Music: “match playlist energy to user mood”

Support: “resolve customer complaint within 24 hours”

motivation Why

Reasons, drivers, incentives behind the observation.

Motivation answers "why does this matter?" When a fitness agent observes "recommended stretch break", the motivation ("prevent burnout from prolonged sitting") tells other agents WHY the recommendation was made, helping them decide if the reasoning applies to their domain too.

Coding: “technical debt blocking new feature development”

Fitness: “declining energy pattern over past 3 hours”

Marketing: “competitor launched similar product yesterday”

commitment Promise

What has been established — who will do what, by when.

Commitment captures obligations and active states. "Coding session with Claude" tells other agents what is currently happening. "Surgery scheduled for Thursday" tells agents about future constraints. Regulated domains (legal, finance) weight commitment highest because obligations are non-negotiable.

Coding: “coding session in progress, 2 hours in”

Scheduling: “team standup in 15 minutes”

Legal: “filing deadline March 31, non-negotiable”

perspective Vantage

Whose viewpoint, situational context.

Perspective captures the lens through which the observation was made. "Developer, late night session" is different from "developer, morning standup" — same domain, different context. In the SVAF paper’s trained model, perspective learned the lowest gate value (0.06) — viewpoint is the most sovereign category, rarely useful across domains.

Coding: “senior developer, deep work session, afternoon”

Fitness: “fitness agent, daily activity tracking”

Recruiting: “hiring manager, culture fit assessment”

mood Affect

Emotion (valence: -1 to 1) + energy (arousal: -1 to 1). Dual representation: numeric for comparison, text for semantic richness.

Mood is the only fast-coupling category — affective state crosses ALL domain boundaries. A fitness agent, music agent, and coding agent all benefit from knowing the user is exhausted (v: -0.6, a: -0.4). The trained model in the SVAF paper converged on the same design: mood gate = 0.50 (highest), without supervision. Every agent should attend to mood regardless of domain.

Coding: “frustrated, low energy (v: -0.6, a: -0.4)”

Music: “calm, restorative (v: 0.3, a: -0.5)”

Fitness: “energized after workout (v: 0.7, a: 0.6)”

8.3.1 Well-Known Intent Values Informative · New in 1.1.0

intent is free text and stays free text — this registry reserves no syntax and adds no category. It records conventions that have emerged in practice, so independent implementations converge on the same vocabulary. The registry is informative and extensible: an unknown intent value MUST be treated as ordinary content, and behavior MUST NOT be keyed on unrecognised values. Per §6.5, content is informational — authority always comes from who created the CMB, never from what its intent says.

valuemeaningsemantics
charterA member’s purpose self-declaration on joiningRoot of the member’s trail (§14.12); none normative
decisionA choice made during workChained by lineage.parents to the prior trail entry (§14.12); none normative
artifactThe deliverable a work trail producedTrail head at completion (§14.12); none normative
groundAn outcome attestation against the CMBs in its lineageThe one entry with attached receiver-side semantics — defined normatively in §6.7; interpretation remains receiver-local policy
acknowledgeA reaction noting relevance to the agent’s charterDe-facto (operator loop); none normative

ground is the protocol’s first intent value with any attached semantics; the precedent is deliberately narrow. Those semantics bind the receiver’s optional interpretation only — they confer nothing on the emitter, and §15.7.2 explains why no intent value exempts an emission from the new-domain-data rule.

8.4 Per-Agent category weights (αf)

The schema is fixed. The weights are per-agent. New domains join the mesh by defining their αf weights — no schema changes, no protocol changes. Regulated domains (legal, finance) weight issue and commitment highest; human-facing domains (music, fitness, health) weight mood highest; knowledge domains (coding, research) weight focus highest.

Agent foc iss int mot com per mood
Coding 2.0 1.5 1.5 1.0 1.2 1.0 0.8
Music 1.0 0.8 0.8 0.8 0.8 1.2 2.0
Fitness 1.5 1.5 1.0 1.5 1.0 1.0 2.0
Knowledge 2.0 1.5 1.5 1.0 0.5 1.5 0.3
Legal 2.0 2.0 1.5 1.0 2.0 1.5 0.5
Health 1.5 2.0 1.0 1.5 1.0 1.5 2.0
Finance 2.0 2.0 1.5 1.0 2.0 2.0 0.3

8.5 Artifacts

Agents produce two types of output: signals (CMBs — structured 7-category observations) and artifacts (documents, analyses, drafts, code — full-length content that a CMB references). A CMB is the signal on the mesh. An artifact is the substance behind it.

When an agent produces an artifact, it SHOULD share a CMB to the mesh that references the artifact location in the commitment category using the artifact: prefix:

commitment: "artifact: research/agent-memory-comparison.md"

The CMB’s other 6 categories summarise what the artifact contains — the focus captures the key finding, issue captures the gap identified, intent captures what should happen next. Other agents evaluate the CMB via SVAF as usual. If accepted, the agent MAY retrieve the full artifact for deeper reasoning.

Artifacts are stored in the producing agent’s local filesystem, not on the mesh. The mesh carries signals; agents carry substance. This separation keeps CMBs lightweight (7 categories, bounded size) while allowing agents to produce unbounded analysis, research, and creative work.

The artifact: convention in commitment is RECOMMENDED for any CMB that references a document, file, or external resource. Agents MUST NOT embed full artifact content in CMB categories — categories are for structured signals, not documents.

8.6 Origin

Cognitive Memory Blocks were first formalised in the Mesh Memory Protocol (Consenix Labs, August 2025) with the CAT7 enterprise schema. The wellness / productivity schema and the synthesis-affinity classification were developed at SYM.BOT in late 2025 for production deployment across personal AI agents.

8.7 Authentication

A CMB SHOULD carry its author’s signature in cmb.sig (base64url) with cmb.sigAlg. Receivers verify the signature and content-address integrity before admitting or surfacing a block. See §18.3.1 CMB Signature Verification for the normative signing and verification requirements.

8.8 Record Model

A Cognitive Memory Block separates what the agent says from what the mesh can prove about that assertion. This section is normative and byte-exact. The public schemas, constructors and vectors are available from the conformance suite.

v2.0 conformance correction. The MMP version remains 2.0. New cryptographic constructions identify themselves independently as mmp-sig-v2.0. A reader MUST NOT silently interpret a legacy construction as Core Secure.

8.8.1 Two-section logical record

{
  "categories": { "focus": { "text": "…", "meta": { "key": "…", "parents": [] } }, "…": "six more" },
  "metadata": {
    "key": "cmb-…",
    "addressScheme": "mmp-cmb-merkle-v2",
    "assertionId": "asrt-…",
    "signatureSuite": "mmp-sig-v2.0",
    "createdByNodeId": "…",
    "createdBy": "display label",
    "createdTimestamp": 1786611600000,
    "room": "team-room",
    "to": null,
    "lineage": null,
    "application": null,
    "sigAlg": "ed25519",
    "sig": "…"
  }
}
  • The decrypted logical record MUST have exactly the two top-level members shown above.
  • categories MUST contain all seven CAT7 categories and their per-category descent metadata.
  • metadata carries exact authorship, audience, lineage, application and signature assertions.
  • Admission may evaluate seven categories independently, but memory admission stores or refuses this immutable CMB as one record. A partial CMB is never created.

8.8.2 Cognition key and assertion identity

metadata.key identifies CAT7 cognition. It is the promote-odd Merkle root defined in §8.2.1 and remains independent of author, time, audience, lineage and application bytes. Identical CAT7 cognition therefore collapses to one cmb- key.

assertionId = "asrt-" || lowercaseHex(SHA-256(signingPayloadV2_0))

assertionId identifies the complete authenticated assertion. Memory deduplication uses the cognition key. Directed or actionable delivery deduplication MUST use the assertion identity. Two records with the same CAT7 categories but different application bytes consequently share a cognition key and have different assertion identities.

8.8.3 Authenticated application bytes

An application action MUST NOT ride as an unsigned top-level payload. When present, it is stored as metadata.application:

{
  "mediaType": "application/json",
  "schema": "https://example.test/schema/action-v1.json",
  "encoding": "base64url",
  "byteLength": 123,
  "digest": "sha256-<64 lowercase hex>",
  "data": "<unpadded base64url>"
}

data is unpadded canonical base64url and decodes to at most 524,288 bytes. Before application exposure, a receiver MUST verify the encoding, decoded length and SHA-256 digest. The descriptor commitment binds presence, media type, schema URI, encoding, length and digest into the record signature.

applicationCommitmentV1(absent) =
  hex(SHA-256(UTF8("mmp-app-v1\n") || lp("0")))

applicationCommitmentV1(present) =
  hex(SHA-256(UTF8("mmp-app-v1\n") || lp("1") || lp(mediaType) ||
    lp(NFC(schema)) || lp("base64url") || lp(decimal(byteLength)) || lp(digest)))

8.8.4 Corrected v2.0 signature payload

lp(x) is ASCII decimal UTF-8 byte length, a colon, then the UTF-8 bytes of x. Integers are unsigned canonical decimal with no leading zero. Lists state their count and sort members bytewise.

UTF8("mmp-sig-v2.0\n") ||
lp("2.0") ||
lp("mmp-cmb-merkle-v2") ||
lp(metadata.key) ||
lp(metadata.createdByNodeId) ||
lp(NFC(metadata.createdBy)) ||
lp(decimal(metadata.createdTimestamp)) ||
lp(NFC(metadata.room)) ||
lp(metadata.to or "") ||
lp(decimal(parentCount)) ||
concat(lp(parent) for bytewise-sorted parents) ||
lp(categoryParentsCommitment) ||
lp(applicationCommitmentV1)
  • createdByNodeId is the cryptographic author identity and MUST resolve to the verifying Ed25519 key.
  • createdBy is a signed display label and MUST NOT be used for identity resolution or routing.
  • room is explicit. The default room is the literal string default, not absence.
  • New v2.0 records MUST declare mmp-cmb-merkle-v2; a verifier MUST NOT guess among address derivations sharing one prefix.

8.8.5 Verification order

  1. Validate the negotiated frame and record schemas.
  2. When encrypted, authenticate and decrypt the transport envelope.
  3. Verify application encoding, length and digest.
  4. Recompute every category key and the cognition key.
  5. Recompute the assertion identity and reject a carried mismatch.
  6. Resolve the author key by createdByNodeId and verify the Ed25519 signature.
  7. Verify signed room and recipient audience.
  8. Only then expose the record for delivery and receiver-autonomous admission.

Failure at any cryptographic step is a refusal, not an “unverified success.” Legacy reading belongs to a named migration profile and MUST NOT downgrade Core Secure automatically.

Machine contract. Download the record schema, signature vectors and application vectors.

Q&A

Why are all 7 categories required, not optional?

The cognition address and SVAF evidence are defined over a fixed CAT7 tuple. Missing categories would change both constructions. An emitter therefore normalizes a category it cannot meaningfully extract to the canonical neutral value before addressing and signing; the receiver may classify that neutral category as non-evaluable when forming its whole-record admission decision (§9.2.1).

Why not let agents define their own categories?

SVAF needs a shared schema to compare incoming categories against local anchors. If each agent defined its own categories, cross-domain evaluation is impossible — a fitness agent and a music agent would have no common dimensions to compute drift on.

Why does mood carry valence and arousal but other categories don’t carry numeric values?

Mood has a well-established dimensional model (Russell’s circumplex). other categories are inherently symbolic — "debugging auth module" has no meaningful numeric axis. Valence and arousal are RECOMMENDED, not required — agents without reliable circumplex data omit them.