---
name: screenshots
description: Sweep NEW screenshots from the owner's macOS Photos library into the vault — capture them to Agent/inbox/ (image files + a stub-manifest inbox item, committed for durability), then triage BY READING each image; valuable content (posts, articles, receipts, bookings, charts, addresses, ideas caught mid-scroll) gets routed into the vault per the ingestion workflow, noise gets dropped. Use when the owner says "digest my screenshots", "process / sweep / pull in my screenshots", "ingest my screenshots", "anything valuable in my recent screenshots?", "check my screenshots for stuff to file", or when an ingestion pass should include fresh screenshots. Runs locally on the machine with the Photos library, not an automation host; read-only against Photos (snapshot-copied DB; images copied out, never moved, nothing altered or deleted); needs macOS Full Disk Access. NOT vault-ingestion for pasted/uploaded content (this one PULLS from Photos), NOT the iMessage reader (different local store), and NOT a photo-library manager. Requires the screenshots module.
served: false
---

# Screenshots — Photos → inbox → vault

The owner asks in plain language; **they never run a command**. This skill pulls new
screenshots out of the local Photos library, makes them durable in the staging queue,
then triages them by actually looking at each one. The full procedure is canonical in
**[[Screenshots]]** (`Agent/docs/Screenshots.md`); this is the trigger.

## When this skill fires
The owner says, in chat, some form of *"digest / process / sweep / pull in my
screenshots"* or *"anything valuable in my recent screenshots?"* — or an ingestion pass
should include fresh screenshots. On-demand and owner-only.

## What to do
1. **Read [[Screenshots]]** (`Agent/docs/Screenshots.md`) — it wins over anything remembered here.
2. **Capture as plumbing** — `"${ALEXANDRIA_PYTHON:-python3}" -m alexandria_vault.engine.screenshots_capture --vault .`
   (scope with `--since` / `--limit`; prefer `--dry-run` first when the ask is exploratory
   or the backlog might be big — a first run or a wide `--since` can pull in a lot). Read
   the stderr coverage line (window · found N · captured M · not-local · remaining) before
   moving on.
3. **Commit the capture for durability** — the script never commits; you do, immediately,
   before any triage. Then **verify `git show --stat HEAD` lists every captured image**
   (and the inbox item): that check *is* the durability guarantee — an image the commit
   missed is an image a dead session loses.
4. **Triage by reading the images.** Open each exported screenshot and sort **valuable vs
   noise**. Route the valuable per the vault-ingestion flow — the routing rules in
   [[AGENTS#Ingesting and filing content]] with the usual fan-out (facts, todos, people,
   events, Knowledge), keeping the image itself in an area's `Files/` only when the pixels
   are worth keeping. Sensitive captures (banking screens, IDs, credentials) are summarized,
   never transcribed as raw values.
5. **Manifest → owner approves → one ingest commit** (`ingest: YYYY-MM-DD screenshots
   (N filed, M dropped)`) — the same manifest-before-apply discipline as
   [[AGENTS#Processing the inbox (fan-out)]] — then **delete the inbox item + batch
   folder**; the queue holds only pending work and git history preserves the rest.

## Rules (detailed in [[Screenshots]])
- **Prerequisite: Full Disk Access.** macOS TCC blocks the Photos library until the app
  running the assistant (Claude, or its terminal) has Full Disk Access. It's a one-time
  System Settings grant, not a credential.
- **Runs locally**, on the machine holding the Photos library — never on an automation host.
- **Read-only against Photos, full stop.** The live database is never opened (a snapshot
  copy is queried); images are copied out, never moved; nothing in the library is altered,
  tagged, or deleted — don't improvise a write path.
- **Capture-first.** Images + inbox item are committed *before* any triage, so nothing is
  stranded if the chat dies.
- **Originals often live in iCloud.** The capture falls back to the full-res local
  derivative automatically; shots with no local file yet are retried on the next run.
