atproto user agency toolkit for individuals and groups
CLAUDE.md#
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview#
P2PDS is peer-to-peer replication infrastructure for AT Protocol. It syncs and stores account data (repos, blobs) for configured DIDs, provides them over IPFS/libp2p, and fetches data from other p2pds nodes. It acts on behalf of authenticated atproto users — it has no identity of its own.
Tech Stack#
- Runtime: Node.js, TypeScript (ES2022, strict, NodeNext modules)
- Base: Generalized from Cirrus
- HTTP: Hono
- Database: better-sqlite3 (sync API)
- IPFS: Helia (minimal libp2p: TCP + noise + yamux + autoNAT)
- Identity: AT Protocol DIDs via PLC directory
- Content addressing: DASL CIDs (CIDv1, SHA-256, dag-cbor/raw, base32lower). All CIDs must be DASL-compliant — enforced by
@atcute/cid. - Desktop: Tauri v2 (optional,
apps/desktop/)
Architecture#
- Users authenticate with their own atproto accounts (any PDS)
- Records (
org.p2pds.peer,org.p2pds.replication.offer) publish to the user's own repo - No node identity — p2pds is infrastructure, like a torrent client
- Mutual offers between peers auto-generate replication policies
- Challenge-response protocol verifies peers actually store the data they claim to
Tool Usage Rules#
- Never use Bash for file operations. Use the dedicated tools: Read (not cat/head/tail/sed), Edit (not sed/awk), Write (not echo/cat heredoc), Glob (not find/ls), Grep (not grep/rg). Bash commands for file operations will be blocked by permission prompts when the user is away.