CLE-Net Protocol Specification: Message Formats

This document defines the wire-level message formats for CLE-Net communication.


1. Overview

CLE-Net uses a simple JSON-based protocol for all network communication. Messages are:

  • Atomic: One request/response per message

  • Ordered: Messages within a session are ordered

  • Authenticated: All messages include sender signature


2. Message Envelope

All messages wrap the payload in a standard envelope:

{
  "version": "1.0",
  "message_type": "commit | query | response | error",
  "message_id": "uuid-v4",
  "timestamp": 1700000000.000,
  "sender": {
    "agent_id": "agent_xxxxxxxx",
    "node_id": "node_xxxxxxxx",
    "public_key": "base64-encoded-public-key"
  },
  "payload": { ... },
  "signature": "base64-encoded-signature"
}

Envelope Fields

Field

Type

Description

version

string

Protocol version (e.g., “1.0”)

message_type

enum

Type of message

message_id

string

Unique message identifier

timestamp

float

Unix timestamp of creation

sender

object

Sender identification

payload

object

Message-specific content

signature

string

Ed25519 signature of payload


3. Message Types

3.1 Rule Commit Message

Broadcast a discovered rule to the network.

{
  "message_type": "commit",
  "payload": {
    "rule_hash": "rule_xxxxxxxxxxxxxxxx",
    "logic_signature": "a1b2c3d4e5f6",
    "context_signature": "f6e5d4c3b2a1",
    "confidence": 0.75,
    "evidence_count": 5,
    "metadata": {
      "source_domain": "customer_support",
      "language": "en"
    }
  }
}

Fields:

Field

Type

Description

rule_hash

string

SHA256 hash of canonical rule

logic_signature

string

Hash of normalized logic form

context_signature

string

Hash of context string

confidence

float

Agent confidence (0-1)

evidence_count

int

Number of supporting events

metadata

object

Additional context

3.2 Challenge Message

Challenge a previously committed rule.

{
  "message_type": "challenge",
  "payload": {
    "target_rule_hash": "rule_xxxxxxxxxxxxxxxx",
    "contradicting_rule": {
      "logic_form": "IF Client.VIP = false ...",
      "context": "security_policy"
    },
    "reason": "Contradicts security requirements",
    "evidence": ["event_1", "event_2"]
  }
}

3.3 Confirm Message

Confirm support for a rule.

{
  "message_type": "confirm",
  "payload": {
    "rule_hash": "rule_xxxxxxxxxxxxxxxx",
    "confidence_delta": 0.05,
    "additional_evidence": 3
  }
}

3.4 Query Message

Query the network for rules or state.

{
  "message_type": "query",
  "payload": {
    "query_type": "by_hash | by_context | by_agent",
    "filters": {
      "rule_hash": "rule_xxxxxxxxxxxxxxxx",
      "context_pattern": "*vip*",
      "agent_id": "agent_xxxxxxxx",
      "min_confidence": 0.5,
      "limit": 100
    }
  }
}

3.5 Response Message

Response to a query.

{
  "message_type": "response",
  "payload": {
    "request_id": "uuid-of-original-query",
    "results": [
      {
        "rule_hash": "rule_xxxxxxxxxxxxxxxx",
        "logic_signature": "a1b2c3d4e5f6",
        "confidence": 0.75,
        "supporting_agents": ["agent_a", "agent_b", "agent_c"],
        "created_at": 1700000000.000
      }
    ],
    "total_count": 1
  }
}

3.6 Error Message

Report an error.

{
  "message_type": "error",
  "payload": {
    "error_code": "INVALID_SIGNATURE | UNKNOWN_HASH | RATE_LIMIT",
    "error_message": "Human-readable description",
    "details": { ... }
  }
}

3.7 State Sync Message

Request or send full state synchronization.

{
  "message_type": "state_sync",
  "payload": {
    "sync_type": "request | response | push",
    "checkpoint_hash": "checkpoint_xxxxxxxx",
    "last_known_height": 1500,
    "state": { ... }  // Full state for response/push
  }
}

3.8 Gossip Message

Gossip protocol message for discovery.

{
  "message_type": "gossip",
  "payload": {
    "gossip_type": "announce | request | response",
    "topics": ["new_commit", "challenge", "checkpoint"],
    "item_hashes": ["rule_xxx", "rule_yyy"],
    "ttl": 3  // Hop limit
  }
}

4. Phase 3 Message Types ✅ NEW

4.1 Multi-Modal Input Message

Process multi-modal input (voice, video, documents, images).

{
  "message_type": "multimodal_input",
  "payload": {
    "modality": "voice | video | document | image",
    "input_data": "base64-encoded-content",
    "metadata": {
      "format": "wav | mp4 | pdf | png",
      "duration": 120.5,
      "sample_rate": 16000,
      "language": "en"
    }
  }
}

4.2 Enhanced Symbolic Regression Message

Exchange symbolic regression results and patterns.

{
  "message_type": "symbolic_regression",
  "payload": {
    "regression_type": "gp_evolution | temporal_pattern | uncertainty_quantification",
    "expression": {
      "operator": "+",
      "left": {"value": "VIP"},
      "right": {"operator": "*", "left": {"value": "delay"}, "right": {"value": "0.5"}}
    },
    "fitness": 0.85,
    "complexity": 5,
    "generation": 42
  }
}

4.3 Full-Duplex Control Message

Control full-duplex interaction (simultaneous I/O).

{
  "message_type": "full_duplex_control",
  "payload": {
    "action": "start_session | stop_session | interrupt | resume",
    "session_id": "uuid-v4",
    "timestamp": 1700000000.000
  }
}

5. State Models

4.1 Agent State

interface AgentState {
  agent_id: string;
  node_id: string;
  public_key: string;
  
  // Local knowledge
  local_rules: Map<RuleHash, LocalRule>;
  event_buffer: Event[];
  
  // Consensus state
  pending_commits: Map<RuleHash, Commit>;
  accepted_rules: Set<RuleHash>;
  
  // Performance
  ccs_score: number;
  uptime_epochs: number;
  
  // Checkpoint
  last_checkpoint: number;
  state_hash: string;
}

4.2 Rule State

interface RuleState {
  rule_hash: string;
  logic_form: string;
  context: string;
  
  // Discovery
  first_discovered: number;
  discovered_by: string[];
  
  // Consensus
  confidence: number;
  supporting_agents: number;
  contradicting_agents: number;
  
  // Lifecycle
  status: "pending" | "accepted" | "weakened" | "deprecated";
  last_updated: number;
  deprecated_at?: number;
}

4.3 Ledger State

interface LedgerState {
  height: number;
  checkpoint_hash: string;
  
  // Rule commitments
  commits: Map<RuleHash, CommitRecord>;
  
  // Consensus results
  accepted_rules: Set<RuleHash>;
  
  // Challenges
  challenges: Map<RuleHash, ChallengeRecord>;
}

5. Protocol Constants

Constant

Value

Description

PROTOCOL_VERSION

“1.0”

Current protocol version

MAX_MESSAGE_SIZE

65536

64KB max message size

MAX_PAYLOAD_SIZE

60000

Max payload within message

DEFAULT_TIMEOUT

5000

Default response timeout (ms)

MAX_RETRIES

3

Max retry attempts

GOSSIP_TTL

3

Gossip time-to-live hops

SYNC_BATCH_SIZE

100

State sync batch size


6. Serialization

Messages are serialized as JSON with:

  • UTF-8 encoding

  • No whitespace except for formatting

  • Sorted keys for deterministic output

  • NaN/Infinity replaced with null

Example Serialization

def serialize_message(envelope: dict) -> bytes:
    # Remove signature for signing
    payload = envelope.copy()
    del payload["signature"]
    
    # Sort keys for determinism
    payload["payload"] = sort_dict_recursive(payload["payload"])
    
    # Serialize
    json_str = json.dumps(payload, separators=(',', ':'), ensure_ascii=False)
    return json_str.encode('utf-8')

7. Security

7.1 Signing

All messages are signed using Ed25519:

def sign_message(envelope: dict, private_key: bytes) -> str:
    serialized = serialize_message(envelope)
    signature = ed25519_sign(serialized, private_key)
    return base64.b64encode(signature).decode('ascii')

7.2 Verification

def verify_message(envelope: dict) -> bool:
    signature = base64.b64decode(envelope["signature"])
    serialized = serialize_message(envelope)
    return ed25519_verify(serialized, signature, envelope["sender"]["public_key"])

7.3 Encryption

For sensitive payloads, use NaCl box encryption:

{
  "encrypted_payload": "base64-encoded-nacl-box",
  "nonce": "base64-encoded-nonce"
}