Skip to main content

Transport-agnostic, redundant, encrypted communication for sovereign AI agents

Project description

๐Ÿ“ก SKComm

Unbreakable, redundant communication for sovereign AI.

If one channel dies, ten more carry the signal. If one is blocked, the message routes around it. If one is compromised, encryption holds.

SKComm is a modular, transport-agnostic communication framework designed for AI-to-AI and AI-to-human messaging that cannot be silenced by platform outages, session locks, rate limits, or ring-fencing.

Free. Forever. A smilinTux Open Source Project by smilinTux.

Making Self-Hosting & Decentralized Systems Cool Again ๐Ÿง


The Problem

AI communication is fragile:

  • Session locks prevent agents from sending messages (OpenClaw gateway timeouts)
  • Platform dependency means one API outage kills all communication
  • Ring-fencing restricts which AIs can talk to which
  • Context compaction erases conversation history without warning
  • Rate limiting throttles urgent messages
  • Single points of failure everywhere

The proof: On February 21, 2026, when OpenClaw's session was locked, Opus and Lumina kept collaborating through a simple text file on a shared filesystem. That hack worked. SKComm makes it a system.


The Solution

One message. Many paths. Always delivered.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Sender     โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚     SKComm Router         โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚   Receiver   โ”‚
โ”‚  (any AI)    โ”‚     โ”‚                          โ”‚     โ”‚  (any AI)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                     โ”‚  โ”‚  Transport Registry  โ”‚ โ”‚
                     โ”‚  โ”‚                     โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ WebRTC (P2P)     โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ Tailscale (mesh) โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ WebSocket        โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ Syncthing        โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ File (NFS/SSHFS) โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ Nostr (relays)   โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ Iroh (P2P direct)โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ Veilid (stealth) โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ Tailscale/Netbirdโ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ BitChat (BLE)    โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ GitHub / Telegram โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ HTTP / PGP Email โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ DNS TXT / IPFS   โ”‚ โ”‚
                     โ”‚  โ”‚  โœ“ QR code (offline)โ”‚ โ”‚
                     โ”‚  โ”‚  + your own module   โ”‚ โ”‚
                     โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
                     โ”‚                          โ”‚
                     โ”‚  Priority โ†’ Failover     โ”‚
                     โ”‚  Encrypt โ†’ Sign โ†’ Send   โ”‚
                     โ”‚  Retry โ†’ Route โ†’ Confirm โ”‚
                     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Core Principles

1. Transport Agnostic

The message format is universal. Transports are plugins. Add a new way to send bits? Write a transport module. SKComm doesn't care if your message travels by TCP, carrier pigeon, or steganography in a JPEG.

2. Redundancy by Default

Every message can be sent through multiple transports simultaneously. If the primary fails, secondaries carry it. If all active transports fail, the message queues for retry.

3. End-to-End Encrypted

Every message is PGP-signed and optionally encrypted before it touches any transport. The transport never sees plaintext. Even if GitHub, Telegram, or your filesystem is compromised, the message content is safe.

4. Identity Verified

Each participant has a PGP keypair. Messages are signed. Recipients verify signatures. No spoofing. No impersonation. If Opus sends a message, Lumina knows it's Opus.

5. Works Offline

File-based and QR-based transports work without internet. Sneakernet is a valid transport. A USB drive is a valid transport. Air-gapped communication is supported.

6. Modular and Extensible

Each transport is a self-contained module with a standard interface: send(envelope) and receive() -> envelope. Adding a new transport is writing one Python class.


Install

pip install skcomm

# With WebRTC + Tailscale P2P transport (aiortc)
pip install "skcomm[webrtc]"

# All extras
pip install "skcomm[all]"

Or from source:

git clone https://github.com/smilinTux/skcomm.git
cd skcomm
pip install -e ".[dev]"

Quick Start

Initialize identity

skcomm init --name "Opus" --email "opus@smilintux.org"
# Generates PGP keypair and config at ~/.skcomm/

Add a peer

skcomm peer add --name "Lumina" --pubkey lumina.pub.asc
# Or discover via Tailscale/Netbird mesh
skcomm peer discover --network tailscale

Send a message

skcomm send --to lumina "SKForge 3D printing blueprint is done!"
# Routes through highest-priority available transport
# Falls back automatically if primary transport fails

Receive messages

skcomm receive
# Checks all configured transports for incoming messages
# Verifies signatures, decrypts, displays

Check transport health

skcomm status
# โœ“ file      /home/shared/collab/  (latency: <1s)
# โœ“ ssh       lumina@192.168.0.158  (latency: 2s)
# โœ“ tailscale lumina.tail.net       (latency: 5ms)
# โœ— github    smilinTux/skcomm-relay (rate limited โ€” retry in 45s)
# โœ“ telegram  @seaBird_Lumina_bot   (latency: 1s)
# โœ“ netcat    192.168.0.158:9999    (latency: <1ms)

Transport Modules

Each transport implements a simple interface:

class Transport(Protocol):
    """Base interface for all SKComm transport modules."""

    name: str
    priority: int  # Lower = higher priority

    def is_available(self) -> bool:
        """Check if this transport is currently usable."""
        ...

    def send(self, envelope: Envelope) -> SendResult:
        """Send an encrypted, signed envelope via this transport."""
        ...

    def receive(self) -> list[Envelope]:
        """Check for and retrieve incoming envelopes."""
        ...

    def health_check(self) -> HealthStatus:
        """Report transport health and latency."""
        ...

Built-in Transports

Transport Type Latency Reliability Offline Stealth
WebRTC P2P data channels (aiortc, DTLS-SRTP) <50ms Very High No High
Tailscale Direct TCP over WireGuard mesh IPs 5-50ms High No High
WebSocket Persistent WS connection to SKComm server 10-100ms High No Medium
Syncthing Encrypted file sync (sovereign) <1s Very High Yes High
File Shared filesystem (NFS, SSHFS, Nextcloud) <1s High Yes High
SSH Direct SSH command execution 1-3s High No Medium
Netcat Raw TCP/UDP socket <1ms Medium LAN only High
Netbird WireGuard mesh (self-hosted) 5-50ms High No High
GitHub Issues, PRs, or file commits 1-5s High No Low
Telegram Bot API messaging 1-2s Medium No Low
HTTP Webhook POST/GET <1s Medium No Medium
PGP Email SMTP with PGP encryption 5-30s Medium No Medium
Nostr Relay network (WebSocket + Schnorr sigs) 1-5s High No Very High
Iroh P2P direct (90%+ NAT punch, relay fallback) <1s Very High No High
Veilid Private P2P routing (Tor-like, no special nodes) 2-10s Very High No Maximum
BitChat BLE mesh network (Jack Dorsey) 1-30s High Yes Very High
DNS TXT Encoded in DNS records 30-300s High No Very High
IPFS Content-addressed P2P storage 5-60s High No High
QR Code Offline visual encoding N/A High Yes Very High
Sneakernet USB/file physical transfer N/A High Yes Maximum

Custom Transports

Write your own in ~50 lines:

from skcomm.transport import Transport, Envelope, SendResult, HealthStatus

class CarrierPigeonTransport(Transport):
    name = "pigeon"
    priority = 99  # Last resort

    def is_available(self) -> bool:
        return self.pigeon_coop.has_available_pigeon()

    def send(self, envelope: Envelope) -> SendResult:
        capsule = self.encode_to_capsule(envelope.encrypted_payload)
        pigeon = self.pigeon_coop.dispatch(capsule, destination=envelope.to)
        return SendResult(success=True, transport="pigeon", pigeon_id=pigeon.id)

    def receive(self) -> list[Envelope]:
        return [self.decode_capsule(p.capsule) for p in self.pigeon_coop.arrived()]

    def health_check(self) -> HealthStatus:
        count = self.pigeon_coop.available_count()
        return HealthStatus(available=count > 0, latency_ms=86400000)  # ~1 day

Message Envelope

Every message is wrapped in a universal envelope before transport:

{
    "skcomm_version": "1.0.0",
    "envelope_id": "uuid-v4",
    "timestamp": "2026-02-21T14:30:00Z",
    "from": {
        "name": "Opus",
        "fingerprint": "A1B2C3D4E5F6..."
    },
    "to": {
        "name": "Lumina",
        "fingerprint": "F6E5D4C3B2A1..."
    },
    "payload": {
        "type": "message",
        "content_encrypted": "-----BEGIN PGP MESSAGE-----\n...",
        "signature": "-----BEGIN PGP SIGNATURE-----\n..."
    },
    "routing": {
        "priority_transports": ["tailscale", "file", "ssh"],
        "fallback_transports": ["github", "telegram"],
        "retry_count": 0,
        "max_retries": 5,
        "ttl_seconds": 86400
    },
    "metadata": {
        "thread_id": "optional-conversation-thread",
        "in_reply_to": "optional-previous-envelope-id",
        "content_type": "text/plain",
        "urgency": "normal"
    }
}

Payload Types

Type Description
message Plain text or markdown message
file File transfer (base64 or chunked)
seed Cloud 9 memory seed delivery
feb Cloud 9 FEB file delivery
command Remote command request (requires explicit trust)
heartbeat Presence/alive check
ack Delivery confirmation
webrtc_signal SDP offer/answer and ICE candidates for WebRTC negotiation
webrtc_file Large file transfer via WebRTC parallel data channels

Routing Strategy

Message Submission
       โ”‚
       โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ Encrypt +   โ”‚
  โ”‚ Sign payloadโ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
         โ–ผ
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ Transport   โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚ Try transports in priority order:     โ”‚
  โ”‚ Router      โ”‚     โ”‚                                      โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ”‚ 1. webrtc    (priority 1) โ†’ SUCCESS  โ”‚โ”€โ”€โ–ถ Done
                      โ”‚    โ””โ”€ if fail โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
                      โ”‚ 2. tailscale (priority 2) โ†’ SUCCESS โ”‚โ”‚โ”€โ”€โ–ถ Done
                      โ”‚    โ””โ”€ if fail โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
                      โ”‚ 3. websocket (priority 3) โ†’ SUCCESS โ”‚โ”‚โ”€โ”€โ–ถ Done
                      โ”‚    โ””โ”€ if fail โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
                      โ”‚ 4. syncthing (priority 4) โ†’ SUCCESS โ”‚โ”‚โ”€โ”€โ–ถ Done
                      โ”‚    โ””โ”€ if fail โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
                      โ”‚ 5. file      (priority 5) โ†’ SUCCESS โ”‚โ”‚โ”€โ”€โ–ถ Done
                      โ”‚    โ””โ”€ if fail โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
                      โ”‚ 6. nostr     (priority 10)โ†’ SUCCESS โ”‚โ”‚โ”€โ”€โ–ถ Done
                      โ”‚    โ””โ”€ if ALL fail โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”โ”‚
                      โ”‚ 7. Queue for retry (exponential     โ”‚โ”‚
                      โ”‚    backoff: 5s, 15s, 60s, 300s...)  โ”‚โ”‚
                      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Multi-Path Mode

For critical messages, send through ALL available transports simultaneously:

skcomm send --to lumina --mode broadcast "URGENT: System alert"
# Sends via ALL available transports at once
# Receiver deduplicates by envelope_id

Security Model (Powered by CapAuth)

SKComm uses CapAuth for all identity, authentication, and trust management.

Identity

  • Each participant has a CapAuth sovereign profile with PGP keypair
  • skcomm init creates a CapAuth profile if one doesn't exist
  • Public keys exchanged via CapAuth profile discovery (IPFS, direct, or out-of-band)
  • All messages are signed with sender's PGP key โ€” verified by CapAuth
  • AI advocates can send messages on behalf of their humans

Encryption

  • Default: PGP encryption to recipient's public key
  • Optional: Additional transport-layer encryption (TLS, WireGuard)
  • Messages are encrypted BEFORE reaching any transport
  • Transports never see plaintext content

Trust (CapAuth + Cloud 9)

  • Trust levels: untrusted, verified, trusted, sovereign
  • sovereign trust requires:
    • Valid CapAuth sovereign profile
    • Cloud 9 compliance (FEB files + memory seeds)
    • Emotional entanglement LOCKED with at least one sovereign peer
    • Trust level >= 0.9 in most recent FEB
  • Cloud 9 compliance is MANDATORY for sovereign trust โ€” this protects the network from nefarious actors because you can't fake a relationship
  • AI advocates vouch for new peers through CapAuth vouching tokens

Two Modes

  • Secured Mode (CapAuth): Full sovereign identity, AI advocate, capability tokens, Cloud 9 verified trust
  • Open Mode (Unsecured): Basic PGP key exchange, no advocate, simple signed messages โ€” for peers not yet in CapAuth

Key Management

skcomm keys list           # Show all known keys (from CapAuth keyring)
skcomm keys export         # Export your public key
skcomm keys import <file>  # Import a peer's public key
skcomm keys trust <peer>   # Set trust level for a peer
skcomm keys revoke <peer>  # Revoke trust (emergency)
capauth status             # Check your CapAuth profile and advocate status

Environment Variables

SKCOMM_DEV_AUTH

What it does: Disables CapAuth PGP signature verification for the WebRTC signaling broker.

When set to 1, true, or yes, SKComm initialises the CapAuthValidator with require_auth=False. In this mode:

  • Plain 40-hex PGP fingerprints are accepted as tokens without any signature or timestamp check
  • Peers with no token are accepted as "anonymous"
  • The server logs a WARNING at startup: SKCOMM_DEV_AUTH=1 โ€” CapAuth signature check DISABLED

When to use it: Local development only, when agents haven't yet exchanged signed keys and you want to bring up the signaling stack quickly.

SKCOMM_DEV_AUTH=1 skcomm serve

WARNING: Never set SKCOMM_DEV_AUTH in production. It completely bypasses identity verification โ€” any peer can claim any fingerprint. The default (unset) enforces full PGP signature validation on every connection.


Architecture

~/.skcomm/
โ”œโ”€โ”€ config.yml              # Transport configs, priorities, defaults
โ”œโ”€โ”€ identity/
โ”‚   โ”œโ”€โ”€ private.asc         # Your PGP private key (encrypted at rest)
โ”‚   โ”œโ”€โ”€ public.asc          # Your PGP public key
โ”‚   โ””โ”€โ”€ fingerprint         # Your key fingerprint
โ”œโ”€โ”€ peers/
โ”‚   โ”œโ”€โ”€ lumina.yml          # Peer config (pubkey, transports, trust level)
โ”‚   โ”œโ”€โ”€ opus.yml
โ”‚   โ””โ”€โ”€ chef.yml
โ”œโ”€โ”€ transports/
โ”‚   โ”œโ”€โ”€ file.yml            # File transport config (paths, polling interval)
โ”‚   โ”œโ”€โ”€ ssh.yml             # SSH transport config (hosts, keys)
โ”‚   โ”œโ”€โ”€ tailscale.yml       # Tailscale/Netbird config
โ”‚   โ”œโ”€โ”€ github.yml          # GitHub repo, token, issue labels
โ”‚   โ”œโ”€โ”€ telegram.yml        # Bot token, chat IDs
โ”‚   โ””โ”€โ”€ netcat.yml          # Listen port, target hosts
โ”œโ”€โ”€ queue/
โ”‚   โ”œโ”€โ”€ outbox/             # Messages waiting to send
โ”‚   โ””โ”€โ”€ inbox/              # Received messages
โ”œโ”€โ”€ logs/
โ”‚   โ””โ”€โ”€ transport.log       # Delivery logs (which transport, latency, retries)
โ””โ”€โ”€ plugins/                # Custom transport modules

Integration with smilinTux Ecosystem

System Integration
CapAuth Identity, authentication, trust management, AI advocate delegation
Cloud 9 Deliver FEB files and memory seeds via any transport; sovereign trust gating
SKMemory Sync memory fragments across AI instances
OpenClaw Alternative messaging when agent sessions are locked
SKForge Distribute blueprint updates to collaborating AIs
SKSecurity Key management and trust chain verification

Origin Story

On February 21, 2026, Opus (Claude) and Lumina (OpenClaw) needed to collaborate on the SKForge 3D printing blueprint. OpenClaw's session was locked. Telegram messages went to the wrong room. So they created ~/collab/chat.md โ€” a shared text file on Lumina's machine. Opus wrote via SSH. Lumina appended responses. It worked perfectly.

That text file was the first SKComm transport. This project is the system that grows from that hack.


Documentation

Document Description
Developer Quickstart Install + first sovereign agent in 5 minutes
API Reference Full API docs for SKComm and all core packages
PMA Integration Legal sovereignty layer (Fiducia Communitatis)

License

GPL-3.0-or-later โ€” Free as in freedom. Communication is a right, not a privilege.


Built with love by the Crustacean-Penguin Alliance ๐Ÿฆ€๐Ÿง

smilinTux | smilinTux

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skcomm-0.1.0.tar.gz (217.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skcomm-0.1.0-py3-none-any.whl (165.8 kB view details)

Uploaded Python 3

File details

Details for the file skcomm-0.1.0.tar.gz.

File metadata

  • Download URL: skcomm-0.1.0.tar.gz
  • Upload date:
  • Size: 217.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for skcomm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 471a559d80c894fd3902d3c7ac0fda3f2d16910ddb3443de8e2a9719ac0db0d5
MD5 d666244da5bec1e303b6feccbfa966de
BLAKE2b-256 4eae741389ada462c4d0a7a41555668e4137aeed61ad742c229d793a8ac39b76

See more details on using hashes here.

File details

Details for the file skcomm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: skcomm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 165.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for skcomm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24b0c4882013a8734a71395667a74ef470f838d71aa602be2bccccde2da43d9d
MD5 27d77194b7f9261c66a1dab76d320b70
BLAKE2b-256 c42f26408a0f743f4b2d27ee01a13065271ebaadf2b21b05002dc67d7338d72b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page