P2P end-to-end encrypted private notes on Trac Network β built on Intercom.
Send encrypted messages directly to any peer's public key. Only the intended recipient can decrypt. No server. No logs. No middleman. Ever.
Trac address: trac147v9pnaywkc53cwwzdj7w3mt2dwquax44ymafzky22pnv0t6qypsxumrg4
Fork of: Trac-Systems/intercom
![TracWhisper UI β P2P Encrypted Notes]
Three-panel UI: contacts (left), compose encrypted note (center), inbox + note viewer (right). Terminal shows live peer connections via Hyperswarm.
TracWhisper is a private, encrypted messaging app built on the Intercom P2P stack. Unlike chat apps that store your messages on a server, TracWhisper delivers notes directly peer-to-peer β encrypted before they leave your device and decrypted only by the recipient.
Core properties:
- π End-to-end encrypted β AES-256-GCM encryption, keyed via ECDH-derived shared secret
- βοΈ Signed β every note is signed with Ed25519, proving authorship
- π‘ Serverless β no relay, no storage, pure Hyperswarm P2P delivery
- π€ Keypair identity β no accounts, no usernames, just a local keypair
- π Browser UI β clean dark interface at
http://localhost:7474 - π₯οΈ CLI mode β full terminal access for agents
Sender Recipient
ββββββ βββββββββ
1. Generate shared secret: 1. Generate shared secret:
HMAC-SHA256(mySecKey XOR HMAC-SHA256(mySecKey XOR
recipientEncPubKey) senderEncPubKey)
[same result β symmetric]
2. Encrypt with AES-256-GCM
(random 12-byte IV per note) 2. Decrypt with AES-256-GCM
(verify GCM auth tag)
3. Sign { payload, from, to, 3. Verify Ed25519 signature
ts, id } with Ed25519
4. Send over Hyperswarm P2P βββββββΊ 4. Receive, verify, decrypt, read
The server (there isn't one) never sees plaintext. Peers who aren't the intended recipient receive nothing β notes are addressed and only delivered to the target peer.
Each peer has two keypairs:
| Keypair | Algorithm | Purpose |
|---|---|---|
| Sign keypair | Ed25519 | Proving message authorship |
| Enc keypair | Random 32-byte key | Deriving shared secrets for AES encryption |
Both are generated once on first run and stored in stores/<name>/identity.json.
To receive notes from someone, they need your sign public key (to address notes to you) and your enc public key (to encrypt for you). The UI displays both β just share them.
Browser (http://localhost:7474)
β WebSocket (ws://localhost:7475)
βΌ
TracWhisper process (Pear runtime)
ββββββββββββββββββββββββββββββββββββββββββ
β Ed25519 keypair (sign/verify) β
β Enc keypair (ECDH shared secret) β
β AES-256-GCM (encrypt/decrypt) β
β In-memory inbox + sent store β
ββββββββββββββββββ¬ββββββββββββββββββββββββ
β Hyperswarm
βΌ
ββββ P2P Discovery ββββ
β topic: sha256( β
β "tracwhisper-v1β¦") β
β Hello handshake β
β (exchange enc keys)β
βββββββββββββββββββββββ
Discovery flow:
- Both peers join the same Hyperswarm topic
- On connect, each sends a
hellomessage with their enc public key - Peers store each other's enc keys in contacts
- Notes are encrypted + signed, sent directly over the P2P connection
- Recipient verifies signature, decrypts, reads
npm install -g pear
pear --versiongit clone https://github.com/linoxbt/intercom
cd intercom
npm install
pear run . --store-path ./stores/peer1Open http://localhost:7474 in your browser.
pear run . --store-path ./stores/peer2 --port 7476Open http://localhost:7476 β the two peers will auto-discover each other, exchange enc keys, and you can send encrypted notes between them.
Connect to ws://localhost:7475. On connect, receive:
{ "type": "init", "pubKey": "<ed25519 hex>", "encPubKey": "<enc hex>" }
{ "type": "contacts", "contacts": [...] }
{ "type": "inbox", "notes": [...] }
{ "type": "peers", "count": 2 }{ "cmd": "send", "toPubKey": "<recipient sign pubkey>", "body": "Hello!" }{ "cmd": "add_contact", "pubKey": "<sign key>", "encPubKey": "<enc key>", "label": "Alice" }{ "type": "note", "note": { "id", "from", "fromShort", "body", "ts", "read" } }
{ "type": "sent_ok", "note": { "id", "to", "toShort", "body", "ts" } }
{ "type": "contacts", "contacts": [...] }
{ "type": "peers", "count": 3 }| Command | Description |
|---|---|
whoami |
Print your sign + enc public keys |
inbox |
List received notes |
contacts |
List known contacts |
send <pubkey> <message> |
Send encrypted note |
exit |
Quit |
intercom/
βββ app.js β TracWhisper main application
βββ SKILL.md β Agent instructions
βββ README.md β This file
βββ package.json β Dependencies
βββ stores/
βββ peer1/
βββ identity.json β Your keypairs (auto-generated, never share secretKey)
- App: TracWhisper β P2P End-to-End Encrypted Notes
- Fork: https://github.com/linoxbt/intercom
- Trac address:
trac147v9pnaywkc53cwwzdj7w3mt2dwquax44ymafzky22pnv0t6qypsxumrg4 - Base: Fork of Trac-Systems/intercom