Stop catching your agents up. They already know.
Panopticon records your Mac, turns the day into a structured timeline, and serves it over MCP, so every assistant you use starts the conversation already up to speed on what you actually did.
claude mcp add --transport http panopticon https://<your-server>/mcp
Once the app is installed, open Settings and paste in your server URL and auth token. That pairing is the whole setup.
3.4h in Rust (tokenizer crate), 40m reading papers, 20m in Discord.
You rewrote the same batching loop three times between 11:00 and 12:40. The third one stuck.
Also: 100 minutes with zero context switches. Your longest block this week.
log that one
Saved. I'll bring it up when you regress.
Every session starts at zero
You paste the diff. You re-explain the project. You summarize what you tried yesterday and why it didn't work. Your assistant is brilliant and has no memory of any of it.
Meanwhile the answer was on your screen the whole time: which files you touched, what you read, where the afternoon actually went. Panopticon captures that and hands it to whichever agent asks.
How it works
Record. The app captures periodic screenshots with ScreenCaptureKit, skipping idle stretches and apps you've blocked. Everything lands in a SQLite database on your Mac.
Distill. An LLM you choose (Gemini, Claude Code, Codex, or a local model) batches the captures into timeline cards: what you did, when, in which category, with which apps. A daily recap is generated each morning.
Serve. Every few hours the app pushes day snapshots to a Postgres you own. Your agents read it back over MCP: list days, read a day's timeline, search it, pull the recap, break down time by category.
What your agents can ask
get_timelineeverything you did on a given day, card by cardsearch_timeline"when did I last touch the auth middleware?"get_recapthe generated standup: highlights, tasks, blockerscategory_breakdownwhere the hours actually wentlist_dayswhat's recorded, and how fresh the sync is
Self-host in three steps
No hosted service, no account. The app runs on your Mac, the server on your Vercel and Neon, and one token you generate guards both.
01Deploy the server. One click, then set two env vars: your Neon connection string and a token you make up. Your instance serves the MCP and sync endpoints only, not this page.
psql "$DATABASE_URL" -f mcp/sql/schema.sql02Run the app. Grant Screen Recording, then paste your server URL and token into Settings → Export → Cloud sync.
03Point your agents at it. Anything that speaks MCP. Swap in your server URL and token:
claude mcp add --transport http panopticon https://<your-server>/mcp --header "Authorization: Bearer <token>"
[mcp_servers.panopticon]
url = "https://<your-server>/mcp"
bearer_token_env_var = "PANOPTICON_TOKEN"
OpenClaw
{
"mcp": {
"servers": {
"panopticon": {
"url": "https://<your-server>/mcp",
"transport": "streamable-http",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
}
Hermes
mcp_servers:
panopticon:
url: "https://<your-server>/mcp"
headers:
Authorization: "Bearer <token>"
Prefer to build it yourself? Clone the repo and open it in Xcode 16+. If you want updates from your own server too, point SUFeedURL in Info.plist at your /appcast.xml first.
git clone https://github.com/crazyparadox/panopticon && open Panopticon/Panopticon.xcodeprojQuestions you're probably having
Does my screen get uploaded somewhere? Capture, analysis and storage all happen on your Mac in a local SQLite database. Screenshots leave only as input to the LLM provider you configured, or never, if you point it at a local model. What syncs to your own Postgres is the resulting text timeline, not the images.
What does it cost? The app and server are free and open source. You pay whatever your LLM provider charges for analysis; Neon and Vercel both have free tiers that comfortably fit one person's timeline.
Is it always recording? It skips idle stretches and any apps you've blocked, and pause lives in the menu bar. Recordings and cards are yours to delete at any time.
Who can read the data? Whoever holds the bearer token you generated. Rotate it, or drop the tables, whenever you like.
Do I need all three of Poke, folk and Hermes? No, those are just examples. Anything that speaks MCP can read the timeline.
Changelog
Live release history at /changelog. The app updates itself from the same feed.
Your day is already being lived. It may as well be readable.