I work on Skyreader and have recently been trying to improve the cross-app sharing experience (e.g. “send this article to semble/margin/etc”). The problem I’m running into is each app integration requires a bespoke implementation and the “save to” UX starts to get cluttered as the number of integrations increases. What would be nice is if the atproto ecosystem had a standard and generic way for cross-app sharing that was usage aware so you could filter by apps you actually used.
So I’ve put together a AT Intents proposal that tries to do that. AT Intents would be a standard, registry-free way for atproto apps to declare what they can do so that other apps can discover and route users to them.
As the name implies, it’s basically app/android/web intents but for atproto.
The basic idea is to have apps that provide some service (e.g. save url) write a dev.at-intent.capability record in the app’s repo that describes what they can do as a (subject, verb, handler) triple along with a delivery method (lexicon write or XRPC call). Then when a user first logs into that app it writes a dev.at-intent.usage record in the user’s repo with a reference to the app’s capability record.
With those two records a consumer app (e.g. a bookmarking extension) can scan the user’s repo to find all the atproto apps they actually use and surface just those.
I’ve put together a tangled repo with more details/lexicons/etc. along with a “share-sheet” demo bookmarklet that shows how a consumer might use it (scans the user’s repo for usage records and shows all the matched capabilities that can do something with the current page).
I’ve also prototyped an implementation in Skyreader so if you try out the demo bookmarklet it should just work to save an article or subscribe to a feed in Skyreader.
Does this seem like a reasonable approach? Is there some prior art that I missed? What do you all think?