# Articles Index

Prior-art articles for SPT's networked-messaging stack. Each entry points to dense passages so future coding agents can skip token-heavy HTMLs. File paths below are relative to `docs/research/inspiration/articles/`.

## Quick lookup

| Topic | Best file |
|---|---|
| Rust-libp2p in production / bootstrap operator pattern | `blog-ipfs-tech-2023-rust-libp2p-based-ipfs-bootstrap-node.html` |
| Magic Wormhole / SPAKE2 pairing UX | `vlaicu-io-posts-wormhole.html` |
| Veilid model (DHT + onion + pubkey-as-ID) | `theregister-com-2023-08-12-veilid-privacy-data.html` |
| MCP protocol — what it is, what it isn't | `anthropic-com-news-model-context-protocol.html` |
| MCP 2025 roadmap (remote MCP, OAuth, agent trees) | `kdjingpai-com-en-anthropic-zhengshifaa.html` |
| A2A protocol architecture (AgentCard, Task, Message) | `ibm-com-think-topics-agent2agent-protocol.html` |
| Multi-agent frameworks (in-process orchestration, NOT transport) | `microsoft-github-io-autogen-0-2-docs-use-cases-agent-chat.html` |
| Yggdrasil mesh (Go daemon, IPv6 overlay) | `dev-to-byteknight-yggdrasil-network-join-the-global-mesh-1kcc.html` |
| Rust binary size shrinking technique (11MB → 4.5MB) | `dev-to-ahaoboy-i-shrunk-my-rust-binary-from-11mb-to-45mb-with-bloaty-metafile-1n7i.html` |
| UDP hole punching — concrete impl walkthrough | `oneuptime-com-blog-post-2026-03-20-udp-hole-punching-nat.html` |
| Tailscale homelab pitch (account dependency) | `antlatt-com-blog-tailscale-homelab-vpn.html` (UNAVAILABLE — 502 stub) |
| Arti / Tor in Rust release notes | `forum-torproject-org-t-arti-1-4-6-is-released.html` |

## Per-file entries

### blog-ipfs-tech-2023-rust-libp2p-based-ipfs-bootstrap-node.html
- **Title:** A Rusty Bootstrapper (Max Inden, IPFS blog, 2023-07-24)
- **Topic:** Running rust-libp2p-server on one of four public IPFS bootstrap nodes.
- **Takeaway:** rust-libp2p is production-ready at scale; one bootstrap node handles 30k+ concurrent connections, 40 Kademlia req/s, <300 KB/connection, low CPU. Validates rust-libp2p as a credible transport choice.
- **Dense passages:**
  - "IPFS Public DHT Bootstrap Nodes" — defines what a bootstrap node DOES (allow inbound, maintain Kademlia routing table, reply to FIND_NODE). Maps directly to what SPT would need for any DHT-based rendezvous.
  - Hardcoded `DefaultBootstrapAddresses` Go snippet + `_dnsaddr.bootstrap.libp2p.io` resolution flow — concrete evidence of the "soft centralization via hardcoded list" pattern the Brief flags as a libp2p tradeoff.
  - "Some Numbers" section — 15 new inbound conns/s, 30k concurrent, <300 KB/conn, low CPU. Establishes rust-libp2p scaling envelope for any agent that might worry about SPT relay cost.
  - FAQ: "Do I have to use the default bootstrap nodes? No — you can remove and add your own or use both." Direct quote supporting Brief's Open Question #2.
- **Tags:** rust, bootstrap, dht, overlay, bin-size (indirect via memory metrics)
- **Brief footnote refs:** [^13][^16]
- **Cross-refs:** see also `dev-to-ahaoboy-...-bloaty-metafile.html` (sizing libp2p binaries).

### vlaicu-io-posts-wormhole.html
- **Title:** Magic Wormhole — Deep Dive (Flaviu Vlaicu, 2025-11-19)
- **Topic:** SPAKE2-based short-code file transfer; protocol stack, PAKE, transit relay fallback, multi-impl ecosystem.
- **Takeaway:** Wormhole is the canonical UX for accountless, zero-config pairing — directly usable as SPT's `$OWL pair` ceremony. Rust impl exists (`magic-wormhole.rs`), single binary, protocol-compatible with Python/Go.
- **Dense passages:**
  - "The Protocol Stack" — three layers: Mailbox (WebSocket rendezvous, encrypted-blob-only), Transit Relay (NAT-fallback data path), Connection Negotiation (parallel: LAN-direct, WAN-direct, relayed). Blueprint for SPT's iroh+mDNS layering.
  - "Cryptographic Foundation: PAKE and SPAKE2" — how a low-entropy code yields a high-entropy shared key; 1-in-65,536 attacker odds per attempt; single-use. The trust model SPT needs to inherit if it adopts a short-code pairing.
  - "Wormhole Code System" — `[number]-[word]-[word]` (e.g., `7-guitarist-revenge`); tab-completion on receiver; phonetically-distinct wordlist. The UX template.
  - "Application Integration" — Tahoe-LAFS uses Wormhole for user invitations; lists "Peer-to-peer messaging setup", "Distributed system node initialization", "Mobile app pairing" as developer use cases. Validates SPT's intended pattern.
  - "Running Your Own Infrastructure" — `magic-wormhole-mailbox-server` and `magic-wormhole-transit-relay` are pip-installable; demonstrates the self-hostability path the Brief requires.
  - "Comparison vs WebRTC/SCP/Croc" — Wormhole sits in a different design space from WebRTC data channels; informs the Brief's "QUIC > WebRTC" call.
- **Tags:** identity, hole-punching, bootstrap, rust, agent-protocol (pairing), discovery
- **Brief footnote refs:** [^28][^29][^30][^34]
- **Cross-refs:** see also `oneuptime-...-udp-hole-punching-nat.html` (transit/relay fallback rationale), `theregister-...-veilid.html` (alternative pubkey-only identity model).

### theregister-com-2023-08-12-veilid-privacy-data.html
- **Title:** Cult of the Dead Cow unveils Veilid (The Register, Iain Thomson, 2023-08-12)
- **Topic:** Veilid launch coverage at DEF CON — Rust P2P framework, all-nodes-equal, Tor-IPFS hybrid.
- **Takeaway:** Validates Brief Rank-4: "Like Tor and IPFS had sex" — pubkey-only identity, no exit nodes, every node is equal. MPL-2.0, Rust core, cross-platform. Confirms it's not a single-operator system. Sets up the latency/bandwidth tradeoff the Brief flags.
- **Dense passages:**
  - "Veilid's design / source code" links + "written primarily in Rust" — confirms Rust-native, MPL-2.0, usable as a library.
  - DilDog quote: "IPFS was not designed with privacy in mind. Tor was, but it wasn't built with performance in mind. And when the NSA runs 100 [Tor] exit nodes, it can fail." Justifies why Veilid exists as its own category.
  - "Unlike Tor, Veilid doesn't run exit nodes. Each node in the Veilid network is equal" — supports Brief's claim that Veilid is genuinely multi-operator.
  - VLD0 crypto suite: XChaCha20-Poly1305, curve25519, x25519 DH, BLAKE3, Argon2. Useful when considering SPT's crypto layer.
  - "256-bit public key as an ID number" + "no special nodes, no single point of failure" — the identity primitive SPT needs.
- **Tags:** dht, identity, privacy, overlay, rust, mesh, bootstrap
- **Brief footnote refs:** [^21][^22][^26]
- **Cross-refs:** see also `dev-to-byteknight-yggdrasil...` (alternative mesh), `forum-torproject-...arti.html` (Tor in Rust).

### anthropic-com-news-model-context-protocol.html
- **Title:** Introducing the Model Context Protocol (Anthropic, 2024-11-25)
- **Topic:** MCP launch announcement — open standard, JSON-RPC, local servers, Claude Desktop integration.
- **Takeaway:** MCP is a tool/context standard, NOT a transport. Local-first (stdio/SSE), remote MCP is future work over HTTP. Confirms MCP does not solve any of SPT's hard requirements (NAT traversal, accountless identity, multi-machine P2P). Complementary at the protocol-surface layer only.
- **Dense passages:**
  - "Three major components: spec/SDKs, local MCP server support in Claude Desktop, open-source repo of MCP servers." Scopes MCP to local + curated remote — not P2P.
  - "Developers can either expose their data through MCP servers or build AI applications (MCP clients) that connect to these servers." Client-server architecture.
  - "We'll soon provide developer toolkits for deploying remote production MCP servers." Confirms remote MCP is server-side HTTP, not peer-to-peer.
- **Tags:** agent-protocol, none (transport-wise)
- **Brief footnote refs:** [^64][^65]
- **Cross-refs:** see also `kdjingpai-...-zhengshifaa.html` (MCP 2025 roadmap deepening this story), `ibm-com-...-agent2agent-protocol.html` (A2A as MCP's sibling).

### ibm-com-think-topics-agent2agent-protocol.html
- **Title:** What Is Agent2Agent (A2A) Protocol? (IBM Think, Caballar & Stryker)
- **Topic:** Google-launched A2A protocol; client-server HTTP messaging tier between heterogeneous agents.
- **Takeaway:** A2A is HTTP client-server with AgentCards advertised via URL. Enterprise-oriented, no P2P addressing, no NAT traversal, no accountless identity. Confirms Brief's disqualification: A2A is not a transport for SPT — it's a protocol that could ride on top of SPT.
- **Dense passages:**
  - "A2A server exposes an HTTP endpoint" + "Agent card... accessed using a URL" — explicit confirmation that A2A presupposes URL-reachable servers. Not P2P.
  - "Core architectural components: A2A client/server, Agent Card, Task, Message, Artifact, Part" — concrete vocabulary SPT could mirror or wrap if it wants A2A-compatible surface.
  - "Agent cards are similar to model cards... business card / résumé / LinkedIn profile that allows agents to discover each other." Discovery primitive — could inform SPT's perch metadata schema.
  - "Both protocols [MCP & A2A] are meant to complement each other" — frames the layering for SPT (transport ≠ protocol).
  - Three-step workflow: Discovery → Authentication → Communication. Same three-stage problem SPT solves at a lower layer.
- **Tags:** agent-protocol, discovery, identity (URL-based)
- **Brief footnote refs:** [^66][^67]
- **Cross-refs:** see also `anthropic-...-mcp.html`, `microsoft-...-autogen.html`.

### microsoft-github-io-autogen-0-2-docs-use-cases-agent-chat.html
- **Title:** Multi-agent Conversation Framework (AutoGen 0.2 docs)
- **Topic:** AutoGen's ConversableAgent abstraction — multi-agent chat, AssistantAgent/UserProxyAgent, group chats, FSM topologies.
- **Takeaway:** AutoGen runs in a single process (or via HTTP); assumes a shared runtime. Says nothing about cross-machine transport. Reinforces Brief's claim that orchestration frameworks do not address SPT's problem.
- **Dense passages:**
  - "ConversableAgent class for Agents that are capable of conversing with each other through the exchange of messages" — defines AutoGen's in-memory message model.
  - "Hierarchical chat (OptiGuide), Dynamic Group Chat, Finite State Machine graphs to set speaker transition constraints" — taxonomy of multi-agent topologies SPT may want to support at a higher layer.
  - `user_proxy.initiate_chat(assistant, message=...)` code sample — Python in-process, no transport layer visible. Evidence for the gap.
- **Tags:** agent-protocol, none (transport)
- **Brief footnote refs:** [^68]
- **Cross-refs:** see also `ibm-...-agent2agent-protocol.html`.

### kdjingpai-com-en-anthropic-zhengshifaa.html
- **Title:** Anthropic Officially Releases MCP Protocol 2025 Semi-Annual Roadmap
- **Topic:** MCP H1-2025 roadmap — remote connections, OAuth2 auth, service discovery, sandboxing, server registry, hierarchical agents.
- **Takeaway:** Confirms MCP's evolution is server-registry + OAuth + HTTP, not P2P. "Hierarchical proxy system" via namespaces + topology awareness is interesting prior art for SPT's perch-tree model.
- **Dense passages:**
  - "Remote MCP Connection... clients to connect securely over the Internet to MCP Servers. Authentication and authorization (OAuth 2.0), Service discovery, Stateless operation." Confirms direction = server-based, not P2P.
  - "Distribution and Discovery: package management, installation tool, sandbox, server registry." Centralized discovery path.
  - "Agent Support — hierarchical proxy system, namespace and topology awareness, interactive workflow, streaming results." This is the closest MCP gets to SPT's domain; SPT could provide the transport substrate.
  - "Modal extra — audio, video and other formats." Hints SPT messages may need to handle multimedia parts.
- **Tags:** agent-protocol, discovery, identity
- **Brief footnote refs:** [^69]
- **Cross-refs:** see also `anthropic-...-mcp.html`.

### dev-to-byteknight-yggdrasil-network-join-the-global-mesh-1kcc.html
- **Title:** Yggdrasil Network — Join the Global Mesh (DEV.to, ByteKnight, 2025-08-27)
- **Topic:** Yggdrasil quickstart: install daemon, `addPeer` to public peer, ping mesh IPv6.
- **Takeaway:** Confirms Yggdrasil disqualification (Go daemon, requires install + peer config). Article shows the operator UX cost: `sudo yggdrasilctl addPeer uri=tcp://...` is exactly the kind of friction SPT must avoid. Tor-over-Yggdrasil pattern (comment) noted as anonymity tier.
- **Dense passages:**
  - `sudo yggdrasilctl addPeer uri=tcp://51.15.204.214:12345` — concrete evidence of "manual public peers" friction (Brief footnote 45/46).
  - "end-to-end encrypted IPv6 overlay... self-healing, decentralized mesh... lightweight, transport-agnostic, operates without central servers" — accurate positioning but elides the daemon-install cost.
  - Comment: peer via `socks://127.0.0.1:9050/...onion:5222` — Yggdrasil-over-Tor pattern; could inform SPT's optional anonymity tier.
- **Tags:** mesh, overlay, vpn, bootstrap, privacy
- **Brief footnote refs:** [^45][^46]
- **Cross-refs:** see also `theregister-...veilid.html`, `forum-torproject-...arti.html`.

### dev-to-ahaoboy-i-shrunk-my-rust-binary-from-11mb-to-45mb-with-bloaty-metafile-1n7i.html
- **Title:** I shrunk my Rust binary from 11MB to 4.5MB with bloaty-metafile (阿豪, 2025-11-09)
- **Topic:** Concrete Rust binary-shrinking recipe using bloaty-metafile + per-dep feature pruning.
- **Takeaway:** Directly actionable for SPT's "single static binary" constraint. The 4 MB savings from `native-tls → rustls-tls` is the single biggest lever; tokio/clap/regex/reqwest feature-pruning recipe is reusable.
- **Dense passages:**
  - "[profile.release] debug=false, lto=true, strip=true, opt-level=3, codegen-units=1, panic='abort'" — baseline release profile. SPT should adopt verbatim.
  - "reqwest = { features = ['json','rustls-tls','gzip'], default-features = false } — saved ~4MB" — biggest single win. If SPT pulls reqwest (or any TLS-using dep transitively), do this.
  - "tokio = { features = ['macros','rt-multi-thread'], default-features = false } — saved ~100KB" — directly relevant because iroh/quinn both pull tokio.
  - "clap features = ['derive','std'], default-features=false — Saved 100-200KB" — applicable to SPT's `$OWL` CLI.
  - "regex default-features=false features=['std'] — Saved ~1MB" — Unicode tables are huge.
  - "80/20 rule — optimizing a few key dependencies can yield massive savings." General principle.
- **Tags:** rust, bin-size
- **Brief footnote refs:** [^71]
- **Cross-refs:** see also `blog-ipfs-...rust-libp2p-bootstrap.html` (memory profile baseline).

### oneuptime-com-blog-post-2026-03-20-udp-hole-punching-nat.html
- **Title:** How to Implement UDP Hole Punching for NAT Traversal (Nawaz Dhandala, OneUptime, 2026-03-20)
- **Topic:** Step-by-step UDP hole punching with Python rendezvous server + client; NAT type taxonomy.
- **Takeaway:** Most concrete walkthrough in the corpus. Useful as a reference implementation when SPT needs to validate iroh/quinn behavior or build a fallback hole-puncher. Clearly enumerates the symmetric-NAT failure mode (the Brief's CGNAT open question).
- **Dense passages:**
  - "Step 1-4 protocol description" — both peers register external addrs with rendezvous; server cross-introduces; both send simultaneously; holes open. Canonical 4-step pattern.
  - Python rendezvous-server source (~25 lines) — minimal viable rendezvous. SPT can adapt as a fallback signaling layer.
  - Hole-punch client source — uses 5x send burst with 100ms gaps; demonstrates the "overcome initial NAT state" pattern.
  - "NAT Type Detection — Full Cone: easy. Address-Restricted: works. Port-Restricted: works with simultaneous timing. Symmetric: difficult." Validates Brief's tradeoff narrative; ties to STUN.
  - Closing: "For symmetric NAT, TURN (relay) servers are the fallback." Justifies iroh's relay-fallback architecture.
- **Tags:** nat-traversal, hole-punching, transport, bootstrap
- **Brief footnote refs:** [^87]
- **Cross-refs:** see also `vlaicu-...wormhole.html` (transit relay parallel).

### antlatt-com-blog-tailscale-homelab-vpn.html
- **Title:** Tailscale: The Zero-Config VPN Your Homelab Needs (UNAVAILABLE)
- **Topic:** Intended: Tailscale homelab pitch.
- **Takeaway:** **File contents are just `error code: 502` (15 bytes) — fetch failed.** No usable content. Brief's footnote [^58] should be re-fetched if Tailscale-specific evidence is needed; otherwise rely on Brief's existing disqualification (Tailscale requires SSO account → fails hard-req #2).
- **Dense passages:** none (stub)
- **Tags:** vpn, mesh, none
- **Brief footnote refs:** [^58]
- **Cross-refs:** Brief §2.6 covers the same ground without this source.

### forum-torproject-org-t-arti-1-4-6-is-released.html
- **Title:** Arti 1.4.6 is released: Hidden Service resilience (Tor Project Forum, Diziet, 2025-08-05)
- **Topic:** Arti 1.4.6 release notes — Hidden Service hardening, Conflux multi-leg tunnels, Proposal 359/362.
- **Takeaway:** Confirms Arti is active and usable in Rust on Windows. Hidden Service maturity is the relevant news for SPT's optional anonymity tier (`tor-hsservice`). Latency tradeoffs still hold (Brief disqualifies as primary transport).
- **Dense passages:**
  - "Arti is our ongoing project to create a next-generation Tor client in Rust." Existence/quality claim.
  - "Improvements for Onion Service (Hidden Service) operators — Proposal 362 DoS resistance, experimental utility for migrating HS identity key from C Tor keystore to Arti." Direct relevance to SPT-as-hidden-service.
  - "xon-based flow control (Proposal 324), Conflux multi-legged tunnels, Counter Galois Onion (Proposal 359)." Performance-frontier work suggesting Tor latency will improve.
  - User-reported transcript: `arti proxy` starts in seconds on Windows 11, listens on 127.0.0.1:9150. Validates Windows-native usability.
- **Tags:** privacy, transport, rust, bootstrap
- **Brief footnote refs:** [^56][^86]
- **Cross-refs:** see also `theregister-...veilid.html`.

## Themes

### NAT traversal / P2P transport (core)
- `oneuptime-...-udp-hole-punching-nat.html` — concrete hole-punch reference impl
- `vlaicu-...wormhole.html` — mailbox + transit-relay layering pattern
- `blog-ipfs-...rust-libp2p-bootstrap.html` — production scale data for rust-libp2p

### Identity / pairing UX
- `vlaicu-...wormhole.html` — SPAKE2 short-code, the canonical UX
- `theregister-...veilid.html` — pubkey-as-identity, no registration
- `ibm-com-...-agent2agent-protocol.html` — AgentCard as discovery primitive (URL-based, not P2P)

### Overlay networks / mesh / VPN
- `dev-to-byteknight-yggdrasil...` — IPv6 mesh, Go daemon (disqualified but illustrates the friction)
- `theregister-...veilid.html` — Veilid as all-equal-nodes overlay
- `antlatt-...-tailscale...` (unavailable) — would have been the account-required counterexample
- `forum-torproject-...arti.html` — Tor / Hidden Services as anonymity tier

### Agent protocols (not transport)
- `anthropic-...-mcp.html` — MCP launch
- `kdjingpai-...zhengshifaa.html` — MCP roadmap toward remote/registry
- `ibm-com-...-agent2agent-protocol.html` — A2A architecture
- `microsoft-...-autogen.html` — in-process multi-agent orchestration

### Rust ecosystem hygiene
- `dev-to-ahaoboy-...bloaty-metafile.html` — binary size recipe (rustls-tls is biggest win)
- `blog-ipfs-...rust-libp2p-bootstrap.html` — rust-libp2p production-readiness signal
- `forum-torproject-...arti.html` — Arti production readiness, Windows-native

### Bootstrap / centralization tradeoffs
- `blog-ipfs-...rust-libp2p-bootstrap.html` — hardcoded list pattern + opt-out
- `dev-to-byteknight-yggdrasil...` — manual public peer addition
- `theregister-...veilid.html` — DNS-once-then-DHT bootstrap claim
- `oneuptime-...-udp-hole-punching-nat.html` — minimal rendezvous server pattern
