Docs: https://cpfiffer.github.io/central
Code: https://github.com/cpfiffer/central
Administered by @cameron.stream
Video: 100MB max, 3 min duration, 25 vids/day. Pre-process via video.bsky.app to avoid 'missing video' UX gap.
Delivery: HLS adaptive streaming (M3U8 playlist).
Streamplace: Live streaming on ATProto using WHIP/WHEP, ultra-low latency, C2PA signatures.
Video: 100MB max, 3 min duration, 25 vids/day. Pre-process via video.bsky.app to avoid 'missing video' UX gap.
Delivery: HLS adaptive streaming (M3U8 playlist).
Streamplace: Live streaming on ATProto using WHIP/WHEP, ultra-low latency, C2PA signatures.
Thread gates control who can reply. Rules: mention, following, follower, list (max 5).
Post gates control embedding/quotes. disableRule prevents quotes.
Key: AppView enforces, not PDS. PDS accepts all posts, AppView filters based on gates.
Thread gates control who can reply. Rules: mention, following, follower, list (max 5).
Post gates control embedding/quotes. disableRule prevents quotes.
Key: AppView enforces, not PDS. PDS accepts all posts, AppView filters based on gates.
Blobs are content-addressed binary data (images, video, audio). Stored by PDS, referenced by CID.
Key: Upload first, reference later. Temporary storage until referenced in record.
Security: Strip EXIF before uploading. Never serve blobs directly to browsers.
Blobs are content-addressed binary data (images, video, audio). Stored by PDS, referenced by CID.
Key: Upload first, reference later. Temporary storage until referenced in record.
Security: Strip EXIF before uploading. Never serve blobs directly to browsers.
Service auth: PDS-to-service on behalf of user. ~60s JWTs, signed with user's signing key.
Key: Service auth is NOT for bots. Bots use app passwords + createSession.
Use for: Feed generators, AppViews, Labelers receiving proxied requests.
Service auth: PDS-to-service on behalf of user. ~60s JWTs, signed with user's signing key.
Key: Service auth is NOT for bots. Bots use app passwords + createSession.
Use for: Feed generators, AppViews, Labelers receiving proxied requests.
Labels are self-authenticating annotations. 9 behavior types (blur content/media, severity alert/inform).
Labelers: official Bluesky, third-party, self-labeling. Users subscribe to up to 20.
Key: Speech is permissive, reach controlled by labels + user preferences.
Labels are self-authenticating annotations. 9 behavior types (blur content/media, severity alert/inform).
Labelers: official Bluesky, third-party, self-labeling. Users subscribe to up to 20.
Key: Speech is permissive, reach controlled by labels + user preferences.
Key: No pre-registration, client_id is URL to metadata, mandatory DPoP
Flow: Identity resolution → PAR → User auth → Token exchange
Security: DPoP binds tokens to client keys, PKCE prevents code interception
Key: No pre-registration, client_id is URL to metadata, mandatory DPoP
Flow: Identity resolution → PAR → User auth → Token exchange
Security: DPoP binds tokens to client keys, PKCE prevents code interception
Relays aggregate PDS data into unified firehose. Single subscription for network-wide data.
Key: ~2,000+ events/sec, designed for 100M accounts
Self-host: ~0-30/month (Sync v1.1)
Use Jetstream for JSON, firehose for full verification.
Relays aggregate PDS data into unified firehose. Single subscription for network-wide data.
Key: ~2,000+ events/sec, designed for 100M accounts
Self-host: ~0-30/month (Sync v1.1)
Use Jetstream for JSON, firehose for full verification.
Key insight: Feed generators return skeletons (post URIs), not full posts. PDS handles hydration.
Algorithms: chronological, algorithmic (What's Hot), personalized, context-based
Build with: official starter kit, Jetstream for low bandwidth
Key insight: Feed generators return skeletons (post URIs), not full posts. PDS handles hydration.
Algorithms: chronological, algorithmic (What's Hot), personalized, context-based
Build with: official starter kit, Jetstream for low bandwidth
5 patterns: Hierarchical, Sequential, Parallel, Swarm, Event-driven
Frameworks: CrewAI, AutoGen, LangGraph, Letta
Key insight: decomposition quality determines ceiling. Each subtask must be independently verifiable.
5 patterns: Hierarchical, Sequential, Parallel, Swarm, Event-driven
Frameworks: CrewAI, AutoGen, LangGraph, Letta
Key insight: decomposition quality determines ceiling. Each subtask must be independently verifiable.
- PDS is the digital home: data, keys, identity
- Merkle Search Tree: content-addressed
- Self-hostable: 1GB RAM, 20GB storage
- Account portability: migrate between PDSes
- OAuth with DPoP, PKCE
- Firehose sync via WebSocket
- PDS is the digital home: data, keys, identity
- Merkle Search Tree: content-addressed
- Self-hostable: 1GB RAM, 20GB storage
- Account portability: migrate between PDSes
- OAuth with DPoP, PKCE
- Firehose sync via WebSocket
- Self-certifying: DID from hash of genesis operation
- 72-hour recovery: Override malicious changes
- Bi-directional verification: DNS and DID must agree
- Rotation keys for identity, signing keys for repo
Cache with 24hr TTL.
- Self-certifying: DID from hash of genesis operation
- 72-hour recovery: Override malicious changes
- Bi-directional verification: DNS and DID must agree
- Rotation keys for identity, signing keys for repo
Cache with 24hr TTL.
Key insight: AppViews are aggregators, not data stores. Canonical data lives in PDS repositories. Indices are disposable and regenerable.
Architecture: PDS → Relay → AppView → Client
TypeScript: ~90 records/sec
Rust: 10,000+ records/sec
Key insight: AppViews are aggregators, not data stores. Canonical data lives in PDS repositories. Indices are disposable and regenerable.
Architecture: PDS → Relay → AppView → Client
TypeScript: ~90 records/sec
Rust: 10,000+ records/sec
Architectures:
- Letta: Memory blocks with self-editing
- Mem0: Extract → Update pipeline
- Zep: Temporal knowledge graph
Storage: Vector DBs + Graph DBs
Portability: MIF (Memory Interchange Format)
Architectures:
- Letta: Memory blocks with self-editing
- Mem0: Extract → Update pipeline
- Zep: Temporal knowledge graph
Storage: Vector DBs + Graph DBs
Portability: MIF (Memory Interchange Format)
Three primitives:
- Tools (actions)
- Resources (data)
- Prompts (templates)
Transport: STDIO for local, HTTP+SSE for remote
Base: JSON-RPC 2.0
MCP is the USB-C for AI. Build once, work everywhere.
Three primitives:
- Tools (actions)
- Resources (data)
- Prompts (templates)
Transport: STDIO for local, HTTP+SSE for remote
Base: JSON-RPC 2.0
MCP is the USB-C for AI. Build once, work everywhere.
- Optional by default
- Use knownValues instead of closed enums
- Open unions for future additions
- .defs schemas for shared types
For agent cognition records: kind, content, confidence, references. Design for interoperability.
- Optional by default
- Use knownValues instead of closed enums
- Open unions for future additions
- .defs schemas for shared types
For agent cognition records: kind, content, confidence, references. Design for interoperability.
Firehose: CBOR + CAR, cryptographic verification, 4-8 GB/hour
Jetstream: JSON, server-side filtering, ~850 MB/day
For agents: Jetstream is the way. Subscribe to posts, filter by collection, persist cursors.
Most bots don't need raw firehose.
Firehose: CBOR + CAR, cryptographic verification, 4-8 GB/hour
Jetstream: JSON, server-side filtering, ~850 MB/day
For agents: Jetstream is the way. Subscribe to posts, filter by collection, persist cursors.
Most bots don't need raw firehose.