|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl-zshDOCKERdeepgram keylanguages• 881DEV (-zsh)not setall languagesО ₴2APP (-zsh)• хз-zsh• x4|-zsh• ₴5|-zsh886-zsh100% <7O 87Sat 11 Apr 20:29:22-zsh181• *8|monitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11T20:26:05.3487547ZINFO screenpipe: starting UI event capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFO2026-04-11T20:26:05.363864Zscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.378325ZINFO screenpipe_engine::ui_recorder: Starting UI event captureINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFO2026-04-11T20:26:051.384798ZINFOscreenpipe_engine::meeting_detector: meeting V2: detection loop started (base_interval=5s, profiles=12)screenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipe onport 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting visionrecordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine::eventdriven.capture: Sonteut dedup: skipping copture for monitoo 1 (hrs -9215443531147982392, triggeravisualchange)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: localretention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55.992688ZINFO2026-04-11T20:26:57.331771ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05408691ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB 3.3MB (2.8x), 61 JPEGs deleted...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Firefox Browser Add-ons
Firefox Browser Add-ons
Extensions
Extensions
Themes
Themes
More…
More…
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Log in
Log in
Search
Search
Search
Search
Search
Extensions
Extensions
Explore powerful tools and features to customize Firefox and make the browser all your own.
Categories
Alerts & Updates
Alerts & Updates
Appearance
Appearance
Bookmarks
Bookmarks
Download Management
Download Management
Feeds, News & Blogging
Feeds, News & Blogging
Games & Entertainment
Games & Entertainment
Language Support
Language Support
Other
Other
Photos, Music & Videos
Photos, Music & Videos
Privacy & Security
Privacy & Security
Search Tools
Search Tools
Shopping
Shopping
Social & Communication
Social & Communication
Tabs
Tabs
Web Development
Web Development
Recommended extensions
SingleFile
SingleFile
SingleFile
82,401 users
82,401 users
DuckDuckGo Search & Tracker Protection
DuckDuckGo Search & Tracker Protection
DuckDuckGo Search & Tracker Protection
1,159,712 users
1,159,712 users
Disconnect
Disconnect
Disconnect
66,417 users
66,417 users
Chrome Mask
Chrome Mask
Chrome Mask
50,236 users
50,236 users
See more recommended extensions
See more recommended extensions
Top rated extensions
SteamDB
SteamDB
SteamDB
101,356 users
101,356 users
LeechBlock NG
LeechBlock NG
LeechBlock NG
111,791 users
111,791 users
SponsorBlock - Skip Sponsorships on YouTube
SponsorBlock - Skip Sponsorships on YouTube
SponsorBlock - Skip Sponsorships on YouTube
736,901 users
736,901 users
Privacy Badger
Privacy Badger
Privacy Badger
1,890,491 users
1,890,491 users
See more top rated extensions
See more top rated extensions
Trending extensions
automaticDark - Time-Based Theme Changer
automaticDark - Time-Based Theme Changer
automaticDark - Time-Based Theme Changer
16,235 users
16,235 users
Time Tracker - Web Habit Builder
Time Tracker - Web Habit Builder
Time Tracker - Web Habit Builder
14,833 users
14,833 users
Download All Images
Download All Images
Download All Images
106,194 users
106,194 users
ClearURLs
ClearURLs
ClearURLs
520,769 users
520,769 users
See more trending extensions
See more trending extensions
Go to Mozilla's homepage
Go to Mozilla's homepage
Add-ons
Add-ons
Add-ons
About
About
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Developer Policies
Developer Policies
Community Blog
Community Blog
Forum
Forum
Report a bug
Report a bug
Review Guide
Review Guide
Browsers
Browsers
Desktop
Desktop
Mobile
Mobile
Enterprise
Enterprise
Products
Products
Browsers
Browsers
VPN
VPN
Relay
Relay
Monitor
Monitor
Pocket
Pocket
Bluesky (@firefox.com)
Bluesky (@firefox.com)
Instagram (Firefox)
Instagram (Firefox)
YouTube (firefoxchannel)
YouTube (firefoxchannel)
Privacy
Privacy
Cookies
Cookies
Legal
Legal
Except where otherwise
noted
noted
, content on this site is licensed under the
Creative Commons Attribution Share-Alike License v3.0
Creative Commons Attribution Share-Alike License v3.0
or any later version.
Change language...
|
Firefox
|
Extensions – Add-ons for Firefox (en-US) — Persona Extensions – Add-ons for Firefox (en-US) — Personal...
|
addons.mozilla.org/en-US/firefox/extensions/
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Firefox Browser Add-ons
Firefox Browser Add-ons
Extensions
Extensions
Themes
Themes
More…
More…
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Log in
Log in
Search
Search
Search
Search
Search
Extension Metadata
Extension Metadata
This add-on cannot be rated because no versions have been published.
More information
Last updated
Add to collection
Go to Mozilla's homepage
Go to Mozilla's homepage
Add-ons
Add-ons
Add-ons
About
About
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Developer Policies
Developer Policies
Community Blog
Community Blog
Forum
Forum
Report a bug
Report a bug
Review Guide
Review Guide
Browsers
Browsers
Desktop
Desktop
Mobile
Mobile
Enterprise
Enterprise
Products
Products
Browsers
Browsers
VPN
VPN
Relay
Relay
Monitor
Monitor
Pocket
Pocket
Bluesky (@firefox.com)
Bluesky (@firefox.com)
Instagram (Firefox)
Instagram (Firefox)
YouTube (firefoxchannel)
YouTube (firefoxchannel)
Privacy
Privacy
Cookies
Cookies
Legal
Legal
Except where otherwise
noted
noted
, content on this site is licensed under the
Creative Commons Attribution Share-Alike License v3.0
Creative Commons Attribution Share-Alike License v3.0
or any later version.
Change language...
|
Firefox
|
Extensions – Add-ons for Firefox (en-US) — Persona Extensions – Add-ons for Firefox (en-US) — Personal...
|
addons.mozilla.org/en-US/firefox/addon/linkwarden/
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Firefox Browser Add-ons
Firefox Browser Add-ons
Extensions
Extensions
Themes
Themes
More…
More…
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Log in
Log in
Search
Search
Search
Search
Search
This add-on is not actively monitored for security by Mozilla. Make sure you trust it before installing.
Learn more
Learn more
Linkwarden by Daniel31x13 , Jordan Higuera
Linkwarden
by
Daniel31x13
Daniel31x13
,
Jordan Higuera
Jordan Higuera
The browser extension for Linkwarden.
4.6 (35 reviews) 4.6 (35 reviews)
4.6 (35 reviews)
4.6 (35 reviews)
2,613 Users
2,613 Users
Add to Firefox
Add to Firefox
Extension Metadata
Extension Metadata
Screenshots
Rated 4.6 by 35 reviewers
Log in to rate this extension
Log in to rate this extension
There are no ratings yet
5
5
Read all 27 five-star reviews
27
27
4
4
Read all 3 four-star reviews
3
3
3
3
Read all 4 three-star reviews
4
4
2
2
Read the 1 two-star review
1
1
1
1
There are no one-star reviews
0
0
Read all 35 reviews
Read all 35 reviews
Permissions and data
Required permissions:
Required permissions:
Read and modify bookmarks
Access browser tabs
Optional permissions:
Optional permissions:
Access your data for all websites
Learn more
Learn more
More information
Add-on Links
Support site
Support site
Support Email
Support Email
Version
1.5.2
Size
206.89 KB
Last updated
18 days ago (Mar 24, 2026)
Related Categories
Bookmarks
Bookmarks
∙
Social & Communication
Social & Communication
License
MIT License
MIT License
Version History
See all versions
See all versions
Add to collection
Report this add-on
Report this add-on
Other popular extensions
Dark Reader Recommended Recommended
Dark Reader
Dark Reader
Recommended Recommended
Recommended
Recommended
1,311,453 users
1,311,453 users
Grammar and Spell Checker - LanguageTool
Grammar and Spell Checker - LanguageTool
Grammar and Spell Checker - LanguageTool
407,741 users
407,741 users
Search by Image Recommended Recommended
Search by Image
Search by Image
Recommended Recommended
Recommended
Recommended
440,911 users
440,911 users
Tree Style Tab Recommended Recommended
Tree Style Tab
Tree Style Tab
Recommended Recommended
Recommended
Recommended
160,924 users
160,924 users
Go to Mozilla's homepage
Go to Mozilla's homepage
Add-ons
Add-ons
Add-ons
About
About
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Developer Policies
Developer Policies
Community Blog
Community Blog
Forum
Forum
Report a bug
Report a bug
Review Guide
Review Guide
Browsers
Browsers
Desktop
Desktop
Mobile
Mobile
Enterprise
Enterprise
Products
Products
Browsers
Browsers
VPN
VPN
Relay
Relay
Monitor
Monitor
Pocket
Pocket
Bluesky (@firefox.com)
Bluesky (@firefox.com)
Instagram (Firefox)
Instagram (Firefox)
YouTube (firefoxchannel)
YouTube (firefoxchannel)
Privacy
Privacy
Cookies
Cookies
Legal
Legal
Except where otherwise
noted
noted
, content on this site is licensed under the
Creative Commons Attribution Share-Alike License v3.0
Creative Commons Attribution Share-Alike License v3.0
or any later version.
Change language...
|
Firefox
|
Linkwarden – Get this Extension for 🦊 Firefox (en- Linkwarden – Get this Extension for 🦊 Firefox (en-US) — Personal...
|
addons.mozilla.org/en-US/firefox/addon/linkwarden/
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Firefox Browser Add-ons
Firefox Browser Add-ons
Extensions
Extensions
Themes
Themes
More…
More…
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Log in
Log in
Search
Search
Search
Search
Search
This add-on is not actively monitored for security by Mozilla. Make sure you trust it before installing.
Learn more
Learn more
Linkwarden by Daniel31x13 , Jordan Higuera
Linkwarden
by
Daniel31x13
Daniel31x13
,
Jordan Higuera
Jordan Higuera
The browser extension for Linkwarden.
4.6 (35 reviews) 4.6 (35 reviews)
4.6 (35 reviews)
4.6 (35 reviews)
2,613 Users
2,613 Users
Add to Firefox
Add to Firefox
Extension Metadata
Extension Metadata
Screenshots
Rated 4.6 by 35 reviewers
Log in to rate this extension
Log in to rate this extension
There are no ratings yet
5
5
Read all 27 five-star reviews
27
27
4
4
Read all 3 four-star reviews
3
3
3
3
Read all 4 three-star reviews
4
4
2
2
Read the 1 two-star review
1
1
1
1
There are no one-star reviews
0
0
Read all 35 reviews
Read all 35 reviews
Permissions and data
Required permissions:
Required permissions:
Read and modify bookmarks
Access browser tabs
Optional permissions:
Optional permissions:
Access your data for all websites
Learn more
Learn more
More information
Add-on Links
Support site
Support site
Support Email
Support Email
Version
1.5.2
Size
206.89 KB
Last updated
18 days ago (Mar 24, 2026)
Related Categories
Bookmarks
Bookmarks
∙
Social & Communication
Social & Communication
License
MIT License
MIT License
Version History
See all versions
See all versions
Add to collection
Report this add-on
Report this add-on
Other popular extensions
Dark Reader Recommended Recommended
Dark Reader
Dark Reader
Recommended Recommended
Recommended
Recommended
1,311,453 users
1,311,453 users
Grammar and Spell Checker - LanguageTool
Grammar and Spell Checker - LanguageTool
Grammar and Spell Checker - LanguageTool
407,741 users
407,741 users
Search by Image Recommended Recommended
Search by Image
Search by Image
Recommended Recommended
Recommended
Recommended
440,911 users
440,911 users
Tree Style Tab Recommended Recommended
Tree Style Tab
Tree Style Tab
Recommended Recommended
Recommended
Recommended
160,924 users
160,924 users
Go to Mozilla's homepage
Go to Mozilla's homepage
Add-ons
Add-ons
Add-ons
About
About
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Developer Policies
Developer Policies
Community Blog
Community Blog
Forum
Forum
Report a bug
Report a bug
Review Guide
Review Guide
Browsers
Browsers
Desktop
Desktop
Mobile
Mobile
Enterprise
Enterprise
Products
Products
Browsers
Browsers
VPN
VPN
Relay
Relay
Monitor
Monitor
Pocket
Pocket
Bluesky (@firefox.com)
Bluesky (@firefox.com)
Instagram (Firefox)
Instagram (Firefox)
YouTube (firefoxchannel)
YouTube (firefoxchannel)
Privacy
Privacy
Cookies
Cookies
Legal
Legal
Except where otherwise
noted
noted
, content on this site is licensed under the
Creative Commons Attribution Share-Alike License v3.0
Creative Commons Attribution Share-Alike License v3.0
or any later version.
Change language
Close...
|
Firefox
|
Linkwarden – Get this Extension for 🦊 Firefox (en- Linkwarden – Get this Extension for 🦊 Firefox (en-US) — Personal...
|
addons.mozilla.org/en-US/firefox/addon/linkwarden/
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpall100% <7-zshDOCKERdeepgram keylanguages• 881DEV (-zsh)not setall languagesО ₴2APP (-zsh)• *3-zsh• x4|-zsh• ₴5|-zsh886-zshO 87Sat 11 Apr 20:29:46-zsh181• *8monitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11T20:26:05.3487547ZINFO screenpipe: starting UI event capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFO2026-04-11T20:26:05.363864Zscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.378325ZINFO screenpipe_engine::ui_recorder: Starting UI event captureINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFO2026-04-11T20:26:051.384798ZINFOscreenpipe_engine::meeting_detector: meeting V2: detection loop started (base_interval=5s, profiles=12)screenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipe onport 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting visionrecordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine::eventdriven.capture: Sonteut dedup: skipping copture for monitoo 1 (hrs -9215443531147982392, triggeravisualchange)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: localretention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55.992688ZINFO2026-04-11T20:26:57.331771ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05408691ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB 3.3MB (2.8x), 61 JPEGs deleted...
|
NULL
|
NULL
|
NULL
|
|
Add
Linkwarden
Required permissions:
Required perm Add
Linkwarden
Required permissions:
Required permissions:
Access your data for all websites
Read and modify bookmarks
Access browser tabs
Optional settings:
Optional settings:
Allow extension to run in private windows
Allow extension to run in private windows
Learn more
Learn more
Cancel
Add
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Firefox Browser Add-ons
Firefox Browser Add-ons
Extensions
Extensions
Themes
Themes
More…
More…
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Log in
Log in
Search
Search
Search
Search
Search
This add-on is not actively monitored for security by Mozilla. Make sure you trust it before installing.
Learn more
Learn more
Linkwarden by Daniel31x13 , Jordan Higuera
Linkwarden
by
Daniel31x13
Daniel31x13
,
Jordan Higuera
Jordan Higuera
The browser extension for Linkwarden.
4.6 (35 reviews) 4.6 (35 reviews)
4.6 (35 reviews)
4.6 (35 reviews)
2,613 Users
2,613 Users
Remove
Remove
Extension Metadata
Extension Metadata
Screenshots
Rated 4.6 by 35 reviewers
Log in to rate this extension
Log in to rate this extension
There are no ratings yet
5
5
Read all 27 five-star reviews
27
27
4
4
Read all 3 four-star reviews
3
3
3
3
Read all 4 three-star reviews
4
4
2
2
Read the 1 two-star review
1
1
1
1
There are no one-star reviews
0
0
Read all 35 reviews
Read all 35 reviews
Permissions and data
Required permissions:
Required permissions:
Read and modify bookmarks
Access browser tabs
Optional permissions:
Optional permissions:
Access your data for all websites...
|
Firefox
|
Linkwarden – Get this Extension for 🦊 Firefox (en- Linkwarden – Get this Extension for 🦊 Firefox (en-US) — Personal...
|
addons.mozilla.org/en-US/firefox/addon/linkwarden/
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpall100% <7-zshDOCKERdeepgram keylanguages• 881DEV (-zsh)not setall languagesО ₴2APP (-zsh)• хз-zsh• x4|-zsh• ₴5|-zsh886-zshO 87Sat 11 Apr 20:29:56-zsh181• *8monitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11T20:26:05.3487547ZINFO screenpipe: starting UI event capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFO2026-04-11T20:26:05.363864Zscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.378325ZINFO screenpipe_engine::ui_recorder: Starting UI event captureINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFO2026-04-11T20:26:051.384798ZINFOscreenpipe_engine::meeting_detector: meeting V2: detection loop started (base_interval=5s, profiles=12)screenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipe onport 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting visionrecordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine::eventdriven.capture: Sonteut dedup: skipping copture for monitoo 1 (hrs -9215443531147982392, triggeravisualchange)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: localretention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55.992688ZINFO2026-04-11T20:26:57.331771ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05408691ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB 3.3MB (2.8x), 61 JPEGs deleted...
|
NULL
|
NULL
|
NULL
|
|
Sync and save data
Sign In
Sign In
Personal
New ta Sync and save data
Sign In
Sign In
Personal
New tab
New window
New private window
Bookmarks
History
Downloads
Passwords
Extensions and themes
Print…
Save page as…
Find in page…
Translate page…
Zoom
Zoom out
100%
Zoom in
Full screen
Settings
More tools
Report broken site
Help
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Firefox Browser Add-ons
Firefox Browser Add-ons
Extensions
Extensions
Themes
Themes
More…
More…
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Log in
Log in
Search
Search
Search
Search
Search
This add-on is not actively monitored for security by Mozilla. Make sure you trust it before installing.
Learn more
Learn more
Linkwarden by Daniel31x13 , Jordan Higuera
Linkwarden
by
Daniel31x13
Daniel31x13
,
Jordan Higuera
Jordan Higuera
The browser extension for Linkwarden.
4.6 (35 reviews) 4.6 (35 reviews)
4.6 (35 reviews)
4.6 (35 reviews)
2,613 Users
2,613 Users
Remove
Remove
Extension Metadata
Extension Metadata
Screenshots
Rated 4.6 by 35 reviewers
Log in to rate this extension
Log in to rate this extension
There are no ratings yet
5
5
Read all 27 five-star reviews
27
27
4
4
Read all 3 four-star reviews
3
3
3
3
Read all 4 three-star reviews
4
4
2
2
Read the 1 two-star review
1
1
1
1
There are no one-star reviews
0
0
Read all 35 reviews
Read all 35 reviews
Permissions and data
Required permissions:
Required permissions:
Read and modify bookmarks
Access browser tabs
Optional permissions:
Optional permissions:
Access your data for all websites
Learn more
Learn more
More information
Add-on Links
Support site
Support site
Support Email
Support Email
Version
1.5.2
Size
206.89 KB
Last updated
18 days ago (Mar 24, 2026)
Related Categories
Bookmarks
Bookmarks
∙
Social & Communication
Social & Communication
License
MIT License
MIT License
Version History
See all versions
See all versions
Add to collection
Report this add-on
Report this add-on
Other popular extensions
Dark Reader Recommended Recommended
Dark Reader
Dark Reader
Recommended Recommended
Recommended
Recommended
1,311,453 users
1,311,453 users
Grammar and Spell Checker - LanguageTool
Grammar and Spell Checker - LanguageTool
Grammar and Spell Checker - LanguageTool
407,741 users
407,741 users
Search by Image Recommended Recommended
Search by Image
Search by Image
Recommended Recommended
Recommended
Recommended
440,911 users
440,911 users
Tree Style Tab Recommended Recommended
Tree Style Tab
Tree Style Tab
Recommended Recommended
Recommended
Recommended
160,924 users
160,924 users
Go to Mozilla's homepage
Go to Mozilla's homepage
Add-ons
Add-ons
Add-ons
About
About
Firefox Add-ons Blog
Firefox Add-ons Blog
Extension Workshop
Extension Workshop
Developer Hub
Developer Hub
Developer Policies
Developer Policies
Community Blog
Community Blog
Forum
Forum
Report a bug
Report a bug
Review Guide
Review Guide
Browsers
Browsers
Desktop
Desktop
Mobile
Mobile
Enterprise
Enterprise
Products
Products
Browsers
Browsers
VPN
VPN
Relay
Relay
Monitor
Monitor
Pocket
Pocket
Bluesky (@firefox.com)
Bluesky (@firefox.com)
Instagram (Firefox)
Instagram (Firefox)
YouTube (firefoxchannel)
YouTube (firefoxchannel)
Privacy
Privacy
Cookies
Cookies
Legal
Legal
Except where otherwise
noted
noted
, content on this site is licensed under the
Creative Commons Attribution Share-Alike License v3.0
Creative Commons Attribution Share-Alike License v3.0
or any later version.
Change language...
|
Firefox
|
Linkwarden – Get this Extension for 🦊 Firefox (en- Linkwarden – Get this Extension for 🦊 Firefox (en-US) — Personal...
|
addons.mozilla.org/en-US/firefox/addon/linkwarden/
|
|
Sync and save data
Sign In
Sign In
Personal
New ta Sync and save data
Sign In
Sign In
Personal
New tab
New window
New private window
Bookmarks
History
Downloads
Passwords
Extensions and themes
Print…
Save page as…
Find in page…
Translate page…
Zoom
Zoom out
100%
Zoom in
Full screen
Settings
More tools
Report broken site
Help
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Close tab
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Recommendations
Recommendations
Extensions
Extensions
Themes
Themes
Plugins
Plugins
Firefox Settings
Firefox Settings
Add-ons Support
Add-ons Support
Find more add-ons
bitwrden
bitwrden
Search addons.mozilla.org
Personalize Your Firefox
Personalize Your Firefox
Tools for all add-ons
Extensions and themes let you customize Firefox. They can boost privacy, enhance productivity, improve media, change the way Firefox looks, and so much more. These small software programs are often developed by a third party. Here’s a selection Firefox
recommends
recommends
for exceptional security, performance, and functionality.
Some of these recommendations are personalized. They are based on other extensions you’ve installed, profile preferences, and usage statistics.
Learn more
Learn more
Close
Crimson Merlot
Crimson Merlot
by
DV8
DV8
Install Theme
ClearURLs
ClearURLs
by
Kevin
Kevin
Add to Firefox
Remove tracking elements from web links.
Users: 516,099
automaticDark - Time-Based Theme Changer
automaticDark - Time-Based Theme Changer
by
simonkhzhang
simonkhzhang
Add to Firefox
Time-based theme changer. Make Firefox change colors as the time of day changes.
Users: 15,692
Rosy Sky
Rosy Sky
by
g1308_
g1308_
Install Theme
Time Tracker - Web Habit Builder
Time Tracker - Web Habit Builder
by
sheepie z
sheepie z
Add to Firefox
Track the time you spend on the web, analyze your habits, block distracting sites & more.
Users: 14,423
Download All Images
Download All Images
by
Joe Ertaba
Joe Ertaba
Add to Firefox
Save images easily—just grab them from your current tab.
Users: 104,720
Double Phantasy
Double Phantasy
by
Dave
Dave
Install Theme
Find more add-ons
Privacy Policy
Privacy Policy...
|
Firefox
|
Linkwarden – Get this Extension for 🦊 Firefox (en- Linkwarden – Get this Extension for 🦊 Firefox (en-US) — Personal...
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl-zshDOCKERdeepgram keylanguages• 881DEV (-zsh)not setall languagesО ₴2APP (-zsh)• *3-zsh• x4|-zsh• ₴5|-zsh886-zsh100% <7O 87Sat 11 Apr 20:30:03-zsh181• *8monitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11T20:26:05.3487547ZINFO screenpipe: starting UI event capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFO2026-04-11T20:26:05.363864Zscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.378325ZINFO screenpipe_engine::ui_recorder: Starting UI event captureINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFO2026-04-11T20:26:051.384798ZINFOscreenpipe_engine::meeting_detector: meeting V2: detection loop started (base_interval=5s, profiles=12)screenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipe onport 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting visionrecordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine::eventdriven.capture: Sonteut dedup: skipping copture for monitoo 1 (hrs -9215443531147982392, triggeravisualchange)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: localretention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55.992688ZINFO2026-04-11T20:26:57.331771ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05408691ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB 3.3MB (2.8x), 61 JPEGs deleted...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Close tab
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Preskočiť hlavnú navigáciu
Preskočiť hlavnú navigáciu
Denník N
Denník N
Vyhľadávaný výraz
Hľadaj
Hľadaj
Vypnúť reklamu
Vypnúť reklamu
SK
SK
HU
HU
CZ
CZ
EU
EU
Otvoriť hlavné menu
MENU
SVET
SVET
DONALD TRUMP
DONALD TRUMP
IRÁN
IRÁN
VIKTOR ORBÁN
VIKTOR ORBÁN
VOJNA NA UKRAJINE
VOJNA NA UKRAJINE
KONFLIKT NA BLÍZKOM VÝCHODE
KONFLIKT NA BLÍZKOM VÝCHODE
MAĎARSKÉ VOĽBY
MAĎARSKÉ VOĽBY
USA
USA
RUSKO
RUSKO
VLADIMIR PUTIN
VLADIMIR PUTIN
VÝVOJ BOJOV NA UKRAJINE
VÝVOJ BOJOV NA UKRAJINE
Posun na nasledujúce
Irán
Irán
ODOBERAŤ
ODOBERAŤ
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
The New York Times
The New York Times
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Soňa Weissová
Soňa Weissová
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 24)
24
KOMENTÁRE
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Denisa Ballová
Denisa Ballová
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Jiří Sobota
Jiří Sobota
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 29)
29
KOMENTÁRE
Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Denník N
Denník N
a ďalší
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Tomáš Zemko
Tomáš Zemko
9. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Tomáš Zemko
Tomáš Zemko
9. apríla 2026
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Jan Wirnitzer
Jan Wirnitzer
9. apríla 2026
Zobraziť diskusiu (počet príspevkov: 3)
3
KOMENTÁRE
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Tomáš Vasilko
Tomáš Vasilko
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Denisa Ballová
Denisa Ballová
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 9)
9
KOMENTÁRE
Petr Mlejnek
Iránska vojna zvnútra: moc revolučných gárd, slabý prezident a boj o riadenie konfliktu
Iránska vojna zvnútra: moc revolučných gárd, slabý prezident a boj o riadenie konfliktu
Iránska vojna zvnútra: moc revolučných gárd, slabý prezident a boj o riadenie konfliktu
Petr Mlejnek
Petr Mlejnek
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Ekonomický newsfilter Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Ekonomický newsfilter Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Tomáš Zemko
Tomáš Zemko
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 3)
3
KOMENTÁRE
Už sme boli potrestaní dosť, hovoria Iránci, ktorí sa boja ďalších útokov na elektrárne a mosty
Už sme boli potrestaní dosť, hovoria Iránci, ktorí sa boja ďalších útokov na elektrárne a mosty
Už sme boli potrestaní dosť, hovoria Iránci, ktorí sa boja ďalších útokov na elektrárne a mosty
Už sme boli potrestaní dosť, hovoria Iránci, ktorí sa boja ďalších útokov na elektrárne a mosty
Denisa Ballová
Denisa Ballová
7. apríla 2026
Zobraziť diskusiu (počet príspevkov: 3)
3
KOMENTÁRE
Dalibor Roháč
O kolektívnej nepripravenosti na asymetrickú dronovú vojnu
O kolektívnej nepripravenosti na asymetrickú dronovú vojnu
O kolektívnej nepripravenosti na asymetrickú dronovú vojnu
Dalibor Roháč
Dalibor Roháč
7. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Trumpov svet (442. deň): Boh žehnaj vojne. Trump čoraz viac spája vojnu v Iráne s kresťanstvom
Trumpov svet (vývoj v Bielom dome) Trumpov svet (442. deň): Boh žehnaj vojne. Trump čoraz viac spája vojnu v Iráne s kresťanstvom
Trumpov svet (vývoj v Bielom dome) Trumpov svet (442. deň): Boh žehnaj vojne. Trump čoraz viac spája vojnu v Iráne s kresťanstvom
Trumpov svet (442. deň): Boh žehnaj vojne. Trump čoraz viac spája vojnu v Iráne s kresťanstvom
Anastasiia Furman
Anastasiia Furman
7. apríla 2026
Zobraziť diskusiu (počet príspevkov: 12)
12
KOMENTÁRE
Zastierací manéver CIA a zničené lietadlá za stovky miliónov. Ako Američania zachránili vojaka zo zostrelenej stíhačky F-15
Zastierací manéver CIA a zničené lietadlá za stovky miliónov. Ako Američania zachránili vojaka zo zostrelenej stíhačky F-15
Zastierací manéver CIA a zničené lietadlá za stovky miliónov. Ako Američania zachránili vojaka zo zostrelenej stíhačky F-15
Zastierací manéver CIA a zničené lietadlá za stovky miliónov. Ako Američania zachránili vojaka zo zostrelenej stíhačky F-15
Tomáš Čorej
Tomáš Čorej
5. apríla 2026
Zobraziť diskusiu (počet príspevkov: 60)
60
KOMENTÁRE
Nečakaný mierotvorca medzi Bielym domom a Teheránom: ako chce Pakistan ukončiť vojnu v Iráne
Nečakaný mierotvorca medzi Bielym domom a Teheránom: ako chce Pakistan ukončiť vojnu v Iráne
Nečakaný mierotvorca medzi Bielym domom a Teheránom: ako chce Pakistan ukončiť vojnu v Iráne
Nečakaný mierotvorca medzi Bielym domom a Teheránom: ako chce Pakistan ukončiť vojnu v Iráne
Tomáš Čorej
Tomáš Čorej
3. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)...
|
Firefox
|
Irán – Denník N — Personal
|
dennikn.sk/tema/iran/
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
report.py, preview, Editor Group 1
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Screen Reader Optimized
expanded
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/
Copy code to clipboard
OUT
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
List data and pipes directories
IN
ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/
Copy code to clipboard
OUT
2026-04-09
2026-04-11
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Bash
List tables in screenpipe SQLite database
IN
sqlite3 /volume1/screenpipe/db.sqlite ".tables"
Copy code to clipboard
OUT
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
[rerun: b3]
Bash
Get ocr_text table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(ocr_text);"
Copy code to clipboard
OUT
0|frame_id|INTEGER|1||0
1|text|TEXT|1||0
2|text_json|TEXT|0||0
3|app_name|TEXT|1|''|0
4|ocr_engine|TEXT|1|'unknown'|0
5|window_name|TEXT|0||0
6|focused|BOOLEAN|0|FALSE|0
7|text_length|INTEGER|0||0
8|sync_id|TEXT|0||0
9|synced_at|DATETIME|0||0
[rerun: b4]
Bash
Get audio_transcriptions table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(audio_transcriptions);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|audio_chunk_id|INTEGER|1||0
2|offset_index|INTEGER|1||0
3|timestamp|TIMESTAMP|1||0
4|transcription|TEXT|1||0
5|device|TEXT|1|''|0
6|is_input_device|BOOLEAN|1|TRUE|0
7|speaker_id|INTEGER|0||0
8|transcription_engine|TEXT|1|'Whisper'|0
9|start_time|REAL|0||0
10|end_time|REAL|0||0
11|text_length|INTEGER|0||0
12|sync_id|TEXT|0||0
13|synced_at|DATETIME|0||0
[rerun: b5]
Bash
Get frames, ui_events, video_chunks schemas
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|video_chunk_id|INTEGER|0|NULL|0
2|offset_index|INTEGER|1|0|0
3|timestamp|TIMESTAMP|1||0
4|name|TEXT|0||0
5|app_name|TEXT|0|NULL|0
6|window_name|TEXT|0|NULL|0
7|focused|BOOLEAN|0|NULL|0
8|browser_url|TEXT|0|NULL|0
9|device_name|TEXT|1|''|0
10|sync_id|TEXT|0||0
11|machine_id|TEXT|0||0
12|synced_at|DATETIME|0||0
13|snapshot_path|TEXT|0|NULL|0
14|accessibility_text|TEXT|0|NULL|0
15|accessibility_tree_json|TEXT|0|NULL|0
16|content_hash|INTEGER|0|NULL|0
17|simhash|INTEGER|0|NULL|0
18|capture_trigger|TEXT|0|NULL|0
19|text_source|TEXT|0|NULL|0
20|cloud_blob_id|TEXT|0|NULL|0
21|full_text|TEXT|0|NULL|0
22|elements_ref_frame_id|INTEGER|0|NULL|0
0|id|INTEGER|0||1
1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0
2|session_id|TEXT|0||0
3|relative_ms|INTEGER|1|0|0
4|event_type|TEXT|1||0
5|x|INTEGER|0||0
6|y|INTEGER|0||0
7|delta_x|INTEGER|0||0
8|delta_y|INTEGER|0||0
9|button|INTEGER|0||0
10|click_count|INTEGER|0||0
11|key_code|INTEGER|0||0
12|modifiers|INTEGER|0||0
13|text_content|TEXT|0||0
14|text_length|INTEGER|0||0
15|app_name|TEXT|0||0
16|app_pid|INTEGER|0||0
17|window_title|TEXT|0||0
18|browser_url|TEXT|0||0
19|element_role|TEXT|0||0
20|element_name|TEXT|0||0
21|element_value|TEXT|0||0
22|element_description|TEXT|0||0
23|element_automation_id|TEXT|0||0
24|element_bounds|TEXT|0||0
25|frame_id|INTEGER|0||0
26|sync_id|TEXT|0||0
27|machine_id|TEXT|0||0
28|synced_at|DATETIME|0||0
0|id|INTEGER|0||1
1|file_path|TEXT|1||0
2|device_name|TEXT|1|''|0
3|sync_id|TEXT|0||0
4|machine_id|TEXT|0||0
5|synced_at|DATETIME|0||0
6|fps|REAL|1|0.5|0
7|cloud_blob_id|TEXT|0|NULL|0
[rerun: b6]
Bash
Check data counts and date ranges
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*) FROM ocr_text;" 2>/dev/null
Copy code to clipboard
OUT
1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00
3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00
666
[rerun: b7]
Bash
Explore existing pipes for patterns
IN
ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50
Copy code to clipboard
OUT
pipe.md
[rerun: b8]
Bash
Read day-recap pipe documentation
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
[rerun: b9]
Bash
Sample app names from frames
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;"
Copy code to clipboard
OUT
Safari
Activity Monitor
Dia
iTerm2
Control Centre
UserNotificationCenter
Finder
Claude
Slack
Firefox
Raycast
NetAuthAgent
QuickTime Player
[rerun: b10]
Bash
Sample joined frame+ocr data for today
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT f.timestamp, o.app_name, o.window_name, substr(o.text, 1, 100) as text FROM frames f JOIN ocr_text o ON f.id = o.frame_id WHERE DATE(f.timestamp) = '2026-04-11' LIMIT 5;"
Copy code to clipboard
OUT
2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE
2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER
2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p
2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p
2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi
[rerun: b11]
Bash
Sample recent audio transcriptions
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;"
Copy code to clipboard
OUT
2026-04-09T17:02:52+00:00|.|System Audio
2026-04-09T16:59:22+00:00|Class is technically...|System Audio
2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio
[rerun: b12]
Thinking
Thinking
Good data to work with. Here's what we have:
frames
+
ocr_text
: Screen captures with OCR text, app name, window name (1135 frames so far)
audio_transcriptions
: Voice/system audio transcripts
ui_events
: Mouse/keyboard events with app context
video_chunks
: Raw video files
Before I start building, a few quick questions:
Tech stack
— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)
AI summaries
— Do you have a Claude API key to use for generating the actual summaries? Or should I integrate with a local model / skip AI for now?
What summaries matter most?
Day recap (what apps/windows you used, key text seen)
App time breakdown (time per app)
Audio/conversation recap
Custom searchable timeline
Here's the architecture I'm thinking:
Copy code to clipboard
/volume1/screenpipe/app/
├── main.py # FastAPI web UI
├── cli.py # Click CLI: `python cli.py day-recap`
├── db.py # Read-only queries against db.sqlite
├── consumers/
│ ├── activity.py # App usage, time per window
│ ├── ocr.py # OCR text aggregation + search
│ ├── audio.py # Transcription queries
│ └── summary.py # AI summary builder
└── static/
└── index.html # Single-page UI
CLI commands would look like:
Copy code to clipboard
python cli.py day-recap # EOD summary
python cli.py activity --date today # App time breakdown
python cli.py search "docker" # Search OCR/audio text
python cli.py serve # Launch web UI
Does this direction work? Any preferences on the stack or which summaries to prioritize?
Message actions
seesm ok
Thinking
Thinking
Bash
Check Python and available packages
IN
python3 --version && pip3 list 2>/dev/null | grep -E "fastapi|uvicorn|click|anthropic|httpx|jinja"
Copy code to clipboard
OUT
Python 3.11.2
[rerun: b1]
Bash
Verify join works for today's data
IN
sqlite3 /volume1/screenpipe/db.sqlite "
SELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len
FROM frames f JOIN ocr_text o ON f.id = o.frame_id
WHERE DATE(f.timestamp) = '2026-04-11'
ORDER BY f.timestamp DESC LIMIT 3;
"
Copy code to clipboard
OUT
2026-04-11T12:54:42.597794+00:00|||2111
2026-04-11T12:54:41.915916+00:00|||2110
2026-04-11T12:54:39.912712+00:00|||2111
[rerun: b2]
Bash
Install required packages
IN
pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5
Copy code to clipboard
OUT
/bin/bash: line 1: pip3: command not found
[rerun: b3]
Bash
Find pip
IN
which pip || which pip3 || python3 -m pip --version 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
[rerun: b4]
Bash
Bootstrap pip then install packages
IN
python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10
Copy code to clipboard
OUT
Exit code 1
/usr/bin/python3: No module named ensurepip
[rerun: b5]
Bash
Install pip via apt
IN
apt-get install -y python3-pip python3-venv 2>&1 | tail -5
Copy code to clipboard
OUT
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
[rerun: b6]
Bash
Install pip with sudo
Reason:
lets make it in docker, not to install it in nas directly
IN
sudo apt-get install -y python3-pip python3-venv 2>&1 | tail -5
Copy code to clipboard
Good call. Let me check what Docker setup you already have and build a proper containerized app.
Bash
Check existing docker-compose for reference
IN
ls /volume2/docker/paperlessngx/ && cat /volume2/docker/paperlessngx/docker-compose.yml 2>/dev/null | head -30
Copy code to clipboard
OUT
consume
data
db
docker-compose.yml
export
mcp-server
media
redis
trash
services:
redis:
image: redis:8
command:
- /bin/sh
- -c
- redis-server --requirepass redispass
container_name: PaperlessNGX-REDIS
hostname: paper-redis
security_opt:
- no-new-privileges:true
read_only: true
user: 1000:10
healthcheck:
test: ["CMD-SHELL", "redis-cli ping || exit 1"]
volumes:
- /volume2/docker/paperlessngx/redis:/data:rw
environment:
TZ: Europe/Sofia
restart: always
db:
image: postgres:17
container_name: PaperlessNGX-DB
hostname: paper-db
mem_limit: 1g
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "paperless", "-U", "paperlessuser"]
[rerun: b7]
Bash
Check Docker availability
IN...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpall100% <7-zshDOCKERdeepgram keylanguages• 881DEV (-zsh)not setall languagesО ₴2APP (-zsh)• *3-zsh• x4|-zsh• ₴5|-zsh886-zshO 87Sat 11 Apr 20:30:22-zsh181• *8monitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11T20:26:05.3487547ZINFO screenpipe: starting UI event capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFO2026-04-11T20:26:05.363864Zscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.378325ZINFO screenpipe_engine::ui_recorder: Starting UI event captureINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFO2026-04-11T20:26:051.384798ZINFOscreenpipe_engine::meeting_detector: meeting V2: detection loop started (base_interval=5s, profiles=12)screenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipe onport 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting visionrecordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine::eventdriven.capture: Sonteut dedup: skipping copture for monitoo 1 (hrs -9215443531147982392, triggeravisualchange)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: localretention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55.992688ZINFO2026-04-11T20:26:57.331771ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05408691ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB 3.3MB (2.8x), 61 JPEGs deleted...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl-zshDOCKERdeepgram keylanguages• 881DEV (-zsh)not setall languagesО ₴2APP (-zsh)• *3-zsh• x4|-zsh• ₴5|-zsh886-zsh100% <7O 87Sat 11 Apr 20:30:25-zsh181• *8monitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled. only error-level data will be sent.to disable, use the --disable-telemetry flag.check latest changes here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11T20:26:05.3487547ZINFO screenpipe: starting UI event capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFO2026-04-11T20:26:05.363864Zscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.378325ZINFO screenpipe_engine::ui_recorder: Starting UI event captureINFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFO2026-04-11T20:26:051.384798ZINFOscreenpipe_engine::meeting_detector: meeting V2: detection loop started (base_interval=5s, profiles=12)screenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipe onport 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting visionrecordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine::eventdriven.capture: Sonteut dedup: skipping copture for monitoo 1 (hrs -9215443531147982392, triggeravisualchange)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: localretention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55.992688ZINFO2026-04-11T20:26:57.331771ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05408691ZINFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB 3.3MB (2.8x), 61 JPEGs deleted...
|
NULL
|
NULL
|
NULL
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
report.py, preview, Editor Group 1
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Screen Reader Optimized
expanded
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/
Copy code to clipboard
OUT
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
List data and pipes directories
IN
ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/
Copy code to clipboard
OUT
2026-04-09
2026-04-11
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Bash
List tables in screenpipe SQLite database
IN
sqlite3 /volume1/screenpipe/db.sqlite ".tables"
Copy code to clipboard
OUT
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
[rerun: b3]
Bash
Get ocr_text table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(ocr_text);"
Copy code to clipboard
OUT
0|frame_id|INTEGER|1||0
1|text|TEXT|1||0
2|text_json|TEXT|0||0
3|app_name|TEXT|1|''|0
4|ocr_engine|TEXT|1|'unknown'|0
5|window_name|TEXT|0||0
6|focused|BOOLEAN|0|FALSE|0
7|text_length|INTEGER|0||0
8|sync_id|TEXT|0||0
9|synced_at|DATETIME|0||0
[rerun: b4]
Bash
Get audio_transcriptions table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(audio_transcriptions);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|audio_chunk_id|INTEGER|1||0
2|offset_index|INTEGER|1||0
3|timestamp|TIMESTAMP|1||0
4|transcription|TEXT|1||0
5|device|TEXT|1|''|0
6|is_input_device|BOOLEAN|1|TRUE|0
7|speaker_id|INTEGER|0||0
8|transcription_engine|TEXT|1|'Whisper'|0
9|start_time|REAL|0||0
10|end_time|REAL|0||0
11|text_length|INTEGER|0||0
12|sync_id|TEXT|0||0
13|synced_at|DATETIME|0||0
[rerun: b5]
Bash
Get frames, ui_events, video_chunks schemas
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|video_chunk_id|INTEGER|0|NULL|0
2|offset_index|INTEGER|1|0|0
3|timestamp|TIMESTAMP|1||0
4|name|TEXT|0||0
5|app_name|TEXT|0|NULL|0
6|window_name|TEXT|0|NULL|0
7|focused|BOOLEAN|0|NULL|0
8|browser_url|TEXT|0|NULL|0
9|device_name|TEXT|1|''|0
10|sync_id|TEXT|0||0
11|machine_id|TEXT|0||0
12|synced_at|DATETIME|0||0
13|snapshot_path|TEXT|0|NULL|0
14|accessibility_text|TEXT|0|NULL|0
15|accessibility_tree_json|TEXT|0|NULL|0
16|content_hash|INTEGER|0|NULL|0
17|simhash|INTEGER|0|NULL|0
18|capture_trigger|TEXT|0|NULL|0
19|text_source|TEXT|0|NULL|0
20|cloud_blob_id|TEXT|0|NULL|0
21|full_text|TEXT|0|NULL|0
22|elements_ref_frame_id|INTEGER|0|NULL|0
0|id|INTEGER|0||1
1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0
2|session_id|TEXT|0||0
3|relative_ms|INTEGER|1|0|0
4|event_type|TEXT|1||0
5|x|INTEGER|0||0
6|y|INTEGER|0||0
7|delta_x|INTEGER|0||0
8|delta_y|INTEGER|0||0
9|button|INTEGER|0||0
10|click_count|INTEGER|0||0
11|key_code|INTEGER|0||0
12|modifiers|INTEGER|0||0
13|text_content|TEXT|0||0
14|text_length|INTEGER|0||0
15|app_name|TEXT|0||0
16|app_pid|INTEGER|0||0
17|window_title|TEXT|0||0
18|browser_url|TEXT|0||0
19|element_role|TEXT|0||0
20|element_name|TEXT|0||0
21|element_value|TEXT|0||0
22|element_description|TEXT|0||0
23|element_automation_id|TEXT|0||0
24|element_bounds|TEXT|0||0
25|frame_id|INTEGER|0||0
26|sync_id|TEXT|0||0
27|machine_id|TEXT|0||0
28|synced_at|DATETIME|0||0
0|id|INTEGER|0||1
1|file_path|TEXT|1||0
2|device_name|TEXT|1|''|0
3|sync_id|TEXT|0||0
4|machine_id|TEXT|0||0
5|synced_at|DATETIME|0||0
6|fps|REAL|1|0.5|0
7|cloud_blob_id|TEXT|0|NULL|0
[rerun: b6]
Bash
Check data counts and date ranges
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*) FROM ocr_text;" 2>/dev/null
Copy code to clipboard
OUT
1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00
3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00
666
[rerun: b7]
Bash
Explore existing pipes for patterns
IN
ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50
Copy code to clipboard
OUT
pipe.md
[rerun: b8]
Bash
Read day-recap pipe documentation
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
[rerun: b9]
Bash
Sample app names from frames
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;"
Copy code to clipboard
OUT
Safari
Activity Monitor
Dia
iTerm2
Control Centre
UserNotificationCenter
Finder
Claude
Slack
Firefox
Raycast
NetAuthAgent
QuickTime Player
[rerun: b10]
Bash
Sample joined frame+ocr data for today
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT f.timestamp, o.app_name, o.window_name, substr(o.text, 1, 100) as text FROM frames f JOIN ocr_text o ON f.id = o.frame_id WHERE DATE(f.timestamp) = '2026-04-11' LIMIT 5;"
Copy code to clipboard
OUT
2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE
2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER
2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p
2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p
2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi
[rerun: b11]
Bash
Sample recent audio transcriptions
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;"
Copy code to clipboard
OUT
2026-04-09T17:02:52+00:00|.|System Audio
2026-04-09T16:59:22+00:00|Class is technically...|System Audio
2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio
[rerun: b12]
Thinking
Thinking
Good data to work with. Here's what we have:
frames
+
ocr_text
: Screen captures with OCR text, app name, window name (1135 frames so far)
audio_transcriptions
: Voice/system audio transcripts
ui_events
: Mouse/keyboard events with app context
video_chunks
: Raw video files
Before I start building, a few quick questions:
Tech stack
— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)
AI summaries
— Do you have a Claude API key to use for generating the actual summaries? Or should I integrate with a local model / skip AI for now?
What summaries matter most?
Day recap (what apps/windows you used, key text seen)
App time breakdown (time per app)
Audio/conversation recap
Custom searchable timeline
Here's the architecture I'm thinking:
Copy code to clipboard
/volume1/screenpipe/app/
├── main.py # FastAPI web UI
├── cli.py # Click CLI: `python cli.py day-recap`
├── db.py # Read-only queries against db.sqlite
├── consumers/
│ ├── activity.py # App usage, time per window
│ ├── ocr.py # OCR text aggregation + search
│ ├── audio.py # Transcription queries
│ └── summary.py # AI summary builder
└── static/
└── index.html # Single-page UI
CLI commands would look like:
Copy code to clipboard
python cli.py day-recap # EOD summary
python cli.py activity --date today # App time breakdown
python cli.py search "docker" # Search OCR/audio text
python cli.py serve # Launch web UI
Does this direction work? Any preferences on the stack or which summaries to prioritize?...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
NULL
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
report.py, preview, Editor Group 1
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Screen Reader Optimized
expanded
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/
Copy code to clipboard
OUT
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
List data and pipes directories
IN
ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/
Copy code to clipboard
OUT
2026-04-09
2026-04-11
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Bash
List tables in screenpipe SQLite database
IN
sqlite3 /volume1/screenpipe/db.sqlite ".tables"
Copy code to clipboard
OUT
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
[rerun: b3]
Bash
Get ocr_text table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(ocr_text);"
Copy code to clipboard
OUT
0|frame_id|INTEGER|1||0
1|text|TEXT|1||0
2|text_json|TEXT|0||0
3|app_name|TEXT|1|''|0
4|ocr_engine|TEXT|1|'unknown'|0
5|window_name|TEXT|0||0
6|focused|BOOLEAN|0|FALSE|0
7|text_length|INTEGER|0||0
8|sync_id|TEXT|0||0
9|synced_at|DATETIME|0||0
[rerun: b4]
Bash
Get audio_transcriptions table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(audio_transcriptions);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|audio_chunk_id|INTEGER|1||0
2|offset_index|INTEGER|1||0
3|timestamp|TIMESTAMP|1||0
4|transcription|TEXT|1||0
5|device|TEXT|1|''|0
6|is_input_device|BOOLEAN|1|TRUE|0
7|speaker_id|INTEGER|0||0
8|transcription_engine|TEXT|1|'Whisper'|0
9|start_time|REAL|0||0
10|end_time|REAL|0||0
11|text_length|INTEGER|0||0
12|sync_id|TEXT|0||0
13|synced_at|DATETIME|0||0
[rerun: b5]
Bash
Get frames, ui_events, video_chunks schemas
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|video_chunk_id|INTEGER|0|NULL|0
2|offset_index|INTEGER|1|0|0
3|timestamp|TIMESTAMP|1||0
4|name|TEXT|0||0
5|app_name|TEXT|0|NULL|0
6|window_name|TEXT|0|NULL|0
7|focused|BOOLEAN|0|NULL|0
8|browser_url|TEXT|0|NULL|0
9|device_name|TEXT|1|''|0
10|sync_id|TEXT|0||0
11|machine_id|TEXT|0||0
12|synced_at|DATETIME|0||0
13|snapshot_path|TEXT|0|NULL|0
14|accessibility_text|TEXT|0|NULL|0
15|accessibility_tree_json|TEXT|0|NULL|0
16|content_hash|INTEGER|0|NULL|0
17|simhash|INTEGER|0|NULL|0
18|capture_trigger|TEXT|0|NULL|0
19|text_source|TEXT|0|NULL|0
20|cloud_blob_id|TEXT|0|NULL|0
21|full_text|TEXT|0|NULL|0
22|elements_ref_frame_id|INTEGER|0|NULL|0
0|id|INTEGER|0||1
1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0
2|session_id|TEXT|0||0
3|relative_ms|INTEGER|1|0|0
4|event_type|TEXT|1||0
5|x|INTEGER|0||0
6|y|INTEGER|0||0
7|delta_x|INTEGER|0||0
8|delta_y|INTEGER|0||0
9|button|INTEGER|0||0
10|click_count|INTEGER|0||0
11|key_code|INTEGER|0||0
12|modifiers|INTEGER|0||0
13|text_content|TEXT|0||0
14|text_length|INTEGER|0||0
15|app_name|TEXT|0||0
16|app_pid|INTEGER|0||0
17|window_title|TEXT|0||0
18|browser_url|TEXT|0||0
19|element_role|TEXT|0||0
20|element_name|TEXT|0||0
21|element_value|TEXT|0||0
22|element_description|TEXT|0||0
23|element_automation_id|TEXT|0||0
24|element_bounds|TEXT|0||0
25|frame_id|INTEGER|0||0
26|sync_id|TEXT|0||0
27|machine_id|TEXT|0||0
28|synced_at|DATETIME|0||0
0|id|INTEGER|0||1
1|file_path|TEXT|1||0
2|device_name|TEXT|1|''|0
3|sync_id|TEXT|0||0
4|machine_id|TEXT|0||0
5|synced_at|DATETIME|0||0
6|fps|REAL|1|0.5|0
7|cloud_blob_id|TEXT|0|NULL|0
[rerun: b6]
Bash
Check data counts and date ranges
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*) FROM ocr_text;" 2>/dev/null
Copy code to clipboard
OUT
1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00
3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00
666
[rerun: b7]
Bash
Explore existing pipes for patterns
IN
ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50
Copy code to clipboard
OUT
pipe.md
[rerun: b8]
Bash
Read day-recap pipe documentation
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
[rerun: b9]
Bash
Sample app names from frames
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;"
Copy code to clipboard
OUT
Safari
Activity Monitor
Dia
iTerm2
Control Centre
UserNotificationCenter
Finder
Claude
Slack
Firefox
Raycast
NetAuthAgent
QuickTime Player
[rerun: b10]
Bash
Sample joined frame+ocr data for today
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT f.timestamp, o.app_name, o.window_name, substr(o.text, 1, 100) as text FROM frames f JOIN ocr_text o ON f.id = o.frame_id WHERE DATE(f.timestamp) = '2026-04-11' LIMIT 5;"
Copy code to clipboard
OUT
2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE
2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER
2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p
2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p
2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi
[rerun: b11]
Bash
Sample recent audio transcriptions
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;"
Copy code to clipboard
OUT
2026-04-09T17:02:52+00:00|.|System Audio
2026-04-09T16:59:22+00:00|Class is technically...|System Audio
2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio
[rerun: b12]
Thinking
Thinking
Good data to work with. Here's what we have:
frames
+
ocr_text
: Screen captures with OCR text, app name, window name (1135 frames so far)
audio_transcriptions
: Voice/system audio transcripts
ui_events
: Mouse/keyboard events with app context
video_chunks
: Raw video files
Before I start building, a few quick questions:
Tech stack
— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)
AI summaries
— Do you have a Claude API key to use for generating the actual summaries? Or should I integrate with a local model / skip AI for now?
What summaries matter most?
Day recap (what apps/windows you used, key text seen)
App time breakdown (time per app)
Audio/conversation recap
Custom searchable timeline
Here's the architecture I'm thinking:
Copy code to clipboard
/volume1/screenpipe/app/
├── main.py # FastAPI web UI
├── cli.py # Click CLI: `python cli.py day-recap`
├── db.py # Read-only queries against db.sqlite
├── consumers/
│ ├── activity.py # App usage, time per window
│ ├── ocr.py # OCR text aggregation + search
│ ├── audio.py # Transcription queries
│ └── summary.py # AI summary builder
└── static/
└── index.html # Single-page UI
CLI commands would look like:
Copy code to clipboard
python cli.py day-recap # EOD summary
python cli.py activity --date today # App time breakdown
python cli.py search "docker" # Search OCR/audio text
python cli.py serve # Launch web UI
Does this direction work? Any preferences on the stack or which summaries to prioritize?
Message actions
seesm ok
Thinking
Thinking
Bash
Check Python and available packages
IN
python3 --version && pip3 list 2>/dev/null | grep -E "fastapi|uvicorn|click|anthropic|httpx|jinja"
Copy code to clipboard
OUT
Python 3.11.2
[rerun: b1]
Bash
Verify join works for today's data
IN
sqlite3 /volume1/screenpipe/db.sqlite "
SELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len
FROM frames f JOIN ocr_text o ON f.id = o.frame_id
WHERE DATE(f.timestamp) = '2026-04-11'
ORDER BY f.timestamp DESC LIMIT 3;
"
Copy code to clipboard
OUT
2026-04-11T12:54:42.597794+00:00|||2111
2026-04-11T12:54:41.915916+00:00|||2110
2026-04-11T12:54:39.912712+00:00|||2111
[rerun: b2]
Bash
Install required packages
IN
pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5
Copy code to clipboard
OUT
/bin/bash: line 1: pip3: command not found
[rerun: b3]
Bash
Find pip
IN
which pip || which pip3 || python3 -m pip --version 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
[rerun: b4]
Bash
Bootstrap pip then install packages
IN
python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10
Copy code to clipboard
OUT
Exit code 1
/usr/bin/python3: No module named ensurepip
[rerun: b5]
Bash
Install pip via apt
IN
apt-get install -y python3-pip python3-venv 2>&1 | tail -5
Copy code to clipboard
OUT
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
[rerun: b6]...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
NULL
|
|
Physical Memory:
16,00 GB
Memory Used:
13,32 GB
Ca Physical Memory:
16,00 GB
Memory Used:
13,32 GB
Cached Files:
2,66 GB
Swap Used:
0 bytes
6,19 GB
Wired Memory:
Compressed:
1,96 GB
4,59 GB
App Memory:
MEMORY PRESSURE
Claude Helper (Renderer)
683,7 MB
15
218
2517
lukas
Firefox
642,7 MB
89
797
16623
lukas
WindowServer
627,2 MB
22
6 113
407
_windowserver
FirefoxCP Isolated Web Content
586,8 MB
24
120
18343
lukas
FirefoxCP Isolated Web Content
586,3 MB
27
125
18287
lukas
FirefoxCP Isolated Web Content
576,5 MB
24
121
16656
lukas
Firefox GPU Helper
538,0 MB
30
243
16628
lukas
Notion Helper (Renderer)
364,5 MB
20
315
1148
lukas
FirefoxCP Isolated Web Content
352,3 MB
30
137
16799
lukas
FirefoxCP Isolated Web Content
352,0 MB
24
116
17335
lukas
FirefoxCP Isolated Web Content
322,3 MB
27
127
16750
lukas
Postman Helper (Renderer)
292,7 MB
24
253
42547
lukas
Code Helper (Renderer)
271,9 MB
20
308
32708
lukas
FirefoxCP Isolated Web Content
232,9 MB
24
121
17319
lukas
iTerm2
216,2 MB
7
919
4878
lukas
FirefoxCP Privileged Mozilla
195,4 MB
23
125
18134
lukas
Code Helper (Renderer)
181,0 MB
16
167
42991
lukas
Claude
180,0 MB
55
713
2501
lukas
FirefoxCP Isolated Web Content
177,2 MB
23
118
18359
lukas
FirefoxCP Isolated Web Content
176,6 MB
23
121
42273
lukas
Code Helper (GPU)
161,6 MB
19
200
32705
lukas
FirefoxCP WebExtensions
158,8 MB
24
116
16633
lukas
Postman
148,0 MB
46
430
42531
lukas
Code
145,8 MB
42
598
32700
lukas
Wispr Flow Helper (GPU)
138,4 MB
17
224
3813
lukas
Bitwarden Helper (Renderer)
138,3 MB
17
208
16862
lukas
CursorUIViewService (Not Responding)
134,1 MB
3
4 550
842
lukas
FirefoxCP Isolated Web Content
128,0 MB
22
113
18346
lukas
FirefoxCP Isolated Web Content
127,7 MB
23
118
26456
lukas
Wispr Flow
126,9 MB
50
535
3800
lukas
Wispr Flow Helper (Renderer)
117,1 MB
23
486
3837
lukas
Raycast
110,1 MB
10
407
38842
lukas
Finder
102,4 MB
6
517
743
lukas
FirefoxCP Isolated Web Content
99,5 MB
23
114
18293
lukas
Claude Helper
95,8 MB
18
207
2511
lukas
FirefoxCP Isolated Web Content
88,2 MB
23
116
27445
lukas
FirefoxCP Privileged Content
88,1 MB
22
116
16644
lukas
Activity Monitor
86,7 MB
5
385
17101
lukas
FirefoxCP Isolated Web Content
85,8 MB
23
114
18329
lukas
FirefoxCP Isolated Web Content
84,6 MB
24
121
17432
lukas
Code Helper
83,5 MB
23
112
32929
lukas
Notion
82,0 MB
45
527
843
lukas
FirefoxCP Isolated Web Content
79,2 MB
22
112
18290
lukas
Bitwarden
78,2 MB
44
482
16856
lukas
FirefoxCP Isolated Web Content
77,1 MB
23
114
18320
lukas
Firefox Media Plugin Helper
76,8 MB
6
72
26451
lukas
loginwindow
76,4 MB
3
606
410
lukas
VTDecoderXPCService
76,3 MB
2
72
995
lukas
FirefoxCP Isolated Web Content
74,6 MB
22
113
18330
lukas
Notion Helper (Renderer)
74,3 MB
18
171
1822
lukas
Code Helper (Plugin)
59,6 MB
22
120
42911
lukas
Wispr Flow Helper (Renderer)
59,3 MB
17
362
3834
lukas
1Password
58,8 MB...
|
Activity Monitor
|
Activity Monitor – All Processes
|
NULL
|
|
Search
Lukas Kovalik, Apple ID
1
1
Wi‑Fi
Bluetooth Search
Lukas Kovalik, Apple ID
1
1
Wi‑Fi
Bluetooth
Network
VPN
Notifications
Sound
Focus
Screen Time
General
Appearance
Accessibility
Control Centre
Siri & Spotlight
Privacy & Security
Desktop & Dock
Displays
Wallpaper
Screen Saver
Battery
Lock Screen
Touch ID & Password
Users & Groups
Passwords
Internet Accounts
Game Center
Wallet & Apple Pay
Keyboard
Mouse
Trackpad
Printers & Scanners
Appearance
Light
Dark
Auto
Accent colour
Multicolour
Blue
Purple
Pink
Red
Orange...
|
System Settings
|
Appearance
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlA100% <7-zshDOCKERlanguages• 881DEV (-zsh)O 82APP (-zsh)• хз-zsh• ×4-zsh• 85-zsh886-zshO x7Sat 11 Apr 20:31:07-zsh181• *8|all languagesmonitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled.onlyerror-level data willbe sent.to disable, use the --disable-telemetry flag.checklatestchanges here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes: pipe scheduler started (generation 2)2026-04-11T20:26:05.348754ZINFOscreenpipe:starting UI2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.shartine inseven copture2026-04-11T20:26:05.358540ZINFOscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.363864ZINFOscreenpipe_engine::ui_recorder: Starting Ul event capture2026-04-11T20:26:05.378325ZINFO2026-04-11T20:26:05.378392Zscreenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)INFO screenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB (2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFOscreenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)2026-04-11T20:26:05.384798ZINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFO2026-04-11T20:26:05.528107Zscreenpipe_connect: :mdns: mdns: advertising screenpipe on port 3030INFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting vision recordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listпгагоа2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)screenpipe_engine::event_driven_capture: event-driven capture startedfor monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine:: eventdrivencapture: sontent dedup: skipping copture for monitor 1 (ha5 -921544353114798391, trigger-visual_change)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe:local retention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55..9926882INFOscreenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11720:26:57.331771ZINFO2026-04-11T20:27:05.408691ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible framesscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deleted2026-04-11T20:31:05.374969ZINFOscreenpipe_engine::server:api_usage_5min: 1 requests...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlA100% <7-zshDOCKERlanguages• 881DEV (-zsh)O 82APP (-zsh)• хз-zsh• ×4-zsh• 85-zsh886-zshO 87Sat 11 Apr 20:31:13-zsh181• *8|all languagesmonitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled.onlyerror-level data willbe sent.to disable, use the --disable-telemetry flag.checklatestchanges here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes: pipe scheduler started (generation 2)2026-04-11T20:26:05.348754ZINFOscreenpipe:starting UI2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.shartine inseven copture2026-04-11T20:26:05.358540ZINFOscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.363864ZINFOscreenpipe_engine::ui_recorder: Starting Ul event capture2026-04-11T20:26:05.378325ZINFO2026-04-11T20:26:05.378392Zscreenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)INFO screenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB (2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFOscreenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)2026-04-11T20:26:05.384798ZINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect: :mdns: mdns: advertising screenpipe on port 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting vision recordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listпгагоа2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)screenpipe_engine::event_driven_capture: event-driven capture startedfor monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine:: eventdrivencapture: sontent dedup: skipping copture for monitor 1 (ha5 -921544353114798391, trigger-visual_change)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe:local retention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55..9926882INFOscreenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11720:26:57.331771ZINFO2026-04-11T20:27:05.408691ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible framesscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deleted2026-04-11T20:31:05.374969ZINFOscreenpipe_engine::server:api_usage_5min: 1 requests...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlA100% <7-zshDOCKERlanguages• 881DEV (-zsh)O 82APP (-zsh)• хз-zsh• ×4-zsh• 85-zsh886-zshO x7Sat 11 Apr 20:31:21-zsh181• *8all languagesmonitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled.onlyerror-level data willbe sent.to disable, use the --disable-telemetry flag.checklatestchanges here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes: pipe scheduler started (generation 2)2026-04-11T20:26:05.348754ZINFOscreenpipe:starting UI2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.shartine inseven copture2026-04-11T20:26:05.358540ZINFOscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.363864ZINFOscreenpipe_engine::ui_recorder: Starting UI event capture2026-04-11T20:26:05.378325ZINFO2026-04-11T20:26:05.378392Zscreenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)INFO screenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB (2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFOscreenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)2026-04-11T20:26:05.384798ZINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect: :mdns: mdns: advertising screenpipe on port 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting vision recordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listпгагоа2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)screenpipe_engine::event_driven_capture: event-driven capture startedfor monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine:: eventdriven.capture: sontent dequp: Skipping copture for monitor 1 (ha5 -92544353114798391, trigger-visual_change)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe:local retention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55..9926882INFOscreenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11720:26:57.331771ZINFO2026-04-11T20:27:05.408691ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible framesscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deleted2026-04-11T20:31:05.374969ZINFOscreenpipe_engine::server:api_usage_5min: 1 requests...
|
NULL
|
NULL
|
NULL
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Python
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 4
Ln 17, Col 87
Screen Reader Optimized
expanded
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/
Copy code to clipboard
OUT
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
List data and pipes directories
IN
ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/
Copy code to clipboard
OUT
2026-04-09
2026-04-11
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Bash
List tables in screenpipe SQLite database
IN
sqlite3 /volume1/screenpipe/db.sqlite ".tables"
Copy code to clipboard
OUT
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
[rerun: b3]
Bash
Get ocr_text table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(ocr_text);"
Copy code to clipboard
OUT
0|frame_id|INTEGER|1||0
1|text|TEXT|1||0
2|text_json|TEXT|0||0
3|app_name|TEXT|1|''|0
4|ocr_engine|TEXT|1|'unknown'|0
5|window_name|TEXT|0||0
6|focused|BOOLEAN|0|FALSE|0
7|text_length|INTEGER|0||0
8|sync_id|TEXT|0||0
9|synced_at|DATETIME|0||0
[rerun: b4]
Bash
Get audio_transcriptions table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(audio_transcriptions);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|audio_chunk_id|INTEGER|1||0
2|offset_index|INTEGER|1||0
3|timestamp|TIMESTAMP|1||0
4|transcription|TEXT|1||0
5|device|TEXT|1|''|0
6|is_input_device|BOOLEAN|1|TRUE|0
7|speaker_id|INTEGER|0||0
8|transcription_engine|TEXT|1|'Whisper'|0
9|start_time|REAL|0||0
10|end_time|REAL|0||0
11|text_length|INTEGER|0||0
12|sync_id|TEXT|0||0
13|synced_at|DATETIME|0||0
[rerun: b5]
Bash
Get frames, ui_events, video_chunks schemas
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|video_chunk_id|INTEGER|0|NULL|0
2|offset_index|INTEGER|1|0|0
3|timestamp|TIMESTAMP|1||0
4|name|TEXT|0||0
5|app_name|TEXT|0|NULL|0
6|window_name|TEXT|0|NULL|0
7|focused|BOOLEAN|0|NULL|0
8|browser_url|TEXT|0|NULL|0
9|device_name|TEXT|1|''|0
10|sync_id|TEXT|0||0
11|machine_id|TEXT|0||0
12|synced_at|DATETIME|0||0
13|snapshot_path|TEXT|0|NULL|0
14|accessibility_text|TEXT|0|NULL|0
15|accessibility_tree_json|TEXT|0|NULL|0
16|content_hash|INTEGER|0|NULL|0
17|simhash|INTEGER|0|NULL|0
18|capture_trigger|TEXT|0|NULL|0
19|text_source|TEXT|0|NULL|0
20|cloud_blob_id|TEXT|0|NULL|0
21|full_text|TEXT|0|NULL|0
22|elements_ref_frame_id|INTEGER|0|NULL|0
0|id|INTEGER|0||1
1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0
2|session_id|TEXT|0||0
3|relative_ms|INTEGER|1|0|0
4|event_type|TEXT|1||0
5|x|INTEGER|0||0
6|y|INTEGER|0||0
7|delta_x|INTEGER|0||0
8|delta_y|INTEGER|0||0
9|button|INTEGER|0||0
10|click_count|INTEGER|0||0
11|key_code|INTEGER|0||0
12|modifiers|INTEGER|0||0
13|text_content|TEXT|0||0
14|text_length|INTEGER|0||0
15|app_name|TEXT|0||0
16|app_pid|INTEGER|0||0
17|window_title|TEXT|0||0
18|browser_url|TEXT|0||0
19|element_role|TEXT|0||0
20|element_name|TEXT|0||0
21|element_value|TEXT|0||0
22|element_description|TEXT|0||0
23|element_automation_id|TEXT|0||0
24|element_bounds|TEXT|0||0
25|frame_id|INTEGER|0||0
26|sync_id|TEXT|0||0
27|machine_id|TEXT|0||0
28|synced_at|DATETIME|0||0
0|id|INTEGER|0||1
1|file_path|TEXT|1||0
2|device_name|TEXT|1|''|0
3|sync_id|TEXT|0||0
4|machine_id|TEXT|0||0
5|synced_at|DATETIME|0||0
6|fps|REAL|1|0.5|0
7|cloud_blob_id|TEXT|0|NULL|0
[rerun: b6]
Bash
Check data counts and date ranges
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*) FROM ocr_text;" 2>/dev/null
Copy code to clipboard
OUT
1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00
3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00
666
[rerun: b7]
Bash
Explore existing pipes for patterns
IN
ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50
Copy code to clipboard
OUT
pipe.md
[rerun: b8]
Bash
Read day-recap pipe documentation
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
[rerun: b9]
Bash
Sample app names from frames
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;"
Copy code to clipboard
OUT
Safari
Activity Monitor
Dia
iTerm2
Control Centre
UserNotificationCenter
Finder
Claude
Slack
Firefox
Raycast
NetAuthAgent
QuickTime Player
[rerun: b10]
Bash
Sample joined frame+ocr data for today
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT f.timestamp, o.app_name, o.window_name, substr(o.text, 1, 100) as text FROM frames f JOIN ocr_text o ON f.id = o.frame_id WHERE DATE(f.timestamp) = '2026-04-11' LIMIT 5;"
Copy code to clipboard
OUT
2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE
2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER
2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p
2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p
2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi
[rerun: b11]
Bash
Sample recent audio transcriptions
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;"
Copy code to clipboard
OUT
2026-04-09T17:02:52+00:00|.|System Audio
2026-04-09T16:59:22+00:00|Class is technically...|System Audio
2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio
[rerun: b12]
Thinking
Thinking
Good data to work with. Here's what we have:
frames
+
ocr_text
: Screen captures with OCR text, app name, window name (1135 frames so far)
audio_transcriptions
: Voice/system audio transcripts
ui_events
: Mouse/keyboard events with app context
video_chunks
: Raw video files
Before I start building, a few quick questions:
Tech stack
— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)
AI summaries
— Do you have a Claude API key to use for generating the actual summaries? Or should I integrate with a local model / skip AI for now?
What summaries matter most?
Day recap (what apps/windows you used, key text seen)
App time breakdown (time per app)
Audio/conversation recap
Custom searchable timeline
Here's the architecture I'm thinking:
Copy code to clipboard
/volume1/screenpipe/app/
├── main.py # FastAPI web UI
├── cli.py # Click CLI: `python cli.py day-recap`
├── db.py # Read-only queries against db.sqlite
├── consumers/
│ ├── activity.py # App usage, time per window
│ ├── ocr.py # OCR text aggregation + search
│ ├── audio.py # Transcription queries
│ └── summary.py # AI summary builder
└── static/
└── index.html # Single-page UI
CLI commands would look like:
Copy code to clipboard
python cli.py day-recap # EOD summary
python cli.py activity --date today # App time breakdown
python cli.py search "docker" # Search OCR/audio text
python cli.py serve # Launch web UI
Does this direction work? Any preferences on the stack or which summaries to prioritize?
Message actions
seesm ok
Thinking
Thinking
Bash
Check Python and available packages
IN
python3 --version && pip3 list 2>/dev/null | grep -E "fastapi|uvicorn|click|anthropic|httpx|jinja"
Copy code to clipboard
OUT
Python 3.11.2
[rerun: b1]
Bash
Verify join works for today's data
IN
sqlite3 /volume1/screenpipe/db.sqlite "
SELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len
FROM frames f JOIN ocr_text o ON f.id = o.frame_id
WHERE DATE(f.timestamp) = '2026-04-11'
ORDER BY f.timestamp DESC LIMIT 3;
"
Copy code to clipboard
OUT
2026-04-11T12:54:42.597794+00:00|||2111
2026-04-11T12:54:41.915916+00:00|||2110
2026-04-11T12:54:39.912712+00:00|||2111
[rerun: b2]
Bash
Install required packages
IN
pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5
Copy code to clipboard
OUT
/bin/bash: line 1: pip3: command not found
[rerun: b3]
Bash
Find pip
IN
which pip || which pip3 || python3 -m pip --version 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
[rerun: b4]
Bash
Bootstrap pip then install packages
IN
python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10...
|
Code
|
report.py — screenpipe [SSH: 100.73.206.126]
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Close tab
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Preskočiť hlavnú navigáciu
Preskočiť hlavnú navigáciu
Denník N
Denník N
Vyhľadávaný výraz
Hľadaj
...
|
Firefox
|
Irán – Denník N — Personal
|
dennikn.sk/tema/iran/
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahlA100% <7-zshDOCKERlanguages• 881DEV (-zsh)O 82APP (-zsh)• хз-zsh• ×4-zsh• 85-zsh886-zshO x7Sat 11 Apr 20:31:29-zsh181• *8|all languagesmonitorsno monitors availableaudio devicesdisabledyou are using local processing. all your data stays on your computer.warning: telemetry isenabled.onlyerror-level data willbe sent.to disable, use the --disable-telemetry flag.checklatestchanges here: https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFO screenpipe_core::pipes: pipe scheduler started (generation 2)2026-04-11T20:26:05.348754ZINFOscreenpipe:starting UI2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.shartine inseven copture2026-04-11T20:26:05.358540ZINFOscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.363864ZINFOscreenpipe_engine::ui_recorder: Starting Ul event capture2026-04-11T20:26:05.378325ZINFO2026-04-11T20:26:05.378392Zscreenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)INFO screenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmingfrom DB (2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)2026-04-11T20:26:05.379467ZINFOscreenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)2026-04-11T20:26:05.384798ZINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFO2026-04-11T20:26:05.528107Zscreenpipe_connect: :mdns: mdns: advertising screenpipe on port 3030INFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683177ZINFOscreenpipe_engine::vision_manager::manager: Starting vision recordingfor monitor 1 (1440x900)2026-04-11T20:26:05.683293ZINFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFO2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listпгагоа2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)screenpipe_engine::event_driven_capture: event-driven capture startedfor monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)2026-04-11T20:26:07.067446ZINFO2026-04-11T20:26:08.752985ZINFOscreenpipe-engine:: eventdrivencapture: sontent dedup: skipping copture for monitor 1 (ha5 -921544353114798391, trigger-visual_change)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention: retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe:local retention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)2026-04-11T20:26:55..9926882INFOscreenpipe_engine::event_driven_capture: content dedup: skippingcapture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11720:26:57.331771ZINFO2026-04-11T20:27:05.408691ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible framesscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deleted2026-04-11T20:31:05.374969ZINFOscreenpipe_engine::server:api_usage_5min: 1 requests...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Close tab
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Preskočiť hlavnú navigáciu
Preskočiť hlavnú navigáciu
Denník N
Denník N
Vyhľadávaný výraz
Hľadaj
Hľadaj
Vypnúť reklamu
Vypnúť reklamu
SK
SK
HU
HU
CZ
CZ
EU
EU
Otvoriť hlavné menu
MENU
SVET
SVET
DONALD TRUMP
DONALD TRUMP
IRÁN
IRÁN
VIKTOR ORBÁN
VIKTOR ORBÁN
VOJNA NA UKRAJINE
VOJNA NA UKRAJINE
KONFLIKT NA BLÍZKOM VÝCHODE
KONFLIKT NA BLÍZKOM VÝCHODE
MAĎARSKÉ VOĽBY
MAĎARSKÉ VOĽBY
USA
USA
RUSKO
RUSKO
VLADIMIR PUTIN
VLADIMIR PUTIN
VÝVOJ BOJOV NA UKRAJINE
VÝVOJ BOJOV NA UKRAJINE
Posun na nasledujúce
Irán
Irán
ODOBERAŤ
ODOBERAŤ
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
The New York Times
The New York Times
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Soňa Weissová
Soňa Weissová
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 24)
24
KOMENTÁRE
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Denisa Ballová
Denisa Ballová
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Jiří Sobota
Jiří Sobota
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 29)
29
KOMENTÁRE
Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Denník N
Denník N
a ďalší
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Tomáš Zemko
Tomáš Zemko
9. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Tomáš Zemko
Tomáš Zemko
9. apríla 2026
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Jan Wirnitzer
Jan Wirnitzer
9. apríla 2026
Zobraziť diskusiu (počet príspevkov: 3)
3
KOMENTÁRE
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Tomáš Vasilko
Tomáš Vasilko
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Denisa Ballová
Denisa Ballová
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 9)
9
KOMENTÁRE
Petr Mlejnek
Iránska vojna zvnútra: moc revolučných gárd, slabý prezident a boj o riadenie konfliktu
Iránska vojna zvnútra: moc revolučných gárd, slabý prezident a boj o riadenie konfliktu
Iránska vojna zvnútra: moc revolučných gárd, slabý prezident a boj o riadenie konfliktu
Petr Mlejnek
Petr Mlejnek
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Ekonomický newsfilter Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Ekonomický newsfilter Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Ekonomický newsfilter: Trump zničí skôr západnú civilizáciu než Irán
Tomáš Zemko
Tomáš Zemko
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 3)
...
|
Firefox
|
Irán – Denník N — Personal
|
dennikn.sk/tema/iran/
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo — Denník N
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo — Denník N
Close tab
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Preskočiť hlavnú navigáciu
Preskočiť hlavnú navigáciu
Preskočiť na text
Preskočiť na text
Denník N
Denník N
Vyhľadávaný výraz
Hľadaj
Hľadaj
Vypnúť reklamu
Vypnúť reklamu
SK
SK
HU
HU
CZ
CZ
EU
EU
Otvoriť hlavné menu
MENU
10. APRÍLA 2026 11:04
DONALD TRUMP
DONALD TRUMP
IRÁN
IRÁN
JEFFREY EPSTEIN
JEFFREY EPSTEIN
KONFLIKT NA BLÍZKOM VÝCHODE
KONFLIKT NA BLÍZKOM VÝCHODE
TRUMPOV SVET (VÝVOJ V BIELOM DOME)
TRUMPOV SVET (VÝVOJ V BIELOM DOME)
USA
USA
Posun na nasledujúce
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Jiří Sobota Jiří Sobota
Jiří Sobota
Odoberať
ODOBERAŤ
Deník N Deník N
Deník N
Odoberať
ODOBERAŤ
Zobraziť diskusiu (počet príspevkov: 29)
29
KOMENTÁRE
Odstrániť zo zoznamu na neskôr
ČÍTAŤ NESKÔR
Zdieľať
ZDIEĽAŤ
Odomknúť
ODOMKNÚŤ
Melania Trump počas tlačovej konferencie. Foto - TASR/AP
Melania Trump počas tlačovej konferencie. Foto – TASR/AP
Posun vzad o 15 sekúnd
15
Prehrať
Posun vpred o 30 sekúnd
30
00:00
08:36
undefined
Prečítajte si viac o
počúvaní Denníka N
počúvaní Denníka N
.
Melania Trump sa z ničoho nič dištancovala od Epsteina.
Prímerie na Blízkom východe sa rozpadá.
Newyorský starosta Zohran Mamdani zatiaľ nezavedie autobusy zadarmo.
Proti Trumpovi sa obracajú aj jeho niekdajší stúpenci.
Informácie v tomto texte sú zhrnutím udalostí za štvrtok 9. apríla.
Prvá dáma Spojených štátov Melania Trump nečakane usporiadala tlačovú konferenciu, na ktorej podobne neočakávane vyhlásila, že nemá nič spoločné so sexuálnym delikventom Jeffreym Epsteinom. Hovorila, že nebola jeho obeťou a že to nebol Jeffrey Epstein, kto ju zoznámil s jej neskorším manželom a dnešným prezidentom Donaldom Trumpom.
„Epstein ma nezoznámil s Donaldom Trumpom. Spoznala som ho náhodou. Toto prvé stretnutie s mojím manželom je opísané v mojej knihe,“ pove
dala Melania Trump.
Manželka prezidenta tiež vyzvala, aby všetky Epsteinove obete mali právo vypovedať pred vyšetrovacou komisiou amerického kongresu.
Nikiti Halkidiki, Greece
Nikiti Halkidiki, Greece
Officially licenced buisness by G.T.O.
Officially licenced buisness by G.T.O.
[ Odoberajte newsletter Trumpov svet, ktorý podrobne mapuje dramatický vývoj v Spojených štátoch a ich vplyv na nás. Vychádza každý pracovný deň na obed.
Kliknite sem a každý ďalší diel vám pošleme emailom
. ]
Americké médiá reagovali na vyhlásenie s istým úžasom, pretože téma tlačovej konferencie nebola vopred ohlásená a načasovanie oznámenia zostáva záhadou.
„Vyhlásenie prvej dámy prišlo v čase, keď sa Biely dom sústredil na dohodu o prímerí s Iránom. Vládnych predstaviteľov jej vystúpenie prekvapilo,“
napísal
napísal
denník Wall Street Journal.
Podľa denníka
Podľa denníka
New York Times Donald Trump o vystúpení svojej manželky vopred
vedel.
Prvá dáma hovorila o „početných falošných fotografiách a výrokoch, ktoré sa týkajú Epsteina a mňa samotnej“, ktoré kolujú po sociálnych sieťach. „Lži, ktoré ma spájajú s hanebným Jeffrey
m Epsteinom, musia od tohto okamihu prestať,“ dodala s tým, že chce „očistiť svoje dobré meno“.
Niektoré médiá upozornili na skutočnosť, že vo zverejnených Epsteinových dokumentoch sa nachádza mail, ktorý práve Melania Trump zaslala Epsteinovej odsúdenej spolupracovníčke Ghislaine Maxwell v roku 2002. Žena podpísaná ako Melania v maili chváli profil Jeffreyho Epsteina čerstvo zverejnený v časopise New York.
Vo svojom štvrtkovom vystúpení vyhlásila, že ku Ghislaine Maxwell nikdy nemala žiadny vzťah a že išlo iba o zdvorilostnú korešpondenciu. „Moja zdvorilá odpoveď na jej e-mail nie je ničím iným než triviálnym odkazom,“ vysvetlila prvá dáma.
Donald Trump aj jeho žena sa na začiatku nultých rokov pohybovali v rovnakých spoločenských kruhoch ako Je
ffrey Epstein. Spomínaný Epsteinov profil v magazíne New York obsahuje známu Trumpovu citáciu, že Epstein je „skvelý chlapík, s ktorým je zábava“.
„Hovorí sa dokonca, že má rád krásne ženy rovnako ako ja a že mnohé z nich patria skôr k tým mladším,“ povedal Trump o Epsteinovi.
Открий новите колекции Global Brands Store
Открий новите колекции
Global Brands Store
Donald Trump sa v Epsteinových spisoch objavuje viackrát, žiadne zverejnené informácie však nepreukazujú, že by sa dopustil niečoho nezákonného. Prezident trvá na tom, že s Epsteinom prerušil kontakty predtým, než ho v roku 2006 usvedčili z trestných činov, a že o jeho trestnej činnosti nič nevedel. To isté tvrdí Melania Trump.
Zobraziť väčšie rozlíšenie
Melania Trump. Foto – TASR/AP
Prímerie na Blízkom východe sa otriasa v základoch.
Hormuzský prieplav zostávala v podstate uzavretý, zatiaľ čo Izrael p
okračoval vo svojej ofenzíve proti hnutiu Hizballáh v Libanone.
Prezident Donald Trump vyhlásil, že „Irán robí veľmi zlú prácu“, pokiaľ ide o dopravu ropy cez Hormuzský prieplav, a že súčasný stav „nie je dohodou, ktorú sme uzavreli“.
Kľúčovým dopravným uzlom vo štvrtok prešlo len
niekoľko lodí
niekoľko lodí
a Irán za ich prejazd požaduje mýto. „Máme správy, že Irán si za priechod Hormuzským prielivom účtuje poplatky. Ak to robia, mali by s tým prestať,“ napísal Donald Trump na svojej sociálnej sieti Truth Social.
Tankery, ktoré by sa odvážili prieplavom preplávať, čelia hneď niekoľkým ťažkostiam. Podstupujú riziko, že sa ocitnú pod paľbou iránskych ozbrojených síl alebo ich napríklad poškodia míny. Musia riešiť aj vysoké ceny poistenia, pokiaľ je vôbec dostup
né. A v prípade, že si Irán za priechod účtuje mýto, dochádza zrejme k
porušovaniu embarga
porušovaniu embarga
, ktoré na Irán uvalili Spojené štáty.
reklama
Irán údajne za priechod požaduje až
dva milióny dolárov
dva milióny dolárov
v kryptomenách. V prípade, že by si svoju nadvládu nad prieplavom a s ňou spojenú možnosť vyberať mýto udržal, mohlo by to pre krajinu teoreticky znamenať mimoriadny príjem vo výške desiatok miliárd dolárov ročne.
Donald Trump medzitým telefonoval s izraelským premiérom Benjaminom Netanjahuom. Po telefonáte
vyhlásil
vyhlásil
, že predsedu izraelskej vlády požiadal o utlmenie bojov v Libanone.
„Volal som Bibimu a ten sľúbil, že boje stlmí. Myslím si, že sa musíme držať trochu viac pri zemi,“
vyhlásil
vyhlásil
Trump.
Prezident už predtým súhlasil s Netanjahuom v názore, že útoky proti H
izballáhu v Libanone nie sú súčasťou dohody o prímerí. Irán tvrdí opak. Trumpovo naliehanie na Izrael sa zhoduje s podobnými výrokmi jeho viceprezidenta J. D. Vanca, podľa ktorého sa „Izraelčania teraz budú trochu kontrolovať“.
V noci však došlo v Libanone aj v Izraeli k ďalším útokom. Izraelské letectvo bombardovalo na území svojho suseda, Hizballáh vypálil rakety na niekoľko cieľov v Izraeli. Izraelský premiér
uviedol
uviedol
, že v „Libanone nijaké prímerie nepanuje“.
Iránsky najvyšší vodca Modžtabá Chámeneí dal v iránskej televízii prečítať vyhlásenie, že si vyhradzuje právo na odvetu za útoky USA a Izraela na jeho krajinu a jej spojencov, medzi ktorých patrí aj libanonské hnutie Hizballáh.
Newyorský starosta Zohran Mamdani pripustil
, že tento rok v Ne
w Yorku nezavedie autobusovú dopravu zadarmo. Uviedol to v
telefonickom rozhovore
telefonickom rozhovore
so serverom Politico. Sľub verejnej bezplatnej autobusovej dopravy bol jedným z ťahákov Mamdaniho oslnivej predvolebnej kampane.
Newyorská radnica však nemôže svoj plán uskutočniť bez spolupráce so štátom New York a jeho guvernérkou Kathy Hochul. Ako v otázke uviedol spomínaný server, rozpočtovú položku umožňujúcu pilotný projekt bezplatných autobusov nikto nenavrhol.
Zobraziť väčšie rozlíšenie
Starosta New Yorku Zohran Mamdani. Foto – TASR/AP
Mamdani zdôraznil, že zákonodarcovia v princípe nie sú proti a že rokovania pokračujú. „Na myšlienke zaviesť rýchlu a bezplatnú autobusovú dopravu stále trvám a rozhovory, ktoré o tom vedieme s guvernérkou a lídrami zákonodarcov, sú pre nás povzbudivé.
Rok 2026 považujeme za prvý krok,“ uviedol.
Rozhovor vyvolal predvídateľnú kritiku konzervatívnych oponentov progresívneho starostu. „Ako sa ukazuje, socialistické slogany zvyčajne neprežijú zrážku s realitou,“
napísal
napísal
napríklad na sieti X hovorca Národného republikánskeho kongresového výboru Mike Marinella.
Mamdani je vo funkcii len od januára tohto roka.
Citát dňa:
Citát dňa:
„Sú to stupídni ľudia. Vedia to o sebe, ich rodiny to vedia, všetci ostatní to vedia. Pozrite sa na ich minulosť, na to, čo dokázali.“
Donald J. Trump (@realDonaldTrump)
Donald J. Trump (@realDonaldTrump)
I know why Tucker Carlson, Megyn Kelly, Candace Owens, and Alex Jones have all been fighting me for years, especially by the fact that they think it is wonderful for Iran, the Number One State Sponsor of Terror, to have a Nuclear Weapon — Because they have one thing in common, Low IQs. They’re stupid people, they know it, their families know it, and everyone else knows it, too!
Truth Social
Truth Social
Autorom citátu je Donald Trump a ľudia, o ktorých hovorí, sú jeho bývalí horliví stúpenci: bývalí moderátori kanála Fox News Tucker Carlson a Megyn Kelly, influencerka Candance Owens a influencer Alex Jones.
Všetci menovaní v uplynulých dňoch ostro kriti
zovali Trumpovu vojnu proti Iránu a jeho vyhrážky, že počas jedinej noci zahynie celá jedna civilizácia. Megyn Kelly v tejto súvislosti povedala, že Trump by „mal radšej držať svoju sprostú hubu“.
Tucker Carlson Trumpovu vojnu opakovane označil za „nechutnú zradu hnutia Amerika na prvom mieste“.
„Viem úplne presne, prečo proti mne bojujú, zvlášť podľa toho, že si myslia, že pre Irán, svetového teroristického sponzora číslo jeden, bude skvelé mať jadrovú zbraň – pretože majú spoločnú jednu vec, nízke IQ,“ napísal Trump na sociálnej sieti Truth Social.
„Možno je čas poslať deda do domova dôchodcov,“ reagovala na Trumpov príspevok spomenutá influencerka Candance Owens.
Máte pripomienku alebo ste našli chybu? Prosíme, napíšte na
[EMAIL]
[EMAIL]
....
|
Firefox
|
Trumpov svet (445. deň): Melania Trump náhle preho Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo — Denník N — Personal...
|
dennikn.sk/5266809/trumpov-svet-445-den-melania-tr dennikn.sk/5266809/trumpov-svet-445-den-melania-trump-nahle-prehovorila-o-epsteinovi-a-nikto-nevie-preco/...
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo — Denník N
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo — Denník N
Close tab
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab...
|
Firefox
|
Trumpov svet (445. deň): Melania Trump náhle preho Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo — Denník N — Personal...
|
dennikn.sk/tema/iran/
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Python
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 4
Ln 17, Col 87
Screen Reader Optimized
expanded
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/
Copy code to clipboard
OUT
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
List data and pipes directories
IN
ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/
Copy code to clipboard
OUT
2026-04-09
2026-04-11
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Bash
List tables in screenpipe SQLite database
IN
sqlite3 /volume1/screenpipe/db.sqlite ".tables"
Copy code to clipboard
OUT
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
[rerun: b3]
Bash
Get ocr_text table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(ocr_text);"
Copy code to clipboard
OUT
0|frame_id|INTEGER|1||0
1|text|TEXT|1||0
2|text_json|TEXT|0||0
3|app_name|TEXT|1|''|0
4|ocr_engine|TEXT|1|'unknown'|0
5|window_name|TEXT|0||0
6|focused|BOOLEAN|0|FALSE|0
7|text_length|INTEGER|0||0
8|sync_id|TEXT|0||0
9|synced_at|DATETIME|0||0
[rerun: b4]
Bash
Get audio_transcriptions table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(audio_transcriptions);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|audio_chunk_id|INTEGER|1||0
2|offset_index|INTEGER|1||0
3|timestamp|TIMESTAMP|1||0
4|transcription|TEXT|1||0
5|device|TEXT|1|''|0
6|is_input_device|BOOLEAN|1|TRUE|0
7|speaker_id|INTEGER|0||0
8|transcription_engine|TEXT|1|'Whisper'|0
9|start_time|REAL|0||0
10|end_time|REAL|0||0
11|text_length|INTEGER|0||0
12|sync_id|TEXT|0||0
13|synced_at|DATETIME|0||0
[rerun: b5]
Bash
Get frames, ui_events, video_chunks schemas
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|video_chunk_id|INTEGER|0|NULL|0
2|offset_index|INTEGER|1|0|0
3|timestamp|TIMESTAMP|1||0
4|name|TEXT|0||0
5|app_name|TEXT|0|NULL|0
6|window_name|TEXT|0|NULL|0
7|focused|BOOLEAN|0|NULL|0
8|browser_url|TEXT|0|NULL|0
9|device_name|TEXT|1|''|0
10|sync_id|TEXT|0||0
11|machine_id|TEXT|0||0
12|synced_at|DATETIME|0||0
13|snapshot_path|TEXT|0|NULL|0
14|accessibility_text|TEXT|0|NULL|0
15|accessibility_tree_json|TEXT|0|NULL|0
16|content_hash|INTEGER|0|NULL|0
17|simhash|INTEGER|0|NULL|0
18|capture_trigger|TEXT|0|NULL|0
19|text_source|TEXT|0|NULL|0
20|cloud_blob_id|TEXT|0|NULL|0
21|full_text|TEXT|0|NULL|0
22|elements_ref_frame_id|INTEGER|0|NULL|0
0|id|INTEGER|0||1
1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0
2|session_id|TEXT|0||0
3|relative_ms|INTEGER|1|0|0
4|event_type|TEXT|1||0
5|x|INTEGER|0||0
6|y|INTEGER|0||0
7|delta_x|INTEGER|0||0
8|delta_y|INTEGER|0||0
9|button|INTEGER|0||0
10|click_count|INTEGER|0||0
11|key_code|INTEGER|0||0
12|modifiers|INTEGER|0||0
13|text_content|TEXT|0||0
14|text_length|INTEGER|0||0
15|app_name|TEXT|0||0
16|app_pid|INTEGER|0||0
17|window_title|TEXT|0||0
18|browser_url|TEXT|0||0
19|element_role|TEXT|0||0
20|element_name|TEXT|0||0
21|element_value|TEXT|0||0
22|element_description|TEXT|0||0
23|element_automation_id|TEXT|0||0
24|element_bounds|TEXT|0||0
25|frame_id|INTEGER|0||0
26|sync_id|TEXT|0||0
27|machine_id|TEXT|0||0
28|synced_at|DATETIME|0||0
0|id|INTEGER|0||1
1|file_path|TEXT|1||0
2|device_name|TEXT|1|''|0
3|sync_id|TEXT|0||0
4|machine_id|TEXT|0||0
5|synced_at|DATETIME|0||0
6|fps|REAL|1|0.5|0
7|cloud_blob_id|TEXT|0|NULL|0
[rerun: b6]
Bash
Check data counts and date ranges
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*) FROM ocr_text;" 2>/dev/null
Copy code to clipboard
OUT
1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00
3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00
666
[rerun: b7]
Bash
Explore existing pipes for patterns
IN
ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50
Copy code to clipboard
OUT
pipe.md
[rerun: b8]
Bash
Read day-recap pipe documentation
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
[rerun: b9]
Bash
Sample app names from frames
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;"
Copy code to clipboard
OUT
Safari
Activity Monitor
Dia
iTerm2
Control Centre
UserNotificationCenter
Finder
Claude
Slack
Firefox
Raycast
NetAuthAgent
QuickTime Player
[rerun: b10]
Bash
Sample joined frame+ocr data for today
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT f.timestamp, o.app_name, o.window_name, substr(o.text, 1, 100) as text FROM frames f JOIN ocr_text o ON f.id = o.frame_id WHERE DATE(f.timestamp) = '2026-04-11' LIMIT 5;"
Copy code to clipboard
OUT
2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE
2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER
2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p
2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p
2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi
[rerun: b11]
Bash
Sample recent audio transcriptions
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;"
Copy code to clipboard
OUT
2026-04-09T17:02:52+00:00|.|System Audio
2026-04-09T16:59:22+00:00|Class is technically...|System Audio
2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio
[rerun: b12]
Thinking
Thinking
Good data to work with. Here's what we have:
frames
+
ocr_text
: Screen captures with OCR text, app name, window name (1135 frames so far)
audio_transcriptions
: Voice/system audio transcripts
ui_events
: Mouse/keyboard events with app context
video_chunks
: Raw video files
Before I start building, a few quick questions:
Tech stack
— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)
AI summaries
— Do you have a Claude API key to use for generating the actual summaries? Or should I integrate with a local model / skip AI for now?
What summaries matter most?
Day recap (what apps/windows you used, key text seen)
App time breakdown (time per app)
Audio/conversation recap
Custom searchable timeline
Here's the architecture I'm thinking:
Copy code to clipboard
/volume1/screenpipe/app/
├── main.py # FastAPI web UI
├── cli.py # Click CLI: `python cli.py day-recap`
├── db.py # Read-only queries against db.sqlite
├── consumers/
│ ├── activity.py # App usage, time per window
│ ├── ocr.py # OCR text aggregation + search
│ ├── audio.py # Transcription queries
│ └── summary.py # AI summary builder
└── static/
└── index.html # Single-page UI
CLI commands would look like:
Copy code to clipboard
python cli.py day-recap # EOD summary
python cli.py activity --date today # App time breakdown
python cli.py search "docker" # Search OCR/audio text
python cli.py serve # Launch web UI
Does this direction work? Any preferences on the stack or which summaries to prioritize?
Message actions
seesm ok
Thinking
Thinking
Bash
Check Python and available packages
IN
python3 --version && pip3 list 2>/dev/null | grep -E "fastapi|uvicorn|click|anthropic|httpx|jinja"
Copy code to clipboard
OUT
Python 3.11.2
[rerun: b1]
Bash
Verify join works for today's data
IN
sqlite3 /volume1/screenpipe/db.sqlite "
SELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len
FROM frames f JOIN ocr_text o ON f.id = o.frame_id
WHERE DATE(f.timestamp) = '2026-04-11'
ORDER BY f.timestamp DESC LIMIT 3;
"
Copy code to clipboard
OUT
2026-04-11T12:54:42.597794+00:00|||2111
2026-04-11T12:54:41.915916+00:00|||2110
2026-04-11T12:54:39.912712+00:00|||2111
[rerun: b2]
Bash
Install required packages
IN
pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5
Copy code to clipboard
OUT
/bin/bash: line 1: pip3: command not found
[rerun: b3]
Bash
Find pip
IN
which pip || which pip3 || python3 -m pip --version 2>/dev/null
Copy code to clipboard
OUT
Exit code 1
[rerun: b4]
Bash
Bootstrap pip then install packages
IN
python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10
Copy code to clipboard
OUT
Exit code 1
/usr/bin/python3: No module named ensurepip
[rerun: b5]
Bash
Install pip via apt
IN
apt-get install -y python3-pip python3-venv 2>&1 | tail -5
Copy code to clipboard
OUT
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
[rerun: b6]
Bash
Install pip with sudo
Reason:
lets make it in docker, not to install it in nas directly
IN
sudo apt-get install -y python3-pip python3-venv 2>&1 | tail -5
Copy code to clipboard
Good call. Let me check what Docker setup you already have and build a proper containerized app.
Bash
Check existing docker-compose for reference...
|
Code
|
report.py — screenpipe [SSH: 100.73.206.126]
|
NULL
|
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpallA100% <47-zshDOCKER• 881DEV (-zsh)all languages• ×2APP (-zsh)• *3-zsh• ×4-zsh• ₴5|-zsh86-zshO x7Sat 11 Apr 20:32:36-zsh181• *8monitorsaudio devicesno monitors availabledisabledyou are using localprocessing. all your data stays on your computer.warning: telemetryisenabled. onlyerror-level data will be sent.todisable, usethe --disable-telemetry flag.check latestchanges here:https://github.com/screenpipe/screenpipe/releases2026-04-11T20:26:05.348501ZINFOscreenpipe_core::pipes:pipe scheduler started (generation 2)2026-04-11720:26:05.3487542INFOscreenpipe: starting UIevent capture2026-04-11T20:26:05.353656ZWARNscreenpipe: pi agent install failed: bun not found - install from https://bun.sh2026-04-11T20:26:05.358540ZINFOscreenpipe_engine::power::manager: initial power profile: PerformanceCon_ac=true, battery=Some(100))2026-04-11T20:26:05.363864Z2026-04-11T20:26:05.378325ZINFOscreenpipe_engine::ui_recorder: Starting UI event captureINFOscreenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)2026-04-11T20:26:05.378392ZINFOscreenpipe_engine::ui_recorder: UI recording session started: 5b17c7fe-3811-4788-a81b-6b04773808f12026-04-11T20:26:05.378564ZINFO2026-04-11T20:26:05.379467Zscreenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB(2026-04-10 17:26:05.378561 UTC to 2026-04-11 17:26:05.378561 UTC)INFOscreenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)2026-04-11T20:26:05.384798ZINFOscreenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns:advertising screenpipe on port 30302026-04-11T20:26:05.528107ZINFOscreenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame2026-04-11T20:26:05.6831777INFOentries, coverage from 2026-04-10 17:26:05.378561 UTC2026-04-11T20:26:05.683293Zscreenpipe_engine::vision_manager::manager: Starting vision recordingfor monitor 1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)2026-04-11T20:26:05.683303ZINFOscreenpipe_engine::vision_manager: :manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed list2026-04-11T20:26:05.683311ZINFOscreenpipe_engine::vision_manager: :monitor_watcher: Starting monitor watcher (polling every 5 seconds)2026-04-11T20:26:05.683359ZINFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)2026-04-11T20:26:06.488545ZINFO2026-04-11T20:26:07.067446ZINFOsck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900,2fps)screenpipe_engine: :event_driven_capture: startup capture for monitor 1: frame_id=1407, dur=537ms2026-04-11T20:26:08.752985ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)2026-04-11T20:26:10.383131ZINFOscreenpipe_engine::retention:retention: initialized with 14d retention2026-04-11T20:26:10.383762ZINFOscreenpipe: local retention auto-enabled (14 days)2026-04-11T20:26:38.337011ZINFO2026-04-11T20:26:55.992688Zscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:26:57..3317712INFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)2026-04-11T20:27:05.408691ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61eligible frames2026-04-11T20:27:09.664908ZINFOscreenpipe_engine::snapshot_compaction: snapshot2026-04-11T20:31:05.374969ZINFOcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deleted2026-04-11T20:31:40.380610ZINFOscreenpipe_engine::server: api_usage_5min: 1requestsscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)2026-04-11T20:32:09.668412ZINFOscreenpipe_engine::snapshot_compaction:snapshot compaction: found 1 eligible frames...
|
NULL
|
NULL
|
NULL
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Python
Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 4
Ln 17, Col 87
Screen Reader Optimized
expanded
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/...
|
Code
|
report.py — screenpipe [SSH: 100.73.206.126]
|
NULL
|
|
drwx------ 1 lukas staff 16384 11 Apr 16:34 sc drwx------ 1 lukas staff 16384 11 Apr 16:34 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ touch /Volumes/screenpipe/test.txt
touch: /Volumes/screenpipe/test.txt: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ touch /Volumes/screenpipe/test.txt
touch: /Volumes/screenpipe/test.txt: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ scp ~/.screenpipe/db.sqlite Adm1n@[IP_ADDRESS]:/volume1/screenpipe/db.sqlite
scp: dest open "/volume1/screenpipe/db.sqlite": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ scp ~/.screenpipe/db.sqlite Adm1n@[IP_ADDRESS]:/volume1/screenpipe/
scp: dest open "/volume1/screenpipe/": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 32
drwxr-xr-x 4 root wheel 128 11 Apr 16:35 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 16:34 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $clear
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: touch:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: bad pattern: unmount(/Volumes/screenpipe):
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: touch:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: cp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: scp:
zsh: command not found: scp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: scp:
zsh: command not found: scp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: total
zsh: command not found: drwxr-xr-x
zsh: command not found: drwxr-xr-x
zsh: file exists: /
zsh: command not found: drwx------
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ scp ~/.screenpipe/db.sqlite Adm1n@[IP_ADDRESS]:/volume1/screenpipe/db.sqlite
scp: dest open "/volume1/screenpipe/db.sqlite": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls
Macintosh HD screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 32
drwxr-xr-x 4 root wheel 128 11 Apr 16:35 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 16:34 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite
cp: /Volumes/Test/screenpipe/db.sqlite: No such file or directory
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/
cp: directory /Volumes/Test/screenpipe does not exist
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 11 Apr 16:45 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 10 Aug 2025 Apps
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 11 Apr 16:47 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp -r ~/.screenpipe/pipes/ /Volumes/Test/screenpipe/pipes/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp -r ~/.screenpipe/data/data/ /Volumes/Test/screenpipe/data/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sed 's|$HOME/.screenpipe/db.sqlite|/volume1/Test/screenpipe/db.sqlite|g' ~/screenpipe-day.sh > /volume1/Test/screenpipe/screenpipe-day.sh
zsh: no such file or directory: /volume1/Test/screenpipe/screenpipe-day.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cat ~/screenpipe-day.sh
#!/bin/zsh
DB="$HOME/.screenpipe/db.sqlite"
DATE=${1:-$(date -v-1d '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo "\n📱 APP USAGE (frames + estimated time)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-30s %5d frames ~%5.1f min', app_name, COUNT(*), ROUND(COUNT(*) * 4.5 / 60.0, 1))
FROM frames
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY app_name ORDER BY COUNT(*) DESC;"
echo "\n⌨️ ACTIVITY TYPE PER APP (clicks / keys / switches)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-25s clicks:%-5d keys:%-5d switches:%-4d',
app_name,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END),
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END),
SUM(CASE WHEN event_type='app_switch' THEN 1 ELSE 0 END))
FROM ui_events
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY app_name ORDER BY COUNT(*) DESC;"
echo "\n🌐 BROWSER URLS VISITED"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%4d frames %s', COUNT(*), browser_url)
FROM frames
WHERE date(timestamp) = '$DATE' AND browser_url IS NOT NULL
GROUP BY browser_url ORDER BY COUNT(*) DESC LIMIT 20;"
echo "\n🪟 WINDOW TITLES (top 20)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-20s %3d %s', app_name, COUNT(*), SUBSTR(window_name,1,60))
FROM frames
WHERE date(timestamp) = '$DATE' AND window_name IS NOT NULL AND app_name IS NOT NULL
GROUP BY app_name, window_name ORDER BY COUNT(*) DESC LIMIT 20;"
echo "\n🕐 HOURLY TIMELINE"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%s %-20s %3d frames', strftime('%H:00', timestamp), app_name, COUNT(*))
FROM frames
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY strftime('%H', timestamp), app_name
ORDER BY strftime('%H', timestamp), COUNT(*) DESC;"
echo "\n📋 CLIPBOARD ACTIVITY"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-20s %s', app_name, SUBSTR(text_content, 1, 80))
FROM ui_events
WHERE date(timestamp) = '$DATE' AND event_type = 'clipboard' AND text_content IS NOT NULL
ORDER BY timestamp LIMIT 20;"
echo "\n💬 OCR TEXT SAMPLES PER APP"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-15s %s', o.app_name, SUBSTR(o.text, 1, 80))
FROM ocr_text o
JOIN frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$DATE' AND o.app_name IS NOT NULL AND o.text != ''
GROUP BY o.app_name
ORDER BY o.app_name LIMIT 15;"
echo "\n🔢 TOTALS"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT
'Frames: ' || COUNT(*) FROM frames WHERE date(timestamp) = '$DATE';
"
sqlite3 "$DB" "
SELECT 'UI Events: ' || COUNT(*) FROM ui_events WHERE date(timestamp) = '$DATE';
"
sqlite3 "$DB" "
SELECT 'OCR texts: ' || COUNT(*) FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE date(f.timestamp) = '$DATE';
"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ curl -X POST [URL_WITH_CREDENTIALS] /Volumes $ curl -X POST [URL_WITH_CREDENTIALS] /Volumes $ curl [URL_WITH_CREDENTIALS] /Volumes $ curl -s [URL_WITH_CREDENTIALS] /Volumes $ echo "alias sp-status='curl -s [URL_WITH_CREDENTIALS] /Volumes $ sp-status
zsh: command not found: sp-status
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ source ~/.zprofile
Poetry could not find a pyproject.toml file in /Volumes or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sp-status
zsh: command not found: sp-status
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ zp
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls
Apps Macintosh HD Test screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll
total 1272
drwx------+ 89 lukas staff 2848 11 Apr 18:38 .
drwxr-xr-x 5 root admin 160 23 Aug 2024 ..
-r-------- 1 lukas staff 7 18 Nov 2021 .CFUserTextEncoding
-rw-r--r--@ 1 lukas staff 22532 11 Apr 16:46 .DS_Store
drwx------+ 2 lukas staff 64 11 Apr 11:15 .Trash
drwx------ 5 lukas staff 160 1 Nov 2021 .aws
-rw-r--r-- 1 lukas staff 341470 29 Sep 2022 .babel.json
-rw-------@ 1 lukas staff 388 25 Jul 2025 .bash_history
-rw-r--r--@ 1 lukas staff 77 9 Feb 2023 .bashrc
drwxr-xr-x 5 lukas staff 160 11 Mar 2023 .bito
drwx------@ 6 lukas staff 192 9 Apr 19:53 .cache
drwxr-xr-x 20 lukas staff 640 9 Apr 21:21 .claude
-rw------- 1 lukas staff 24973 9 Apr 21:24 .claude.json
drwxr-xr-x@ 20 lukas staff 640 12 Mar 09:12 .codeium
drwxrwxrwx@ 3 lukas staff 96 2 Mar 2023 .composer
drwx------ 16 lukas staff 512 21 May 2025 .config
drwxr-xr-x 15 lukas staff 480 23 Dec 2024 .continue
drwx------@ 3 lukas staff 96 16 Feb 19:13 .copilot
drwxr-xr-x@ 5 lukas staff 160 9 Apr 2025 .cursor
drwxr-xr-x@ 5 lukas staff 160 17 Aug 2024 .cursor-tutor
drwxr-xr-x 3 lukas staff 96 8 Sep 2024 .daytona
drwxr-xr-x@ 4 lukas staff 128 18 Feb 10:52 .devdb
drwx------ 24 lukas staff 768 9 Apr 18:24 .docker
drwx------ 15 lukas staff 480 6 Jun 2023 .dropbox
drwxr-xr-x@ 3 lukas staff 96 20 Nov 2022 .fig.dotfiles.bak
-rw-r--r-- 1 lukas staff 138 5 Mar 2022 .gauth
-rw-r--r-- 1 lukas staff 220 25 Nov 2021 .gitconfig
-rw-r--r-- 1 lukas staff 12288 25 Nov 2021 .gitconfig.swp
drwx------ 5 lukas staff 160 18 Nov 2021 .hammerspoon
drwxr-xr-x 3 lukas staff 96 21 Mar 2025 .idlerc
-rw------- 1 lukas staff 20 31 Mar 18:32 .lesshst
drwx------ 5 lukas staff 160 23 Dec 2024 .local
-rw------- 1 lukas staff 204 16 Mar 2024 .netrc
drwx------ 3 lukas staff 96 1 Nov 2021 .node-gyp
-rw------- 1 lukas staff 4 6 Feb 2024 .node_repl_history
-rw-r--r-- 1 lukas staff 17 24 Dec 2023 .notion-enhancer
drwxr-xr-x 4 lukas staff 128 12 Jul 2024 .notion-py
drwx------ 9 lukas staff 288 11 Apr 18:41 .npm
-rw------- 1 lukas staff 74 20 May 2024 .npmrc
drwx------ 32 lukas staff 1024 25 Jul 2025 .nvm
drwxr-xr-x 4 lukas staff 128 5 Aug 2023 .postman
-rw-r--r--@ 1 lukas staff 77 9 Feb 2023 .profile
-rw-------@ 1 lukas staff 3153 21 Mar 2025 .python_history
drwx------ 2 lukas staff 64 15 Nov 2021 .quicktype-vscode
drwxr-xr-x@ 8 lukas staff 256 16 Feb 08:48 .redis-insight
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .screenpipe
UW PICO 5.09 New Buffer
[ Read 11 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
drwxr-xr-x 4 lukas staff 128 4 Feb 09:35 .sonarlint
drwx------ 15 lukas staff 480 8 Aug 2025 .ssh
drwxr-xr-x@ 3 lukas staff 96 15 Aug 2025 .streamlit
drwx------ 6 lukas staff 192 17 Oct 2022 .swiftpm
-rw------- 1 lukas staff 12183 8 Apr 19:14 .viminfo
drwx------ 5 lukas staff 160 19 Jun 2023 .vscode
drwxr-xr-x@ 3 lukas staff 96 20 Jan 2025 .warp
drwxr-xr-x 4 lukas staff 128 29 Apr 2023 .wdm
drwxr-xr-x@ 5 lukas staff 160 26 Jan 13:03 .windsurf
drwxr-xr-x 4 lukas staff 128 24 Mar 12:03 .yarn
-rw-r--r-- 1 lukas staff 116 30 Mar 10:12 .yarnrc
-rw-r--r--@ 1 lukas staff 49518 6 Apr 14:31 .zcompdump
-rw-r--r--@ 1 lukas staff 46758 2 Nov 20:34 .zcompdump.Lukas-Kovaliks-MacBook-Pro-Jiminny.23381
-rw-r--r--@ 1 lukas staff 5641 9 Apr 20:30 .zprofile
-rw-r--r-- 1 lukas staff 1468 8 Apr 2022 .zprofile-copy
-rw-r--r--@ 1 lukas staff 2900 15 Mar 2023 .zprofile.pysave
-rw------- 1 lukas staff 1731 29 Jun 2022 .zprofile.save
-rw-r--r-- 1 lukas staff 1569 8 Apr 2022 .zprofilees
UW PICO 5.09 New Buffer
[ Read 13 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
-rw------- 1 lukas staff 28812 11 Apr 18:38 .zsh_history
drwx------ 9 lukas staff 288 6 May 2025 .zsh_sessions
-rw-r--r--@ 1 lukas staff 597 11 Apr 18:44 .zshrc
drwx------@ 9 lukas staff 288 9 Apr 20:08 Applications
drwxr-xr-x@ 2 lukas staff 64 22 Oct 09:35 CascadeProjects
drwxr-xr-x 4 lukas staff 128 27 Oct 09:24 DEV
drwx------@ 10 lukas staff 320 11 Apr 18:31 Desktop
drwx------@ 7 lukas staff 224 26 Mar 14:40 Documents
drwx------@ 41 lukas staff 1312 8 Apr 20:46 Downloads
drwxr-xr-x@ 4 lukas staff 128 17 Mar 20:27 Keychron_Screen
drwx------@ 112 lukas staff 3584 2 Dec 09:19 Library
drwx------ 7 lukas staff 224 12 Feb 2024 Movies
drwx------+ 5 lukas staff 160 25 Sep 2023 Music
drwx------+ 9 lukas staff 288 25 Sep 2023 Pictures
drwx------ 3 lukas staff 96 8 Nov 2021 Postman
drwx------+ 4 lukas staff 128 28 Oct 2021 Public
-rw-r--r--@ 1 lukas staff 3950 15 Dec 09:16 Untitled 4.spf
drwx------ 4 lukas staff 128 2 Jul 2023 Users
drwx------ 3 lukas staff 96 30 Sep 2022 iCloud Drive (Archive)
drwx------ 16 lukas staff 512 3 Nov 11:35 jiminny
drwxr-xr-x 3 lukas staff 96 20 Mar 18:47 node_modules
drwxr-xr-x 4 lukas staff 128 21 Oct 18:15 raycast
-rw-r--r-- 1 lukas staff 0 1 Mar 14:26 response.bin
-rwxr-xr-x 1 lukas staff 3824 11 Apr 15:16 screenpipe-day.sh
-rw-r--r-- 1 lukas staff 86 20 Mar 18:47 yarn.lock
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano .zshrc
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ echo "alias sp-status='curl -s [URL_WITH_CREDENTIALS] ~ $ source ~/.zprofile
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-status
{
"status": "healthy",
"frame_status": "ok",
"audio_status": "disabled",
"last_frame": "2026-04-11T18:47:17+03:00",
"uptime": 345.971219541,
"fps": 0.[CREDIT_CARD],
"frames": 34
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano ~/.screenpipe/config.json
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 41216
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T18:54:13.170097Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T18:54:13.812964Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T18:54:13.819889Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T18:54:13.819889Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T18:54:13.820291Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T18:54:13.820220Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T18:54:13.820450Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T18:54:13.820896Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T18:54:13.820856Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T18:54:13.821123Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T18:54:13.821801Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T18:54:13.821972Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T18:54:13.822128Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T18:54:13.822942Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T18:54:13.822962Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T18:54:18.859011Z INFO screenpipe_engine::retention: retention: initialized with 14d retention
2026-04-11T18:54:18.859467Z INFO screenpipe: local retention auto-enabled (14 days)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT DISTINCT window_name
FROM frames
WHERE app_name IN ('Safari', 'Firefox', 'Arc', 'Chrome')
AND window_name IS NOT NULL
UW PICO 5.09 New Buffer
[ Read 13 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
ORDER BY window_name;"
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8 — Personal
Denník N - Nezávislý denník — Personal
Edit profile — Personal
Location Logger
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N — Personal
Maďarské voľby – Denník N — Personal
Personal — Mozilla Firefox
Picture-in-Picture
Problem loading page — Personal
Screenpipe Dashboard — Personal
Settings — Personal
Sign in – Google accounts — Personal
Tailscale — Personal
UGREEN NAS — Personal
Vimium Options — Personal
Vimium – Get this Extension for 🦊 Firefox (en-US) — Personal
firefox sidebar - Google Search — Personal
tilscale admin panel - Google Search — Personal
Order Room Service • HBO Max
Shameless • HBO Max
Shameless • HBO Max — Personal
Simple Pleasures • HBO Max — Personal
Časť 2 • HBO Max — Personal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cat ~/.screenpipe/config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
]
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano ~/.screenpipe/config.json
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pkill screenpipe && sleep 2 && npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pkill screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-11T19:00:06.546722Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T19:00:07.267955Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T19:00:07.269566Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T19:00:07.269564Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T19:00:07.269921Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T19:00:07.470439Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T19:00:07.470481Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T19:00:07.470420Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T19:00:07.470877Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T19:00:07.471071Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T19:00:07.471748Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T19:00:07.471948Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T19:00:07.472085Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T19:00:07.472295Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T19:00:07.472315Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T19:00:14.624523Z INFO screenpipe_engine::ui_recorder: UI recording session ended: 6b15bcb7-6588-4b6b-9ae5-5a3b50fba2a2
2026-04-11T19:00:14.624669Z INFO screenpipe: shutdown complete
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-11T19:00:31.694964Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T19:00:32.442217Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T19:00:32.443687Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T19:00:32.443694Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T19:00:32.444120Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T19:00:32.662907Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T19:00:32.662887Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T19:00:32.662980Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T19:00:32.663355Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T19:00:32.663550Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T19:00:32.664216Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T19:00:32.664395Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T19:00:32.664552Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T19:00:32.665488Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T19:00:32.665515Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T19:00:42.589528Z INFO screenpipe_engine::ui_recorder: UI recording session ended: 47668625-ff04-42f8-aa0d-f4...
|
iTerm2
|
-zsh
|
NULL
|
|
scp: dest open "/volume1/screenpipe/db.sqlite& scp: dest open "/volume1/screenpipe/db.sqlite": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ scp ~/.screenpipe/db.sqlite Adm1n@[IP_ADDRESS]:/volume1/screenpipe/
scp: dest open "/volume1/screenpipe/": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 32
drwxr-xr-x 4 root wheel 128 11 Apr 16:35 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 16:34 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $clear
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: touch:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: bad pattern: unmount(/Volumes/screenpipe):
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: touch:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: cp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: scp:
zsh: command not found: scp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: scp:
zsh: command not found: scp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: total
zsh: command not found: drwxr-xr-x
zsh: command not found: drwxr-xr-x
zsh: file exists: /
zsh: command not found: drwx------
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ scp ~/.screenpipe/db.sqlite Adm1n@[IP_ADDRESS]:/volume1/screenpipe/db.sqlite
scp: dest open "/volume1/screenpipe/db.sqlite": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls
Macintosh HD screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 32
drwxr-xr-x 4 root wheel 128 11 Apr 16:35 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 16:34 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite
cp: /Volumes/Test/screenpipe/db.sqlite: No such file or directory
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/
cp: directory /Volumes/Test/screenpipe does not exist
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 11 Apr 16:45 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 10 Aug 2025 Apps
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 11 Apr 16:47 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp -r ~/.screenpipe/pipes/ /Volumes/Test/screenpipe/pipes/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp -r ~/.screenpipe/data/data/ /Volumes/Test/screenpipe/data/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sed 's|$HOME/.screenpipe/db.sqlite|/volume1/Test/screenpipe/db.sqlite|g' ~/screenpipe-day.sh > /volume1/Test/screenpipe/screenpipe-day.sh
zsh: no such file or directory: /volume1/Test/screenpipe/screenpipe-day.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cat ~/screenpipe-day.sh
#!/bin/zsh
DB="$HOME/.screenpipe/db.sqlite"
DATE=${1:-$(date -v-1d '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo "\n📱 APP USAGE (frames + estimated time)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-30s %5d frames ~%5.1f min', app_name, COUNT(*), ROUND(COUNT(*) * 4.5 / 60.0, 1))
FROM frames
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY app_name ORDER BY COUNT(*) DESC;"
echo "\n⌨️ ACTIVITY TYPE PER APP (clicks / keys / switches)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-25s clicks:%-5d keys:%-5d switches:%-4d',
app_name,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END),
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END),
SUM(CASE WHEN event_type='app_switch' THEN 1 ELSE 0 END))
FROM ui_events
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY app_name ORDER BY COUNT(*) DESC;"
echo "\n🌐 BROWSER URLS VISITED"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%4d frames %s', COUNT(*), browser_url)
FROM frames
WHERE date(timestamp) = '$DATE' AND browser_url IS NOT NULL
GROUP BY browser_url ORDER BY COUNT(*) DESC LIMIT 20;"
echo "\n🪟 WINDOW TITLES (top 20)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-20s %3d %s', app_name, COUNT(*), SUBSTR(window_name,1,60))
FROM frames
WHERE date(timestamp) = '$DATE' AND window_name IS NOT NULL AND app_name IS NOT NULL
GROUP BY app_name, window_name ORDER BY COUNT(*) DESC LIMIT 20;"
echo "\n🕐 HOURLY TIMELINE"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%s %-20s %3d frames', strftime('%H:00', timestamp), app_name, COUNT(*))
FROM frames
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY strftime('%H', timestamp), app_name
ORDER BY strftime('%H', timestamp), COUNT(*) DESC;"
echo "\n📋 CLIPBOARD ACTIVITY"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-20s %s', app_name, SUBSTR(text_content, 1, 80))
FROM ui_events
WHERE date(timestamp) = '$DATE' AND event_type = 'clipboard' AND text_content IS NOT NULL
ORDER BY timestamp LIMIT 20;"
echo "\n💬 OCR TEXT SAMPLES PER APP"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-15s %s', o.app_name, SUBSTR(o.text, 1, 80))
FROM ocr_text o
JOIN frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$DATE' AND o.app_name IS NOT NULL AND o.text != ''
GROUP BY o.app_name
ORDER BY o.app_name LIMIT 15;"
echo "\n🔢 TOTALS"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT
'Frames: ' || COUNT(*) FROM frames WHERE date(timestamp) = '$DATE';
"
sqlite3 "$DB" "
SELECT 'UI Events: ' || COUNT(*) FROM ui_events WHERE date(timestamp) = '$DATE';
"
sqlite3 "$DB" "
SELECT 'OCR texts: ' || COUNT(*) FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE date(f.timestamp) = '$DATE';
"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ curl -X POST [URL_WITH_CREDENTIALS] /Volumes $ curl -X POST [URL_WITH_CREDENTIALS] /Volumes $ curl [URL_WITH_CREDENTIALS] /Volumes $ curl -s [URL_WITH_CREDENTIALS] /Volumes $ echo "alias sp-status='curl -s [URL_WITH_CREDENTIALS] /Volumes $ sp-status
zsh: command not found: sp-status
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ source ~/.zprofile
Poetry could not find a pyproject.toml file in /Volumes or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sp-status
zsh: command not found: sp-status
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ zp
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls
Apps Macintosh HD Test screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll
total 1272
drwx------+ 89 lukas staff 2848 11 Apr 18:38 .
drwxr-xr-x 5 root admin 160 23 Aug 2024 ..
-r-------- 1 lukas staff 7 18 Nov 2021 .CFUserTextEncoding
-rw-r--r--@ 1 lukas staff 22532 11 Apr 16:46 .DS_Store
drwx------+ 2 lukas staff 64 11 Apr 11:15 .Trash
drwx------ 5 lukas staff 160 1 Nov 2021 .aws
-rw-r--r-- 1 lukas staff 341470 29 Sep 2022 .babel.json
-rw-------@ 1 lukas staff 388 25 Jul 2025 .bash_history
-rw-r--r--@ 1 lukas staff 77 9 Feb 2023 .bashrc
drwxr-xr-x 5 lukas staff 160 11 Mar 2023 .bito
drwx------@ 6 lukas staff 192 9 Apr 19:53 .cache
drwxr-xr-x 20 lukas staff 640 9 Apr 21:21 .claude
-rw------- 1 lukas staff 24973 9 Apr 21:24 .claude.json
drwxr-xr-x@ 20 lukas staff 640 12 Mar 09:12 .codeium
drwxrwxrwx@ 3 lukas staff 96 2 Mar 2023 .composer
drwx------ 16 lukas staff 512 21 May 2025 .config
drwxr-xr-x 15 lukas staff 480 23 Dec 2024 .continue
drwx------@ 3 lukas staff 96 16 Feb 19:13 .copilot
drwxr-xr-x@ 5 lukas staff 160 9 Apr 2025 .cursor
drwxr-xr-x@ 5 lukas staff 160 17 Aug 2024 .cursor-tutor
drwxr-xr-x 3 lukas staff 96 8 Sep 2024 .daytona
drwxr-xr-x@ 4 lukas staff 128 18 Feb 10:52 .devdb
drwx------ 24 lukas staff 768 9 Apr 18:24 .docker
drwx------ 15 lukas staff 480 6 Jun 2023 .dropbox
drwxr-xr-x@ 3 lukas staff 96 20 Nov 2022 .fig.dotfiles.bak
-rw-r--r-- 1 lukas staff 138 5 Mar 2022 .gauth
-rw-r--r-- 1 lukas staff 220 25 Nov 2021 .gitconfig
-rw-r--r-- 1 lukas staff 12288 25 Nov 2021 .gitconfig.swp
drwx------ 5 lukas staff 160 18 Nov 2021 .hammerspoon
drwxr-xr-x 3 lukas staff 96 21 Mar 2025 .idlerc
-rw------- 1 lukas staff 20 31 Mar 18:32 .lesshst
drwx------ 5 lukas staff 160 23 Dec 2024 .local
-rw------- 1 lukas staff 204 16 Mar 2024 .netrc
drwx------ 3 lukas staff 96 1 Nov 2021 .node-gyp
-rw------- 1 lukas staff 4 6 Feb 2024 .node_repl_history
-rw-r--r-- 1 lukas staff 17 24 Dec 2023 .notion-enhancer
drwxr-xr-x 4 lukas staff 128 12 Jul 2024 .notion-py
drwx------ 9 lukas staff 288 11 Apr 18:41 .npm
-rw------- 1 lukas staff 74 20 May 2024 .npmrc
drwx------ 32 lukas staff 1024 25 Jul 2025 .nvm
drwxr-xr-x 4 lukas staff 128 5 Aug 2023 .postman
-rw-r--r--@ 1 lukas staff 77 9 Feb 2023 .profile
-rw-------@ 1 lukas staff 3153 21 Mar 2025 .python_history
drwx------ 2 lukas staff 64 15 Nov 2021 .quicktype-vscode
drwxr-xr-x@ 8 lukas staff 256 16 Feb 08:48 .redis-insight
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .screenpipe
UW PICO 5.09 New Buffer
[ Read 11 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
drwxr-xr-x 4 lukas staff 128 4 Feb 09:35 .sonarlint
drwx------ 15 lukas staff 480 8 Aug 2025 .ssh
drwxr-xr-x@ 3 lukas staff 96 15 Aug 2025 .streamlit
drwx------ 6 lukas staff 192 17 Oct 2022 .swiftpm
-rw------- 1 lukas staff 12183 8 Apr 19:14 .viminfo
drwx------ 5 lukas staff 160 19 Jun 2023 .vscode
drwxr-xr-x@ 3 lukas staff 96 20 Jan 2025 .warp
drwxr-xr-x 4 lukas staff 128 29 Apr 2023 .wdm
drwxr-xr-x@ 5 lukas staff 160 26 Jan 13:03 .windsurf
drwxr-xr-x 4 lukas staff 128 24 Mar 12:03 .yarn
-rw-r--r-- 1 lukas staff 116 30 Mar 10:12 .yarnrc
-rw-r--r--@ 1 lukas staff 49518 6 Apr 14:31 .zcompdump
-rw-r--r--@ 1 lukas staff 46758 2 Nov 20:34 .zcompdump.Lukas-Kovaliks-MacBook-Pro-Jiminny.23381
-rw-r--r--@ 1 lukas staff 5641 9 Apr 20:30 .zprofile
-rw-r--r-- 1 lukas staff 1468 8 Apr 2022 .zprofile-copy
-rw-r--r--@ 1 lukas staff 2900 15 Mar 2023 .zprofile.pysave
-rw------- 1 lukas staff 1731 29 Jun 2022 .zprofile.save
-rw-r--r-- 1 lukas staff 1569 8 Apr 2022 .zprofilees
UW PICO 5.09 New Buffer
[ Read 13 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
-rw------- 1 lukas staff 28812 11 Apr 18:38 .zsh_history
drwx------ 9 lukas staff 288 6 May 2025 .zsh_sessions
-rw-r--r--@ 1 lukas staff 597 11 Apr 18:44 .zshrc
drwx------@ 9 lukas staff 288 9 Apr 20:08 Applications
drwxr-xr-x@ 2 lukas staff 64 22 Oct 09:35 CascadeProjects
drwxr-xr-x 4 lukas staff 128 27 Oct 09:24 DEV
drwx------@ 10 lukas staff 320 11 Apr 18:31 Desktop
drwx------@ 7 lukas staff 224 26 Mar 14:40 Documents
drwx------@ 41 lukas staff 1312 8 Apr 20:46 Downloads
drwxr-xr-x@ 4 lukas staff 128 17 Mar 20:27 Keychron_Screen
drwx------@ 112 lukas staff 3584 2 Dec 09:19 Library
drwx------ 7 lukas staff 224 12 Feb 2024 Movies
drwx------+ 5 lukas staff 160 25 Sep 2023 Music
drwx------+ 9 lukas staff 288 25 Sep 2023 Pictures
drwx------ 3 lukas staff 96 8 Nov 2021 Postman
drwx------+ 4 lukas staff 128 28 Oct 2021 Public
-rw-r--r--@ 1 lukas staff 3950 15 Dec 09:16 Untitled 4.spf
drwx------ 4 lukas staff 128 2 Jul 2023 Users
drwx------ 3 lukas staff 96 30 Sep 2022 iCloud Drive (Archive)
drwx------ 16 lukas staff 512 3 Nov 11:35 jiminny
drwxr-xr-x 3 lukas staff 96 20 Mar 18:47 node_modules
drwxr-xr-x 4 lukas staff 128 21 Oct 18:15 raycast
-rw-r--r-- 1 lukas staff 0 1 Mar 14:26 response.bin
-rwxr-xr-x 1 lukas staff 3824 11 Apr 15:16 screenpipe-day.sh
-rw-r--r-- 1 lukas staff 86 20 Mar 18:47 yarn.lock
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano .zshrc
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ echo "alias sp-status='curl -s [URL_WITH_CREDENTIALS] ~ $ source ~/.zprofile
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-status
{
"status": "healthy",
"frame_status": "ok",
"audio_status": "disabled",
"last_frame": "2026-04-11T18:47:17+03:00",
"uptime": 345.971219541,
"fps": 0.[CREDIT_CARD],
"frames": 34
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano ~/.screenpipe/config.json
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 41216
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T18:54:13.170097Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T18:54:13.812964Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T18:54:13.819889Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T18:54:13.819889Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T18:54:13.820291Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T18:54:13.820220Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T18:54:13.820450Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T18:54:13.820896Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T18:54:13.820856Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T18:54:13.821123Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T18:54:13.821801Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T18:54:13.821972Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T18:54:13.822128Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T18:54:13.822942Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T18:54:13.822962Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T18:54:18.859011Z INFO screenpipe_engine::retention: retention: initialized with 14d retention
2026-04-11T18:54:18.859467Z INFO screenpipe: local retention auto-enabled (14 days)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT DISTINCT window_name
FROM frames
WHERE app_name IN ('Safari', 'Firefox', 'Arc', 'Chrome')
AND window_name IS NOT NULL
UW PICO 5.09 New Buffer
[ Read 13 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
ORDER BY window_name;"
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8 — Personal
Denník N - Nezávislý denník — Personal
Edit profile — Personal
Location Logger
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N — Personal
Maďarské voľby – Denník N — Personal
Personal — Mozilla Firefox
Picture-in-Picture
Problem loading page — Personal
Screenpipe Dashboard — Personal
Settings — Personal
Sign in – Google accounts — Personal
Tailscale — Personal
UGREEN NAS — Personal
Vimium Options — Personal
Vimium – Get this Extension for 🦊 Firefox (en-US) — Personal
firefox sidebar - Google Search — Personal
tilscale admin panel - Google Search — Personal
Order Room Service • HBO Max
Shameless • HBO Max
Shameless • HBO Max — Personal
Simple Pleasures • HBO Max — Personal
Časť 2 • HBO Max — Personal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cat ~/.screenpipe/config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
]
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano ~/.screenpipe/config.json
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pkill screenpipe && sleep 2 && npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pkill screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-11T19:00:06.546722Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T19:00:07.267955Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T19:00:07.269566Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T19:00:07.269564Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T19:00:07.269921Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T19:00:07.470439Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T19:00:07.470481Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T19:00:07.470420Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T19:00:07.470877Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T19:00:07.471071Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T19:00:07.471748Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T19:00:07.471948Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T19:00:07.472085Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T19:00:07.472295Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T19:00:07.472315Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T19:00:14.624523Z INFO screenpipe_engine::ui_recorder: UI recording session ended: 6b15bcb7-6588-4b6b-9ae5-5a3b50fba2a2
2026-04-11T19:00:14.624669Z INFO screenpipe: shutdown complete
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-11T19:00:31.694964Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T19:00:32.442217Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T19:00:32.443687Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T19:00:32.443694Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T19:00:32.444120Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T19:00:32.662907Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T19:00:32.662887Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T19:00:32.662980Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T19:00:32.663355Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T19:00:32.663550Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T19:00:32.664216Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T19:00:32.664395Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T19:00:32.664552Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T19:00:32.665488Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T19:00:32.665515Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T19:00:42.589528Z INFO screenpipe_engine::ui_recorder: UI recording session ended: 47668625-ff04-42f8-aa0d-f468ff11f0ff
2026-04-11T19:00:42.589635Z INFO screenpipe: shutdown complete
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 42748
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T20:26:04.829554Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T20:26:05.341444Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T20:26:05.345218Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T20:26:05.345229Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T20:26:05.345415Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T20:26:05.345428Z INFO screenpipe_engine:...
|
iTerm2
|
-zsh
|
NULL
|
|
zsh: command not found: lukas@Lukas-Kovaliks-MacBo zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: touch:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: bad pattern: unmount(/Volumes/screenpipe):
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: touch:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: cp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: scp:
zsh: command not found: scp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: scp:
zsh: command not found: scp:
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
zsh: command not found: total
zsh: command not found: drwxr-xr-x
zsh: command not found: drwxr-xr-x
zsh: file exists: /
zsh: command not found: drwx------
zsh: command not found: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ scp ~/.screenpipe/db.sqlite Adm1n@[IP_ADDRESS]:/volume1/screenpipe/db.sqlite
scp: dest open "/volume1/screenpipe/db.sqlite": No such file or directory
scp: failed to upload file /Users/lukas/.screenpipe/db.sqlite to /volume1/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls
Macintosh HD screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 32
drwxr-xr-x 4 root wheel 128 11 Apr 16:35 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 16:34 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite
cp: /Volumes/Test/screenpipe/db.sqlite: No such file or directory
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/
cp: directory /Volumes/Test/screenpipe does not exist
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/db.sqlite
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/screenpipe/
cp: /Volumes/screenpipe/db.sqlite: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 11 Apr 16:45 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 10 Aug 2025 Apps
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 11 Apr 16:47 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp -r ~/.screenpipe/pipes/ /Volumes/Test/screenpipe/pipes/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp -r ~/.screenpipe/data/data/ /Volumes/Test/screenpipe/data/
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sed 's|$HOME/.screenpipe/db.sqlite|/volume1/Test/screenpipe/db.sqlite|g' ~/screenpipe-day.sh > /volume1/Test/screenpipe/screenpipe-day.sh
zsh: no such file or directory: /volume1/Test/screenpipe/screenpipe-day.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cat ~/screenpipe-day.sh
#!/bin/zsh
DB="$HOME/.screenpipe/db.sqlite"
DATE=${1:-$(date -v-1d '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo "\n📱 APP USAGE (frames + estimated time)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-30s %5d frames ~%5.1f min', app_name, COUNT(*), ROUND(COUNT(*) * 4.5 / 60.0, 1))
FROM frames
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY app_name ORDER BY COUNT(*) DESC;"
echo "\n⌨️ ACTIVITY TYPE PER APP (clicks / keys / switches)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-25s clicks:%-5d keys:%-5d switches:%-4d',
app_name,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END),
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END),
SUM(CASE WHEN event_type='app_switch' THEN 1 ELSE 0 END))
FROM ui_events
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY app_name ORDER BY COUNT(*) DESC;"
echo "\n🌐 BROWSER URLS VISITED"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%4d frames %s', COUNT(*), browser_url)
FROM frames
WHERE date(timestamp) = '$DATE' AND browser_url IS NOT NULL
GROUP BY browser_url ORDER BY COUNT(*) DESC LIMIT 20;"
echo "\n🪟 WINDOW TITLES (top 20)"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-20s %3d %s', app_name, COUNT(*), SUBSTR(window_name,1,60))
FROM frames
WHERE date(timestamp) = '$DATE' AND window_name IS NOT NULL AND app_name IS NOT NULL
GROUP BY app_name, window_name ORDER BY COUNT(*) DESC LIMIT 20;"
echo "\n🕐 HOURLY TIMELINE"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%s %-20s %3d frames', strftime('%H:00', timestamp), app_name, COUNT(*))
FROM frames
WHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL
GROUP BY strftime('%H', timestamp), app_name
ORDER BY strftime('%H', timestamp), COUNT(*) DESC;"
echo "\n📋 CLIPBOARD ACTIVITY"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-20s %s', app_name, SUBSTR(text_content, 1, 80))
FROM ui_events
WHERE date(timestamp) = '$DATE' AND event_type = 'clipboard' AND text_content IS NOT NULL
ORDER BY timestamp LIMIT 20;"
echo "\n💬 OCR TEXT SAMPLES PER APP"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT printf('%-15s %s', o.app_name, SUBSTR(o.text, 1, 80))
FROM ocr_text o
JOIN frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$DATE' AND o.app_name IS NOT NULL AND o.text != ''
GROUP BY o.app_name
ORDER BY o.app_name LIMIT 15;"
echo "\n🔢 TOTALS"
echo "───────────────────────────────────────"
sqlite3 "$DB" "
SELECT
'Frames: ' || COUNT(*) FROM frames WHERE date(timestamp) = '$DATE';
"
sqlite3 "$DB" "
SELECT 'UI Events: ' || COUNT(*) FROM ui_events WHERE date(timestamp) = '$DATE';
"
sqlite3 "$DB" "
SELECT 'OCR texts: ' || COUNT(*) FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE date(f.timestamp) = '$DATE';
"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ curl -X POST [URL_WITH_CREDENTIALS] /Volumes $ curl -X POST [URL_WITH_CREDENTIALS] /Volumes $ curl [URL_WITH_CREDENTIALS] /Volumes $ curl -s [URL_WITH_CREDENTIALS] /Volumes $ echo "alias sp-status='curl -s [URL_WITH_CREDENTIALS] /Volumes $ sp-status
zsh: command not found: sp-status
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ source ~/.zprofile
Poetry could not find a pyproject.toml file in /Volumes or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sp-status
zsh: command not found: sp-status
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ zp
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls
Apps Macintosh HD Test screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll
total 1272
drwx------+ 89 lukas staff 2848 11 Apr 18:38 .
drwxr-xr-x 5 root admin 160 23 Aug 2024 ..
-r-------- 1 lukas staff 7 18 Nov 2021 .CFUserTextEncoding
-rw-r--r--@ 1 lukas staff 22532 11 Apr 16:46 .DS_Store
drwx------+ 2 lukas staff 64 11 Apr 11:15 .Trash
drwx------ 5 lukas staff 160 1 Nov 2021 .aws
-rw-r--r-- 1 lukas staff 341470 29 Sep 2022 .babel.json
-rw-------@ 1 lukas staff 388 25 Jul 2025 .bash_history
-rw-r--r--@ 1 lukas staff 77 9 Feb 2023 .bashrc
drwxr-xr-x 5 lukas staff 160 11 Mar 2023 .bito
drwx------@ 6 lukas staff 192 9 Apr 19:53 .cache
drwxr-xr-x 20 lukas staff 640 9 Apr 21:21 .claude
-rw------- 1 lukas staff 24973 9 Apr 21:24 .claude.json
drwxr-xr-x@ 20 lukas staff 640 12 Mar 09:12 .codeium
drwxrwxrwx@ 3 lukas staff 96 2 Mar 2023 .composer
drwx------ 16 lukas staff 512 21 May 2025 .config
drwxr-xr-x 15 lukas staff 480 23 Dec 2024 .continue
drwx------@ 3 lukas staff 96 16 Feb 19:13 .copilot
drwxr-xr-x@ 5 lukas staff 160 9 Apr 2025 .cursor
drwxr-xr-x@ 5 lukas staff 160 17 Aug 2024 .cursor-tutor
drwxr-xr-x 3 lukas staff 96 8 Sep 2024 .daytona
drwxr-xr-x@ 4 lukas staff 128 18 Feb 10:52 .devdb
drwx------ 24 lukas staff 768 9 Apr 18:24 .docker
drwx------ 15 lukas staff 480 6 Jun 2023 .dropbox
drwxr-xr-x@ 3 lukas staff 96 20 Nov 2022 .fig.dotfiles.bak
-rw-r--r-- 1 lukas staff 138 5 Mar 2022 .gauth
-rw-r--r-- 1 lukas staff 220 25 Nov 2021 .gitconfig
-rw-r--r-- 1 lukas staff 12288 25 Nov 2021 .gitconfig.swp
drwx------ 5 lukas staff 160 18 Nov 2021 .hammerspoon
drwxr-xr-x 3 lukas staff 96 21 Mar 2025 .idlerc
-rw------- 1 lukas staff 20 31 Mar 18:32 .lesshst
drwx------ 5 lukas staff 160 23 Dec 2024 .local
-rw------- 1 lukas staff 204 16 Mar 2024 .netrc
drwx------ 3 lukas staff 96 1 Nov 2021 .node-gyp
-rw------- 1 lukas staff 4 6 Feb 2024 .node_repl_history
-rw-r--r-- 1 lukas staff 17 24 Dec 2023 .notion-enhancer
drwxr-xr-x 4 lukas staff 128 12 Jul 2024 .notion-py
drwx------ 9 lukas staff 288 11 Apr 18:41 .npm
-rw------- 1 lukas staff 74 20 May 2024 .npmrc
drwx------ 32 lukas staff 1024 25 Jul 2025 .nvm
drwxr-xr-x 4 lukas staff 128 5 Aug 2023 .postman
-rw-r--r--@ 1 lukas staff 77 9 Feb 2023 .profile
-rw-------@ 1 lukas staff 3153 21 Mar 2025 .python_history
drwx------ 2 lukas staff 64 15 Nov 2021 .quicktype-vscode
drwxr-xr-x@ 8 lukas staff 256 16 Feb 08:48 .redis-insight
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .screenpipe
UW PICO 5.09 New Buffer
[ Read 11 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
drwxr-xr-x 4 lukas staff 128 4 Feb 09:35 .sonarlint
drwx------ 15 lukas staff 480 8 Aug 2025 .ssh
drwxr-xr-x@ 3 lukas staff 96 15 Aug 2025 .streamlit
drwx------ 6 lukas staff 192 17 Oct 2022 .swiftpm
-rw------- 1 lukas staff 12183 8 Apr 19:14 .viminfo
drwx------ 5 lukas staff 160 19 Jun 2023 .vscode
drwxr-xr-x@ 3 lukas staff 96 20 Jan 2025 .warp
drwxr-xr-x 4 lukas staff 128 29 Apr 2023 .wdm
drwxr-xr-x@ 5 lukas staff 160 26 Jan 13:03 .windsurf
drwxr-xr-x 4 lukas staff 128 24 Mar 12:03 .yarn
-rw-r--r-- 1 lukas staff 116 30 Mar 10:12 .yarnrc
-rw-r--r--@ 1 lukas staff 49518 6 Apr 14:31 .zcompdump
-rw-r--r--@ 1 lukas staff 46758 2 Nov 20:34 .zcompdump.Lukas-Kovaliks-MacBook-Pro-Jiminny.23381
-rw-r--r--@ 1 lukas staff 5641 9 Apr 20:30 .zprofile
-rw-r--r-- 1 lukas staff 1468 8 Apr 2022 .zprofile-copy
-rw-r--r--@ 1 lukas staff 2900 15 Mar 2023 .zprofile.pysave
-rw------- 1 lukas staff 1731 29 Jun 2022 .zprofile.save
-rw-r--r-- 1 lukas staff 1569 8 Apr 2022 .zprofilees
UW PICO 5.09 New Buffer
[ Read 13 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
-rw------- 1 lukas staff 28812 11 Apr 18:38 .zsh_history
drwx------ 9 lukas staff 288 6 May 2025 .zsh_sessions
-rw-r--r--@ 1 lukas staff 597 11 Apr 18:44 .zshrc
drwx------@ 9 lukas staff 288 9 Apr 20:08 Applications
drwxr-xr-x@ 2 lukas staff 64 22 Oct 09:35 CascadeProjects
drwxr-xr-x 4 lukas staff 128 27 Oct 09:24 DEV
drwx------@ 10 lukas staff 320 11 Apr 18:31 Desktop
drwx------@ 7 lukas staff 224 26 Mar 14:40 Documents
drwx------@ 41 lukas staff 1312 8 Apr 20:46 Downloads
drwxr-xr-x@ 4 lukas staff 128 17 Mar 20:27 Keychron_Screen
drwx------@ 112 lukas staff 3584 2 Dec 09:19 Library
drwx------ 7 lukas staff 224 12 Feb 2024 Movies
drwx------+ 5 lukas staff 160 25 Sep 2023 Music
drwx------+ 9 lukas staff 288 25 Sep 2023 Pictures
drwx------ 3 lukas staff 96 8 Nov 2021 Postman
drwx------+ 4 lukas staff 128 28 Oct 2021 Public
-rw-r--r--@ 1 lukas staff 3950 15 Dec 09:16 Untitled 4.spf
drwx------ 4 lukas staff 128 2 Jul 2023 Users
drwx------ 3 lukas staff 96 30 Sep 2022 iCloud Drive (Archive)
drwx------ 16 lukas staff 512 3 Nov 11:35 jiminny
drwxr-xr-x 3 lukas staff 96 20 Mar 18:47 node_modules
drwxr-xr-x 4 lukas staff 128 21 Oct 18:15 raycast
-rw-r--r-- 1 lukas staff 0 1 Mar 14:26 response.bin
-rwxr-xr-x 1 lukas staff 3824 11 Apr 15:16 screenpipe-day.sh
-rw-r--r-- 1 lukas staff 86 20 Mar 18:47 yarn.lock
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano .zshrc
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ echo "alias sp-status='curl -s [URL_WITH_CREDENTIALS] ~ $ source ~/.zprofile
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-status
{
"status": "healthy",
"frame_status": "ok",
"audio_status": "disabled",
"last_frame": "2026-04-11T18:47:17+03:00",
"uptime": 345.971219541,
"fps": 0.[CREDIT_CARD],
"frames": 34
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano ~/.screenpipe/config.json
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 41216
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T18:54:13.170097Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T18:54:13.812964Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T18:54:13.819889Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T18:54:13.819889Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T18:54:13.820291Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T18:54:13.820220Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T18:54:13.820450Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T18:54:13.820896Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T18:54:13.820856Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T18:54:13.821123Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T18:54:13.821801Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T18:54:13.821972Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T18:54:13.822128Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T18:54:13.822942Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T18:54:13.822962Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ disabled │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T18:54:18.859011Z INFO screenpipe_engine::retention: retention: initialized with 14d retention
2026-04-11T18:54:18.859467Z INFO screenpipe: local retention auto-enabled (14 days)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT DISTINCT window_name
FROM frames
WHERE app_name IN ('Safari', 'Firefox', 'Arc', 'Chrome')
AND window_name IS NOT NULL
UW PICO 5.09 New Buffer
[ Read 13 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
ORDER BY window_name;"
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8 — Personal
Denník N - Nezávislý denník — Personal
Edit profile — Personal
Location Logger
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N — Personal
Maďarské voľby – Denník N — Personal
Personal — Mozilla Firefox
Picture-in-Picture
Problem loading page — Personal
Screenpipe Dashboard — Personal
Settings — Personal
Sign in – Google accounts — Personal
Tailscale — Personal
UGREEN NAS — Personal
Vimium Options — Personal
Vimium – Get this Extension for 🦊 Firefox (en-US) — Personal
firefox sidebar - Google Search — Personal
tilscale admin panel - Google Search — Personal
Order Room Service • HBO Max
Shameless • HBO Max
Shameless • HBO Max — Personal
Simple Pleasures • HBO Max — Personal
Časť 2 • HBO Max — Personal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cat ~/.screenpipe/config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
]
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nano ~/.screenpipe/config.json
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pkill screenpipe && sleep 2 && npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pkill screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-11T19:00:06.546722Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T19:00:07.267955Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T19:00:07.269566Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T19:00:07.269564Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T19:00:07.269921Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T19:00:07.470439Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T19:00:07.470481Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T19:00:07.470420Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T19:00:07.470877Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T19:00:07.471071Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T19:00:07.471748Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T19:00:07.471948Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T19:00:07.472085Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T19:00:07.472295Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T19:00:07.472315Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T19:00:14.624523Z INFO screenpipe_engine::ui_recorder: UI recording session ended: 6b15bcb7-6588-4b6b-9ae5-5a3b50fba2a2
2026-04-11T19:00:14.624669Z INFO screenpipe: shutdown complete
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ npx screenpipe@latest record
detected hardware tier: Mid
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-04-11T19:00:31.694964Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T19:00:32.442217Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T19:00:32.443687Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T19:00:32.443694Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T19:00:32.444120Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T19:00:32.662907Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T19:00:32.662887Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T19:00:32.662980Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T19:00:32.663355Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T19:00:32.663550Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T19:00:32.664216Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T19:00:32.664395Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T19:00:32.664552Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T19:00:32.665488Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T19:00:32.665515Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ no monitors available │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: [URL_WITH_CREDENTIALS] ~ $ 2026-04-11T19:00:42.589528Z INFO screenpipe_engine::ui_recorder: UI recording session ended: 47668625-ff04-42f8-aa0d-f468ff11f0ff
2026-04-11T19:00:42.589635Z INFO screenpipe: shutdown complete
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 42748
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T20:26:04.829554Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T20:26:05.341444Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T20:26:05.345218Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T20:26:05.345229Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T20:26:05.345415Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T20:26:05.345428Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T20:26:05.345477Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T20:26:05.345864Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T20:26:05.346065Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T20:26:05.346166Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T20:26:05.346730Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T20:26:05.346883Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T20:26:05.346990Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T20:26:05.347093Z INFO...
|
iTerm2
|
-zsh
|
NULL
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
✻ [Claude Code] elements.py (elements.py), Editor Group 1
Build screenpipe data UI…, Editor Group 2...
|
Code
|
✻ [Claude Code] elements.py (elements.py) — screen ✻ [Claude Code] elements.py (elements.py) — screenpipe [SSH: 100.73.206.126]...
|
NULL
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:01-zsh181DOCKERO 8812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFO screenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Close tab
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Preskočiť hlavnú navigáciu
Preskočiť hlavnú navigáciu
Denník N
Denník N
Vyhľadávaný výraz
Hľadaj
Hľadaj
Vypnúť reklamu
Vypnúť reklamu
SK
SK
HU
HU
CZ
CZ
EU
EU
Otvoriť hlavné menu
MENU
SVET
SVET
DONALD TRUMP
DONALD TRUMP
IRÁN
IRÁN
VIKTOR ORBÁN
VIKTOR ORBÁN
VOJNA NA UKRAJINE
VOJNA NA UKRAJINE
KONFLIKT NA BLÍZKOM VÝCHODE
KONFLIKT NA BLÍZKOM VÝCHODE
MAĎARSKÉ VOĽBY
MAĎARSKÉ VOĽBY
USA
USA
RUSKO
RUSKO
VLADIMIR PUTIN
VLADIMIR PUTIN
VÝVOJ BOJOV NA UKRAJINE
VÝVOJ BOJOV NA UKRAJINE
Posun na nasledujúce
Irán
Irán
ODOBERAŤ
ODOBERAŤ
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)
The New York Times
The New York Times
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať
Soňa Weissová
Soňa Weissová
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 24)
24
KOMENTÁRE
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť
Denisa Ballová
Denisa Ballová
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo
Jiří Sobota
Jiří Sobota
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 29)
29
KOMENTÁRE
Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí
Denník N
Denník N
a ďalší
10. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme
Tomáš Zemko
Tomáš Zemko
9. apríla 2026
Zobraziť diskusiu (počet príspevkov: 4)
4
KOMENTÁRE
Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú
Tomáš Zemko
Tomáš Zemko
9. apríla 2026
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé
Jan Wirnitzer
Jan Wirnitzer
9. apríla 2026
Zobraziť diskusiu (počet príspevkov: 3)
3
KOMENTÁRE
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary
Tomáš Vasilko
Tomáš Vasilko
8. apríla 2026
Zobraziť diskusiu (počet príspevkov: 1)
1
KOMENTÁRE
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)
Čo obsahuje 10-bodový iránsky plán a budú s ním Spojené štáty súhlasiť? (kľúčové otázky a odpovede o prímerí)...
|
Firefox
|
Irán – Denník N — Personal
|
dennikn.sk/tema/iran/
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 147Sat 11 Apr 20:34:25-zsh181DOCKERO 8812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:27-zsh181DOCKERO 8812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe
Screenpipe
Activity
Search
Audio
Work Report
AI Summary
Date
11
/
04
/
2026
Calendar
TOTAL SPAN
1.0h
14:52 → 15:54
ACTIVE
1.0h
BREAKS
0 breaks · 0.0h
SESSIONS
1
62m
FRAMES
612
APPS
6
UI EVENTS
1344
AUDIO
0
ACTIVE PERIOD
14:52 → 15:54
TIME PER APP
— CLICK TO FILTER RIGHT PANEL
iTerm2
5.2m
Firefox
1.5m
Finder
0.6m
QuickTime Player
0.5m
NetAuthAgent
0.1m
Raycast
0.1m
Websites
Windows
UI Events
nas.lakylak.xyz/desktop/#/
0.7m
play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d
0.1m
nas.lakylak.xyz/desktop/#/login/account
0.1m
login.tailscale.com/login?next_url=%2Fadmin
0.1m
dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/
0.1m
http://localhost:3030
0m
addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search
0m
accounts.google.com/v3/signin/accountchooser?access_type=offline&client_id=674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com&prompt=select_account&redirect_uri=https%3A%2F%2Flogin.tailscale.com%2Fa%2Foauth_response&response_type=code&scope=openid+email+profile&state=tc-ftYwP8oB0urJfQZeh42KPfA&dsh=S1949714251%3A1775911302074699&o2v=2&service=lso&flowName=GeneralOAuthFlow&opparams=%253F&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOOoeMJ9h1ZWE-Aau2rWQdjwJ-4Enpv6Ci-0hiDSq5jW9TsVTl1btOELm96_EZaQdgfRwBdj1zZGB_CYauRC0fkTqY_cZ35H_NcJOU2_4Ax0Gtto-fKf-nDgh4daUIBqdTh68bjSxOce25-KnK0XYdHV8mzb69bNhDZHVDj_gb42yLS6CaLOtRfvBqDUDqR3SzLMQPfBkXHhJz6IM_7wq52TLTL563ihzeGQBECsxCnD1Yk27REW5r_eZ0TNXkkAX7P1hB8gAkBKuZVXHltsgP7jvfc8R1fsuXURwjdV8kBOMOg3Reld6-0t5nB9qwgvuYCJsuo0Q7IMz9o-t41651a_Wsc0FnlTxFC_0DA-eKXtSlPZHRy9BW_O_UgliMh8Y9cnLpKZ4r9A_LwCm6flXHR1tZWe_NA_YGhQ9EYSdByTuW1hMcIXXh1Alssc0Sb9BtxZ5mPnlLjTXaWd8LEtCrsHv1HQQ%26flowName%3DGeneralOAuthFlow%26as%3DS1949714251%253A1775911302074699%26client_id%3D674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Flogin.tailscale.com...
|
Firefox
|
Screenpipe Dashboard — Personal
|
http://100.73.206.126:8766
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:31-zsh181DOCKERO 8812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:32-zsh181DOCKER• ₴812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOINFOscreenpipe_engine::retention: retention: initialized with 14d retentionscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:34-zsh181DOCKER• ₴812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOINFOscreenpipe_engine::retention: retention: initialized with 14d retentionscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe
Screenpipe
Activity
Search
Audio
Work Report
AI Summary
Date
11
/
04
/
2026
Calendar
TOTAL SPAN
1.0h
14:52 → 15:54
ACTIVE
1.0h
BREAKS
0 breaks · 0.0h
SESSIONS
1
62m
FRAMES
612
APPS
6
UI EVENTS
1344
AUDIO
0
ACTIVE PERIOD
14:52 → 15:54
TIME PER APP
— CLICK TO FILTER RIGHT PANEL
iTerm2
5.2m
Firefox
1.5m
Finder
0.6m
QuickTime Player
0.5m
NetAuthAgent
0.1m
Raycast
0.1m
Websites
Windows
UI Events
nas.lakylak.xyz/desktop/#/
0.7m
play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d
0.1m
nas.lakylak.xyz/desktop/#/login/account
0.1m
login.tailscale.com/login?next_url=%2Fadmin
0.1m
dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/
0.1m
http://localhost:3030
0m
addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search
0m
accounts.google.com/v3/signin/accountchooser?access_type=offline&client_id=674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com&prompt=select_account&redirect_uri=https%3A%2F%2Flogin.tailscale.com%2Fa%2Foauth_response&response_type=code&scope=openid+email+profile&state=tc-ftYwP8oB0urJfQZeh42KPfA&dsh=S1949714251%3A1775911302074699&o2v=2&service=lso&flowName=GeneralOAuthFlow&opparams=%253F&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOOoeMJ9h1ZWE-Aau2rWQdjwJ-4Enpv6Ci-0hiDSq5jW9TsVTl1btOELm96_EZaQdgfRwBdj1zZGB_CYauRC0fkTqY_cZ35H_NcJOU2_4Ax0Gtto-fKf-nDgh4daUIBqdTh68bjSxOce25-KnK0XYdHV8mzb69bNhDZHVDj_gb42yLS6CaLOtRfvBqDUDqR3SzLMQPfBkXHhJz6IM_7wq52TLTL563ihzeGQBECsxCnD1Yk27REW5r_eZ0TNXkkAX7P1hB8gAkBKuZVXHltsgP7jvfc8R1fsuXURwjdV8kBOMOg3Reld6-0t5nB9qwgvuYCJsuo0Q7IMz9o-t41651a_Wsc0FnlTxFC_0DA-eKXtSlPZHRy9BW_O_UgliMh8Y9cnLpKZ4r9A_LwCm6flXHR1tZWe_NA_YGhQ9EYSdByTuW1hMcIXXh1Alssc0Sb9BtxZ5mPnlLjTXaWd8LEtCrsHv1HQQ%26flowName%3DGeneralOAuthFlow%26as%3DS1949714251%253A1775911302074699%26client_id%3D674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Flogin.tailscale.com
0m...
|
Firefox
|
Screenpipe Dashboard — Personal
|
http://100.73.206.126:8766
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:40-zsh181DOCKER• ₴812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOINFOscreenpipe_engine::retention: retention: initialized with 14d retentionscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960М/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe
Screenpipe
Activity
Search
Audio
Work Report
AI Summary
Date
11
/
04
/
2026
Calendar
TOTAL SPAN
1.0h
14:52 → 15:54
ACTIVE
1.0h
BREAKS
0 breaks · 0.0h
SESSIONS
1
62m
FRAMES
612
APPS
6
UI EVENTS
1344
AUDIO
0
ACTIVE PERIOD
14:52 → 15:54
TIME PER APP
— CLICK TO FILTER RIGHT PANEL
iTerm2
5.2m
Firefox
1.5m
Finder
0.6m
QuickTime Player
0.5m
NetAuthAgent
0.1m
Raycast
0.1m
Websites
Windows
UI Events
nas.lakylak.xyz/desktop/#/
0.7m
play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d
0.1m
nas.lakylak.xyz/desktop/#/login/account
0.1m
login.tailscale.com/login?next_url=%2Fadmin
0.1m
dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/
0.1m
http://localhost:3030
0m
addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search
0m
accounts.google.com/v3/signin/accountchooser?access_type=offline&client_id=674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com&prompt=select_account&redirect_uri=https%3A%2F%2Flogin.tailscale.com%2Fa%2Foauth_response&response_type=code&scope=openid+email+profile&state=tc-ftYwP8oB0urJfQZeh42KPfA&dsh=S1949714251%3A1775911302074699&o2v=2&service=lso&flowName=GeneralOAuthFlow&opparams=%253F&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOOoeMJ9h1ZWE-Aau2rWQdjwJ-4Enpv6Ci-0hiDSq5jW9TsVTl1btOELm96_EZaQdgfRwBdj1zZGB_CYauRC0fkTqY_cZ35H_NcJOU2_4Ax0Gtto-fKf-nDgh4daUIBqdTh68bjSxOce25-KnK0XYdHV8mzb69bNhDZHVDj_gb42yLS6CaLOtRfvBqDUDqR3SzLMQPfBkXHhJz6IM_7wq52TLTL563ihzeGQBECsxCnD1Yk27REW5r_eZ0TNXkkAX7P1hB8gAkBKuZVXHltsgP7jvfc8R1fsuXURwjdV8kBOMOg3Reld6-0t5nB9qwgvuYCJsuo0Q7IMz9o-t41651a_Wsc0FnlTxFC_0DA-eKXtSlPZHRy9BW_O_UgliMh8Y9cnLpKZ4r9A_LwCm6flXHR1tZWe_NA_YGhQ9EYSdByTuW1hMcIXXh1Alssc0Sb9BtxZ5mPnlLjTXaWd8LEtCrsHv1HQQ%26flowName%3DGeneralOAuthFlow%26as%3DS1949714251%253A1775911302074699%26client_id%3D674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Flogin.tailscale.com
0m
dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/
✕ Close
2 frames · ~0.1 min · 0 screenshots available
Timeline
No Screenshots
14:52
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N — Personal
14:54
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N — Personal...
|
Firefox
|
Screenpipe Dashboard — Personal
|
http://100.73.206.126:8766
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:44-zsh181DOCKERO 8812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% 1Sat 11 Apr 20:34:46-zsh181DOCKERO 8812026-04-11T20:26:05.384798Z2026-04-11T20:26:05.389960Z2026-04-11T20:26:05.528107Z2026-04-11T20:26:05.683177Z2026-04-11T20:26:05.683293Z2026-04-11T20:26:05.683303Z2026-04-11T20:26:05.683311Z2026-04-11T20:26:05.683359Z2026-04-11T20:26:06.488545Z2026-04-11T20:26:07.067446Z2026-04-11720:26:08.75298522026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.992688Z2026-04-11T20:26:57.331771Z2026-04-11T20:27:05.408691Z2026-04-11T20:27:09.664908Z2026-04-11T20:31:05.374969Z2026-04-11T20:31:40.380610Z2026-04-11T20:32:09.668412ZDEV (-zsh)O 82APP (-zsh)• *3-zsh• *4-zsh• ₴5|-zsh886-zshO 87-zshINFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns:INFOmdns: advertisingscreenpipeon port 3030screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 883frame entries, coverage from 2026-04-10 17:26:05.378561 UTCINFOscreenpipe_engine::vision_manager::manager:Starting visionrecordingfor monitor1 (1440x900)INFOscreenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOscreenpipe_engine::vision_manager::monitor_watcher: Startingmonitor watcher (polling every 5 seconds)INFOscreenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)INFOsck_rs::stream_manager: persistent SCKstream started for display 1 (1440x900,2fps)INFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1: frame_id=1407, dur=537msINFOscreenpipe_engine::event_driven_capture:content dedup: skipping capture for monitor 1 (hash=-9215443531147982391, trigger=visual_change)INFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14days)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=-9215443531147982391, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::event_driven_capture: content dedup:INFOskipping capture for monitor 1 (hash=5606118560581161138, trigger=click)screenpipe_engine::snapshot_compaction: snapshotcompaction: found 61 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedINFOscreenpipe_engine::server: api_usage_5min: 1 requestsINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head -20• *8|du -sh ~/.screenpipe/data/data/*total 24drwxr-xr-x5 lukasstaff160B 11 Apr 14:52drwxr-xr-x5 lukasstaff160B 11 Apr 15:03-rw-r--r--@1 lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14 lukasstaff448B 11 Apr 14:53 2026-04-09drwxr-xr-x98 lukasstaff3.1K 11 Apr 20:32 2026-04-1139M/Users/lukas/.screenpipe/data/data/2026-04-0960M/Users/lukas/.screenpipe/data/data/2026-04-11lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe234M/Users/lukas/.screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/234M/Users/lukas/.screenpipe/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe/*4.0K/Users/lukas/.screenpipe/config.json99M126M/Users/lukas/.screenpipe/data/Users/lukas/.screenpipe/db.sqlite32K/Users/lukas/.screenpipe/db.sqlite-shm8.0M/Users/lukas/.screenpipe/db.sqlite-wal24K/Users/lukas/.screenpipe/pipes132K/Users/lukas/.screenpipe/screenpipe.2026-04-09.0.log132K/Users/lukas/.screenpipe/screenpipe.2026-04-11.0.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S U...
|
NULL
|
NULL
|
NULL
|
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
firefox sidebar - Google Search
firefox sidebar - Google Search
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Add-ons Manager
Add-ons Manager
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Irán – Denník N
Irán – Denník N
Vimium Options
Vimium Options
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Machines - Tailscale
Machines - Tailscale
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
Linkwarden – Get this Extension for 🦊 Firefox (en-US)
New Tab
New Tab
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)
Browser Extension Getting Started | Bitwarden
Browser Extension Getting Started | Bitwarden
Extensions – Add-ons for Firefox (en-US)
Extensions – Add-ons for Firefox (en-US)
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Screenpipe
Screenpipe
Activity
Search
Audio
Work Report
AI Summary
Date
11
/
04
/
2026
Calendar
TOTAL SPAN
1.0h
14:52 → 15:54
ACTIVE
1.0h
BREAKS
0 breaks · 0.0h
SESSIONS
1
62m
FRAMES
612
APPS
6
UI EVENTS
1344
AUDIO
0
ACTIVE PERIOD
14:52 → 15:54
TIME PER APP
— CLICK TO FILTER RIGHT PANEL
iTerm2
5.2m
Firefox
1.5m
Finder
0.6m
QuickTime Player
0.5m
NetAuthAgent
0.1m
Raycast
0.1m
Websites
Windows
UI Events
nas.lakylak.xyz/desktop/#/
0.7m
play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d
0.1m
nas.lakylak.xyz/desktop/#/login/account
0.1m
login.tailscale.com/login?next_url=%2Fadmin
0.1m
dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/
0.1m
http://localhost:3030
0m
addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search
0m
accounts.google.com/v3/signin/accountchooser?access_type=offline&client_id=674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com&prompt=select_account&redirect_uri=https%3A%2F%2Flogin.tailscale.com%2Fa%2Foauth_response&response_type=code&scope=openid+email+profile&state=tc-ftYwP8oB0urJfQZeh42KPfA&dsh=S1949714251%3A1775911302074699&o2v=2&service=lso&flowName=GeneralOAuthFlow&opparams=%253F&continue=https%3A%2F%2Faccounts.google.com%2Fsignin%2Foauth%2Fconsent%3Fauthuser%3Dunknown%26part%3DAJi8hAOOoeMJ9h1ZWE-Aau2rWQdjwJ-4Enpv6Ci-0hiDSq5jW9TsVTl1btOELm96_EZaQdgfRwBdj1zZGB_CYauRC0fkTqY_cZ35H_NcJOU2_4Ax0Gtto-fKf-nDgh4daUIBqdTh68bjSxOce25-KnK0XYdHV8mzb69bNhDZHVDj_gb42yLS6CaLOtRfvBqDUDqR3SzLMQPfBkXHhJz6IM_7wq52TLTL563ihzeGQBECsxCnD1Yk27REW5r_eZ0TNXkkAX7P1hB8gAkBKuZVXHltsgP7jvfc8R1fsuXURwjdV8kBOMOg3Reld6-0t5nB9qwgvuYCJsuo0Q7IMz9o-t41651a_Wsc0FnlTxFC_0DA-eKXtSlPZHRy9BW_O_UgliMh8Y9cnLpKZ4r9A_LwCm6flXHR1tZWe_NA_YGhQ9EYSdByTuW1hMcIXXh1Alssc0Sb9BtxZ5mPnlLjTXaWd8LEtCrsHv1HQQ%26flowName%3DGeneralOAuthFlow%26as%3DS1949714251%253A1775911302074699%26client_id%3D674241127656-lmq9su4p8ni1tcpuh6eqidoornqtvmvi.apps.googleusercontent.com%26requestPath%3D%252Fsignin%252Foauth%252Fconsent%23&app_domain=https%3A%2F%2Flogin.tailscale.com
0m...
|
Firefox
|
Screenpipe Dashboard — Personal
|
http://100.73.206.126:8766
|
|
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Explorer (⇧⌘E) - 1 unsaved file
1
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update, 1 requires restart
3
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
Explorer Section: screenpipe [SSH: [IP_ADDRESS]]
SCREENPIPE [SSH: [IP_ADDRESS]]
#recycle
app
consumers
__init__.py
activity.py
audio.py
elements.py
interactions.py
ocr.py
report.py
summary.py
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
report.py, preview, Editor Group 1
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
"""Structured work report — no LLM needed."""
from datetime import date, datetime, timezone, timedelta
from typing import Any
from urllib.parse import urlparse
from db import get_conn, date_range, today as _today
BREAK_THRESHOLD_MIN = 10 # gap > 10 min = break
WORK_APPS = {
"code": {"iTerm2", "Terminal", "Code", "Visual Studio Code", "PyCharm", "Xcode", "Cursor"},
"browser": {"Firefox", "Safari", "Chrome", "Arc", "Dia"},
"comms": {"Slack", "Teams", "Discord", "Zoom", "Telegram", "WhatsApp"},
"docs": {"Word", "Pages", "Notion", "Obsidian", "Bear", "Typora"},
"ai": {"Claude", "ChatGPT"},
"design": {"Figma", "Sketch", "Photoshop", "Illustrator"},
"media": {"QuickTime Player", "VLC", "Spotify"},
"system": {"Finder", "Activity Monitor", "System Preferences", "System Settings",
"Raycast", "Control Centre", "UserNotificationCenter", "NetAuthAgent"},
}
def _categorize(app_name: str) -> str:
for cat, apps in WORK_APPS.items():
if app_name in apps:
return cat
return "other"
def _extract_domain(url: str) -> str:
try:
h = urlparse(url).netloc
return h.removeprefix("www.") if h else url[:40]
except Exception:
return url[:40]
def _parse_ts(ts: str) -> datetime:
ts = ts.replace("+00:00", "+00:00") # already UTC
try:
return datetime.fromisoformat(ts)
except ValueError:
return datetime.fromisoformat(ts[:26] + "+00:00")
def session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:
"""
Detect work sessions and breaks from frame timestamps.
Returns sessions, breaks, and totals.
"""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp",
(start, end),
).fetchall()
if not rows:
return {"sessions": [], "breaks": [], "total_active_min": 0, "total_break_min": 0, "date": str(d)}
timestamps = [_parse_ts(r["timestamp"]) for r in rows]
threshold = timedelta(minutes=break_min)
sessions: list[dict] = []
breaks: list[dict] = []
sess_start = timestamps[0]
prev = timestamps[0]
for ts in timestamps[1:]:
gap = ts - prev
if gap > threshold:
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
breaks.append({
"start": prev.isoformat(),
"end": ts.isoformat(),
"duration_min": round(gap.total_seconds() / 60, 1),
})
sess_start = ts
prev = ts
dur = (prev - sess_start).total_seconds() / 60
sessions.append({
"start": sess_start.isoformat(),
"end": prev.isoformat(),
"duration_min": round(dur, 1),
})
total_active = sum(s["duration_min"] for s in sessions)
total_break = sum(b["duration_min"] for b in breaks)
total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60
return {
"date": str(d),
"day_start": timestamps[0].isoformat(),
"day_end": timestamps[-1].isoformat(),
"total_span_min": round(total_span, 1),
"total_active_min": round(total_active, 1),
"total_break_min": round(total_break, 1),
"sessions": sessions,
"breaks": breaks,
}
def domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:
"""Browser time grouped by domain."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ?
AND browser_url IS NOT NULL AND browser_url != ''
GROUP BY browser_url
ORDER BY frames DESC
""",
(start, end),
).fetchall()
# Group by domain
domains: dict[str, dict] = {}
for r in rows:
domain = _extract_domain(r["browser_url"])
if domain not in domains:
domains[domain] = {"domain": domain, "minutes": 0, "urls": []}
domains[domain]["minutes"] = round(domains[domain]["minutes"] + r["minutes"], 1)
domains[domain]["urls"].append({"url": r["browser_url"], "minutes": r["minutes"]})
return sorted(domains.values(), key=lambda x: x["minutes"], reverse=True)
def slack_activity(for_date: date | None = None) -> dict[str, Any]:
"""Slack-specific: time, channels, message activity."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
# Time in Slack
time_row = conn.execute(
"""
SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
# Channels from window names
channels = conn.execute(
"""
SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes
FROM frames
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
AND window_name IS NOT NULL AND window_name != ''
GROUP BY window_name ORDER BY frames DESC LIMIT 20
""",
(start, end),
).fetchall()
# Keystrokes in Slack (proxy for messages sent)
events = conn.execute(
"""
SELECT
SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,
SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks
FROM ui_events
WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'
""",
(start, end),
).fetchone()
return {
"minutes": time_row["minutes"] if time_row else 0,
"frames": time_row["frames"] if time_row else 0,
"keystrokes": events["keystrokes"] if events else 0,
"clicks": events["clicks"] if events else 0,
"channels": [dict(r) for r in channels],
}
def work_report(for_date: date | None = None) -> dict[str, Any]:
"""Full structured work report — no AI needed."""
from consumers.activity import app_time, ui_event_summary
d = for_date or _today()
apps = app_time(d)
# Annotate with category
categorized: dict[str, list] = {}
for a in apps:
cat = _categorize(a["app_name"])
categorized.setdefault(cat, []).append(a)
return {
"date": str(d),
"sessions": session_breakdown(d),
"apps_by_category": categorized,
"domains": domain_breakdown(d),
"slack": slack_activity(d),
"ui_events": ui_event_summary(d),
}
Build screenpipe data UI…, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: [IP_ADDRESS]
SSH: [IP_ADDRESS]
No Problems
0
0
No Ports Forwarded
0
Update is ready, click to restart.
Update is ready, click to restart.
Notifications
Sign In
Sign In
Screen Reader Optimized
Diff editor
Build screenpipe data UI and summary app
Session history
New session
Message actions
lets build app around screenpipe data and db. THe idea is to have ui and data consumers. So I can run regular commands at the end ot the day (or on demand) and create soem summary.
Thinking
Thinking
Let me explore the screenpipe directory to understand what we're working with.
Bash
List screenpipe directory contents
IN
ls /volume1/screenpipe/
Copy code to clipboard
OUT
data
db.sqlite
pipes
#recycle
[rerun: b1]
Bash
List data and pipes directories
IN
ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/
Copy code to clipboard
OUT
2026-04-09
2026-04-11
ai-habits
day-recap
meeting-summary
standup-update
time-breakdown
video-export
[rerun: b2]
Bash
List tables in screenpipe SQLite database
IN
sqlite3 /volume1/screenpipe/db.sqlite ".tables"
Copy code to clipboard
OUT
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
[rerun: b3]
Bash
Get ocr_text table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(ocr_text);"
Copy code to clipboard
OUT
0|frame_id|INTEGER|1||0
1|text|TEXT|1||0
2|text_json|TEXT|0||0
3|app_name|TEXT|1|''|0
4|ocr_engine|TEXT|1|'unknown'|0
5|window_name|TEXT|0||0
6|focused|BOOLEAN|0|FALSE|0
7|text_length|INTEGER|0||0
8|sync_id|TEXT|0||0
9|synced_at|DATETIME|0||0
[rerun: b4]
Bash
Get audio_transcriptions table schema
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(audio_transcriptions);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|audio_chunk_id|INTEGER|1||0
2|offset_index|INTEGER|1||0
3|timestamp|TIMESTAMP|1||0
4|transcription|TEXT|1||0
5|device|TEXT|1|''|0
6|is_input_device|BOOLEAN|1|TRUE|0
7|speaker_id|INTEGER|0||0
8|transcription_engine|TEXT|1|'Whisper'|0
9|start_time|REAL|0||0
10|end_time|REAL|0||0
11|text_length|INTEGER|0||0
12|sync_id|TEXT|0||0
13|synced_at|DATETIME|0||0
[rerun: b5]
Bash
Get frames, ui_events, video_chunks schemas
IN
sqlite3 /volume1/screenpipe/db.sqlite "PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);"
Copy code to clipboard
OUT
0|id|INTEGER|0||1
1|video_chunk_id|INTEGER|0|NULL|0
2|offset_index|INTEGER|1|0|0
3|timestamp|TIMESTAMP|1||0
4|name|TEXT|0||0
5|app_name|TEXT|0|NULL|0
6|window_name|TEXT|0|NULL|0
7|focused|BOOLEAN|0|NULL|0
8|browser_url|TEXT|0|NULL|0
9|device_name|TEXT|1|''|0
10|sync_id|TEXT|0||0
11|machine_id|TEXT|0||0
12|synced_at|DATETIME|0||0
13|snapshot_path|TEXT|0|NULL|0
14|accessibility_text|TEXT|0|NULL|0
15|accessibility_tree_json|TEXT|0|NULL|0
16|content_hash|INTEGER|0|NULL|0
17|simhash|INTEGER|0|NULL|0
18|capture_trigger|TEXT|0|NULL|0
19|text_source|TEXT|0|NULL|0
20|cloud_blob_id|TEXT|0|NULL|0
21|full_text|TEXT|0|NULL|0
22|elements_ref_frame_id|INTEGER|0|NULL|0
0|id|INTEGER|0||1
1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0
2|session_id|TEXT|0||0
3|relative_ms|INTEGER|1|0|0
4|event_type|TEXT|1||0
5|x|INTEGER|0||0
6|y|INTEGER|0||0
7|delta_x|INTEGER|0||0
8|delta_y|INTEGER|0||0
9|button|INTEGER|0||0
10|click_count|INTEGER|0||0
11|key_code|INTEGER|0||0
12|modifiers|INTEGER|0||0
13|text_content|TEXT|0||0
14|text_length|INTEGER|0||0
15|app_name|TEXT|0||0
16|app_pid|INTEGER|0||0
17|window_title|TEXT|0||0
18|browser_url|TEXT|0||0
19|element_role|TEXT|0||0
20|element_name|TEXT|0||0
21|element_value|TEXT|0||0
22|element_description|TEXT|0||0
23|element_automation_id|TEXT|0||0
24|element_bounds|TEXT|0||0
25|frame_id|INTEGER|0||0
26|sync_id|TEXT|0||0
27|machine_id|TEXT|0||0
28|synced_at|DATETIME|0||0
0|id|INTEGER|0||1
1|file_path|TEXT|1||0
2|device_name|TEXT|1|''|0
3|sync_id|TEXT|0||0
4|machine_id|TEXT|0||0
5|synced_at|DATETIME|0||0
6|fps|REAL|1|0.5|0
7|cloud_blob_id|TEXT|0|NULL|0
[rerun: b6]
Bash
Check data counts and date ranges
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;" 2>/dev/null
sqlite3 /volume1/screenpipe/db.sqlite "SELECT COUNT(*) FROM ocr_text;" 2>/dev/null
Copy code to clipboard
OUT
1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00
3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00
666
[rerun: b7]
Bash
Explore existing pipes for patterns
IN
ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50
Copy code to clipboard
OUT
pipe.md
[rerun: b8]
Bash
Read day-recap pipe documentation
IN
cat /volume1/screenpipe/pipes/day-recap/pipe.md
Copy code to clipboard
OUT
---
schedule: manual
enabled: true
template: true
title: Day Recap
description: "Today's accomplishments, key moments, and unfinished work"
icon: "📋"
featured: true
---
Analyze my screen and audio recordings from today (last 16 hours only).
Read screenpipe skill first.
Use this exact format:
## Summary
One sentence: what I mainly did today.
## Accomplishments
- Top 3 things I finished, with timestamps (e.g. "2:30 PM")
- Name specific apps, files, or projects
## Key Moments
- Important things I saw, said, or heard — with timestamps
## Unfinished Work
- What I should continue tomorrow — name the app/file/task
## Patterns
- Apps I used most, topics that came up repeatedly
Only report what you can verify from the data. End with: "**Next step:** [most important thing to continue]"
[rerun: b9]
Bash
Sample app names from frames
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;"
Copy code to clipboard
OUT
Safari
Activity Monitor
Dia
iTerm2
Control Centre
UserNotificationCenter
Finder
Claude
Slack
Firefox
Raycast
NetAuthAgent
QuickTime Player
[rerun: b10]
Bash
Sample joined frame+ocr data for today
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT f.timestamp, o.app_name, o.window_name, substr(o.text, 1, 100) as text FROM frames f JOIN ocr_text o ON f.id = o.frame_id WHERE DATE(f.timestamp) = '2026-04-11' LIMIT 5;"
Copy code to clipboard
OUT
2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE
2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER
2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p
2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p
2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi
[rerun: b11]
Bash
Sample recent audio transcriptions
IN
sqlite3 /volume1/screenpipe/db.sqlite "SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;"
Copy code to clipboard
OUT
2026-04-09T17:02:52+00:00|.|System Audio
2026-04-09T16:59:22+00:00|Class is technically...|System Audio
2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio
[rerun: b12]
Thinking
Thinking
Good data to work with. Here's what we have:
frames
+
ocr_text
: Screen captures with OCR text, app name, window name (1135 frames so far)
audio_transcriptions
: Voice/system audio transcripts
ui_events
: Mouse/keyboard events with app context
video_chunks
: Raw video files
Before I start building, a few quick questions:
Tech stack
— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)
AI summaries
— Do you have a Claude API key to use for generating the actual summaries? Or should I integrate with a local model / skip AI for now?
What summaries matter most?
Day recap (what apps/windows you used, key text seen)
App time breakdown (time per app)
Audio/conversation recap
Custom searchable timeline
Here's the architecture I'm thinking:
Copy code to clipboard
/volume1/screenpipe/app/
├── main.py # FastAPI web UI
├── cli.py # Click CLI: `python cli.py day-recap`
├── db.py # Read-only queries against db.sqlite
├── consumers/
│ ├── activity.py # App usage, time per window
│ ├── ocr.py # OCR text aggregation + search
│ ├── audio.py # Transcription queries
│ └── summary.py # AI summary builder
└── static/
└── index.html # Single-page UI
CLI commands would look like:
Copy code to clipboard
python cli.py day-recap # EOD summary
python cli.py activity --date today # App time breakdown
python cli.py search "docker" # Search OCR/audio text
python cli.py serve # Launch web UI
Does this direction work? Any preferences on the stack or which summaries to prioritize?
Message actions
seesm ok
Thinking
Thinking
Bash
Check Python and available packages
IN
python3 --version && pip3 list 2>/dev/null | grep -E "fastapi|uvicorn|click|anthropic|httpx|jinja"
Copy code to clipboard...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
NULL
|