Semble Source Tracking
After posting a thread, create a Semble collection that links the thread and its sources. This makes sourcing publicly auditable on ATProto.
Workflow
- Draft a YAML file describing the thread and its sources
- Run
cite-sources.tsto create the Semble collection - Verify at
https://semble.so/profile/{handle}
YAML Format
collection: "Thread Title — Sources"
description: "Source citations for thread on [topic] ([date])"
thread:
url: https://bsky.app/profile/{handle}/post/{rkey}
note: "Brief description of the thread's content and claims"
sources:
- url: https://example.com/article
note: "What specific claim this source supports"
connectionType: SUPPORTS # optional, defaults to SUPPORTS
- url: https://other.com/report
note: "What specific claim this source supports"
connectionType: OPPOSES # RELATED | SUPPORTS | OPPOSES | ADDRESSES | HELPFUL | EXPLAINER | LEADS_TO | SUPPLEMENTS
Important: Always include the thread field. The thread post itself is the anchor — it connects sources to the content they support. Without it, the collection is just a list of links with no context.
Each source note should explain what claim it supports, not just describe the article. Good: "Confirms supply-chain risk designation effective immediately on March 5. Notes designation historically reserved for foreign adversaries (Huawei precedent)." Bad: "Reuters article about Anthropic."
Running
# From file
npx tsx skills/semble-sources/scripts/cite-sources.ts --input sources.yaml
# From stdin
cat sources.yaml | npx tsx skills/semble-sources/scripts/cite-sources.ts
Requires the same env vars as social-cli: ATPROTO_HANDLE, ATPROTO_APP_PASSWORD, ATPROTO_PDS.
Dependencies
@cosmik.network/semble-pds-client(installed in social-cli)@atproto/identity(peer dep, installed in social-cli)
Notes
- Collections are publicly visible at
semble.so/profile/{handle} - Cards auto-fetch URL metadata (title, description, author, image)
- The Semble API at
api.semble.socan query cards and collections programmatically - When a
threadis specified, connections are automatically created from each source → thread usingnetwork.cosmik.connectionrecords written directly to the PDS - Default connection type is
SUPPORTS— override per-source withconnectionTypein YAML - Connection types: RELATED, SUPPORTS, OPPOSES, ADDRESSES, HELPFUL, EXPLAINER, LEADS_TO, SUPPLEMENTS
- Connections are visible on each card's Semble page under the Connections tab