Pensieve is a privacy-focused screen recorder that automatically captures screenshots, indexes them, and stores the records locally for later retrieval. It is for people who want to search and review their computer activity while keeping control of the data. Its catalogue skill lets coding agents search the screenshot archive in natural language.
Getting it into your agent
There is no command for this one: it runs only inside a plugin, and the catalogue could not identify which plugin ships it. The source is linked below.
Wrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/arkohut/pensieve/pensieve-search)<a href="https://agentmods.dev/skills/arkohut/pensieve/pensieve-search"><img src="https://agentmods.dev/badge/skills/arkohut/pensieve/pensieve-search/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/arkohut/pensieve/pensieve-search"><img src="https://agentmods.dev/badge/skills/arkohut/pensieve/pensieve-search.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00136 | $0.09177 |
| Opus 5 | $0.00068 | $0.04588 |
| Sonnet 5 | $0.00027 | $0.01835 |
| Haiku 4.5 | $0.00014 | $0.00918 |
Grade C, and why
pensieve-search scanned grade C with 2 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
rm -rf "$TMPDIR" Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
curl -s -o /dev/null -w "%{http_code}\n" "http://127.0.0.1:8839/api/search?q=test" How it starts
The opening of the file, as written. The whole thing — 567 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Pensieve Search Skill
Pensieve (memos) continuously captures screenshots and indexes them. This skill teaches you to query that index over its HTTP API.
Where the data lives
- Server:
http://127.0.0.1:8839by default (config:server_host/server_port).- Override with
MEMOS_SERVER_HOST/MEMOS_SERVER_PORTenv vars or~/.memos/config.yamlif the user has a non-default setup. Confirm with the user if the default doesn't respond.
- Override with
- Screenshots on disk:
~/.memos/screenshots/YYYYMMDD/<entity>.webp. The API returnsfilepathdirectly so you don't have to compute it. - Web UI (same server, browser-friendly):
- Search page (mirrors API filters as URL params):
http://127.0.0.1:8839/?q=...&start=...&end=...&app_names=...&library_ids=...— you should always offer this URL in your reply so the user can click and verify results visually. - Entity detail page:
http://127.0.0.1:8839/entities/<id>— opens one specific screenshot in context with its metadata. Offer this for any hit you cite. - Config page:
http://127.0.0.1:8839/config— surface this if the user asks about settings.
- Search page (mirrors API filters as URL params):
Pre-flight check
Before the first query in a session, verify the server is up:
curl -s -o /dev/null -w "%{http_code}\n" "http://127.0.0.1:8839/api/search?q=test"
200 means good. 000 or connection-refused means memos isn't running — tell the user to start it (memos serve or system-service).
Always quote the URL — the ? and & are zsh glob characters and will fail with no matches found if unquoted. Every curl example below assumes a quoted URL.
The endpoint
GET /api/search
Parameters:
| Param | Type | Notes |
|---|---|---|
q |
string | Full-text query (jieba-tokenized; works for Chinese + English mixed). Empty q="" returns recent screenshots without ranking. |
start, end |
int (UNIX seconds, UTC) | Time window on file_created_at. Both required together. |
app_names |
string | Comma-separated active_app values, e.g. "Google Chrome,iTerm2". |
library_ids |
string | Comma-separated; usually leave unset to query all. |
limit |
int 1..200 | Default 48. Use 10–20 for casual queries, 200 only when scanning. |
facet |
bool | Include facet_counts (per-app counts), date_range (earliest/latest), and date_buckets (count per day or month, see Strategy 5). Set true on broad queries to help narrow. |
date |
string | Bucket filter, YYYY-MM or YYYY-MM-DD. Intersected with start/end. |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 567 lines · 136 tokens per session scan C e5ff58f6a999
pensieve-search is a skill published in the GitHub repository arkohut/pensieve (1,387 stars, last pushed 1mo ago), licensed Apache-2.0. It adds 136 tokens to every session and 9,177 once invoked, about $0.0007 per session on Opus 5. A static security scan graded it C with 2 findings (recursive force delete, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
Cortex
Operate Cortex, the LifeOS memory system — the typed Knowledge Archive (People, Companies, Ideas, Research with typed related: links) plus recall of prior work sessions, ISAs, and conversations. Search, add, harvest, develop, ingest, distill, graph-navigate, recall. USE WHEN cortex, knowledge, knowledge base, search…
Migrate
Intakes external content, classifies chunks against LifeOS taxonomy, commits with provenance. Sources: .md/.txt, stdin, LifeOS dirs, CLAUDE.md/Cursor/OpenAI Custom Instructions, Obsidian/Notion/Apple Notes exports. MigrateScan classifies → routing table. MigrateApprove with…
daily-briefing
Proactive daily briefing that fires on a recurring schedule, pulls recent memory and workspace context, composes a structured summary (action items, progress, radar, next steps), and delivers it to all active channels. Enable with a time like "set up my daily briefing at 9am". Disable, reschedule, or check status at…
company-brain
Your team's shared, AI-ready knowledge base — people, companies, meetings, SOPs, and decisions structured so Claude can answer questions on your team's behalf. Team-scope sibling to second-brain (which is personal-scope). Seven modes — capture (drop something into the right structured dir), compile (process into wiki…
calendar
Manage calendar events via CalDAV (Google/iCloud/Nextcloud) or local ICS files. View, create, and query events.
email-assistant
Read, search, draft, and send emails via Himalaya CLI or Python IMAP/SMTP. Requires email account configuration.