claude up some atproto stuff
9
fork

Configure Feed

Select the types of activity you want to include in your feed.

add microcosm API quick reference as progressive disclosure

consolidated endpoint tables, param details, response shapes, and
source format values for all four Microcosm services in one reference
file. loaded on demand when Claude is actually building with the APIs,
not on every skill activation.

follows agentskills.io progressive disclosure pattern: SKILL.md is the
overview, references/ has the dense material Claude pulls when needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

zzstoatzz 07961ff1 177909df

+87
+4
skills/app-patterns/SKILL.md
··· 40 40 41 41 **Requires auth or is heavily rate-limited:** `app.bsky.feed.searchPosts`, `app.bsky.feed.getTimeline`, `app.bsky.notification.*` 42 42 43 + ## API reference 44 + 45 + For endpoint tables, parameter details, response shapes, and source format values across all Microcosm services, see [references/microcosm-api.md](references/microcosm-api.md). 46 + 43 47 ## notes 44 48 45 49 - all Microcosm services are unauthenticated and support CORS — safe to call directly from client-side apps
+83
skills/app-patterns/references/microcosm-api.md
··· 1 + # microcosm API quick reference 2 + 3 + Consolidated endpoint reference for all Microcosm services. All services are unauthenticated and support CORS. 4 + 5 + ## slingshot — identity and record cache 6 + 7 + Base: `https://slingshot.microcosm.blue` 8 + 9 + | endpoint | method | params | returns | 10 + |----------|--------|--------|---------| 11 + | `/xrpc/blue.microcosm.identity.resolveMiniDoc` | GET | `identifier` (handle or DID) | `{did, handle, pds, signing_key}` | 12 + | `/xrpc/blue.microcosm.repo.getRecordByUri` | GET | `at_uri` | `{uri, cid, value}` | 13 + | `/xrpc/com.atproto.repo.getRecord` | GET | `repo`, `collection`, `rkey` | `{uri, cid, value}` | 14 + | `/xrpc/com.atproto.identity.resolveHandle` | GET | `handle` | `{did}` | 15 + 16 + `repo` accepts handles or DIDs. `listRecords` is not supported — use the user's PDS directly (get URL from `resolveMiniDoc`). 17 + 18 + ## constellation — backlink index 19 + 20 + Base: `https://constellation.microcosm.blue` 21 + 22 + | endpoint | method | params | returns | 23 + |----------|--------|--------|---------| 24 + | `/xrpc/blue.microcosm.links.getBacklinksCount` | GET | `subject`, `source` | `{total}` | 25 + | `/xrpc/blue.microcosm.links.getBacklinks` | GET | `subject`, `source`, `limit`, `cursor` | `{total, records: [{did, collection, rkey}], cursor}` | 26 + | `/links/all` | GET | `target` (DID) | all collection+path combos linking to this DID with counts | 27 + | `/links/distinct-dids` | GET | `target`, `source` (dot-prefixed: `.subject.uri`) | distinct DIDs | 28 + 29 + - `subject`: AT-URI or bare DID 30 + - `source` format: `{collection}:{path}` (path omits leading dot) 31 + - default limit 100, max 1000, pagination via opaque hex `cursor` 32 + 33 + ### common source values 34 + 35 + | interaction | source | 36 + |-------------|--------| 37 + | likes | `app.bsky.feed.like:subject.uri` | 38 + | reposts | `app.bsky.feed.repost:subject.uri` | 39 + | follows | `app.bsky.graph.follow:subject` | 40 + | replies | `app.bsky.feed.post:reply.parent.uri` | 41 + | quotes | `app.bsky.feed.post:embed.record.uri` | 42 + 43 + Works with any lexicon, not just Bluesky. 44 + 45 + ## spacedust — real-time firehose 46 + 47 + Base: `wss://spacedust.microcosm.blue` 48 + 49 + **Connect:** `wss://spacedust.microcosm.blue/subscribe?wantedSources=...&wantedSubjectDids=...` 50 + 51 + Sources use the same `collection:path` format as Constellation. 52 + 53 + | param | filters | max values | 54 + |-------|---------|-----------| 55 + | `wantedSubjects` | specific AT-URIs | 50,000 | 56 + | `wantedSubjectDids` | DIDs (all interactions with their content) | 10,000 | 57 + | `wantedSubjectPrefixes` | URI/DID prefixes | 100 | 58 + | `wantedSources` | interaction types | 1,000 | 59 + | `instant` | bypass 21-second delay buffer | boolean | 60 + 61 + **Filter logic:** subject params are OR'd together. Sources are AND'd with subjects. 62 + 63 + **Message format:** 64 + ```json 65 + {"kind":"link","origin":"live","link":{"operation":"create","source":"app.bsky.feed.like:subject.uri","source_record":"at://did:plc:.../app.bsky.feed.like/3lv...","subject":"at://did:plc:.../app.bsky.feed.post/3lg..."}} 66 + ``` 67 + 68 + **Dynamic filter updates** — send on open connection: 69 + ```json 70 + {"type": "options_update", "payload": {"wantedSubjectDids": ["did:plc:..."], "wantedSources": ["app.bsky.graph.follow:subject"]}} 71 + ``` 72 + 73 + ## ufos — lexicon stats 74 + 75 + Base: `https://ufos-api.microcosm.blue` 76 + 77 + | endpoint | method | params | returns | 78 + |----------|--------|--------|---------| 79 + | `/collections` | GET | `sort`, `limit`, `prefix` | `{collections: [{nsid, creates, updates, deletes, dids_estimate}]}` | 80 + | `/collection/{nsid}` | GET | — | stats, timeseries, sample records | 81 + 82 + - `sort`: `dids-estimate` (most users) or `records-created` (most records). Default is alphabetical (useless — returns junk NSIDs). 83 + - `prefix`: filter by namespace, e.g. `prefix=app.bsky`