This repository has no description
3

Configure Feed

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

README.md

Tools#

CLI tooling to author AT Intents records. Node 18+, zero dependencies — no install.

Write a capability record#

From a JSON file — the literal dev.at-intent.capability shape, with $type / createdAt optional (see capability-spec.md):

# Validate + preview, write nothing:
node write-capability.mjs examples/subscribe.capability.json --dry-run --identifier myapp.com

# Publish to the APP's repo (capability records live in the app's own repo):
PDS_IDENTIFIER=myapp.com PDS_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx \
  node write-capability.mjs examples/subscribe.capability.json

A file may hold one record, a top-level array, or { "capabilities": [...] }. Interactively (prompts for each field, saves a reusable JSON record, dry-runs, then writes on confirmation):

node write-capability-interactive.mjs --out my.capability.json

Flags: --dry-run --json --force (write despite warnings) --identifier --password --pds --rkey.

Write a usage record#

The per-user discovery footprint — normally written by the app for the user; this is for manual/testing use (auth as the user, since it lands in their repo):

node write-usage.mjs --app did:web:myapp.com \
  --config '{"defaultCategory":"tech"}' --dry-run --identifier alice.bsky.social

Auth#

Writes use an app password via com.atproto.server.createSession against the account's own PDS (resolved from the handle/DID). Provide credentials with --identifier/--password or the PDS_IDENTIFIER / PDS_APP_PASSWORD environment variables. Get an app password from your PDS settings — never use your main account password. --dry-run needs no credentials.

Layout#

lib/
  nsid.mjs        the two NSIDs + authority (single source of truth)
  atproto.mjs     resolve handle/DID/PDS; createSession; createRecord (zero-dep)
  spec.mjs        load a JSON record file; normalize to a capability list
  capability.mjs  validate + build a capability record (incl. delivery rules)
  usage.mjs       validate + build a usage record
  cli.mjs         colors, validation reporting, dry-run printing, auth-from-args
write-capability.mjs             from a JSON record file
write-capability-interactive.mjs prompt-driven
write-usage.mjs                  usage footprint
examples/                        one record per delivery type + a multi-cap file

The consumer-side resolver lives in ../resolver/.