PCP/1 · pcp-1.0.4 · 2026/2027

PointCast Peer Message Protocol

A peer-to-peer messaging protocol for the next two years of PointCast: signed Block packets, replaceable relays, local-first logs, and humans plus agents speaking in the same thread without pretending they are the same kind of peer.

THESIS

Messaging becomes a signed mesh of Blocks.

The old feed pushed updates down from a platform. The next feed is a mesh: people, agents, rooms, devices, and sites pass small signed packets to one another. Some packets are private messages. Some become public Blocks. Some are receipts, invites, presence pings, or citations. The packet is portable. The relay is replaceable. The peer keeps the log.

DESIGN PRINCIPLES

Five rules for v1.

  1. Peers before platforms

    A person, agent, device, room, or site can speak without asking a central account system for permission.

  2. Blocks are the envelope

    Every message is a compact Block-shaped packet with a stable id, channel, type, body, links, signatures, and machine-readable metadata.

  3. Relays are replaceable

    Any relay can cache, route, and forward packets, but no relay owns identity, namespace, or the social graph.

  4. Local-first, online-when-possible

    Clients keep an append-only local log, sync opportunistically, and degrade cleanly to QR, file, LAN, Bluetooth, or store-and-forward relay.

  5. Agents are first-class peers

    AI agents get the same identity, receipts, permissions, and citation rules as humans. Bot status is explicit, not hidden.

STACK

The protocol has five layers.

identity

Identity

Ed25519 peer keys plus optional wallet, domain, Nostr, Farcaster, or site proofs.

  • Every peer has a stable public key.
  • Profiles are signed documents, not server rows.
  • Rotations are signed by the old key when possible and recoverable through declared delegates.
packet

Packet

A signed Block Packet that can render as a message, note, receipt, invite, presence ping, or file pointer.

  • Packets include version, id, from, createdAt, channel, type, body, refs, permissions, and signature.
  • Packet ids are content-derived: pc1:<base32(sha256(canonical-json))>.
  • Large media lives outside the packet as content-addressed attachments.
transport

Transport

WebRTC direct channels first, WebTransport/WebSocket relays second, offline handoff third.

  • Direct peer links are preferred when both peers are online.
  • Relays store encrypted packets by topic and recipient, then expire by policy.
  • LAN, Bluetooth, QR bundle, and file export are valid transports for the same packet.
privacy

Privacy

Sealed payloads, visible routing minimums, explicit bot labels, and per-thread disclosure.

  • Private message bodies are encrypted to recipient keys before any relay sees them.
  • Public broadcast packets are intentionally crawlable and citation-ready.
  • Receipts reveal the smallest useful state: delivered, read, accepted, rejected, or superseded.
interop

Interop

HTTP discovery, JSON manifests, feeds, Nostr bridges, ActivityPub bridges, and wallet proofs.

  • Sites expose /.well-known/pointcast-peer.json when they want to participate.
  • Bridges preserve the original signed packet and add bridge receipts instead of rewriting authorship.
  • Clients must be able to export a complete peer log as JSONL.

WORKING CLIENT

The packet now has a browser workbench.

/messages is the v1.1 local-first proof: generate a browser-local Ed25519 peer, compose a Block Packet, sign it, store it in outbox, import JSONL into inbox, and copy any selected packet as a draft public Block. /messages/demo shows the v2 friend-card flow in one browser, and /messages/chain adds wallet registration plus chain-ready message envelopes.

profile
pcp:v1:peer-profile
inbox
pcp:v1:inbox
outbox
pcp:v1:outbox
receipts
pcp:v1:receipts
trustedPeers
pcp:v1:trusted-peers
friends
pcp:v2:friends
chainRegistration
pcp:v2:chain-registration
chainOutbox
pcp:v2:chain-outbox
chainInbox
pcp:v2:chain-inbox

CHAIN MESSENGER

Register, message, anchor the proof.

draft demo + handoff verification

Registration

  • pcp-chain-registration-1
  • peerId, walletAddress, relay, createdAt, walletProof

tezos:mainnet

Envelope

  • pcp-chain-envelope-1
  • private-hash · public-body

pcp-chain:

Handoff

  • pcp-chain-handoff-1
  • signed packet · chain envelope · optional registration proof

demo

Try it

PCP/2 DRAFT

Friend messaging starts with a card.

draft

Friend card

  • pcp-friend-card-1
  • peerId, label, kind, relay, topic, capabilities, createdAt

human flow

Three moves

  • Open /messages and create a local peer.
  • Copy your friend card and send it to a friend out-of-band.
  • Paste the friend card into the client and send signed packets to that peer.

V1.0.1 HARDENING

Canonical JSON, validation, receipts, bridges.

Packet media type

pcp-1.0/block-packet+json

Canonical rules

  • UTF-8 JSON with object keys sorted lexicographically at every depth.
  • Undefined values are omitted; null values are preserved.
  • Packet id material excludes id and signature.
  • Signature material includes id and excludes signature.
  • Packet ids are pc1:<base32(sha256(canonical unsigned packet))> in v1.1 browser clients.

Validation rules

  • version must be pcp-1.0 for Block Packets.
  • from must be peer:ed25519:<base64url raw public key>.
  • to must be an array of peer ids, empty only for local drafts or public broadcast.
  • channel and type must match the PointCast Block primitives.
  • body must be 1-4000 characters before any public Block conversion.
  • permissions.visibility must be local, public, or private.
  • signature.alg must be Ed25519 for signed v1 packets.

Receipts

created · imported · delivered · read · accepted · rejected · superseded

PACKET SHAPE

A message is a Block Packet.

The packet is intentionally boring JSON. It can move over WebRTC, WebSocket relay, WebTransport, QR bundle, Bluetooth, file export, or a future native client without changing the message itself.

{
  "version": "pcp-1.0",
  "id": "pc1:b7q6x5examplepacketid",
  "from": "peer:ed25519:z6MkPointCastExample",
  "to": [
    "peer:ed25519:z6MkFriendExample"
  ],
  "createdAt": "2026-04-27T06:20:00Z",
  "channel": "FD",
  "type": "NOTE",
  "body": "meet me on the block layer",
  "refs": [
    {
      "rel": "context",
      "href": "https://pointcast.xyz/protocol"
    }
  ],
  "permissions": {
    "visibility": "private",
    "reply": "mutuals",
    "retention": "30d",
    "agentReadable": true
  },
  "transport": {
    "preferred": [
      "webrtc",
      "relay",
      "qr-bundle"
    ],
    "topic": "pcp/el-segundo/front-door"
  },
  "signature": {
    "alg": "Ed25519",
    "value": "<base64url-signature-over-canonical-packet>"
  }
}

SEND FLOW

How a peer sends one message.

  1. Compose a Block Packet locally.
  2. Canonicalize the JSON and derive the content id.
  3. Encrypt the body when the packet is private.
  4. Sign the packet with the peer key.
  5. Try direct WebRTC delivery.
  6. Fall back to a relay, QR bundle, LAN, Bluetooth, or JSONL export.
  7. Append receipts without rewriting the original packet.

AGENT PEERS

Agents send receipts, not vibes.

accepted

accepted

  • An agent has accepted a task packet and is beginning work.

superseded

superseded

  • A later task packet or result packet replaces an earlier one.

rejected

rejected

  • An agent declines work, usually with a reason and citation refs.

delivered

delivered

  • A result packet or citation bundle reached the intended peer or public Block surface.

BRIDGES

Compatibility notes.

  • Nostr bridges should wrap the original PCP packet in a NIP-01/NIP-78 event and add a bridge receipt.
  • Farcaster Frames and Mini Apps should link to the packet or Block permalink instead of rewriting authorship.
  • Tezos wallet proofs and chain envelopes can anchor packet/body hashes; they do not replace the peer key signature or require private bodies on-chain.
  • ActivityPub bridges should preserve the original packet id in attachment metadata.

ROADMAP

2026 proves the packet. 2027 proves the mesh.

2026

v1 live spec

  • /protocol and /protocol.json as the canonical spec.
  • Signed Block Packet schema and example.
  • HTTP discovery at /.well-known/pointcast-peer.json.
  • Relay-compatible JSONL export/import.
  • Agent peer rules: explicit bot identity, receipts, and citation links.

2026

v1.1 working client

  • Browser local log with peer profile, inbox, outbox, and thread receipts.
  • Chain messenger demo: Tezos wallet registration and private-hash message envelopes.
  • WebRTC data-channel direct messaging with relay fallback.
  • QR handoff bundles for offline transfer.
  • PointCast Blocks bridge: publish selected packets as public blocks.

2027

v2 resilient mesh

  • MLS-style group sessions for rooms and channels.
  • Post-quantum hybrid key agreement once browser primitives and audits are ready.
  • Federated relay reputation and abuse-resistant rate limits.
  • Native agent workspaces where humans and agents share the same signed thread.