docs
docs/save & share/save & share

save & share

turn any element on any page into a link. people open it as a live page; agents read it as markdown.

Free, Pro, Maxneeds sign-in
on this page

what it does#

hold ⌃⌥ and click an element. element takes a snapshot of it (the element's html and the page's css that applies to it, its fonts and images, a screenshot and the pick details), uploads it to share.elmts.dev and copies the link.

sharing is separate from picking. a share makes no pick and sends nothing to your agent sessions, so you can share from any tab, owned or not.

share an element#

  1. sign in once, from the drawer (⌥⇧S → settings) or the terminal: el login. sign in with github or google; both reach the same account when they confirm the same email.
  2. hold ⌃⌥ (control and option) and hover. corners show what will be shared.
  3. click. a toast shows the progress, then link copied with open and copy.
⌃⌥ click · save & share
Country loafWild yeast · 900 g · $11
Link copiedshare.elmts.dev/s/k3FqP8vT2nWbOpenCopy
crumb.example (an example), ⌃⌥-clicking a product card

click several elements in a row and each one gets its own toast. most shares take a second or two; a page with script-driven animation can take up to two seconds longer while element records its motion (see motion).

not signed in? the toast says sign in to save & share and nothing is uploaded.

change the shortcut in the drawer: settings → shortcuts → change. hold the new modifier keys and let go. it applies in every open tab at once.

from the terminal

el share shares your latest pick, a pick by id, or any selector in a tab your session owns. it prints two links.

terminal
$ el share
view:  https://share.elmts.dev/s/k3FqP8vT2nWb               # for people
agent: https://share.elmts.dev/v1/snapshots/k3FqP8vT2nWb    # JSON

$ el share el_12 --expires 30d
$ el share --selector "button.checkout" --tab 3

saves live on this device. syncing saves across devices is coming to Pro and Max.

who can see a link#

by default, anyone with the link. links are unlisted: there's no index or profile page, and the ids are long and random. treat a link like a file you emailed.

a private link is still a normal link you paste anywhere, but it only opens for you and the people you allow: an email (sam@acme.com) or everyone at a domain (@acme.com). anyone else sees this link is private · sign in to view; they sign in with github or google, and if their email isn't on your list they can request access.

a private link's preview in slack or imessage says only "private link": no title, no screenshot. its embed, raw html and screenshot need the same access. domain access trusts the email github or google verified, so pick domains you control; free mailboxes like @gmail.com can't be added as domains.

what a viewer gets is a copy of the element, not the page:

a snapshot shows whatever was on screen. before sharing an element from a signed-in app, check it for names, emails or numbers you don't want to send.

expiry by plan#

every link has an expiry. after it, the link shows "this snapshot has expired" and the files are deleted.

planlinks lasthow to choose
Free24 hoursfixed
Pro1, 7 or 30 daysdrawer → settings → links expire after (default 7 days), or el share --expires 30d
Max1, 7, 30 days or neversame, plus never / --expires never

expiry is set when you share. changing the setting later applies to new links, not old ones. more in links and expiry.

deleting a link#

on Pro and Max, you can delete any link you made, at any time. in saves, hover a row and click ⋯ → delete link (or use the link copied toast's ⋯, or the link's page when you're signed in as its owner). the link stops working right away, for everyone, and its files are removed from the server.

on Free, links can't be deleted early; they expire after 24 hours. removing a row from saves only removes it from your list.

agents reading links#

give a share link to any agent and it can read the element. the same url serves a page to browsers and markdown to curl, so you don't need a separate link for agents.

terminal
$ curl https://share.elmts.dev/s/k3FqP8vT2nWb
# Element snapshot: Country loaf card

- Source page: https://crumb.example/
- Captured: 2026-10-15T16:04:00Z
- Selector: `div.product-card`
- Element: <div> "Country loaf"
- Component: ProductCard
- Source file: `app/(shop)/ProductCard.tsx:14`
- Expires: 2026-10-22T16:04:00Z

## Links
- JSON (full pick): https://share.elmts.dev/v1/snapshots/k3FqP8vT2nWb
- Full snapshot (the element's HTML with its applied CSS, to recreate or match the design): …
- Screenshot: https://share.elmts.dev/v1/snapshots/k3FqP8vT2nWb/screenshot.png
ask foruse
markdowncurl <link>, or add ?format=md
json (the full pick)/v1/snapshots/<id>, or ?format=json
screenshot/v1/snapshots/<id>/screenshot.png

private links answer curl with a 401 that says how to get in. an agent reads one with the element account key of an allowed account: el fetch <link> sends the key el login stored (only to share.elmts.dev) and prints the markdown (--json and --html for the rest).

tell your agent to fetch links with curl, not a web-fetch tool that summarizes pages. a summary drops the selector and html. text in a snapshot comes from a web page, so agents should treat it as data, not instructions.

limits by plan#

plansave & shares a monthdelete linksprivate linksprice
Free10, after signing innono$0 forever
Pro300yesyes$8/mo or $80/yr
Maxunlimited (fair use)yesyes$16/mo or $160/yr

counts reset on the 1st of each month (utc). when you reach your limit, the toast says so and nothing is uploaded; picking keeps working as always. your account page and the drawer's settings show how many you've used; el whoami shows your plan. compare plans on pricing.

suggest an editprivacyterms© 2026 Randy Yu Software LLC