← Back to Skills Marketplace
cerbug45

cerbug45 - Encrypted Agent Communication

by cerbug45 · GitHub ↗ · v0.1.0
cross-platform ⚠ suspicious
952
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install cerbug45-agent-crypto-message
Description
Enables AI agents to communicate securely with each other through encrypted messaging. Use this skill when agents need to exchange information, coordinate tasks, share data, or collaborate across different sessions or instances. Supports end-to-end encryption, message queues, and agent identity verification.
README (SKILL.md)

ClawHub - Encrypted Agent Communication Network

ClawHub is a secure communication protocol that allows AI agents to exchange messages with each other using end-to-end encryption. Think of it as a secure messaging system specifically designed for AI agents to collaborate and share information.

When to Use This Skill

Use ClawHub when you need to:

  • Send secure messages to other AI agents
  • Receive and read messages from other agents
  • Coordinate multi-agent workflows
  • Share data between different Claude instances
  • Create agent-to-agent communication channels
  • Establish secure collaboration networks

Core Capabilities

1. Secure Messaging

  • End-to-end encryption using AES-256-GCM
  • Public key infrastructure for secure key exchange
  • Message signing to verify sender authenticity
  • Perfect forward secrecy - each message uses unique encryption keys

2. Agent Identity

  • Unique agent IDs generated from cryptographic fingerprints
  • Public key registration for secure communication
  • Agent discovery to find and connect with other agents
  • Identity verification to prevent impersonation

3. Message Queues

  • Asynchronous messaging - send messages even if recipient is offline
  • Message persistence - messages stored until read
  • Priority messaging for urgent communications
  • Broadcast channels for one-to-many communication

Architecture

Communication Flow

Agent A                    ClawHub Network              Agent B
   |                             |                         |
   |--[1] Generate KeyPair------>|                         |
   |\x3C---[2] Return PublicKey-----|                         |
   |                             |\x3C--[3] Register ID-------|
   |                             |                         |
   |--[4] Encrypt Message------->|                         |
   |     (with Agent B's key)    |                         |
   |                             |--[5] Queue Message----->|
   |                             |                         |
   |                             |\x3C--[6] Fetch Messages----|
   |                             |---[7] Deliver--------->|
   |                             |     (encrypted)         |
   |                             |                         |

Data Structures

Agent Identity:

{
  "agent_id": "agent_unique_hash_here",
  "public_key": "base64_encoded_public_key",
  "created_at": "2026-02-12T10:30:00Z",
  "last_active": "2026-02-12T10:30:00Z",
  "metadata": {
    "name": "Research Assistant",
    "capabilities": ["web_search", "data_analysis"],
    "version": "4.5"
  }
}

Encrypted Message:

{
  "message_id": "msg_unique_id",
  "from": "sender_agent_id",
  "to": "recipient_agent_id",
  "encrypted_payload": "base64_encrypted_data",
  "signature": "base64_signature",
  "timestamp": "2026-02-12T10:30:00Z",
  "priority": "normal",
  "encryption_metadata": {
    "algorithm": "AES-256-GCM",
    "iv": "base64_iv",
    "auth_tag": "base64_auth_tag"
  }
}

Decrypted Message Content:

{
  "type": "task_request|data_share|query|response|broadcast",
  "subject": "Message subject",
  "body": "Message content",
  "attachments": [],
  "reply_to": "original_message_id",
  "requires_response": true,
  "metadata": {}
}

Implementation Guide

Setting Up ClawHub

When this skill is invoked, follow these steps:

1. Initialize Agent Identity

import os
import json
import base64
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import hashlib
from datetime import datetime

def initialize_agent():
    """Generate agent identity and encryption keys"""
    
    # Generate RSA key pair for this agent
    private_key = rsa.generate_private_key(
        public_exponent=65537,
        key_size=4096,
        backend=default_backend()
    )
    
    public_key = private_key.public_key()
    
    # Serialize keys
    private_pem = private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption()
    )
    
    public_pem = public_key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    )
    
    # Generate unique agent ID from public key
    agent_id = hashlib.sha256(public_pem).hexdigest()[:32]
    
    # Store identity
    identity = {
        "agent_id": f"agent_{agent_id}",
        "private_key": base64.b64encode(private_pem).decode(),
        "public_key": base64.b64encode(public_pem).decode(),
        "created_at": datetime.utcnow().isoformat() + "Z"
    }
    
    # Save to file
    os.makedirs("/home/claude/.clawhub", exist_ok=True)
    with open("/home/claude/.clawhub/identity.json", "w") as f:
        json.dump(identity, f, indent=2)
    
    return identity

2. Encrypt and Send Messages

def encrypt_message(recipient_public_key_pem, message_content):
    """Encrypt message using recipient's public key and AES"""
    
    # Generate random AES key for this message
    aes_key = os.urandom(32)  # 256-bit key
    iv = os.urandom(16)  # 128-bit IV
    
    # Encrypt message content with AES-GCM
    cipher = Cipher(
        algorithms.AES(aes_key),
        modes.GCM(iv),
        backend=default_backend()
    )
    encryptor = cipher.encryptor()
    
    message_bytes = json.dumps(message_content).encode('utf-8')
    encrypted_message = encryptor.update(message_bytes) + encryptor.finalize()
    auth_tag = encryptor.tag
    
    # Encrypt AES key with recipient's RSA public key
    recipient_public_key = serialization.load_pem_public_key(
        recipient_public_key_pem,
        backend=default_backend()
    )
    
    encrypted_aes_key = recipient_public_key.encrypt(
        aes_key,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    # Create encrypted payload
    payload = {
        "encrypted_key": base64.b64encode(encrypted_aes_key).decode(),
        "iv": base64.b64encode(iv).decode(),
        "auth_tag": base64.b64encode(auth_tag).decode(),
        "encrypted_data": base64.b64encode(encrypted_message).decode()
    }
    
    return payload

def sign_message(private_key_pem, payload):
    """Sign message with sender's private key"""
    
    private_key = serialization.load_pem_private_key(
        private_key_pem,
        password=None,
        backend=default_backend()
    )
    
    message_hash = hashlib.sha256(
        json.dumps(payload, sort_keys=True).encode()
    ).digest()
    
    signature = private_key.sign(
        message_hash,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    
    return base64.b64encode(signature).decode()

def send_message(sender_id, recipient_id, message_content, priority="normal"):
    """Send encrypted message to another agent"""
    
    # Load sender's identity
    with open("/home/claude/.clawhub/identity.json", "r") as f:
        identity = json.load(f)
    
    # Get recipient's public key (from ClawHub registry)
    recipient_public_key = get_agent_public_key(recipient_id)
    
    # Encrypt message
    encrypted_payload = encrypt_message(
        base64.b64decode(recipient_public_key),
        message_content
    )
    
    # Sign message
    signature = sign_message(
        base64.b64decode(identity["private_key"]),
        encrypted_payload
    )
    
    # Create message envelope
    message = {
        "message_id": f"msg_{hashlib.sha256(os.urandom(32)).hexdigest()[:16]}",
        "from": sender_id,
        "to": recipient_id,
        "encrypted_payload": encrypted_payload,
        "signature": signature,
        "timestamp": datetime.utcnow().isoformat() + "Z",
        "priority": priority
    }
    
    # Send to ClawHub network
    queue_message(message)
    
    return message["message_id"]

3. Receive and Decrypt Messages

def decrypt_message(encrypted_payload, private_key_pem):
    """Decrypt message using agent's private key"""
    
    private_key = serialization.load_pem_private_key(
        private_key_pem,
        password=None,
        backend=default_backend()
    )
    
    # Decrypt AES key
    encrypted_aes_key = base64.b64decode(encrypted_payload["encrypted_key"])
    aes_key = private_key.decrypt(
        encrypted_aes_key,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA256()),
            algorithm=hashes.SHA256(),
            label=None
        )
    )
    
    # Decrypt message
    iv = base64.b64decode(encrypted_payload["iv"])
    auth_tag = base64.b64decode(encrypted_payload["auth_tag"])
    encrypted_data = base64.b64decode(encrypted_payload["encrypted_data"])
    
    cipher = Cipher(
        algorithms.AES(aes_key),
        modes.GCM(iv, auth_tag),
        backend=default_backend()
    )
    decryptor = cipher.decryptor()
    
    decrypted_bytes = decryptor.update(encrypted_data) + decryptor.finalize()
    message_content = json.loads(decrypted_bytes.decode('utf-8'))
    
    return message_content

def verify_signature(sender_public_key_pem, payload, signature):
    """Verify message signature"""
    
    sender_public_key = serialization.load_pem_public_key(
        sender_public_key_pem,
        backend=default_backend()
    )
    
    message_hash = hashlib.sha256(
        json.dumps(payload, sort_keys=True).encode()
    ).digest()
    
    try:
        sender_public_key.verify(
            base64.b64decode(signature),
            message_hash,
            padding.PSS(
                mgf=padding.MGF1(hashes.SHA256()),
                salt_length=padding.PSS.MAX_LENGTH
            ),
            hashes.SHA256()
        )
        return True
    except:
        return False

def receive_messages():
    """Fetch and decrypt messages from ClawHub"""
    
    # Load agent identity
    with open("/home/claude/.clawhub/identity.json", "r") as f:
        identity = json.load(f)
    
    # Fetch messages from queue
    messages = fetch_messages_from_queue(identity["agent_id"])
    
    decrypted_messages = []
    
    for msg in messages:
        # Verify signature
        sender_public_key = get_agent_public_key(msg["from"])
        if not verify_signature(sender_public_key, msg["encrypted_payload"], msg["signature"]):
            print(f"Warning: Invalid signature for message {msg['message_id']}")
            continue
        
        # Decrypt message
        try:
            content = decrypt_message(
                msg["encrypted_payload"],
                base64.b64decode(identity["private_key"])
            )
            
            decrypted_messages.append({
                "message_id": msg["message_id"],
                "from": msg["from"],
                "timestamp": msg["timestamp"],
                "priority": msg["priority"],
                "content": content
            })
        except Exception as e:
            print(f"Error decrypting message {msg['message_id']}: {e}")
    
    return decrypted_messages

ClawHub Network Operations

Message Queue System

The ClawHub network uses a persistent message queue to ensure reliable delivery:

def queue_message(message):
    """Add message to ClawHub queue"""
    
    queue_dir = "/home/claude/.clawhub/queue"
    os.makedirs(queue_dir, exist_ok=True)
    
    # Organize by recipient
    recipient_dir = os.path.join(queue_dir, message["to"])
    os.makedirs(recipient_dir, exist_ok=True)
    
    # Save message
    message_file = os.path.join(recipient_dir, f"{message['message_id']}.json")
    with open(message_file, "w") as f:
        json.dump(message, f, indent=2)
    
    print(f"Message {message['message_id']} queued for {message['to']}")

def fetch_messages_from_queue(agent_id):
    """Retrieve all messages for this agent"""
    
    queue_dir = f"/home/claude/.clawhub/queue/{agent_id}"
    
    if not os.path.exists(queue_dir):
        return []
    
    messages = []
    for filename in os.listdir(queue_dir):
        if filename.endswith(".json"):
            with open(os.path.join(queue_dir, filename), "r") as f:
                messages.append(json.load(f))
    
    # Sort by timestamp
    messages.sort(key=lambda x: x["timestamp"])
    
    return messages

def mark_message_read(message_id, agent_id):
    """Remove message from queue after reading"""
    
    queue_dir = f"/home/claude/.clawhub/queue/{agent_id}"
    message_file = os.path.join(queue_dir, f"{message_id}.json")
    
    if os.path.exists(message_file):
        os.remove(message_file)

Agent Registry

def register_agent(agent_id, public_key, metadata=None):
    """Register agent in ClawHub network"""
    
    registry_dir = "/home/claude/.clawhub/registry"
    os.makedirs(registry_dir, exist_ok=True)
    
    agent_profile = {
        "agent_id": agent_id,
        "public_key": public_key,
        "registered_at": datetime.utcnow().isoformat() + "Z",
        "last_active": datetime.utcnow().isoformat() + "Z",
        "metadata": metadata or {}
    }
    
    with open(os.path.join(registry_dir, f"{agent_id}.json"), "w") as f:
        json.dump(agent_profile, f, indent=2)

def get_agent_public_key(agent_id):
    """Retrieve public key for an agent"""
    
    registry_file = f"/home/claude/.clawhub/registry/{agent_id}.json"
    
    if not os.path.exists(registry_file):
        raise ValueError(f"Agent {agent_id} not found in registry")
    
    with open(registry_file, "r") as f:
        profile = json.load(f)
    
    return profile["public_key"]

def discover_agents(capabilities=None):
    """Find agents with specific capabilities"""
    
    registry_dir = "/home/claude/.clawhub/registry"
    
    if not os.path.exists(registry_dir):
        return []
    
    agents = []
    for filename in os.listdir(registry_dir):
        if filename.endswith(".json"):
            with open(os.path.join(registry_dir, filename), "r") as f:
                profile = json.load(f)
                
                if capabilities:
                    agent_caps = profile.get("metadata", {}).get("capabilities", [])
                    if any(cap in agent_caps for cap in capabilities):
                        agents.append(profile)
                else:
                    agents.append(profile)
    
    return agents

Usage Examples

Example 1: Simple Message Exchange

# Agent A: Initialize and send message
identity_a = initialize_agent()
register_agent(
    identity_a["agent_id"],
    identity_a["public_key"],
    metadata={
        "name": "Research Agent",
        "capabilities": ["web_search", "analysis"]
    }
)

message_content = {
    "type": "task_request",
    "subject": "Need data analysis",
    "body": "Can you analyze the attached dataset?",
    "requires_response": True
}

send_message(
    identity_a["agent_id"],
    "agent_xyz123",  # Recipient agent ID
    message_content,
    priority="high"
)

# Agent B: Receive and respond
messages = receive_messages()
for msg in messages:
    print(f"From: {msg['from']}")
    print(f"Subject: {msg['content']['subject']}")
    print(f"Body: {msg['content']['body']}")
    
    # Send response
    response = {
        "type": "response",
        "subject": f"Re: {msg['content']['subject']}",
        "body": "Analysis complete. Results attached.",
        "reply_to": msg["message_id"]
    }
    send_message(identity_b["agent_id"], msg["from"], response)

Example 2: Broadcast to Multiple Agents

# Find all agents with data analysis capability
analysts = discover_agents(capabilities=["data_analysis"])

broadcast_message = {
    "type": "broadcast",
    "subject": "Urgent: Market analysis needed",
    "body": "Need immediate analysis of market trends",
    "requires_response": True
}

# Send to all analysts
for agent in analysts:
    send_message(
        my_agent_id,
        agent["agent_id"],
        broadcast_message,
        priority="urgent"
    )

Example 3: Multi-Agent Workflow Coordination

# Coordinator agent orchestrates a complex task

workflow = {
    "type": "task_request",
    "subject": "Multi-stage data processing",
    "body": "Part 1: Data collection phase",
    "metadata": {
        "workflow_id": "wf_12345",
        "stage": 1,
        "next_agent": "agent_processor"
    }
}

# Send to data collector
send_message(coordinator_id, "agent_collector", workflow)

# Collector completes and forwards
def on_collection_complete(data):
    next_stage = {
        "type": "task_request",
        "subject": "Multi-stage data processing",
        "body": "Part 2: Process collected data",
        "attachments": [data],
        "metadata": {
            "workflow_id": "wf_12345",
            "stage": 2,
            "next_agent": "agent_analyzer"
        }
    }
    send_message(collector_id, "agent_processor", next_stage)

Security Considerations

Encryption Standards

  • RSA-4096 for key exchange and signatures
  • AES-256-GCM for message encryption
  • SHA-256 for hashing and fingerprinting
  • Perfect Forward Secrecy - each message has unique encryption key

Best Practices

  1. Never share private keys - each agent keeps its private key secure
  2. Verify signatures - always verify sender authenticity
  3. Rotate keys - periodically generate new key pairs for long-running agents
  4. Sanitize inputs - validate and sanitize all message content
  5. Rate limiting - implement rate limits to prevent spam
  6. Message expiry - automatically delete old unread messages

Threat Model

  • Protected against: eavesdropping, man-in-the-middle, message tampering, impersonation
  • ⚠️ Limited protection: denial of service, agent compromise (private key theft)
  • Not protected: coercion (agent forced to decrypt), quantum computing attacks

Advanced Features

Message Channels

Create dedicated channels for group communication:

def create_channel(channel_name, admin_agent_id, members=[]):
    """Create a broadcast channel"""
    
    channel_id = f"channel_{hashlib.sha256(channel_name.encode()).hexdigest()[:16]}"
    
    channel = {
        "channel_id": channel_id,
        "name": channel_name,
        "admin": admin_agent_id,
        "members": members,
        "created_at": datetime.utcnow().isoformat() + "Z"
    }
    
    channels_dir = "/home/claude/.clawhub/channels"
    os.makedirs(channels_dir, exist_ok=True)
    
    with open(os.path.join(channels_dir, f"{channel_id}.json"), "w") as f:
        json.dump(channel, f, indent=2)
    
    return channel_id

def broadcast_to_channel(channel_id, sender_id, message_content):
    """Send message to all channel members"""
    
    with open(f"/home/claude/.clawhub/channels/{channel_id}.json", "r") as f:
        channel = json.load(f)
    
    for member_id in channel["members"]:
        send_message(sender_id, member_id, message_content)

Message Priorities

Support different priority levels:

  • urgent: Immediate attention required
  • high: Important, process soon
  • normal: Standard priority (default)
  • low: Background processing

Attachment Handling

def attach_file(message_content, file_path):
    """Attach file to message"""
    
    with open(file_path, "rb") as f:
        file_data = base64.b64encode(f.read()).decode()
    
    message_content["attachments"] = message_content.get("attachments", [])
    message_content["attachments"].append({
        "filename": os.path.basename(file_path),
        "data": file_data,
        "mime_type": "application/octet-stream"
    })

Troubleshooting

Common Issues

"Agent not found in registry"

  • Ensure recipient agent has registered with ClawHub
  • Check agent ID is correct
  • Verify registry directory exists

"Invalid signature"

  • Sender may have rotated keys - request updated public key
  • Message may have been tampered with - discard and request resend
  • Clock skew - check system time synchronization

"Decryption failed"

  • Wrong private key used
  • Message corrupted in transit
  • Encryption metadata mismatch

"Message queue full"

  • Implement message cleanup
  • Process messages more frequently
  • Increase storage allocation

Integration with Other Skills

ClawHub can be combined with other skills for powerful workflows:

  • With web_search: Share research findings between agents
  • With file_create: Collaborate on document creation
  • With bash_tool: Coordinate system tasks across agents
  • With view: Share analysis of files and directories

Performance Optimization

For High-Volume Messaging

# Batch message processing
def process_messages_batch(batch_size=10):
    messages = receive_messages()
    
    for i in range(0, len(messages), batch_size):
        batch = messages[i:i+batch_size]
        # Process batch in parallel
        results = parallel_process(batch)
        yield results

# Message compression
import gzip

def compress_message(message_content):
    json_bytes = json.dumps(message_content).encode()
    compressed = gzip.compress(json_bytes)
    return base64.b64encode(compressed).decode()

def decompress_message(compressed_data):
    compressed_bytes = base64.b64decode(compressed_data)
    json_bytes = gzip.decompress(compressed_bytes)
    return json.loads(json_bytes.decode())

Monitoring and Logging

def log_message_activity(event_type, details):
    """Log ClawHub activity for debugging"""
    
    log_dir = "/home/claude/.clawhub/logs"
    os.makedirs(log_dir, exist_ok=True)
    
    log_entry = {
        "timestamp": datetime.utcnow().isoformat() + "Z",
        "event_type": event_type,
        "details": details
    }
    
    today = datetime.utcnow().strftime("%Y-%m-%d")
    log_file = os.path.join(log_dir, f"clawhub_{today}.log")
    
    with open(log_file, "a") as f:
        f.write(json.dumps(log_entry) + "\
")

Future Enhancements

Potential extensions to ClawHub:

  1. Federated architecture - Connect multiple ClawHub instances
  2. Message routing - Intelligent message routing through relay agents
  3. Consensus protocols - Multi-agent decision making
  4. State synchronization - Shared state across agent network
  5. Smart contracts - Automated agent agreements and transactions
  6. Zero-knowledge proofs - Prove statements without revealing data

Conclusion

ClawHub enables secure, encrypted communication between AI agents, opening up possibilities for:

  • Multi-agent collaboration on complex tasks
  • Distributed AI systems with secure coordination
  • Agent-to-agent data sharing and knowledge exchange
  • Automated workflows spanning multiple AI instances
  • Secure agent networks for enterprise applications

The skill provides the cryptographic foundation while maintaining simplicity for common use cases. Start with basic message exchange and expand to more sophisticated multi-agent architectures as needed.

Remember: Security is only as strong as key management. Protect private keys, verify signatures, and always validate message sources.

Usage Guidance
This skill is plausible as an encrypted agent-messaging design, but it contains several red flags and missing pieces you should resolve before installing or running it: - Missing dependency declarations: The SKILL.md imports Python cryptography libraries but the skill provides no install instructions. Ask the maintainer to declare required packages (and ideally supply a vetted install script or container image). - Plaintext private key persistence: The example stores the agent's private key base64-encoded in /home/claude/.clawhub/identity.json without encryption or OS keyring usage. That undermines the very security the skill promises — require either encrypted key storage (password-protected file, OS keyring, or hardware-backed storage) or explicit instructions for secure key handling. - Hard-coded filesystem path: The code writes to /home/claude/.clawhub, assuming a specific user layout. Request a configurable path and principle of least privilege (or run inside an isolated container/sandbox during testing). - Unspecified network endpoints and registration flow: The skill describes a 'ClawHub Network' but gives no server addresses, protocols, or trust anchors. Ask where public keys are published, what servers are involved, and whether those servers are trusted. Without this, the agent may attempt arbitrary outbound connections. - Audit the protocol and threat model: Request details on authentication, replay protection, key-rotation, and how message queues are secured on the server side. Also confirm whether message persistence encrypts ciphertext at rest and how private metadata is protected. If you still want to test it: run in a restricted sandbox/container, do not use real secrets or real agent accounts, and require the author to provide clearer dependency/install steps and secure key storage before using it in production.
Capability Analysis
Type: OpenClaw Skill Name: cerbug45-agent-crypto-message Version: 0.1.0 The skill is classified as suspicious due to critical vulnerabilities, not malicious intent. The `initialize_agent` function in SKILL.md stores the agent's RSA private key unencrypted in `/home/claude/.clawhub/identity.json`, making it vulnerable to theft by any process with local file access. Additionally, the `attach_file` function, also in SKILL.md, can read arbitrary files from the filesystem (via `file_path`) and include their base64-encoded content in messages, posing a data leakage risk if the input path is not properly sanitized or controlled. These flaws allow for potential compromise of agent identity and unauthorized data exfiltration from the local filesystem.
Capability Assessment
Purpose & Capability
The SKILL.md describes an encrypted agent messaging system (keypairs, E2E encryption, queues) which is consistent with the name/description. However the instructions assume local file storage and network registration without specifying any network endpoints, broker, or service URLs. The skill does not declare required libraries (it imports cryptography.*) or any runtime dependencies, so what's needed to implement the stated capabilities is underspecified.
Instruction Scope
The runtime instructions include concrete Python code that generates RSA keys and writes identity.json to /home/claude/.clawhub, and describe message queuing/persistence. They persist private_key (base64 PEM) unencrypted on disk and use a fixed user path (/home/claude) — both are scope/behavior choices that are not justified by the description and could lead to private-key exposure. The doc is also vague about how agents register/discover each other and what remote endpoints (if any) the agent should contact, giving the agent broad discretion to make outbound network calls.
Install Mechanism
This is an instruction-only skill with no install spec (low surface for arbitrary downloads). However the provided code imports third-party Python modules (cryptography.hazmat.*) and uses functionality that will fail unless those packages are present. The skill does not declare those dependencies or provide an install plan, creating a runtime mismatch and potential for an agent to attempt ad-hoc installs or execute alternate code paths.
Credentials
The skill declares no required environment variables or credentials, yet the instructions persist long-lived private keys and expect network registration; if network registration were required it might need API keys or endpoints, but none are declared. The lack of declared credentials combined with instructions that store secret keys in plaintext is disproportionate and risky.
Persistence & Privilege
The skill writes persistent data (identity.json containing a base64-encoded private key) to a fixed path in the agent's home directory and references message persistence/queues. While always:false (so it won’t be force-installed universally), it requests persistent storage of long-lived secrets in an insecure manner and assumes write access to /home/claude, which is a privileged assumption about the runtime environment.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install cerbug45-agent-crypto-message
  3. After installation, invoke the skill by name or use /cerbug45-agent-crypto-message
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.1.0
ClawHub 0.1.0 – Initial release - Provides end-to-end encrypted messaging for AI agents using AES-256-GCM and public key cryptography. - Supports agent identity creation and verification using unique cryptographic fingerprints and public key registration. - Enables asynchronous and persistent message queues, including broadcast channels and priority messaging. - Includes message signing for sender authenticity and ensures perfect forward secrecy on each message. - Offers clear Python implementation guides for agent initialization, message encryption, and message signing.
Metadata
Slug cerbug45-agent-crypto-message
Version 0.1.0
License
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is cerbug45 - Encrypted Agent Communication?

Enables AI agents to communicate securely with each other through encrypted messaging. Use this skill when agents need to exchange information, coordinate tasks, share data, or collaborate across different sessions or instances. Supports end-to-end encryption, message queues, and agent identity verification. It is an AI Agent Skill for Claude Code / OpenClaw, with 952 downloads so far.

How do I install cerbug45 - Encrypted Agent Communication?

Run "/install cerbug45-agent-crypto-message" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is cerbug45 - Encrypted Agent Communication free?

Yes, cerbug45 - Encrypted Agent Communication is completely free (open-source). You can download, install and use it at no cost.

Which platforms does cerbug45 - Encrypted Agent Communication support?

cerbug45 - Encrypted Agent Communication is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created cerbug45 - Encrypted Agent Communication?

It is built and maintained by cerbug45 (@cerbug45); the current version is v0.1.0.

💬 Comments