|
17
|
2
|
7
|
2026-04-09T16:54:56.444541+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775753696444_m1.jpg...
|
Dia
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp••-zshDOCKERLast login: Thu Apr3819 19:52:08 on ttys009DEV (-zsh)$82APP (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ claude mcp add screenpipe -- npх -уscreenpipe-mcpzsh: command not found: claudelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $<>0 lbl*3screenpipe"100% C• *48•Thu 9 Apr 19:54:56-zshT81*5...
|
NULL
|
-4115069298229518912
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp••-zshDOCKERLast login: Thu Apr3819 19:52:08 on ttys009DEV (-zsh)$82APP (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ claude mcp add screenpipe -- npх -уscreenpipe-mcpzsh: command not found: claudelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $<>0 lbl*3screenpipe"100% C• *48•Thu 9 Apr 19:54:56-zshT81*5...
|
NULL
|
|
93
|
3
|
43
|
2026-04-09T17:04:02.399231+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754242399_m1.jpg...
|
Safari
|
Shameless • HBO Max
|
True
|
https://play.hbomax.com/show/06f986dd-dd6a-4596-9a
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Back
Bookmarks
Search
Favourites
Favourites
Favour Back
Bookmarks
Search
Favourites
Favourites
Favourites
Tab Group Favourites
Tab Group Favourites
Tab Group Favourites
NAS
NAS
NAS
Home
Home
Home
Portainer
Portainer
Portainer
Nginx Proxy Manager
Nginx Proxy Manager
Nginx Proxy Manager
App
App
App
Bitwarden Web vault
Bitwarden Web vault
Bitwarden Web vault
PDF Stirling
PDF Stirling
PDF Stirling
n8n
n8n
n8n
Jellyfin
Jellyfin
Jellyfin
Immich
Immich
Immich
CRM
CRM
CRM
Gitea
Gitea
Gitea
Images
Images
Images
DSK Uploader
DSK Uploader
DSK Uploader
owntracks recorder
owntracks recorder
owntracks recorder
Map | Dawarich
Map | Dawarich
Map | Dawarich
Audiobookshelf
Audiobookshelf
Audiobookshelf
TubeArchivist
TubeArchivist
TubeArchivist
Beszel
Beszel
Beszel
booklore
booklore
booklore
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Open WebUI
Open WebUI
Open WebUI
Paperless-ngx
Paperless-ngx
Paperless-ngx
Hostinger
Hostinger
Hostinger
Trilium Notes
Trilium Notes
Trilium Notes
Location Logger
Location Logger
Location Logger
Outfit Manager
Outfit Manager
Outfit Manager
Reminders
Reminders
Reminders
g
g
g
PROTON
PROTON
PROTON
Preskočiť na hlavný obsah
Preskočiť na hlavný obsah
Prezerať audiokomentár
Prezerať audiokomentár
Domovská stránka služby H B O Max
Domov
Domov
Seriály
Seriály
Filmy
Filmy
H B O
Šport
Šport
Hľadať
Moje tituly
Ponuky Profil a Nastavenia. Profil používateľa Lukáš.. Avatar: Meerkat from Crikey! It's the Irwins
Hriešnici
Hodnotené: 16, Násilie, Jazyk, Trvanie: 52 minút, Uvedené v roku 2013
Obnoviť Hriešnici Séria 3, epizóda 11: Časť 11, zostáva: 33 min
Reštartovať Hriešnici Séria 3, epizóda 11: Časť 11
Pridať do Môjho zoznamu: Hriešnici
Ohodnotiť tento seriál
Séria 3, epizóda 11: Časť 11
S3 E11: Časť 11
Fiona vezme deti na výlet.
Žánre: Komédia, Čierna komédia
Epizód
Séria 3
Predchádzajúce tituly v kategórii Séria
Pozerať znova: Séria 3, epizóda 1: Časť 1. 1 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 57 minút. Uvedené v roku 2013. Gallagherovci sa vracajú v úvodnej časti tretej série.
E1: Časť 1
57 min
2013
Gallagherovci sa vracajú v úvodnej časti tretej série.
Pozerať znova: Séria 3, epizóda 2: Časť 2. 2 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 53 minút. Uvedené v roku 2013. Fiona je v strese kvôli peniazom a Lip to ešte zhoršuje.
E2: Časť 2
53 min
2013
Fiona je v strese kvôli peniazom a Lip to ešte zhoršuje.
Pozerať znova: Séria 3, epizóda 3: Časť 3. 3 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 51 minút. Uvedené v roku 2013. Frank a Carl podvedú nadáciu na boj s rakovinou.
E3: Časť 3
51 min
2013
Frank a Carl podvedú nadáciu na boj s rakovinou.
Pozerať znova: Séria 3, epizóda 4: Časť 4. 4 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 50 minút. Uvedené v roku 2013. Jimmy sa dozvie o tajnom živote svojho otca.
E4: Časť 4
50 min
2013
Jimmy sa dozvie o tajnom živote svojho otca.
Pozerať znova: Séria 3, epizóda 5: Časť 5. 5 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 54 minút. Uvedené v roku 2013. Gallagherovcov navštívi sociálka.
E5: Časť 5
54 min
2013
Gallagherovcov navštívi sociálka.
Pozerať znova: Séria 3, epizóda 6: Časť 6. 6 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 53 minút. Uvedené v roku 2013. Fiona na súde bojuje za záchranu rodiny Gallagherovcov.
E6: Časť 6
53 min
2013
Fiona na súde bojuje za záchranu rodiny Gallagherovcov.
Pozerať znova: Séria 3, epizóda 7: Časť 7. 7 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 50 minút. Uvedené v roku 2013. Frank a Fiona bojujú na súde o opatrovníctvo detí.
E7: Časť 7
50 min
2013
Frank a Fiona bojujú na súde o opatrovníctvo detí.
Ponuka pre epizódu 7: Časť 7
Pozerať znova: Séria 3, epizóda 8: Časť 8. 8 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 52 minút. Uvedené v roku 2013. Dom preberá Frankov bratranec Patrick.
E8: Časť 8
52 min
2013
Dom preberá Frankov bratranec Patrick.
Ponuka pre epizódu 8: Časť 8
Pozerať znova: Séria 3, epizóda 9: Časť 9. 9 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 54 minút. Uvedené v roku 2013. Fiona získa novú prácu a Frank si osvojí nový (homosexuálny) životný štýl.
E9: Časť 9
54 min
2013
Fiona získa novú prácu a Frank si osvojí nový (homosexuálny) životný štýl.
Ponuka pre epizódu 9: Časť 9
Pozerať znova: Séria 3, epizóda 10: Časť 10. 10 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 49 minút. Uvedené v roku 2013. Jimmy otrasie Fioniným životom.
E10: Časť 10
49 min
2013
Jimmy otrasie Fioniným životom.
Ponuka pre epizódu 10: Časť 10
Pozerať Séria 3, epizóda 11: Časť 11. 11 z 12. Zostáva: 34 minút. Hodnotené: 16, Násilie, Jazyk. Trvanie: 52 minút. Uvedené v roku 2013. Fiona vezme deti na výlet.
E11: Časť 11
52 min
2013
Fiona vezme deti na výlet.
Ponuka pre epizódu 11: Časť 11
Séria 3, epizóda 12: Časť 12. 12 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 55 minút. Uvedené v roku 2013. Lip v záverečnej časti zmaturuje.
E12: Časť 12
55 min
2013
Lip v záverečnej časti zmaturuje.
Ponuka pre epizódu 12: Časť 12
Tiež by sa vám mohlo páčiť
Tiež by sa vám mohlo páčiť
Dva a pol chlapa. Riadok 1 z 4, stĺpec 1 z 8
Ponuka pre titul Dva a pol chlapa
Teória veľkého tresku. Riadok 1 z 4, stĺpec 2 z 8
Ponuka pre titul Teória veľkého tresku
Rick a Morty. Riadok 1 z 4, stĺpec 3 z 8
Ponuka pre titul Rick a Morty
Hrozba z temnoty. Riadok 1 z 4, stĺpec 4 z 8
Ponuka pre titul Hrozba z temnoty
Gossip Girl. Riadok 1 z 4, stĺpec 5 z 8
Ponuka pre titul Gossip Girl
Barry. Riadok 1 z 4, stĺpec 6 z 8
Ponuka pre titul Barry
Girls. Riadok 1 z 4, stĺpec 7 z 8
Ponuka pre titul Girls
Mladý Sheldon. Riadok 1 z 4, stĺpec 8 z 8
Ponuka pre titul Mladý Sheldon
Upírske denníky. Riadok 2 z 4, stĺpec 1 z 8
Ponuka pre titul Upírske denníky
Roztomilé mrchy. Riadok 2 z 4, stĺpec 2 z 8
Ponuka pre titul Roztomilé mrchy
The Originals. Riadok 2 z 4, stĺpec 3 z 8
Ponuka pre titul The Originals
Mentalista. Riadok 2 z 4, stĺpec 4 z 8
Ponuka pre titul Mentalista
Silicon Valley. Riadok 2 z 4, stĺpec 5 z 8
Ponuka pre titul Silicon Valley
Boj o riaditeľňu. Riadok 2 z 4, stĺpec 6 z 8
Ponuka pre titul Boj o riaditeľňu
Hung - Na veľkosti záleží. Riadok 2 z 4, stĺpec 7 z 8
Ponuka pre titul Hung - Na veľkosti záleží
Hráči. Riadok 2 z 4, stĺpec 8 z 8
Ponuka pre titul Hráči
V mene nášho Pána. Riadok 3 z 4, stĺpec 1 z 8
Prvé manželstvo Georgieho a Mandy. Riadok 3 z 4, stĺpec 2 z 8. Nová epizóda
Moje nové Ja. Riadok 3 z 4, stĺpec 3 z 8
Hore a dole. Riadok 3 z 4, stĺpec 4 z 8
John Oliver: Čo týždeň dal a vzal. Riadok 3 z 4, stĺpec 5 z 8
Viceprezident(ka). Riadok 3 z 4, stĺpec 6 z 8
Sexuálny život vysokoškoláčok. Riadok 3 z 4, stĺpec 7 z 8
Banshee. Riadok 3 z 4, stĺpec 8 z 8
Pán Nakladačka. Riadok 4 z 4, stĺpec 1 z 8
Biely lotos. Riadok 4 z 4, stĺpec 2 z 8
Veľká. Riadok 4 z 4, stĺpec 3 z 8
Normálka. Riadok 4 z 4, stĺpec 4 z 8
One Tree Hill. Riadok 4 z 4, stĺpec 5 z 8
Vo štvorici. Riadok 4 z 4, stĺpec 6 z 8
H B O Max You tube (otvorí sa na novej karte), 1 z 12
H B O Max x (otvorí sa na novej karte), 2 z 12
H B O Max Instagram (otvorí sa na novej karte), 3 z 12
H B O Max Tik Tok (otvorí sa na novej karte), 4 z 12
Prístupnosť (otvorí sa na novej karte), 5 z 12
Prístupnosť
Zvukový popis, 6 z 12
Zvukový popis
Zásady ochrany súkromia (otvorí sa na novej karte), 7 z 12
Zásady ochrany súkromia
Podmienky používania (otvorí sa na novej karte), 8 z 12
Podmienky používania
Spravovať cookies (otvorí sa na novej karte), 9 z 12
Spravovať cookies
Informácie (otvorí sa na novej karte), 10 z 12
Informácie
Informácie o spoločnosti (otvorí sa na novej karte), 11 z 12
Informácie o spoločnosti
Pomoc (otvorí sa na novej karte), 12 z 12...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Back","depth":3,"automation_id":"LibrarySidebarNavigationViewController.returnButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Bookmarks","depth":3,"automation_id":"LibrarySidebarNavigationViewController._viewLabel","role_description":"text"},{"role":"AXButton","text":"Search","depth":6,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Favourites","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Favourites","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Favourites","depth":8,"automation_id":"_NS:7","value":"Favourites","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Tab Group Favourites","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Tab Group Favourites","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Tab Group Favourites","depth":8,"automation_id":"_NS:7","value":"Tab Group Favourites","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"NAS","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"NAS","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"NAS","depth":8,"automation_id":"_NS:7","value":"NAS","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Home","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Home","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Home","depth":8,"automation_id":"_NS:7","value":"Home","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Portainer","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Portainer","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Portainer","depth":8,"automation_id":"_NS:7","value":"Portainer","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Nginx Proxy Manager","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Nginx Proxy Manager","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Nginx Proxy Manager","depth":8,"automation_id":"_NS:7","value":"Nginx Proxy Manager","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"App","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"App","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"App","depth":8,"automation_id":"_NS:7","value":"App","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Bitwarden Web vault","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Bitwarden Web vault","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Bitwarden Web vault","depth":8,"automation_id":"_NS:7","value":"Bitwarden Web vault","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"PDF Stirling","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"PDF Stirling","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"PDF Stirling","depth":8,"automation_id":"_NS:7","value":"PDF Stirling","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"n8n","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"n8n","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"n8n","depth":8,"automation_id":"_NS:7","value":"n8n","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Jellyfin","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Jellyfin","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Jellyfin","depth":8,"automation_id":"_NS:7","value":"Jellyfin","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Immich","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Immich","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Immich","depth":8,"automation_id":"_NS:7","value":"Immich","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"CRM","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"CRM","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"CRM","depth":8,"automation_id":"_NS:7","value":"CRM","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Gitea","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Gitea","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Gitea","depth":8,"automation_id":"_NS:7","value":"Gitea","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Images","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Images","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Images","depth":8,"automation_id":"_NS:7","value":"Images","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"DSK Uploader","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"DSK Uploader","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"DSK Uploader","depth":8,"automation_id":"_NS:7","value":"DSK Uploader","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"owntracks recorder","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"owntracks recorder","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"owntracks recorder","depth":8,"automation_id":"_NS:7","value":"owntracks recorder","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Map | Dawarich","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Map | Dawarich","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Map | Dawarich","depth":8,"automation_id":"_NS:7","value":"Map | Dawarich","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Audiobookshelf","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Audiobookshelf","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Audiobookshelf","depth":8,"automation_id":"_NS:7","value":"Audiobookshelf","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"TubeArchivist","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"TubeArchivist","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"TubeArchivist","depth":8,"automation_id":"_NS:7","value":"TubeArchivist","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Beszel","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Beszel","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Beszel","depth":8,"automation_id":"_NS:7","value":"Beszel","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"booklore","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"booklore","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"booklore","depth":8,"automation_id":"_NS:7","value":"booklore","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Location Logger API - Swagger UI","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Location Logger API - Swagger UI","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Location Logger API - Swagger UI","depth":8,"automation_id":"_NS:7","value":"Location Logger API - Swagger UI","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Open WebUI","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Open WebUI","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Open WebUI","depth":8,"automation_id":"_NS:7","value":"Open WebUI","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Paperless-ngx","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Paperless-ngx","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Paperless-ngx","depth":8,"automation_id":"_NS:7","value":"Paperless-ngx","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Hostinger","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Hostinger","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Hostinger","depth":8,"automation_id":"_NS:7","value":"Hostinger","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Trilium Notes","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Trilium Notes","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Trilium Notes","depth":8,"automation_id":"_NS:7","value":"Trilium Notes","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Location Logger","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Location Logger","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Location Logger","depth":8,"automation_id":"_NS:7","value":"Location Logger","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Outfit Manager","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Outfit Manager","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Outfit Manager","depth":8,"automation_id":"_NS:7","value":"Outfit Manager","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Reminders","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Reminders","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Reminders","depth":8,"automation_id":"_NS:7","value":"Reminders","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"g","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"g","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"g","depth":8,"automation_id":"_NS:7","value":"g","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"PROTON","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"PROTON","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"PROTON","depth":8,"automation_id":"_NS:7","value":"PROTON","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXLink","text":"Preskočiť na hlavný obsah","depth":7,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Preskočiť na hlavný obsah","depth":8,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Prezerať audiokomentár","depth":7,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Prezerať audiokomentár","depth":8,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Domovská stránka služby H B O Max","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Domov","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Domov","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Seriály","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Seriály","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Filmy","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filmy","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"H B O","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Šport","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Šport","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Hľadať","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Moje tituly","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuky Profil a Nastavenia. Profil používateľa Lukáš.. Avatar: Meerkat from Crikey! It's the Irwins","depth":8,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Hriešnici","depth":8,"help_text":"","role_description":"heading"},{"role":"AXStaticText","text":"Hodnotené: 16, Násilie, Jazyk, Trvanie: 52 minút, Uvedené v roku 2013","depth":9,"help_text":"","role_description":"text"},{"role":"AXButton","text":"Obnoviť Hriešnici Séria 3, epizóda 11: Časť 11, zostáva: 33 min","depth":8,"help_text":"","placeholder":"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reštartovať Hriešnici Séria 3, epizóda 11: Časť 11","depth":8,"help_text":"","placeholder":"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pridať do Môjho zoznamu: Hriešnici","depth":8,"help_text":"","placeholder":"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ohodnotiť tento seriál","depth":8,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Séria 3, epizóda 11: Časť 11","depth":8,"help_text":"","role_description":"heading"},{"role":"AXStaticText","text":"S3 E11: Časť 11","depth":9,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Fiona vezme deti na výlet.","depth":9,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Žánre: Komédia, Čierna komédia","depth":9,"help_text":"","role_description":"text"},{"role":"AXRadioButton","text":"Epizód","depth":9,"help_text":"","placeholder":"","role_description":"tab","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXPopUpButton","text":"Séria 3","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Predchádzajúce tituly v kategórii Séria","depth":10,"bounds":{"left":0.10277778,"top":0.0,"width":0.033333335,"height":0.20111111},"help_text":"","placeholder":"","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 1: Časť 1. 1 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 57 minút. Uvedené v roku 2013. Gallagherovci sa vracajú v úvodnej časti tretej série.","depth":10,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E1: Časť 1","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"57 min","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Gallagherovci sa vracajú v úvodnej časti tretej série.","depth":11,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 2: Časť 2. 2 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 53 minút. Uvedené v roku 2013. Fiona je v strese kvôli peniazom a Lip to ešte zhoršuje.","depth":10,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E2: Časť 2","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"53 min","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Fiona je v strese kvôli peniazom a Lip to ešte zhoršuje.","depth":11,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 3: Časť 3. 3 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 51 minút. Uvedené v roku 2013. Frank a Carl podvedú nadáciu na boj s rakovinou.","depth":10,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E3: Časť 3","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"51 min","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Frank a Carl podvedú nadáciu na boj s rakovinou.","depth":11,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 4: Časť 4. 4 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 50 minút. Uvedené v roku 2013. Jimmy sa dozvie o tajnom živote svojho otca.","depth":10,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E4: Časť 4","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"50 min","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Jimmy sa dozvie o tajnom živote svojho otca.","depth":11,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 5: Časť 5. 5 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 54 minút. Uvedené v roku 2013. Gallagherovcov navštívi sociálka.","depth":10,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E5: Časť 5","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"54 min","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Gallagherovcov navštívi sociálka.","depth":11,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 6: Časť 6. 6 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 53 minút. Uvedené v roku 2013. Fiona na súde bojuje za záchranu rodiny Gallagherovcov.","depth":10,"bounds":{"left":0.0,"top":0.0,"width":0.21736111,"height":0.3211111},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E6: Časť 6","depth":11,"bounds":{"left":0.0,"top":0.16222222,"width":0.05347222,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"53 min","depth":11,"bounds":{"left":0.0,"top":0.19666667,"width":0.031944446,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"bounds":{"left":0.007638889,"top":0.19666667,"width":0.022916667,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Fiona na súde bojuje za záchranu rodiny Gallagherovcov.","depth":11,"bounds":{"left":0.0,"top":0.21777777,"width":0.21111111,"height":0.04888889},"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 7: Časť 7. 7 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 50 minút. Uvedené v roku 2013. Frank a Fiona bojujú na súde o opatrovníctvo detí.","depth":10,"bounds":{"left":0.1388889,"top":0.0,"width":0.21736111,"height":0.3211111},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E7: Časť 7","depth":11,"bounds":{"left":0.14166667,"top":0.16222222,"width":0.05347222,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"50 min","depth":11,"bounds":{"left":0.19375,"top":0.19666667,"width":0.03125,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"bounds":{"left":0.2326389,"top":0.19666667,"width":0.022916667,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Frank a Fiona bojujú na súde o opatrovníctvo detí.","depth":11,"bounds":{"left":0.14166667,"top":0.21777777,"width":0.16111112,"height":0.04888889},"help_text":"","role_description":"text"},{"role":"AXPopUpButton","text":"Ponuka pre epizódu 7: Časť 7","depth":10,"bounds":{"left":0.33055556,"top":0.0,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 8: Časť 8. 8 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 52 minút. Uvedené v roku 2013. Dom preberá Frankov bratranec Patrick.","depth":10,"bounds":{"left":0.3638889,"top":0.0,"width":0.21736111,"height":0.3211111},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E8: Časť 8","depth":11,"bounds":{"left":0.36666667,"top":0.16222222,"width":0.05347222,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"52 min","depth":11,"bounds":{"left":0.41875,"top":0.19666667,"width":0.031944446,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"bounds":{"left":0.45833334,"top":0.19666667,"width":0.022916667,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Dom preberá Frankov bratranec Patrick.","depth":11,"bounds":{"left":0.36666667,"top":0.21777777,"width":0.20763889,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXPopUpButton","text":"Ponuka pre epizódu 8: Časť 8","depth":10,"bounds":{"left":0.55625,"top":0.0,"width":0.022222223,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 9: Časť 9. 9 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 54 minút. Uvedené v roku 2013. Fiona získa novú prácu a Frank si osvojí nový (homosexuálny) životný štýl.","depth":10,"bounds":{"left":0.58958334,"top":0.0,"width":0.21736111,"height":0.3211111},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E9: Časť 9","depth":11,"bounds":{"left":0.5923611,"top":0.16222222,"width":0.05347222,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"54 min","depth":11,"bounds":{"left":0.64444447,"top":0.19666667,"width":0.03125,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"bounds":{"left":0.68333334,"top":0.19666667,"width":0.022916667,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Fiona získa novú prácu a Frank si osvojí nový (homosexuálny) životný štýl.","depth":11,"bounds":{"left":0.5923611,"top":0.21777777,"width":0.2048611,"height":0.04888889},"help_text":"","role_description":"text"},{"role":"AXPopUpButton","text":"Ponuka pre epizódu 9: Časť 9","depth":10,"bounds":{"left":0.78125,"top":0.0,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Pozerať znova: Séria 3, epizóda 10: Časť 10. 10 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 49 minút. Uvedené v roku 2013. Jimmy otrasie Fioniným životom.","depth":10,"bounds":{"left":0.81458336,"top":0.0,"width":0.18541664,"height":0.3211111},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E10: Časť 10","depth":11,"bounds":{"left":0.8173611,"top":0.16222222,"width":0.06666667,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"49 min","depth":11,"bounds":{"left":0.86944443,"top":0.19666667,"width":0.031944446,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"bounds":{"left":0.90902776,"top":0.19666667,"width":0.022916667,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Jimmy otrasie Fioniným životom.","depth":11,"bounds":{"left":0.8173611,"top":0.21777777,"width":0.16875,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXPopUpButton","text":"Ponuka pre epizódu 10: Časť 10","depth":10,"bounds":{"left":1.0,"top":0.0,"width":-0.006944418,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Pozerať Séria 3, epizóda 11: Časť 11. 11 z 12. Zostáva: 34 minút. Hodnotené: 16, Násilie, Jazyk. Trvanie: 52 minút. Uvedené v roku 2013. Fiona vezme deti na výlet.","depth":10,"bounds":{"left":1.0,"top":0.0,"width":-0.04027772,"height":0.3211111},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E11: Časť 11","depth":11,"bounds":{"left":1.0,"top":0.16222222,"width":-0.043055534,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"52 min","depth":11,"bounds":{"left":1.0,"top":0.19666667,"width":-0.09513891,"height":0.022222223},"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Fiona vezme deti na výlet.","depth":11,"bounds":{"left":1.0,"top":0.21777777,"width":-0.043055534,"height":0.025555555},"help_text":"","role_description":"text"},{"role":"AXPopUpButton","text":"Ponuka pre epizódu 11: Časť 11","depth":10,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Séria 3, epizóda 12: Časť 12. 12 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 55 minút. Uvedené v roku 2013. Lip v záverečnej časti zmaturuje.","depth":10,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"E12: Časť 12","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"55 min","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"2013","depth":11,"help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Lip v záverečnej časti zmaturuje.","depth":11,"help_text":"","role_description":"text"},{"role":"AXPopUpButton","text":"Ponuka pre epizódu 12: Časť 12","depth":10,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Tiež by sa vám mohlo páčiť","depth":8,"bounds":{"left":0.10277778,"top":0.3122222,"width":0.8972222,"height":0.023333333},"help_text":"","role_description":"heading"},{"role":"AXStaticText","text":"Tiež by sa vám mohlo páčiť","depth":9,"bounds":{"left":0.14444445,"top":0.31,"width":0.15625,"height":0.026666667},"help_text":"","role_description":"text"},{"role":"AXLink","text":"Dva a pol chlapa. Riadok 1 z 4, stĺpec 1 z 8","depth":9,"bounds":{"left":0.14166667,"top":0.34111112,"width":0.16111112,"height":0.38222224},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Dva a pol chlapa","depth":9,"bounds":{"left":0.27708334,"top":0.34555554,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Teória veľkého tresku. Riadok 1 z 4, stĺpec 2 z 8","depth":9,"bounds":{"left":0.31041667,"top":0.34111112,"width":0.16111112,"height":0.38222224},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Teória veľkého tresku","depth":9,"bounds":{"left":0.44583333,"top":0.34555554,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Rick a Morty. Riadok 1 z 4, stĺpec 3 z 8","depth":9,"bounds":{"left":0.47916666,"top":0.34111112,"width":0.16180556,"height":0.38222224},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Rick a Morty","depth":9,"bounds":{"left":0.61527777,"top":0.34555554,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Hrozba z temnoty. Riadok 1 z 4, stĺpec 4 z 8","depth":9,"bounds":{"left":0.6486111,"top":0.34111112,"width":0.16111112,"height":0.38222224},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Hrozba z temnoty","depth":9,"bounds":{"left":0.78402776,"top":0.34555554,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Gossip Girl. Riadok 1 z 4, stĺpec 5 z 8","depth":9,"bounds":{"left":0.8173611,"top":0.34111112,"width":0.16111112,"height":0.38222224},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Gossip Girl","depth":9,"bounds":{"left":0.9527778,"top":0.34555554,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Barry. Riadok 1 z 4, stĺpec 6 z 8","depth":9,"bounds":{"left":0.9861111,"top":0.34111112,"width":0.0138888955,"height":0.38222224},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Barry","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Girls. Riadok 1 z 4, stĺpec 7 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Girls","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Mladý Sheldon. Riadok 1 z 4, stĺpec 8 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Mladý Sheldon","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Upírske denníky. Riadok 2 z 4, stĺpec 1 z 8","depth":9,"bounds":{"left":0.14166667,"top":0.7355555,"width":0.16111112,"height":0.26444447},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Upírske denníky","depth":9,"bounds":{"left":0.27708334,"top":0.74,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Roztomilé mrchy. Riadok 2 z 4, stĺpec 2 z 8","depth":9,"bounds":{"left":0.31041667,"top":0.7355555,"width":0.16111112,"height":0.26444447},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Roztomilé mrchy","depth":9,"bounds":{"left":0.44583333,"top":0.74,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"The Originals. Riadok 2 z 4, stĺpec 3 z 8","depth":9,"bounds":{"left":0.47916666,"top":0.7355555,"width":0.16180556,"height":0.26444447},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul The Originals","depth":9,"bounds":{"left":0.61527777,"top":0.74,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Mentalista. Riadok 2 z 4, stĺpec 4 z 8","depth":9,"bounds":{"left":0.6486111,"top":0.7355555,"width":0.16111112,"height":0.26444447},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Mentalista","depth":9,"bounds":{"left":0.78402776,"top":0.74,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Silicon Valley. Riadok 2 z 4, stĺpec 5 z 8","depth":9,"bounds":{"left":0.8173611,"top":0.7355555,"width":0.16111112,"height":0.26444447},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Silicon Valley","depth":9,"bounds":{"left":0.9527778,"top":0.74,"width":0.022916667,"height":0.036666665},"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Boj o riaditeľňu. Riadok 2 z 4, stĺpec 6 z 8","depth":9,"bounds":{"left":0.9861111,"top":0.7355555,"width":0.0138888955,"height":0.26444447},"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Boj o riaditeľňu","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Hung - Na veľkosti záleží. Riadok 2 z 4, stĺpec 7 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Hung - Na veľkosti záleží","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Hráči. Riadok 2 z 4, stĺpec 8 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Ponuka pre titul Hráči","depth":9,"help_text":"","placeholder":"","role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"V mene nášho Pána. Riadok 3 z 4, stĺpec 1 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Prvé manželstvo Georgieho a Mandy. Riadok 3 z 4, stĺpec 2 z 8. Nová epizóda","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Moje nové Ja. Riadok 3 z 4, stĺpec 3 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Hore a dole. Riadok 3 z 4, stĺpec 4 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"John Oliver: Čo týždeň dal a vzal. Riadok 3 z 4, stĺpec 5 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Viceprezident(ka). Riadok 3 z 4, stĺpec 6 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Sexuálny život vysokoškoláčok. Riadok 3 z 4, stĺpec 7 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Banshee. Riadok 3 z 4, stĺpec 8 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Pán Nakladačka. Riadok 4 z 4, stĺpec 1 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Biely lotos. Riadok 4 z 4, stĺpec 2 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Veľká. Riadok 4 z 4, stĺpec 3 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Normálka. Riadok 4 z 4, stĺpec 4 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"One Tree Hill. Riadok 4 z 4, stĺpec 5 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Vo štvorici. Riadok 4 z 4, stĺpec 6 z 8","depth":9,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"H B O Max You tube (otvorí sa na novej karte), 1 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"H B O Max x (otvorí sa na novej karte), 2 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"H B O Max Instagram (otvorí sa na novej karte), 3 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"H B O Max Tik Tok (otvorí sa na novej karte), 4 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Prístupnosť (otvorí sa na novej karte), 5 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Prístupnosť","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Zvukový popis, 6 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Zvukový popis","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Zásady ochrany súkromia (otvorí sa na novej karte), 7 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Zásady ochrany súkromia","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Podmienky používania (otvorí sa na novej karte), 8 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Podmienky používania","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Spravovať cookies (otvorí sa na novej karte), 9 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Spravovať cookies","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Informácie (otvorí sa na novej karte), 10 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Informácie","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Informácie o spoločnosti (otvorí sa na novej karte), 11 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Informácie o spoločnosti","depth":9,"help_text":"","role_description":"text"},{"role":"AXLink","text":"Pomoc (otvorí sa na novej karte), 12 z 12","depth":8,"help_text":"","placeholder":"","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-337343147952755675
|
7439226582562837316
|
app_switch
|
accessibility
|
NULL
|
Back
Bookmarks
Search
Favourites
Favourites
Favour Back
Bookmarks
Search
Favourites
Favourites
Favourites
Tab Group Favourites
Tab Group Favourites
Tab Group Favourites
NAS
NAS
NAS
Home
Home
Home
Portainer
Portainer
Portainer
Nginx Proxy Manager
Nginx Proxy Manager
Nginx Proxy Manager
App
App
App
Bitwarden Web vault
Bitwarden Web vault
Bitwarden Web vault
PDF Stirling
PDF Stirling
PDF Stirling
n8n
n8n
n8n
Jellyfin
Jellyfin
Jellyfin
Immich
Immich
Immich
CRM
CRM
CRM
Gitea
Gitea
Gitea
Images
Images
Images
DSK Uploader
DSK Uploader
DSK Uploader
owntracks recorder
owntracks recorder
owntracks recorder
Map | Dawarich
Map | Dawarich
Map | Dawarich
Audiobookshelf
Audiobookshelf
Audiobookshelf
TubeArchivist
TubeArchivist
TubeArchivist
Beszel
Beszel
Beszel
booklore
booklore
booklore
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Open WebUI
Open WebUI
Open WebUI
Paperless-ngx
Paperless-ngx
Paperless-ngx
Hostinger
Hostinger
Hostinger
Trilium Notes
Trilium Notes
Trilium Notes
Location Logger
Location Logger
Location Logger
Outfit Manager
Outfit Manager
Outfit Manager
Reminders
Reminders
Reminders
g
g
g
PROTON
PROTON
PROTON
Preskočiť na hlavný obsah
Preskočiť na hlavný obsah
Prezerať audiokomentár
Prezerať audiokomentár
Domovská stránka služby H B O Max
Domov
Domov
Seriály
Seriály
Filmy
Filmy
H B O
Šport
Šport
Hľadať
Moje tituly
Ponuky Profil a Nastavenia. Profil používateľa Lukáš.. Avatar: Meerkat from Crikey! It's the Irwins
Hriešnici
Hodnotené: 16, Násilie, Jazyk, Trvanie: 52 minút, Uvedené v roku 2013
Obnoviť Hriešnici Séria 3, epizóda 11: Časť 11, zostáva: 33 min
Reštartovať Hriešnici Séria 3, epizóda 11: Časť 11
Pridať do Môjho zoznamu: Hriešnici
Ohodnotiť tento seriál
Séria 3, epizóda 11: Časť 11
S3 E11: Časť 11
Fiona vezme deti na výlet.
Žánre: Komédia, Čierna komédia
Epizód
Séria 3
Predchádzajúce tituly v kategórii Séria
Pozerať znova: Séria 3, epizóda 1: Časť 1. 1 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 57 minút. Uvedené v roku 2013. Gallagherovci sa vracajú v úvodnej časti tretej série.
E1: Časť 1
57 min
2013
Gallagherovci sa vracajú v úvodnej časti tretej série.
Pozerať znova: Séria 3, epizóda 2: Časť 2. 2 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 53 minút. Uvedené v roku 2013. Fiona je v strese kvôli peniazom a Lip to ešte zhoršuje.
E2: Časť 2
53 min
2013
Fiona je v strese kvôli peniazom a Lip to ešte zhoršuje.
Pozerať znova: Séria 3, epizóda 3: Časť 3. 3 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 51 minút. Uvedené v roku 2013. Frank a Carl podvedú nadáciu na boj s rakovinou.
E3: Časť 3
51 min
2013
Frank a Carl podvedú nadáciu na boj s rakovinou.
Pozerať znova: Séria 3, epizóda 4: Časť 4. 4 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 50 minút. Uvedené v roku 2013. Jimmy sa dozvie o tajnom živote svojho otca.
E4: Časť 4
50 min
2013
Jimmy sa dozvie o tajnom živote svojho otca.
Pozerať znova: Séria 3, epizóda 5: Časť 5. 5 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 54 minút. Uvedené v roku 2013. Gallagherovcov navštívi sociálka.
E5: Časť 5
54 min
2013
Gallagherovcov navštívi sociálka.
Pozerať znova: Séria 3, epizóda 6: Časť 6. 6 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 53 minút. Uvedené v roku 2013. Fiona na súde bojuje za záchranu rodiny Gallagherovcov.
E6: Časť 6
53 min
2013
Fiona na súde bojuje za záchranu rodiny Gallagherovcov.
Pozerať znova: Séria 3, epizóda 7: Časť 7. 7 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 50 minút. Uvedené v roku 2013. Frank a Fiona bojujú na súde o opatrovníctvo detí.
E7: Časť 7
50 min
2013
Frank a Fiona bojujú na súde o opatrovníctvo detí.
Ponuka pre epizódu 7: Časť 7
Pozerať znova: Séria 3, epizóda 8: Časť 8. 8 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 52 minút. Uvedené v roku 2013. Dom preberá Frankov bratranec Patrick.
E8: Časť 8
52 min
2013
Dom preberá Frankov bratranec Patrick.
Ponuka pre epizódu 8: Časť 8
Pozerať znova: Séria 3, epizóda 9: Časť 9. 9 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 54 minút. Uvedené v roku 2013. Fiona získa novú prácu a Frank si osvojí nový (homosexuálny) životný štýl.
E9: Časť 9
54 min
2013
Fiona získa novú prácu a Frank si osvojí nový (homosexuálny) životný štýl.
Ponuka pre epizódu 9: Časť 9
Pozerať znova: Séria 3, epizóda 10: Časť 10. 10 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 49 minút. Uvedené v roku 2013. Jimmy otrasie Fioniným životom.
E10: Časť 10
49 min
2013
Jimmy otrasie Fioniným životom.
Ponuka pre epizódu 10: Časť 10
Pozerať Séria 3, epizóda 11: Časť 11. 11 z 12. Zostáva: 34 minút. Hodnotené: 16, Násilie, Jazyk. Trvanie: 52 minút. Uvedené v roku 2013. Fiona vezme deti na výlet.
E11: Časť 11
52 min
2013
Fiona vezme deti na výlet.
Ponuka pre epizódu 11: Časť 11
Séria 3, epizóda 12: Časť 12. 12 z 12. Hodnotené: 16, Násilie, Jazyk. Trvanie: 55 minút. Uvedené v roku 2013. Lip v záverečnej časti zmaturuje.
E12: Časť 12
55 min
2013
Lip v záverečnej časti zmaturuje.
Ponuka pre epizódu 12: Časť 12
Tiež by sa vám mohlo páčiť
Tiež by sa vám mohlo páčiť
Dva a pol chlapa. Riadok 1 z 4, stĺpec 1 z 8
Ponuka pre titul Dva a pol chlapa
Teória veľkého tresku. Riadok 1 z 4, stĺpec 2 z 8
Ponuka pre titul Teória veľkého tresku
Rick a Morty. Riadok 1 z 4, stĺpec 3 z 8
Ponuka pre titul Rick a Morty
Hrozba z temnoty. Riadok 1 z 4, stĺpec 4 z 8
Ponuka pre titul Hrozba z temnoty
Gossip Girl. Riadok 1 z 4, stĺpec 5 z 8
Ponuka pre titul Gossip Girl
Barry. Riadok 1 z 4, stĺpec 6 z 8
Ponuka pre titul Barry
Girls. Riadok 1 z 4, stĺpec 7 z 8
Ponuka pre titul Girls
Mladý Sheldon. Riadok 1 z 4, stĺpec 8 z 8
Ponuka pre titul Mladý Sheldon
Upírske denníky. Riadok 2 z 4, stĺpec 1 z 8
Ponuka pre titul Upírske denníky
Roztomilé mrchy. Riadok 2 z 4, stĺpec 2 z 8
Ponuka pre titul Roztomilé mrchy
The Originals. Riadok 2 z 4, stĺpec 3 z 8
Ponuka pre titul The Originals
Mentalista. Riadok 2 z 4, stĺpec 4 z 8
Ponuka pre titul Mentalista
Silicon Valley. Riadok 2 z 4, stĺpec 5 z 8
Ponuka pre titul Silicon Valley
Boj o riaditeľňu. Riadok 2 z 4, stĺpec 6 z 8
Ponuka pre titul Boj o riaditeľňu
Hung - Na veľkosti záleží. Riadok 2 z 4, stĺpec 7 z 8
Ponuka pre titul Hung - Na veľkosti záleží
Hráči. Riadok 2 z 4, stĺpec 8 z 8
Ponuka pre titul Hráči
V mene nášho Pána. Riadok 3 z 4, stĺpec 1 z 8
Prvé manželstvo Georgieho a Mandy. Riadok 3 z 4, stĺpec 2 z 8. Nová epizóda
Moje nové Ja. Riadok 3 z 4, stĺpec 3 z 8
Hore a dole. Riadok 3 z 4, stĺpec 4 z 8
John Oliver: Čo týždeň dal a vzal. Riadok 3 z 4, stĺpec 5 z 8
Viceprezident(ka). Riadok 3 z 4, stĺpec 6 z 8
Sexuálny život vysokoškoláčok. Riadok 3 z 4, stĺpec 7 z 8
Banshee. Riadok 3 z 4, stĺpec 8 z 8
Pán Nakladačka. Riadok 4 z 4, stĺpec 1 z 8
Biely lotos. Riadok 4 z 4, stĺpec 2 z 8
Veľká. Riadok 4 z 4, stĺpec 3 z 8
Normálka. Riadok 4 z 4, stĺpec 4 z 8
One Tree Hill. Riadok 4 z 4, stĺpec 5 z 8
Vo štvorici. Riadok 4 z 4, stĺpec 6 z 8
H B O Max You tube (otvorí sa na novej karte), 1 z 12
H B O Max x (otvorí sa na novej karte), 2 z 12
H B O Max Instagram (otvorí sa na novej karte), 3 z 12
H B O Max Tik Tok (otvorí sa na novej karte), 4 z 12
Prístupnosť (otvorí sa na novej karte), 5 z 12
Prístupnosť
Zvukový popis, 6 z 12
Zvukový popis
Zásady ochrany súkromia (otvorí sa na novej karte), 7 z 12
Zásady ochrany súkromia
Podmienky používania (otvorí sa na novej karte), 8 z 12
Podmienky používania
Spravovať cookies (otvorí sa na novej karte), 9 z 12
Spravovať cookies
Informácie (otvorí sa na novej karte), 10 z 12
Informácie
Informácie o spoločnosti (otvorí sa na novej karte), 11 z 12
Informácie o spoločnosti
Pomoc (otvorí sa na novej karte), 12 z 12...
|
NULL
|
|
94
|
3
|
44
|
2026-04-09T17:04:03.606056+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754243606_m1.jpg...
|
Dia
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpA-zshDOCKERDEV (-zsh)₴2APP (-zsh)83(K=new globalThis.TextEncoder,CP7=K.encode.bind(K)))(q)}function Xt8(q)flet K;return(bP7??(K=new globalThi(){wl.set(this,void 0),jL.set(this,void 0),$4(this,wL,new Uint8Array,"f"),$4(this,jL,null,"f")}decode(q){|fq==="string"?au6(q):9;54(this, wL, XP7([u1(this,wL, "f"), K]),"f");let _=[],z;while((z=Kj5(u1(this,wL,"f"),z.index,"f''); continue}if(u1(this,jL,"f")!=null&&(z. index!==ul(this,jL,"f")+1||z.carriage)){_.push(Xt8(u1C)barray(ul(this,jL,"f")),"f''), $4(this, jL,null,"f");continue}let Y=u1(this,jL,"f")!==null?z.preceding-1:z.p, wL, "f"). subarray(z.index),"f"),$4(this,jL,null,"f")}return _}flushO){if(!ul(this,wL,"f").length)return[]$1iTermCurrently Sharing100% C8• Thu 9 Apr 19:59:16181-zsh85a)}var CP7,bP7;class $66{constructorArrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,"f")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, "f"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --scopeuser--file:///Users/lukas/.nvm/versions/node/v14.15.4/lib/node_modules/@anthropic-ai/claude-code/cli.js:8Stop Sharinghimport{createRequire as MA5}from"node:module";var AA5=0bject.create;var{getPrototype0f:0A5,definePropertylct.prototype.has0wnProperty;function XJ7(q){return this[ql}var wA5,jA5,Y6=(q,K,_)=>{var z=q!=null&&typeofppertyDescriptor:$A5}=0bject,MJ7=0bjeq==="object";if(z){var Y=K?wA5??=new WeakMap:jA5??=new WeakMap,A=Y.get(q)Hif(A) return Al_5al=nu1 2AA5(0A5(a)): 0#let 0-Kl 11a|l(h. esModulereT6(, "default", Evalue: a, enumerable: 102) =;for(let S.of JJ7(a))i f(IMJ7.call (O,S))eT6(0,S, {oet : XJ7.bind(q,S), enumerable:!03);if(z)Y.set(q,0);return 0},fq=(q)=>{var K=(HJ7??=new WeakMap).get(q),-;if(K)return K;if(K=eI6(f},,{value:!0}), q8&typeof q==="object"|Itypeof q==="function"){for(var z of JJ7(q))if(!MJ7.call(K,z))eI6(K,z, {get:XJ7.bind(q,z), enumerable:!(_=SA5(q,z))||_.enumerable})}return HJ7.set(q,K),K},HJ7,B=(q,K)=>()=>(K||q((K={exports:(}}).exports,K), K. exports);var HA5=(q)=>q;function JA5(q, K){this[q]=HA5.bind(null,K)}var f8=(q,K)=>{for(varin K)el6(q,-, {get:K[-], enumerable: !0, configurable:!0,set:JA5.bind(K,-)})};var L=(q,K)=>(=>(q&&(K=q(q=0)),K);var U6=MA5(import.meta.url),XA5=Symbol.disposel |Symbol.for("Symbol.dispose"),PA5=Symbol.asyncDisposel|Symbol.for("Symbol.asyncDispose"),lz=(q,K,_)=>{if(K!=null){if(typeof K!=="object"&&typeof K!=="function")throw TypeError('Object expected to be assigned to "using"declaration');var z;if(_)z=K[PA5];if(z===void 0)z=K[XA5];if(typeofz!=="function")throw TypeError("Object not disposable");q.push([_,z,K])}else if(_)q.push([_]);return K},nz=(q,K,_)=>{var z=typeof SuppressedError==="function"?SuppressedError: function(O,5,w,j){return j=Error(w),j.name="SuppressedError",j.error=0,j.suppressed=S,j},Y=(0)=>K=_?new z(O,K,"Anerror wassuppressedduringdisposal"):(_=!0,0),A=(0)=>{while(0=qpO)tryfvar $=0[1]&&0[1].call(0[2]);if(0[0])return Promise.resolve($).thenCA,(w)=>(Y(w),A()))}catch(w){Y(w)}ifC..)throw K};returnAO}: functionDA5O{this.__data__=[],ar PJ7;var DJ7=L(()=>{PJ7=DA5});function WA5(q,K){return q===K|lq!-q&&K!==K}var Pg;var pP6=L(()=>{Pg=WA5});function fA5(q,K){var;while(_--)if(Pg(q[-][0],K).turn-1}var de;var qu6=L((=>{pP6();de=fA5});function vA5(q){var K=this._.data-,_=de(K,q);if(_<0)return!1;var z=K.length-1;if(=z)K.popО;elseGA5.call(K,-,1);return--th0}var ZA5, GA5,WJ7;var fJ7=L(()=>{qu6();ZA5=Array.prototype,GA5=ZA5.splice;WJ7=vA5});function TA5(q){varK=this..data._<0?void 0:K[-][1]}varqu60;2J7=TA5}); function VA5(q){return de(this._._data__,q)>-1}var vJ7;var TJ7=L(O=>{qu60;vJ7=VA5}); function kA5(q,K){vardata-,z=de(_,9);if(z<0)++this.]);else _[z][1]=K;return this}var VJ7;var kJ7=L(()=>{qu6();VJ7=kA5});function gP6(q){var K=-1,_=q==null?0:q.length;this.clear){var z=q[K];this.set(z[0],z[1;var Ku6=L(O=>{DJ7O;fJ7O;GJ7O;TJ7O;kJ70;gP6.prototype.clear=PJ7;gP6.prototype.delete=WJ7;gP6.prototype.get=ZJ7;gP6.prot;gP6.prototype.set=VJ7;ce=gP6]NA5() {this.__data__=new ce,this.size=0}var NJ7;var yJ7=L((=>{Ku6();NJ7=NA5});function yA5(q){var K=this._data__,_=K.deletesize=KEJ7;var7=yA5});function EA5(q) {return this.__data_-.get(q)}var hJ7;var RJ7=L(()=>{hJ7=EA5});function LA5(q){return this.__data.CJ7=L0a8=L(()=>{hA5=typeof global=="object"&&global&&global.0bject===0bject&&global,g_8=hA5});var RA5,SA5,vJ;var sR=L(()=>{Aa8();RA5=typeof0=>{SJ7=LA5});var=="object"&&self&&self.Objectelf,SA5=g_81IRA5IIFunction("return this")(,vJ=SA5});var CA5, YW;var J_6=L(()=>{sR();CA5=vJ.Symbol, YW=CA5});function IA5(q){varK=bA5l(q,_u6),-=q[_u6];try{a[u67=voi0: varZ=0} catch(A){}var Y=xA5.call(q);if(z)if(K)q[_u6]=_;else delete q[_u6];return Y}var bJ7,bA5,xA5,_и6,xJ7;var IJ7=L(O=>{J_6();bJ7=0bjecprototype,bA5=bJ7.has0wnProperty,xA5=bJ7.toString,_uб=YW?YW.toStringTag:void 0;xJ7=IA5});function BA5(q){return mA5.call(q)}var uA5,mA5,uJ7;var mJ7=L(()=>{uA5=0bject.prototype,mA5.toString;uJ7=BA5});functionq){if(q==null)return q===void 0?gA5:pA5;return BJ7&&BJ7 in Object(q)?xJ7(q):uJ7(q)}var pA5="[objectNull]",gA5="[object Undefined]"toStringTag:void 0;YL=FA5});function UA5(q){var K=typeofa;return q!=null&&(K=="object"11K=="function")}varPO; varhT=L((=>{P0=UA5}); funcQ);return K==dA5I|K==CA51IK==QA5I IK==1A5}var QA5="[object AsyncFunction]",dA5="[objectFunction]", CA5=*[objectGeneratorFunction]; FP6=nA5});var iA5,U_8;var pJ7=L((=>{sR(;iA5=vJ["._core-js_shared."],U_8=iA5});functionrAS(o"<return!.gJ/xxaJ7in qjvar gJ7FJ7;var.exec(U_88&U_8.keys&&U_8.keys.IE_PROTOI|"');return q?"Symbol(src)_1."+q:""3();FJ7=rA5});function sA5(9){if(q!=null){try{returnaA5.caln"'"3var 0A5,aA5,rl;var 0a8=L(()=>{0A5=Function.prototype,aA5=0A5.toString;rl=sA5});functionA05(Q){if(!PO(q)|IFJ7(q))return!1;varK=FP6(a)?Y05, q05,K05,_05,z05, Y05, QJ7;var dJ7=L(()=>{F_8();UJ7();hT();0a8(); tA5=/[\\s.*+?O(J(3|]/g,eA5=/^\[object.+?Constructor\]$/,q05=Functon.prototypering,205=K05.hasOwnProperty,Y05=RegExp("^"+_05.call(z05).replace(tA5,"\\$&").replace(/has0wnPropertyl(function).*?(?=1|\O1for])/g,•catchKtest(rl(q))}varprototypeQJ7=A05}); funcFretur, eA5.toSt005(...
|
NULL
|
6323858117046800261
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpA-zshDOCKERDEV (-zsh)₴2APP (-zsh)83(K=new globalThis.TextEncoder,CP7=K.encode.bind(K)))(q)}function Xt8(q)flet K;return(bP7??(K=new globalThi(){wl.set(this,void 0),jL.set(this,void 0),$4(this,wL,new Uint8Array,"f"),$4(this,jL,null,"f")}decode(q){|fq==="string"?au6(q):9;54(this, wL, XP7([u1(this,wL, "f"), K]),"f");let _=[],z;while((z=Kj5(u1(this,wL,"f"),z.index,"f''); continue}if(u1(this,jL,"f")!=null&&(z. index!==ul(this,jL,"f")+1||z.carriage)){_.push(Xt8(u1C)barray(ul(this,jL,"f")),"f''), $4(this, jL,null,"f");continue}let Y=u1(this,jL,"f")!==null?z.preceding-1:z.p, wL, "f"). subarray(z.index),"f"),$4(this,jL,null,"f")}return _}flushO){if(!ul(this,wL,"f").length)return[]$1iTermCurrently Sharing100% C8• Thu 9 Apr 19:59:16181-zsh85a)}var CP7,bP7;class $66{constructorArrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,"f")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, "f"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --scopeuser--file:///Users/lukas/.nvm/versions/node/v14.15.4/lib/node_modules/@anthropic-ai/claude-code/cli.js:8Stop Sharinghimport{createRequire as MA5}from"node:module";var AA5=0bject.create;var{getPrototype0f:0A5,definePropertylct.prototype.has0wnProperty;function XJ7(q){return this[ql}var wA5,jA5,Y6=(q,K,_)=>{var z=q!=null&&typeofppertyDescriptor:$A5}=0bject,MJ7=0bjeq==="object";if(z){var Y=K?wA5??=new WeakMap:jA5??=new WeakMap,A=Y.get(q)Hif(A) return Al_5al=nu1 2AA5(0A5(a)): 0#let 0-Kl 11a|l(h. esModulereT6(, "default", Evalue: a, enumerable: 102) =;for(let S.of JJ7(a))i f(IMJ7.call (O,S))eT6(0,S, {oet : XJ7.bind(q,S), enumerable:!03);if(z)Y.set(q,0);return 0},fq=(q)=>{var K=(HJ7??=new WeakMap).get(q),-;if(K)return K;if(K=eI6(f},,{value:!0}), q8&typeof q==="object"|Itypeof q==="function"){for(var z of JJ7(q))if(!MJ7.call(K,z))eI6(K,z, {get:XJ7.bind(q,z), enumerable:!(_=SA5(q,z))||_.enumerable})}return HJ7.set(q,K),K},HJ7,B=(q,K)=>()=>(K||q((K={exports:(}}).exports,K), K. exports);var HA5=(q)=>q;function JA5(q, K){this[q]=HA5.bind(null,K)}var f8=(q,K)=>{for(varin K)el6(q,-, {get:K[-], enumerable: !0, configurable:!0,set:JA5.bind(K,-)})};var L=(q,K)=>(=>(q&&(K=q(q=0)),K);var U6=MA5(import.meta.url),XA5=Symbol.disposel |Symbol.for("Symbol.dispose"),PA5=Symbol.asyncDisposel|Symbol.for("Symbol.asyncDispose"),lz=(q,K,_)=>{if(K!=null){if(typeof K!=="object"&&typeof K!=="function")throw TypeError('Object expected to be assigned to "using"declaration');var z;if(_)z=K[PA5];if(z===void 0)z=K[XA5];if(typeofz!=="function")throw TypeError("Object not disposable");q.push([_,z,K])}else if(_)q.push([_]);return K},nz=(q,K,_)=>{var z=typeof SuppressedError==="function"?SuppressedError: function(O,5,w,j){return j=Error(w),j.name="SuppressedError",j.error=0,j.suppressed=S,j},Y=(0)=>K=_?new z(O,K,"Anerror wassuppressedduringdisposal"):(_=!0,0),A=(0)=>{while(0=qpO)tryfvar $=0[1]&&0[1].call(0[2]);if(0[0])return Promise.resolve($).thenCA,(w)=>(Y(w),A()))}catch(w){Y(w)}ifC..)throw K};returnAO}: functionDA5O{this.__data__=[],ar PJ7;var DJ7=L(()=>{PJ7=DA5});function WA5(q,K){return q===K|lq!-q&&K!==K}var Pg;var pP6=L(()=>{Pg=WA5});function fA5(q,K){var;while(_--)if(Pg(q[-][0],K).turn-1}var de;var qu6=L((=>{pP6();de=fA5});function vA5(q){var K=this._.data-,_=de(K,q);if(_<0)return!1;var z=K.length-1;if(=z)K.popО;elseGA5.call(K,-,1);return--th0}var ZA5, GA5,WJ7;var fJ7=L(()=>{qu6();ZA5=Array.prototype,GA5=ZA5.splice;WJ7=vA5});function TA5(q){varK=this..data._<0?void 0:K[-][1]}varqu60;2J7=TA5}); function VA5(q){return de(this._._data__,q)>-1}var vJ7;var TJ7=L(O=>{qu60;vJ7=VA5}); function kA5(q,K){vardata-,z=de(_,9);if(z<0)++this.]);else _[z][1]=K;return this}var VJ7;var kJ7=L(()=>{qu6();VJ7=kA5});function gP6(q){var K=-1,_=q==null?0:q.length;this.clear){var z=q[K];this.set(z[0],z[1;var Ku6=L(O=>{DJ7O;fJ7O;GJ7O;TJ7O;kJ70;gP6.prototype.clear=PJ7;gP6.prototype.delete=WJ7;gP6.prototype.get=ZJ7;gP6.prot;gP6.prototype.set=VJ7;ce=gP6]NA5() {this.__data__=new ce,this.size=0}var NJ7;var yJ7=L((=>{Ku6();NJ7=NA5});function yA5(q){var K=this._data__,_=K.deletesize=KEJ7;var7=yA5});function EA5(q) {return this.__data_-.get(q)}var hJ7;var RJ7=L(()=>{hJ7=EA5});function LA5(q){return this.__data.CJ7=L0a8=L(()=>{hA5=typeof global=="object"&&global&&global.0bject===0bject&&global,g_8=hA5});var RA5,SA5,vJ;var sR=L(()=>{Aa8();RA5=typeof0=>{SJ7=LA5});var=="object"&&self&&self.Objectelf,SA5=g_81IRA5IIFunction("return this")(,vJ=SA5});var CA5, YW;var J_6=L(()=>{sR();CA5=vJ.Symbol, YW=CA5});function IA5(q){varK=bA5l(q,_u6),-=q[_u6];try{a[u67=voi0: varZ=0} catch(A){}var Y=xA5.call(q);if(z)if(K)q[_u6]=_;else delete q[_u6];return Y}var bJ7,bA5,xA5,_и6,xJ7;var IJ7=L(O=>{J_6();bJ7=0bjecprototype,bA5=bJ7.has0wnProperty,xA5=bJ7.toString,_uб=YW?YW.toStringTag:void 0;xJ7=IA5});function BA5(q){return mA5.call(q)}var uA5,mA5,uJ7;var mJ7=L(()=>{uA5=0bject.prototype,mA5.toString;uJ7=BA5});functionq){if(q==null)return q===void 0?gA5:pA5;return BJ7&&BJ7 in Object(q)?xJ7(q):uJ7(q)}var pA5="[objectNull]",gA5="[object Undefined]"toStringTag:void 0;YL=FA5});function UA5(q){var K=typeofa;return q!=null&&(K=="object"11K=="function")}varPO; varhT=L((=>{P0=UA5}); funcQ);return K==dA5I|K==CA51IK==QA5I IK==1A5}var QA5="[object AsyncFunction]",dA5="[objectFunction]", CA5=*[objectGeneratorFunction]; FP6=nA5});var iA5,U_8;var pJ7=L((=>{sR(;iA5=vJ["._core-js_shared."],U_8=iA5});functionrAS(o"<return!.gJ/xxaJ7in qjvar gJ7FJ7;var.exec(U_88&U_8.keys&&U_8.keys.IE_PROTOI|"');return q?"Symbol(src)_1."+q:""3();FJ7=rA5});function sA5(9){if(q!=null){try{returnaA5.caln"'"3var 0A5,aA5,rl;var 0a8=L(()=>{0A5=Function.prototype,aA5=0A5.toString;rl=sA5});functionA05(Q){if(!PO(q)|IFJ7(q))return!1;varK=FP6(a)?Y05, q05,K05,_05,z05, Y05, QJ7;var dJ7=L(()=>{F_8();UJ7();hT();0a8(); tA5=/[\\s.*+?O(J(3|]/g,eA5=/^\[object.+?Constructor\]$/,q05=Functon.prototypering,205=K05.hasOwnProperty,Y05=RegExp("^"+_05.call(z05).replace(tA5,"\\$&").replace(/has0wnPropertyl(function).*?(?=1|\O1for])/g,•catchKtest(rl(q))}varprototypeQJ7=A05}); funcFretur, eA5.toSt005(...
|
NULL
|
|
132
|
4
|
26
|
2026-04-09T17:08:03.859860+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754483859_m1.jpg...
|
UserNotificationCenter
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
“iTerm.app” Would Like to Access Your Photo Librar “iTerm.app” Would Like to Access Your Photo Library
An application in iTerm2 wants to use the photo library.
Help
Don’t Allow
Allow Full Access
Limit Access…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"“iTerm.app” Would Like to Access Your Photo Library","depth":1,"bounds":{"left":0.42222223,"top":0.28444445,"width":0.15555556,"height":0.035555556},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"An application in iTerm2 wants to use the photo library.","depth":1,"bounds":{"left":0.42222223,"top":0.3311111,"width":0.15555556,"height":0.031111112},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Help","depth":1,"bounds":{"left":0.56319445,"top":0.18555556,"width":0.017361112,"height":0.027777778},"automation_id":"_NS:30","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Don’t Allow","depth":1,"bounds":{"left":0.41666666,"top":0.37333333,"width":0.16666667,"height":0.044444446},"automation_id":"action-button-1","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Allow Full Access","depth":1,"bounds":{"left":0.41666666,"top":0.41111112,"width":0.16666667,"height":0.044444446},"automation_id":"action-button-2","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Limit Access…","depth":1,"bounds":{"left":0.41666666,"top":0.4488889,"width":0.16666667,"height":0.044444446},"automation_id":"action-button-3","role_description":"button","is_enabled":true,"is_focused":true}]...
|
6063880616503523448
|
-6822344515830440880
|
app_switch
|
accessibility
|
NULL
|
“iTerm.app” Would Like to Access Your Photo Librar “iTerm.app” Would Like to Access Your Photo Library
An application in iTerm2 wants to use the photo library.
Help
Don’t Allow
Allow Full Access
Limit Access…...
|
NULL
|
|
133
|
4
|
27
|
2026-04-09T17:08:09.134496+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754489134_m1.jpg...
|
iTerm2
|
✳ Claude Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
rrayBuffer?new Uint8Array(q):typeo-&&u1(th rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\"f\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \"f\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --[URL_WITH_CREDENTIALS] ~ $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST [URL_WITH_CREDENTIALS] ~ $ claude
╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ Tips for getting started │
│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │
│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │
│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │
│ ▝▜█████▛▘ │ Recent activity │
│ ▘▘ ▝▝ │ No recent activity │
│ Sonnet 4.6 · Claude Pro · [EMAIL]'s │ │
│ Organization │ │
│ /Users/lukas │ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
? for shortcuts ◐ medium · /effort
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
✳ Claude Code (node)
Close Tab
⌥⌘1
✳ Claude Code...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\\\"f\\\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \\\"f\\\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --scopeuser--file:///Users/lukas/.nvm/versions/node/v14.15.4/lib/node_modules/@anthropic-ai/claude-code/cli.js:8Stop Sharinghimport{createRequire as MA5}from\\\"node:module\\\";var AA5=0bject.create;var{getPrototype0f:0A5,definePropertylct.prototype.has0wnProperty;function XJ7(q){return this[ql}var wA5,jA5,Y6=(q,K,_)=>{var z=q!=null&&typeofppertyDescriptor:$A5}=0bject,MJ7=0bjeq===\\\"object\\\";if(z){var Y=K?wA5??=new WeakMap:jA5??=new WeakMap,A=Y.get(q)Hif(A) return Al_5al=nu1 2AA5(0A5(a)): 0#let 0-Kl 11a|l(h. esModulereT6(, \\\"default\\\", Evalue: a, enumerable: 102) =;for(let S.of JJ7(a))i f(IMJ7.call (O,S))eT6(0,S, {oet : XJ7.bind(q,S), enumerable:!03);if(z)Y.set(q,0);return 0},fq=(q)=>{var K=(HJ7??=new WeakMap).get(q),-;if(K)return K;if(K=eI6(f},,{value:!0}), q8&typeof q===\\\"object\\\"|Itypeof q===\\\"function\\\"){for(var z of JJ7(q))if(!MJ7.call(K,z))eI6(K,z, {get:XJ7.bind(q,z), enumerable:!(_=SA5(q,z))||_.enumerable})}return HJ7.set(q,K),K},HJ7,B=(q,K)=>()=>(K||q((K={exports:(}}).exports,K), K. exports);var HA5=(q)=>q;function JA5(q, K){this[q]=HA5.bind(null,K)}var f8=(q,K)=>{for(varin K)el6(q,-, {get:K[-], enumerable: !0, configurable:!0,set:JA5.bind(K,-)})};var L=(q,K)=>(=>(q&&(K=q(q=0)),K);var U6=MA5(import.meta.url),XA5=Symbol.disposel |Symbol.for(\\\"Symbol.dispose\\\"),PA5=Symbol.asyncDisposel|Symbol.for(\\\"Symbol.asyncDispose\\\"),lz=(q,K,_)=>{if(K!=null){if(typeof K!==\\\"object\\\"&&typeof K!==\\\"function\\\")throw TypeError('Object expected to be assigned to \\\"using\\\"declaration');var z;if(_)z=K[PA5];if(z===void 0)z=K[XA5];if(typeofz!==\\\"function\\\")throw TypeError(\\\"Object not disposable\\\");q.push([_,z,K])}else if(_)q.push([_]);return K},nz=(q,K,_)=>{var z=typeof SuppressedError===\\\"function\\\"?SuppressedError: function(O,5,w,j){return j=Error(w),j.name=\\\"SuppressedError\\\",j.error=0,j.suppressed=S,j},Y=(0)=>K=_?new z(O,K,\\\"Anerror wassuppressedduringdisposal\\\"):(_=!0,0),A=(0)=>{while(0=qpO)tryfvar $=0[1]&&0[1].call(0[2]);if(0[0])return Promise.resolve($).thenCA,(w)=>(Y(w),A()))}catch(w){Y(w)}ifC..)throw K};returnAO}: functionDA5O{this.__data__=[],ar PJ7;var DJ7=L(()=>{PJ7=DA5});function WA5(q,K){return q===K|lq!-q&&K!==K}var Pg;var pP6=L(()=>{Pg=WA5});function fA5(q,K){var;while(_--)if(Pg(q[-][0],K).turn-1}var de;var qu6=L((=>{pP6();de=fA5});function vA5(q){var K=this._.data-,_=de(K,q);if(_<0)return!1;var z=K.length-1;if(=z)K.pop\\u041e;elseGA5.call(K,-,1);return--th0}var ZA5, GA5,WJ7;var fJ7=L(()=>{qu6();ZA5=Array.prototype,GA5=ZA5.splice;WJ7=vA5});function TA5(q){varK=this..data._<0?void 0:K[-][1]}varqu60;2J7=TA5}); function VA5(q){return de(this._._data__,q)>-1}var vJ7;var TJ7=L(O=>{qu60;vJ7=VA5}); function kA5(q,K){vardata-,z=de(_,9);if(z<0)++this.]);else _[z][1]=K;return this}var VJ7;var kJ7=L(()=>{qu6();VJ7=kA5});function gP6(q){var K=-1,_=q==null?0:q.length;this.clear){var z=q[K];this.set(z[0],z[1;var Ku6=L(O=>{DJ7O;fJ7O;GJ7O;TJ7O;kJ70;gP6.prototype.clear=PJ7;gP6.prototype.delete=WJ7;gP6.prototype.get=ZJ7;gP6.prot;gP6.prototype.set=VJ7;ce=gP6]NA5() {this.__data__=new ce,this.size=0}var NJ7;var yJ7=L((=>{Ku6();NJ7=NA5});function yA5(q){var K=this._data__,_=K.deletesize=KEJ7;var7=yA5});function EA5(q) {return this.__data_-.get(q)}var hJ7;var RJ7=L(()=>{hJ7=EA5});function LA5(q){return this.__data.CJ7=L0a8=L(()=>{hA5=typeof global==\\\"object\\\"&&global&&global.0bject===0bject&&global,g_8=hA5});var RA5,SA5,vJ;var sR=L(()=>{Aa8();RA5=typeof0=>{SJ7=LA5});var==\\\"object\\\"&&self&&self.Objectelf,SA5=g_81IRA5IIFunction(\\\"return this\\\")(,vJ=SA5});var CA5, YW;var J_6=L(()=>{sR();CA5=vJ.Symbol, YW=CA5});function IA5(q){varK=bA5l(q,_u6),-=q[_u6];try{a[u67=voi0: varZ=0} catch(A){}var Y=xA5.call(q);if(z)if(K)q[_u6]=_;else delete q[_u6];return Y}var bJ7,bA5,xA5,_\\u04386,xJ7;var IJ7=L(O=>{J_6();bJ7=0bjecprototype,bA5=bJ7.has0wnProperty,xA5=bJ7.toString,_u\\u0431=YW?YW.toStringTag:void 0;xJ7=IA5});function BA5(q){return mA5.call(q)}var uA5,mA5,uJ7;var mJ7=L(()=>{uA5=0bject.prototype,mA5.toString;uJ7=BA5});functionq){if(q==null)return q===void 0?gA5:pA5;return BJ7&&BJ7 in Object(q)?xJ7(q):uJ7(q)}var pA5=\\\"[objectNull]\\\",gA5=\\\"[object Undefined]\\\"toStringTag:void 0;YL=FA5});function UA5(q){var K=typeofa;return q!=null&&(K==\\\"object\\\"11K==\\\"function\\\")}varPO; varhT=L((=>{P0=UA5}); funcQ);return K==dA5I|K==CA51IK==QA5I IK==1A5}var QA5=\\\"[object AsyncFunction]\\\",dA5=\\\"[objectFunction]\\\", CA5=*[objectGeneratorFunction]; FP6=nA5});var iA5,U_8;var pJ7=L((=>{sR(;iA5=vJ[\\\"._core-js_shared.\\\"],U_8=iA5});functionrAS(o\\\"<return!.gJ/xxaJ7in qjvar gJ7FJ7;var.exec(U_88&U_8.keys&&U_8.keys.IE_PROTOI|\\\"');return q?\\\"Symbol(src)_1.\\\"+q:\\\"\\\"3();FJ7=rA5});function sA5(9){if(q!=null){try{returnaA5.caln\\\"'\\\"3var 0A5,aA5,rl;var 0a8=L(()=>{0A5=Function.prototype,aA5=0A5.toString;rl=sA5});functionA05(Q){if(!PO(q)|IFJ7(q))return!1;varK=FP6(a)?Y05, q05,K05,_05,z05, Y05, QJ7;var dJ7=L(()=>{F_8();UJ7();hT();0a8(); tA5=/[\\\\\\\\s.*+?O(J(3|]/g,eA5=/^\\\\[object.+?Constructor\\\\]$/,q05=Functon.prototypering,205=K05.hasOwnProperty,Y05=RegExp(\\\"^\\\"+_05.call(z05).replace(tA5,\\\"\\\\\\\\$&\\\").replace(/has0wnPropertyl(function).*?(?=1|\\\\O1for])/g,\\u2022catchKtest(rl(q))}varprototypeQJ7=A05}); funcFretur, eA5.toSt005(\",\n \"timestamp\": \"2026-04-09T20:05:56.323065+03:00\",\n \"window_name\": \"\"\n },\n \"type\": \"OCR\"\n }\n ],\n \"pagination\": {\n \"limit\": 5,\n \"offset\": 0,\n \"total\": 120\n }\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST http://localhost:3030/raw_sql \\\n -H \"Content-Type: application/json\" \\\n -d '{\"query\": \"SELECT app_name, COUNT(*) as captures FROM frames WHERE timestamp > datetime(\\\"now\\\",\\\"-1 day\\\") GROUP BY app_name ORDER BY captures DESC\"}' | python3 -m json.tool\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 311 100 161 100 150 154k 143k --:--:-- --:--:-- --:--:-- 303k\n{\n \"error\": \"Query rejected: SELECT without LIMIT. Add 'LIMIT n' (max 10000) to your query. Example: SELECT * FROM frames WHERE timestamp > '2024-01-01' LIMIT 100\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ claude\n╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \n│ │ Tips for getting started │ \n│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │ \n│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │ \n│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ \n│ ▝▜█████▛▘ │ Recent activity │ \n│ ▘▘ ▝▝ │ No recent activity │ \n│ Sonnet 4.6 · Claude Pro · kovaliklukas@gmail.com's │ │ \n│ Organization │ │ \n│ /Users/lukas │ │ \n╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n \n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n ? for shortcuts ◐ medium · /effort","depth":4,"value":"rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\\\"f\\\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \\\"f\\\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --scopeuser--file:///Users/lukas/.nvm/versions/node/v14.15.4/lib/node_modules/@anthropic-ai/claude-code/cli.js:8Stop Sharinghimport{createRequire as MA5}from\\\"node:module\\\";var AA5=0bject.create;var{getPrototype0f:0A5,definePropertylct.prototype.has0wnProperty;function XJ7(q){return this[ql}var wA5,jA5,Y6=(q,K,_)=>{var z=q!=null&&typeofppertyDescriptor:$A5}=0bject,MJ7=0bjeq===\\\"object\\\";if(z){var Y=K?wA5??=new WeakMap:jA5??=new WeakMap,A=Y.get(q)Hif(A) return Al_5al=nu1 2AA5(0A5(a)): 0#let 0-Kl 11a|l(h. esModulereT6(, \\\"default\\\", Evalue: a, enumerable: 102) =;for(let S.of JJ7(a))i f(IMJ7.call (O,S))eT6(0,S, {oet : XJ7.bind(q,S), enumerable:!03);if(z)Y.set(q,0);return 0},fq=(q)=>{var K=(HJ7??=new WeakMap).get(q),-;if(K)return K;if(K=eI6(f},,{value:!0}), q8&typeof q===\\\"object\\\"|Itypeof q===\\\"function\\\"){for(var z of JJ7(q))if(!MJ7.call(K,z))eI6(K,z, {get:XJ7.bind(q,z), enumerable:!(_=SA5(q,z))||_.enumerable})}return HJ7.set(q,K),K},HJ7,B=(q,K)=>()=>(K||q((K={exports:(}}).exports,K), K. exports);var HA5=(q)=>q;function JA5(q, K){this[q]=HA5.bind(null,K)}var f8=(q,K)=>{for(varin K)el6(q,-, {get:K[-], enumerable: !0, configurable:!0,set:JA5.bind(K,-)})};var L=(q,K)=>(=>(q&&(K=q(q=0)),K);var U6=MA5(import.meta.url),XA5=Symbol.disposel |Symbol.for(\\\"Symbol.dispose\\\"),PA5=Symbol.asyncDisposel|Symbol.for(\\\"Symbol.asyncDispose\\\"),lz=(q,K,_)=>{if(K!=null){if(typeof K!==\\\"object\\\"&&typeof K!==\\\"function\\\")throw TypeError('Object expected to be assigned to \\\"using\\\"declaration');var z;if(_)z=K[PA5];if(z===void 0)z=K[XA5];if(typeofz!==\\\"function\\\")throw TypeError(\\\"Object not disposable\\\");q.push([_,z,K])}else if(_)q.push([_]);return K},nz=(q,K,_)=>{var z=typeof SuppressedError===\\\"function\\\"?SuppressedError: function(O,5,w,j){return j=Error(w),j.name=\\\"SuppressedError\\\",j.error=0,j.suppressed=S,j},Y=(0)=>K=_?new z(O,K,\\\"Anerror wassuppressedduringdisposal\\\"):(_=!0,0),A=(0)=>{while(0=qpO)tryfvar $=0[1]&&0[1].call(0[2]);if(0[0])return Promise.resolve($).thenCA,(w)=>(Y(w),A()))}catch(w){Y(w)}ifC..)throw K};returnAO}: functionDA5O{this.__data__=[],ar PJ7;var DJ7=L(()=>{PJ7=DA5});function WA5(q,K){return q===K|lq!-q&&K!==K}var Pg;var pP6=L(()=>{Pg=WA5});function fA5(q,K){var;while(_--)if(Pg(q[-][0],K).turn-1}var de;var qu6=L((=>{pP6();de=fA5});function vA5(q){var K=this._.data-,_=de(K,q);if(_<0)return!1;var z=K.length-1;if(=z)K.pop\\u041e;elseGA5.call(K,-,1);return--th0}var ZA5, GA5,WJ7;var fJ7=L(()=>{qu6();ZA5=Array.prototype,GA5=ZA5.splice;WJ7=vA5});function TA5(q){varK=this..data._<0?void 0:K[-][1]}varqu60;2J7=TA5}); function VA5(q){return de(this._._data__,q)>-1}var vJ7;var TJ7=L(O=>{qu60;vJ7=VA5}); function kA5(q,K){vardata-,z=de(_,9);if(z<0)++this.]);else _[z][1]=K;return this}var VJ7;var kJ7=L(()=>{qu6();VJ7=kA5});function gP6(q){var K=-1,_=q==null?0:q.length;this.clear){var z=q[K];this.set(z[0],z[1;var Ku6=L(O=>{DJ7O;fJ7O;GJ7O;TJ7O;kJ70;gP6.prototype.clear=PJ7;gP6.prototype.delete=WJ7;gP6.prototype.get=ZJ7;gP6.prot;gP6.prototype.set=VJ7;ce=gP6]NA5() {this.__data__=new ce,this.size=0}var NJ7;var yJ7=L((=>{Ku6();NJ7=NA5});function yA5(q){var K=this._data__,_=K.deletesize=KEJ7;var7=yA5});function EA5(q) {return this.__data_-.get(q)}var hJ7;var RJ7=L(()=>{hJ7=EA5});function LA5(q){return this.__data.CJ7=L0a8=L(()=>{hA5=typeof global==\\\"object\\\"&&global&&global.0bject===0bject&&global,g_8=hA5});var RA5,SA5,vJ;var sR=L(()=>{Aa8();RA5=typeof0=>{SJ7=LA5});var==\\\"object\\\"&&self&&self.Objectelf,SA5=g_81IRA5IIFunction(\\\"return this\\\")(,vJ=SA5});var CA5, YW;var J_6=L(()=>{sR();CA5=vJ.Symbol, YW=CA5});function IA5(q){varK=bA5l(q,_u6),-=q[_u6];try{a[u67=voi0: varZ=0} catch(A){}var Y=xA5.call(q);if(z)if(K)q[_u6]=_;else delete q[_u6];return Y}var bJ7,bA5,xA5,_\\u04386,xJ7;var IJ7=L(O=>{J_6();bJ7=0bjecprototype,bA5=bJ7.has0wnProperty,xA5=bJ7.toString,_u\\u0431=YW?YW.toStringTag:void 0;xJ7=IA5});function BA5(q){return mA5.call(q)}var uA5,mA5,uJ7;var mJ7=L(()=>{uA5=0bject.prototype,mA5.toString;uJ7=BA5});functionq){if(q==null)return q===void 0?gA5:pA5;return BJ7&&BJ7 in Object(q)?xJ7(q):uJ7(q)}var pA5=\\\"[objectNull]\\\",gA5=\\\"[object Undefined]\\\"toStringTag:void 0;YL=FA5});function UA5(q){var K=typeofa;return q!=null&&(K==\\\"object\\\"11K==\\\"function\\\")}varPO; varhT=L((=>{P0=UA5}); funcQ);return K==dA5I|K==CA51IK==QA5I IK==1A5}var QA5=\\\"[object AsyncFunction]\\\",dA5=\\\"[objectFunction]\\\", CA5=*[objectGeneratorFunction]; FP6=nA5});var iA5,U_8;var pJ7=L((=>{sR(;iA5=vJ[\\\"._core-js_shared.\\\"],U_8=iA5});functionrAS(o\\\"<return!.gJ/xxaJ7in qjvar gJ7FJ7;var.exec(U_88&U_8.keys&&U_8.keys.IE_PROTOI|\\\"');return q?\\\"Symbol(src)_1.\\\"+q:\\\"\\\"3();FJ7=rA5});function sA5(9){if(q!=null){try{returnaA5.caln\\\"'\\\"3var 0A5,aA5,rl;var 0a8=L(()=>{0A5=Function.prototype,aA5=0A5.toString;rl=sA5});functionA05(Q){if(!PO(q)|IFJ7(q))return!1;varK=FP6(a)?Y05, q05,K05,_05,z05, Y05, QJ7;var dJ7=L(()=>{F_8();UJ7();hT();0a8(); tA5=/[\\\\\\\\s.*+?O(J(3|]/g,eA5=/^\\\\[object.+?Constructor\\\\]$/,q05=Functon.prototypering,205=K05.hasOwnProperty,Y05=RegExp(\\\"^\\\"+_05.call(z05).replace(tA5,\\\"\\\\\\\\$&\\\").replace(/has0wnPropertyl(function).*?(?=1|\\\\O1for])/g,\\u2022catchKtest(rl(q))}varprototypeQJ7=A05}); funcFretur, eA5.toSt005(\",\n \"timestamp\": \"2026-04-09T20:05:56.323065+03:00\",\n \"window_name\": \"\"\n },\n \"type\": \"OCR\"\n }\n ],\n \"pagination\": {\n \"limit\": 5,\n \"offset\": 0,\n \"total\": 120\n }\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST http://localhost:3030/raw_sql \\\n -H \"Content-Type: application/json\" \\\n -d '{\"query\": \"SELECT app_name, COUNT(*) as captures FROM frames WHERE timestamp > datetime(\\\"now\\\",\\\"-1 day\\\") GROUP BY app_name ORDER BY captures DESC\"}' | python3 -m json.tool\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 311 100 161 100 150 154k 143k --:--:-- --:--:-- --:--:-- 303k\n{\n \"error\": \"Query rejected: SELECT without LIMIT. Add 'LIMIT n' (max 10000) to your query. Example: SELECT * FROM frames WHERE timestamp > '2024-01-01' LIMIT 100\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ claude\n╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \n│ │ Tips for getting started │ \n│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │ \n│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │ \n│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ \n│ ▝▜█████▛▘ │ Recent activity │ \n│ ▘▘ ▝▝ │ No recent activity │ \n│ Sonnet 4.6 · Claude Pro · kovaliklukas@gmail.com's │ │ \n│ Organization │ │ \n│ /Users/lukas │ │ \n╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n \n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n❯ \n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n ? for shortcuts ◐ medium · /effort","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.19722222,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.2013889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.39444444,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.3986111,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.59166664,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.59583336,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Claude Code (node)","depth":2,"bounds":{"left":0.7888889,"top":0.05888889,"width":0.19722222,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.79305553,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"✳ Claude Code","depth":1,"bounds":{"left":0.46666667,"top":0.033333335,"width":0.06944445,"height":0.017777778},"role_description":"text"}]...
|
2019845803862394452
|
911090586082964025
|
app_switch
|
accessibility
|
NULL
|
rrayBuffer?new Uint8Array(q):typeo-&&u1(th rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\"f\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \"f\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --[URL_WITH_CREDENTIALS] ~ $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST [URL_WITH_CREDENTIALS] ~ $ claude
╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ Tips for getting started │
│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │
│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │
│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │
│ ▝▜█████▛▘ │ Recent activity │
│ ▘▘ ▝▝ │ No recent activity │
│ Sonnet 4.6 · Claude Pro · [EMAIL]'s │ │
│ Organization │ │
│ /Users/lukas │ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
❯
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
? for shortcuts ◐ medium · /effort
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
✳ Claude Code (node)
Close Tab
⌥⌘1
✳ Claude Code...
|
NULL
|
|
134
|
4
|
28
|
2026-04-09T17:08:09.737402+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754489737_m1.jpg...
|
UserNotificationCenter
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
“iTerm.app” Would Like to Add to Your Calendar
An “iTerm.app” Would Like to Add to Your Calendar
An application in iTerm2 wants to use Calendar data.
Help
Don’t Allow
Allow...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"“iTerm.app” Would Like to Add to Your Calendar","depth":1,"bounds":{"left":0.42222223,"top":0.28444445,"width":0.15555556,"height":0.035555556},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"An application in iTerm2 wants to use Calendar data.","depth":1,"bounds":{"left":0.42222223,"top":0.3311111,"width":0.15555556,"height":0.031111112},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Help","depth":1,"bounds":{"left":0.56319445,"top":0.18555556,"width":0.017361112,"height":0.027777778},"automation_id":"_NS:30","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Don’t Allow","depth":1,"bounds":{"left":0.41666666,"top":0.37333333,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-3","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Allow","depth":1,"bounds":{"left":0.49861112,"top":0.37333333,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-1","role_description":"button","is_enabled":true,"is_focused":false}]...
|
-1889631296654110071
|
2665665264223559155
|
app_switch
|
accessibility
|
NULL
|
“iTerm.app” Would Like to Add to Your Calendar
An “iTerm.app” Would Like to Add to Your Calendar
An application in iTerm2 wants to use Calendar data.
Help
Don’t Allow
Allow...
|
NULL
|
|
135
|
4
|
29
|
2026-04-09T17:08:11.801264+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754491801_m1.jpg...
|
UserNotificationCenter
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
“iTerm.app” would like to access data from other a “iTerm.app” would like to access data from other apps.
Keeping app data separate makes it easier to manage your privacy and security.
Don’t Allow
Allow...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"“iTerm.app” would like to access data from other apps.","depth":1,"bounds":{"left":0.42222223,"top":0.28444445,"width":0.15555556,"height":0.035555556},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"Keeping app data separate makes it easier to manage your privacy and security.","depth":1,"bounds":{"left":0.42222223,"top":0.3311111,"width":0.15555556,"height":0.046666667},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Don’t Allow","depth":1,"bounds":{"left":0.41666666,"top":0.3888889,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-3","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Allow","depth":1,"bounds":{"left":0.49861112,"top":0.3888889,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-1","role_description":"button","is_enabled":true,"is_focused":false}]...
|
4777312452748936406
|
2498069750512692814
|
app_switch
|
accessibility
|
NULL
|
“iTerm.app” would like to access data from other a “iTerm.app” would like to access data from other apps.
Keeping app data separate makes it easier to manage your privacy and security.
Don’t Allow
Allow...
|
NULL
|
|
139
|
4
|
33
|
2026-04-09T17:09:09.742382+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754549742_m1.jpg...
|
UserNotificationCenter
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
“iTerm.app” would like to access your contacts.
An “iTerm.app” would like to access your contacts.
An application in iTerm2 wants to use your contacts.
Help
Don’t Allow
Allow...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"“iTerm.app” would like to access your contacts.","depth":1,"bounds":{"left":0.42222223,"top":0.28444445,"width":0.15555556,"height":0.035555556},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"An application in iTerm2 wants to use your contacts.","depth":1,"bounds":{"left":0.42222223,"top":0.3311111,"width":0.15555556,"height":0.031111112},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Help","depth":1,"bounds":{"left":0.56319445,"top":0.18555556,"width":0.017361112,"height":0.027777778},"automation_id":"_NS:30","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Don’t Allow","depth":1,"bounds":{"left":0.41666666,"top":0.37333333,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-3","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Allow","depth":1,"bounds":{"left":0.49861112,"top":0.37333333,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-1","role_description":"button","is_enabled":true,"is_focused":false}]...
|
2137293156522948262
|
2899843188763516634
|
app_switch
|
accessibility
|
NULL
|
“iTerm.app” would like to access your contacts.
An “iTerm.app” would like to access your contacts.
An application in iTerm2 wants to use your contacts.
Help
Don’t Allow
Allow...
|
NULL
|
|
140
|
4
|
34
|
2026-04-09T17:09:12.596384+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754552596_m1.jpg...
|
iTerm2
|
✳ Check today's app usage
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
rrayBuffer?new Uint8Array(q):typeo-&&u1(th rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\"f\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \"f\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --[URL_WITH_CREDENTIALS] ~ $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST [URL_WITH_CREDENTIALS] ~ $ claude
╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ Tips for getting started │
│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │
│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │
│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │
│ ▝▜█████▛▘ │ Recent activity │
│ ▘▘ ▝▝ │ No recent activity │
│ Sonnet 4.6 · Claude Pro · [EMAIL]'s │ │
│ Organization │ │
│ /Users/lukas │ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
❯ what apps have I used today?
⏺ screenpipe - Activity Summary (MCP)(start_time: "2026-04-09T00:00:00", end_time: "now")
⏺ screenpipe - Activity Summary (MCP)(start_time: "16h ago", end_time: "now")
⎿ Running…
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Tool use
screenpipe - Activity Summary(start_time: "16h ago", end_time: "now") (MCP)
Lightweight activity overview (~200-500 tokens): app usage with active minutes, audio speakers, recent texts. USE THIS FIRST for broad questions: 'what was I doing?', 'how
long on X?', 'which apps?'. Only escalate to search-content if you need specific text content.
Do you want to proceed?
❯ 1. Yes
2. Yes, and don't ask again for screenpipe - Activity Summary commands in /Users/lukas
3. No
Esc to cancel · Tab to amend...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\\\"f\\\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \\\"f\\\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --scopeuser--file:///Users/lukas/.nvm/versions/node/v14.15.4/lib/node_modules/@anthropic-ai/claude-code/cli.js:8Stop Sharinghimport{createRequire as MA5}from\\\"node:module\\\";var AA5=0bject.create;var{getPrototype0f:0A5,definePropertylct.prototype.has0wnProperty;function XJ7(q){return this[ql}var wA5,jA5,Y6=(q,K,_)=>{var z=q!=null&&typeofppertyDescriptor:$A5}=0bject,MJ7=0bjeq===\\\"object\\\";if(z){var Y=K?wA5??=new WeakMap:jA5??=new WeakMap,A=Y.get(q)Hif(A) return Al_5al=nu1 2AA5(0A5(a)): 0#let 0-Kl 11a|l(h. esModulereT6(, \\\"default\\\", Evalue: a, enumerable: 102) =;for(let S.of JJ7(a))i f(IMJ7.call (O,S))eT6(0,S, {oet : XJ7.bind(q,S), enumerable:!03);if(z)Y.set(q,0);return 0},fq=(q)=>{var K=(HJ7??=new WeakMap).get(q),-;if(K)return K;if(K=eI6(f},,{value:!0}), q8&typeof q===\\\"object\\\"|Itypeof q===\\\"function\\\"){for(var z of JJ7(q))if(!MJ7.call(K,z))eI6(K,z, {get:XJ7.bind(q,z), enumerable:!(_=SA5(q,z))||_.enumerable})}return HJ7.set(q,K),K},HJ7,B=(q,K)=>()=>(K||q((K={exports:(}}).exports,K), K. exports);var HA5=(q)=>q;function JA5(q, K){this[q]=HA5.bind(null,K)}var f8=(q,K)=>{for(varin K)el6(q,-, {get:K[-], enumerable: !0, configurable:!0,set:JA5.bind(K,-)})};var L=(q,K)=>(=>(q&&(K=q(q=0)),K);var U6=MA5(import.meta.url),XA5=Symbol.disposel |Symbol.for(\\\"Symbol.dispose\\\"),PA5=Symbol.asyncDisposel|Symbol.for(\\\"Symbol.asyncDispose\\\"),lz=(q,K,_)=>{if(K!=null){if(typeof K!==\\\"object\\\"&&typeof K!==\\\"function\\\")throw TypeError('Object expected to be assigned to \\\"using\\\"declaration');var z;if(_)z=K[PA5];if(z===void 0)z=K[XA5];if(typeofz!==\\\"function\\\")throw TypeError(\\\"Object not disposable\\\");q.push([_,z,K])}else if(_)q.push([_]);return K},nz=(q,K,_)=>{var z=typeof SuppressedError===\\\"function\\\"?SuppressedError: function(O,5,w,j){return j=Error(w),j.name=\\\"SuppressedError\\\",j.error=0,j.suppressed=S,j},Y=(0)=>K=_?new z(O,K,\\\"Anerror wassuppressedduringdisposal\\\"):(_=!0,0),A=(0)=>{while(0=qpO)tryfvar $=0[1]&&0[1].call(0[2]);if(0[0])return Promise.resolve($).thenCA,(w)=>(Y(w),A()))}catch(w){Y(w)}ifC..)throw K};returnAO}: functionDA5O{this.__data__=[],ar PJ7;var DJ7=L(()=>{PJ7=DA5});function WA5(q,K){return q===K|lq!-q&&K!==K}var Pg;var pP6=L(()=>{Pg=WA5});function fA5(q,K){var;while(_--)if(Pg(q[-][0],K).turn-1}var de;var qu6=L((=>{pP6();de=fA5});function vA5(q){var K=this._.data-,_=de(K,q);if(_<0)return!1;var z=K.length-1;if(=z)K.pop\\u041e;elseGA5.call(K,-,1);return--th0}var ZA5, GA5,WJ7;var fJ7=L(()=>{qu6();ZA5=Array.prototype,GA5=ZA5.splice;WJ7=vA5});function TA5(q){varK=this..data._<0?void 0:K[-][1]}varqu60;2J7=TA5}); function VA5(q){return de(this._._data__,q)>-1}var vJ7;var TJ7=L(O=>{qu60;vJ7=VA5}); function kA5(q,K){vardata-,z=de(_,9);if(z<0)++this.]);else _[z][1]=K;return this}var VJ7;var kJ7=L(()=>{qu6();VJ7=kA5});function gP6(q){var K=-1,_=q==null?0:q.length;this.clear){var z=q[K];this.set(z[0],z[1;var Ku6=L(O=>{DJ7O;fJ7O;GJ7O;TJ7O;kJ70;gP6.prototype.clear=PJ7;gP6.prototype.delete=WJ7;gP6.prototype.get=ZJ7;gP6.prot;gP6.prototype.set=VJ7;ce=gP6]NA5() {this.__data__=new ce,this.size=0}var NJ7;var yJ7=L((=>{Ku6();NJ7=NA5});function yA5(q){var K=this._data__,_=K.deletesize=KEJ7;var7=yA5});function EA5(q) {return this.__data_-.get(q)}var hJ7;var RJ7=L(()=>{hJ7=EA5});function LA5(q){return this.__data.CJ7=L0a8=L(()=>{hA5=typeof global==\\\"object\\\"&&global&&global.0bject===0bject&&global,g_8=hA5});var RA5,SA5,vJ;var sR=L(()=>{Aa8();RA5=typeof0=>{SJ7=LA5});var==\\\"object\\\"&&self&&self.Objectelf,SA5=g_81IRA5IIFunction(\\\"return this\\\")(,vJ=SA5});var CA5, YW;var J_6=L(()=>{sR();CA5=vJ.Symbol, YW=CA5});function IA5(q){varK=bA5l(q,_u6),-=q[_u6];try{a[u67=voi0: varZ=0} catch(A){}var Y=xA5.call(q);if(z)if(K)q[_u6]=_;else delete q[_u6];return Y}var bJ7,bA5,xA5,_\\u04386,xJ7;var IJ7=L(O=>{J_6();bJ7=0bjecprototype,bA5=bJ7.has0wnProperty,xA5=bJ7.toString,_u\\u0431=YW?YW.toStringTag:void 0;xJ7=IA5});function BA5(q){return mA5.call(q)}var uA5,mA5,uJ7;var mJ7=L(()=>{uA5=0bject.prototype,mA5.toString;uJ7=BA5});functionq){if(q==null)return q===void 0?gA5:pA5;return BJ7&&BJ7 in Object(q)?xJ7(q):uJ7(q)}var pA5=\\\"[objectNull]\\\",gA5=\\\"[object Undefined]\\\"toStringTag:void 0;YL=FA5});function UA5(q){var K=typeofa;return q!=null&&(K==\\\"object\\\"11K==\\\"function\\\")}varPO; varhT=L((=>{P0=UA5}); funcQ);return K==dA5I|K==CA51IK==QA5I IK==1A5}var QA5=\\\"[object AsyncFunction]\\\",dA5=\\\"[objectFunction]\\\", CA5=*[objectGeneratorFunction]; FP6=nA5});var iA5,U_8;var pJ7=L((=>{sR(;iA5=vJ[\\\"._core-js_shared.\\\"],U_8=iA5});functionrAS(o\\\"<return!.gJ/xxaJ7in qjvar gJ7FJ7;var.exec(U_88&U_8.keys&&U_8.keys.IE_PROTOI|\\\"');return q?\\\"Symbol(src)_1.\\\"+q:\\\"\\\"3();FJ7=rA5});function sA5(9){if(q!=null){try{returnaA5.caln\\\"'\\\"3var 0A5,aA5,rl;var 0a8=L(()=>{0A5=Function.prototype,aA5=0A5.toString;rl=sA5});functionA05(Q){if(!PO(q)|IFJ7(q))return!1;varK=FP6(a)?Y05, q05,K05,_05,z05, Y05, QJ7;var dJ7=L(()=>{F_8();UJ7();hT();0a8(); tA5=/[\\\\\\\\s.*+?O(J(3|]/g,eA5=/^\\\\[object.+?Constructor\\\\]$/,q05=Functon.prototypering,205=K05.hasOwnProperty,Y05=RegExp(\\\"^\\\"+_05.call(z05).replace(tA5,\\\"\\\\\\\\$&\\\").replace(/has0wnPropertyl(function).*?(?=1|\\\\O1for])/g,\\u2022catchKtest(rl(q))}varprototypeQJ7=A05}); funcFretur, eA5.toSt005(\",\n \"timestamp\": \"2026-04-09T20:05:56.323065+03:00\",\n \"window_name\": \"\"\n },\n \"type\": \"OCR\"\n }\n ],\n \"pagination\": {\n \"limit\": 5,\n \"offset\": 0,\n \"total\": 120\n }\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST http://localhost:3030/raw_sql \\\n -H \"Content-Type: application/json\" \\\n -d '{\"query\": \"SELECT app_name, COUNT(*) as captures FROM frames WHERE timestamp > datetime(\\\"now\\\",\\\"-1 day\\\") GROUP BY app_name ORDER BY captures DESC\"}' | python3 -m json.tool\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 311 100 161 100 150 154k 143k --:--:-- --:--:-- --:--:-- 303k\n{\n \"error\": \"Query rejected: SELECT without LIMIT. Add 'LIMIT n' (max 10000) to your query. Example: SELECT * FROM frames WHERE timestamp > '2024-01-01' LIMIT 100\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ claude\n╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \n│ │ Tips for getting started │ \n│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │ \n│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │ \n│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ \n│ ▝▜█████▛▘ │ Recent activity │ \n│ ▘▘ ▝▝ │ No recent activity │ \n│ Sonnet 4.6 · Claude Pro · kovaliklukas@gmail.com's │ │ \n│ Organization │ │ \n│ /Users/lukas │ │ \n╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n \n❯ what apps have I used today? \n \n⏺ screenpipe - Activity Summary (MCP)(start_time: \"2026-04-09T00:00:00\", end_time: \"now\") \n \n⏺ screenpipe - Activity Summary (MCP)(start_time: \"16h ago\", end_time: \"now\") \n ⎿ Running… \n \n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n Tool use \n \n screenpipe - Activity Summary(start_time: \"16h ago\", end_time: \"now\") (MCP) \n\u0000\u0000 Lightweight activity overview (~200-500 tokens): app usage with active minutes, audio speakers, recent texts. USE THIS FIRST for broad questions: 'what was I\u0000doing?',\u0000'how \n long on X?', 'which apps?'. Only escalate to search-content if you need specific text content. \n \n Do you want to proceed? \n ❯ 1. Yes \n 2. Yes, and don't ask again for screenpipe - Activity Summary commands in /Users/lukas \n 3. No \n\n Esc to cancel · Tab to amend","depth":4,"value":"rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\\\"f\\\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \\\"f\\\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --scopeuser--file:///Users/lukas/.nvm/versions/node/v14.15.4/lib/node_modules/@anthropic-ai/claude-code/cli.js:8Stop Sharinghimport{createRequire as MA5}from\\\"node:module\\\";var AA5=0bject.create;var{getPrototype0f:0A5,definePropertylct.prototype.has0wnProperty;function XJ7(q){return this[ql}var wA5,jA5,Y6=(q,K,_)=>{var z=q!=null&&typeofppertyDescriptor:$A5}=0bject,MJ7=0bjeq===\\\"object\\\";if(z){var Y=K?wA5??=new WeakMap:jA5??=new WeakMap,A=Y.get(q)Hif(A) return Al_5al=nu1 2AA5(0A5(a)): 0#let 0-Kl 11a|l(h. esModulereT6(, \\\"default\\\", Evalue: a, enumerable: 102) =;for(let S.of JJ7(a))i f(IMJ7.call (O,S))eT6(0,S, {oet : XJ7.bind(q,S), enumerable:!03);if(z)Y.set(q,0);return 0},fq=(q)=>{var K=(HJ7??=new WeakMap).get(q),-;if(K)return K;if(K=eI6(f},,{value:!0}), q8&typeof q===\\\"object\\\"|Itypeof q===\\\"function\\\"){for(var z of JJ7(q))if(!MJ7.call(K,z))eI6(K,z, {get:XJ7.bind(q,z), enumerable:!(_=SA5(q,z))||_.enumerable})}return HJ7.set(q,K),K},HJ7,B=(q,K)=>()=>(K||q((K={exports:(}}).exports,K), K. exports);var HA5=(q)=>q;function JA5(q, K){this[q]=HA5.bind(null,K)}var f8=(q,K)=>{for(varin K)el6(q,-, {get:K[-], enumerable: !0, configurable:!0,set:JA5.bind(K,-)})};var L=(q,K)=>(=>(q&&(K=q(q=0)),K);var U6=MA5(import.meta.url),XA5=Symbol.disposel |Symbol.for(\\\"Symbol.dispose\\\"),PA5=Symbol.asyncDisposel|Symbol.for(\\\"Symbol.asyncDispose\\\"),lz=(q,K,_)=>{if(K!=null){if(typeof K!==\\\"object\\\"&&typeof K!==\\\"function\\\")throw TypeError('Object expected to be assigned to \\\"using\\\"declaration');var z;if(_)z=K[PA5];if(z===void 0)z=K[XA5];if(typeofz!==\\\"function\\\")throw TypeError(\\\"Object not disposable\\\");q.push([_,z,K])}else if(_)q.push([_]);return K},nz=(q,K,_)=>{var z=typeof SuppressedError===\\\"function\\\"?SuppressedError: function(O,5,w,j){return j=Error(w),j.name=\\\"SuppressedError\\\",j.error=0,j.suppressed=S,j},Y=(0)=>K=_?new z(O,K,\\\"Anerror wassuppressedduringdisposal\\\"):(_=!0,0),A=(0)=>{while(0=qpO)tryfvar $=0[1]&&0[1].call(0[2]);if(0[0])return Promise.resolve($).thenCA,(w)=>(Y(w),A()))}catch(w){Y(w)}ifC..)throw K};returnAO}: functionDA5O{this.__data__=[],ar PJ7;var DJ7=L(()=>{PJ7=DA5});function WA5(q,K){return q===K|lq!-q&&K!==K}var Pg;var pP6=L(()=>{Pg=WA5});function fA5(q,K){var;while(_--)if(Pg(q[-][0],K).turn-1}var de;var qu6=L((=>{pP6();de=fA5});function vA5(q){var K=this._.data-,_=de(K,q);if(_<0)return!1;var z=K.length-1;if(=z)K.pop\\u041e;elseGA5.call(K,-,1);return--th0}var ZA5, GA5,WJ7;var fJ7=L(()=>{qu6();ZA5=Array.prototype,GA5=ZA5.splice;WJ7=vA5});function TA5(q){varK=this..data._<0?void 0:K[-][1]}varqu60;2J7=TA5}); function VA5(q){return de(this._._data__,q)>-1}var vJ7;var TJ7=L(O=>{qu60;vJ7=VA5}); function kA5(q,K){vardata-,z=de(_,9);if(z<0)++this.]);else _[z][1]=K;return this}var VJ7;var kJ7=L(()=>{qu6();VJ7=kA5});function gP6(q){var K=-1,_=q==null?0:q.length;this.clear){var z=q[K];this.set(z[0],z[1;var Ku6=L(O=>{DJ7O;fJ7O;GJ7O;TJ7O;kJ70;gP6.prototype.clear=PJ7;gP6.prototype.delete=WJ7;gP6.prototype.get=ZJ7;gP6.prot;gP6.prototype.set=VJ7;ce=gP6]NA5() {this.__data__=new ce,this.size=0}var NJ7;var yJ7=L((=>{Ku6();NJ7=NA5});function yA5(q){var K=this._data__,_=K.deletesize=KEJ7;var7=yA5});function EA5(q) {return this.__data_-.get(q)}var hJ7;var RJ7=L(()=>{hJ7=EA5});function LA5(q){return this.__data.CJ7=L0a8=L(()=>{hA5=typeof global==\\\"object\\\"&&global&&global.0bject===0bject&&global,g_8=hA5});var RA5,SA5,vJ;var sR=L(()=>{Aa8();RA5=typeof0=>{SJ7=LA5});var==\\\"object\\\"&&self&&self.Objectelf,SA5=g_81IRA5IIFunction(\\\"return this\\\")(,vJ=SA5});var CA5, YW;var J_6=L(()=>{sR();CA5=vJ.Symbol, YW=CA5});function IA5(q){varK=bA5l(q,_u6),-=q[_u6];try{a[u67=voi0: varZ=0} catch(A){}var Y=xA5.call(q);if(z)if(K)q[_u6]=_;else delete q[_u6];return Y}var bJ7,bA5,xA5,_\\u04386,xJ7;var IJ7=L(O=>{J_6();bJ7=0bjecprototype,bA5=bJ7.has0wnProperty,xA5=bJ7.toString,_u\\u0431=YW?YW.toStringTag:void 0;xJ7=IA5});function BA5(q){return mA5.call(q)}var uA5,mA5,uJ7;var mJ7=L(()=>{uA5=0bject.prototype,mA5.toString;uJ7=BA5});functionq){if(q==null)return q===void 0?gA5:pA5;return BJ7&&BJ7 in Object(q)?xJ7(q):uJ7(q)}var pA5=\\\"[objectNull]\\\",gA5=\\\"[object Undefined]\\\"toStringTag:void 0;YL=FA5});function UA5(q){var K=typeofa;return q!=null&&(K==\\\"object\\\"11K==\\\"function\\\")}varPO; varhT=L((=>{P0=UA5}); funcQ);return K==dA5I|K==CA51IK==QA5I IK==1A5}var QA5=\\\"[object AsyncFunction]\\\",dA5=\\\"[objectFunction]\\\", CA5=*[objectGeneratorFunction]; FP6=nA5});var iA5,U_8;var pJ7=L((=>{sR(;iA5=vJ[\\\"._core-js_shared.\\\"],U_8=iA5});functionrAS(o\\\"<return!.gJ/xxaJ7in qjvar gJ7FJ7;var.exec(U_88&U_8.keys&&U_8.keys.IE_PROTOI|\\\"');return q?\\\"Symbol(src)_1.\\\"+q:\\\"\\\"3();FJ7=rA5});function sA5(9){if(q!=null){try{returnaA5.caln\\\"'\\\"3var 0A5,aA5,rl;var 0a8=L(()=>{0A5=Function.prototype,aA5=0A5.toString;rl=sA5});functionA05(Q){if(!PO(q)|IFJ7(q))return!1;varK=FP6(a)?Y05, q05,K05,_05,z05, Y05, QJ7;var dJ7=L(()=>{F_8();UJ7();hT();0a8(); tA5=/[\\\\\\\\s.*+?O(J(3|]/g,eA5=/^\\\\[object.+?Constructor\\\\]$/,q05=Functon.prototypering,205=K05.hasOwnProperty,Y05=RegExp(\\\"^\\\"+_05.call(z05).replace(tA5,\\\"\\\\\\\\$&\\\").replace(/has0wnPropertyl(function).*?(?=1|\\\\O1for])/g,\\u2022catchKtest(rl(q))}varprototypeQJ7=A05}); funcFretur, eA5.toSt005(\",\n \"timestamp\": \"2026-04-09T20:05:56.323065+03:00\",\n \"window_name\": \"\"\n },\n \"type\": \"OCR\"\n }\n ],\n \"pagination\": {\n \"limit\": 5,\n \"offset\": 0,\n \"total\": 120\n }\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST http://localhost:3030/raw_sql \\\n -H \"Content-Type: application/json\" \\\n -d '{\"query\": \"SELECT app_name, COUNT(*) as captures FROM frames WHERE timestamp > datetime(\\\"now\\\",\\\"-1 day\\\") GROUP BY app_name ORDER BY captures DESC\"}' | python3 -m json.tool\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 311 100 161 100 150 154k 143k --:--:-- --:--:-- --:--:-- 303k\n{\n \"error\": \"Query rejected: SELECT without LIMIT. Add 'LIMIT n' (max 10000) to your query. Example: SELECT * FROM frames WHERE timestamp > '2024-01-01' LIMIT 100\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ claude\n╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \n│ │ Tips for getting started │ \n│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │ \n│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │ \n│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ \n│ ▝▜█████▛▘ │ Recent activity │ \n│ ▘▘ ▝▝ │ No recent activity │ \n│ Sonnet 4.6 · Claude Pro · kovaliklukas@gmail.com's │ │ \n│ Organization │ │ \n│ /Users/lukas │ │ \n╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \n \n❯ what apps have I used today? \n \n⏺ screenpipe - Activity Summary (MCP)(start_time: \"2026-04-09T00:00:00\", end_time: \"now\") \n \n⏺ screenpipe - Activity Summary (MCP)(start_time: \"16h ago\", end_time: \"now\") \n ⎿ Running… \n \n───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n Tool use \n \n screenpipe - Activity Summary(start_time: \"16h ago\", end_time: \"now\") (MCP) \n\u0000\u0000 Lightweight activity overview (~200-500 tokens): app usage with active minutes, audio speakers, recent texts. USE THIS FIRST for broad questions: 'what was I\u0000doing?',\u0000'how \n long on X?', 'which apps?'. Only escalate to search-content if you need specific text content. \n \n Do you want to proceed? \n ❯ 1. Yes \n 2. Yes, and don't ask again for screenpipe - Activity Summary commands in /Users/lukas \n 3. No \n\n Esc to cancel · Tab to amend","is_focused":true}]...
|
3626149543795874416
|
7612384692024470025
|
app_switch
|
accessibility
|
NULL
|
rrayBuffer?new Uint8Array(q):typeo-&&u1(th rrayBuffer?new Uint8Array(q):typeo-&&u1(this,jL,\"f\")==null){S4(this,jL,)-1))), S4(this,wL, u1(this,wL, \"f\"). suay(0,Y));-.push(A), $4(this,wL,u1(thisSyntaxError: Unexpected token '??='at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)atasynclink(internal/modules/esm/module_job.js:47:21)lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~Sclaudemcpadd screenpipe--transportstdio --[URL_WITH_CREDENTIALS] ~ $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ curl -X POST [URL_WITH_CREDENTIALS] ~ $ claude
╭─── Claude Code v2.1.97 ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ │ Tips for getting started │
│ Welcome back Lukas! │ Run /init to create a CLAUDE.md file with instructions for Claude │
│ │ Note: You have launched claude in your home directory. For the best experience, launch it in a project directory instead. │
│ ▐▛███▜▌ │ ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │
│ ▝▜█████▛▘ │ Recent activity │
│ ▘▘ ▝▝ │ No recent activity │
│ Sonnet 4.6 · Claude Pro · [EMAIL]'s │ │
│ Organization │ │
│ /Users/lukas │ │
╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
❯ what apps have I used today?
⏺ screenpipe - Activity Summary (MCP)(start_time: "2026-04-09T00:00:00", end_time: "now")
⏺ screenpipe - Activity Summary (MCP)(start_time: "16h ago", end_time: "now")
⎿ Running…
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Tool use
screenpipe - Activity Summary(start_time: "16h ago", end_time: "now") (MCP)
Lightweight activity overview (~200-500 tokens): app usage with active minutes, audio speakers, recent texts. USE THIS FIRST for broad questions: 'what was I doing?', 'how
long on X?', 'which apps?'. Only escalate to search-content if you need specific text content.
Do you want to proceed?
❯ 1. Yes
2. Yes, and don't ask again for screenpipe - Activity Summary commands in /Users/lukas
3. No
Esc to cancel · Tab to amend...
|
NULL
|
|
178
|
5
|
25
|
2026-04-09T17:14:40.705297+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775754880705_m1.jpg...
|
Safari
|
Order Room Service • HBO Max
|
True
|
https://play.hbomax.com/video/watch/16b35e6c-e745-
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Back
Bookmarks
Search
Favourites
Favourites
Favour Back
Bookmarks
Search
Favourites
Favourites
Favourites
Tab Group Favourites
Tab Group Favourites
Tab Group Favourites
NAS
NAS
NAS
Home
Home
Home
Portainer
Portainer
Portainer
Nginx Proxy Manager
Nginx Proxy Manager
Nginx Proxy Manager
App
App
App
Bitwarden Web vault
Bitwarden Web vault
Bitwarden Web vault
PDF Stirling
PDF Stirling
PDF Stirling
n8n
n8n
n8n
Jellyfin
Jellyfin
Jellyfin
Immich
Immich
Immich
CRM
CRM
CRM
Gitea
Gitea
Gitea
Images
Images
Images
DSK Uploader
DSK Uploader
DSK Uploader
owntracks recorder
owntracks recorder
owntracks recorder
Map | Dawarich
Map | Dawarich
Map | Dawarich
Audiobookshelf
Audiobookshelf
Audiobookshelf
TubeArchivist
TubeArchivist
TubeArchivist
Beszel
Beszel
Beszel
booklore
booklore
booklore
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Open WebUI
Open WebUI
Open WebUI
Paperless-ngx
Paperless-ngx
Paperless-ngx
Hostinger
Hostinger
Hostinger
Trilium Notes
Trilium Notes
Trilium Notes
Location Logger
Location Logger
Location Logger
Outfit Manager
Outfit Manager
Outfit Manager
Reminders
Reminders
Reminders
g
g
g
PROTON
PROTON
PROTON
Order Room Service
Order Room Service
TubeArchivist
UGREEN NAS
Audiobookshelf
PortNote
MAZANOKE | Online Image Optimizer That Runs Privately in Your Browser
Next Beats | Your Ultimate Music Experience
Obsidian
Omni Tools
Order Room Service • HBO Max
close tab...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Back","depth":3,"automation_id":"LibrarySidebarNavigationViewController.returnButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Bookmarks","depth":3,"automation_id":"LibrarySidebarNavigationViewController._viewLabel","role_description":"text"},{"role":"AXButton","text":"Search","depth":6,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Favourites","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Favourites","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Favourites","depth":8,"automation_id":"_NS:7","value":"Favourites","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Tab Group Favourites","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Tab Group Favourites","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Tab Group Favourites","depth":8,"automation_id":"_NS:7","value":"Tab Group Favourites","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"NAS","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"NAS","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"NAS","depth":8,"automation_id":"_NS:7","value":"NAS","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Home","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Home","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Home","depth":8,"automation_id":"_NS:7","value":"Home","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Portainer","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Portainer","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Portainer","depth":8,"automation_id":"_NS:7","value":"Portainer","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Nginx Proxy Manager","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Nginx Proxy Manager","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Nginx Proxy Manager","depth":8,"automation_id":"_NS:7","value":"Nginx Proxy Manager","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"App","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"App","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"App","depth":8,"automation_id":"_NS:7","value":"App","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Bitwarden Web vault","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Bitwarden Web vault","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Bitwarden Web vault","depth":8,"automation_id":"_NS:7","value":"Bitwarden Web vault","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"PDF Stirling","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"PDF Stirling","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"PDF Stirling","depth":8,"automation_id":"_NS:7","value":"PDF Stirling","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"n8n","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"n8n","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"n8n","depth":8,"automation_id":"_NS:7","value":"n8n","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Jellyfin","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Jellyfin","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Jellyfin","depth":8,"automation_id":"_NS:7","value":"Jellyfin","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Immich","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Immich","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Immich","depth":8,"automation_id":"_NS:7","value":"Immich","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"CRM","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"CRM","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"CRM","depth":8,"automation_id":"_NS:7","value":"CRM","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Gitea","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Gitea","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Gitea","depth":8,"automation_id":"_NS:7","value":"Gitea","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Images","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Images","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Images","depth":8,"automation_id":"_NS:7","value":"Images","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"DSK Uploader","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"DSK Uploader","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"DSK Uploader","depth":8,"automation_id":"_NS:7","value":"DSK Uploader","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"owntracks recorder","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"owntracks recorder","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"owntracks recorder","depth":8,"automation_id":"_NS:7","value":"owntracks recorder","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Map | Dawarich","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Map | Dawarich","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Map | Dawarich","depth":8,"automation_id":"_NS:7","value":"Map | Dawarich","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Audiobookshelf","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Audiobookshelf","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Audiobookshelf","depth":8,"automation_id":"_NS:7","value":"Audiobookshelf","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"TubeArchivist","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"TubeArchivist","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"TubeArchivist","depth":8,"automation_id":"_NS:7","value":"TubeArchivist","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Beszel","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Beszel","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Beszel","depth":8,"automation_id":"_NS:7","value":"Beszel","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"booklore","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"booklore","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"booklore","depth":8,"automation_id":"_NS:7","value":"booklore","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Location Logger API - Swagger UI","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Location Logger API - Swagger UI","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Location Logger API - Swagger UI","depth":8,"automation_id":"_NS:7","value":"Location Logger API - Swagger UI","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Open WebUI","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Open WebUI","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Open WebUI","depth":8,"automation_id":"_NS:7","value":"Open WebUI","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Paperless-ngx","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Paperless-ngx","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Paperless-ngx","depth":8,"automation_id":"_NS:7","value":"Paperless-ngx","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Hostinger","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Hostinger","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Hostinger","depth":8,"automation_id":"_NS:7","value":"Hostinger","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Trilium Notes","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Trilium Notes","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Trilium Notes","depth":8,"automation_id":"_NS:7","value":"Trilium Notes","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Location Logger","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Location Logger","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Location Logger","depth":8,"automation_id":"_NS:7","value":"Location Logger","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Outfit Manager","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Outfit Manager","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Outfit Manager","depth":8,"automation_id":"_NS:7","value":"Outfit Manager","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"Reminders","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"Reminders","depth":7,"automation_id":"BookmarksSidebarTableCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"Reminders","depth":8,"automation_id":"_NS:7","value":"Reminders","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"g","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"g","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"g","depth":8,"automation_id":"_NS:7","value":"g","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXCell","text":"PROTON","depth":6,"role_description":"cell"},{"role":"AXTextField","text":"PROTON","depth":7,"automation_id":"BookmarksSidebarTableFolderCellView","role_description":"text field","is_focused":false},{"role":"AXTextField","text":"PROTON","depth":8,"automation_id":"_NS:7","value":"PROTON","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Order Room Service","depth":8,"help_text":"","role_description":"heading"},{"role":"AXStaticText","text":"Order Room Service","depth":9,"help_text":"","role_description":"text"},{"role":"AXRadioButton","text":"TubeArchivist","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"UGREEN NAS","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"Audiobookshelf","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"PortNote","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"MAZANOKE | Online Image Optimizer That Runs Privately in Your Browser","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"Next Beats | Your Ultimate Music Experience","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"Obsidian","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"Omni Tools","depth":2,"automation_id":"TabBarTab?isNarrow=true&isPinned=true","role_description":"pinned tab","subrole":"AXTabButton","is_focused":false},{"role":"AXRadioButton","text":"Order Room Service • HBO Max","depth":2,"automation_id":"TabBarTab?isNarrow=false&isPinned=false","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"close tab","depth":3,"automation_id":"CloseTabBarItemButton","role_description":"button","is_enabled":true,"is_focused":false}]...
|
6797377668050205200
|
-6759518997511935563
|
app_switch
|
accessibility
|
NULL
|
Back
Bookmarks
Search
Favourites
Favourites
Favour Back
Bookmarks
Search
Favourites
Favourites
Favourites
Tab Group Favourites
Tab Group Favourites
Tab Group Favourites
NAS
NAS
NAS
Home
Home
Home
Portainer
Portainer
Portainer
Nginx Proxy Manager
Nginx Proxy Manager
Nginx Proxy Manager
App
App
App
Bitwarden Web vault
Bitwarden Web vault
Bitwarden Web vault
PDF Stirling
PDF Stirling
PDF Stirling
n8n
n8n
n8n
Jellyfin
Jellyfin
Jellyfin
Immich
Immich
Immich
CRM
CRM
CRM
Gitea
Gitea
Gitea
Images
Images
Images
DSK Uploader
DSK Uploader
DSK Uploader
owntracks recorder
owntracks recorder
owntracks recorder
Map | Dawarich
Map | Dawarich
Map | Dawarich
Audiobookshelf
Audiobookshelf
Audiobookshelf
TubeArchivist
TubeArchivist
TubeArchivist
Beszel
Beszel
Beszel
booklore
booklore
booklore
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Location Logger API - Swagger UI
Open WebUI
Open WebUI
Open WebUI
Paperless-ngx
Paperless-ngx
Paperless-ngx
Hostinger
Hostinger
Hostinger
Trilium Notes
Trilium Notes
Trilium Notes
Location Logger
Location Logger
Location Logger
Outfit Manager
Outfit Manager
Outfit Manager
Reminders
Reminders
Reminders
g
g
g
PROTON
PROTON
PROTON
Order Room Service
Order Room Service
TubeArchivist
UGREEN NAS
Audiobookshelf
PortNote
MAZANOKE | Online Image Optimizer That Runs Privately in Your Browser
Next Beats | Your Ultimate Music Experience
Obsidian
Omni Tools
Order Room Service • HBO Max
close tab...
|
NULL
|
|
442
|
10
|
9
|
2026-04-09T17:56:29.828170+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775757389828_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Screenpipe database query setup
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
Reminders connector not syncing to iOS
Reminders connector not syncing to iOS
Setting up Gemma model in Open WebUI
Setting up Gemma model in Open WebUI
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
Next task inquiry
Next task inquiry
Last visit to Lovech
Last visit to Lovech
💬 I want to figure out auth on m…
💬 I want to figure out auth on m…
Git push and SSH authentication errors with Gitea
Git push and SSH authentication errors with Gitea
DIA browser RAM configuration
DIA browser RAM configuration
Claude Pro usage limits and promotion changes
Claude Pro usage limits and promotion changes
Running Gemma 4 on NAS
Running Gemma 4 on NAS
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe database query setup
Screenpipe database query setup
More options for Screenpipe database query setup
what do I need to query screenpipe lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll ~/.screenpipe
total 97288
drwxr-xr-x 9 lukas staff 288 9 Apr 20:14 .
drwx------+ 88 lukas staff 2816 9 Apr 20:51 ..
-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json
drwxr-xr-x 4 lukas staff 128 9 Apr 20:40 data
-rw-r--r-- 1 lukas staff 40198144 9 Apr 20:51 db.sqlite
-rw-r--r-- 1 lukas staff 32768 9 Apr 20:31 db.sqlite-shm
-rw-r--r-- 1 lukas staff 8680872 9 Apr 20:54 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 117068 9 Apr 20:53 screenpipe.2026-04-09.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
20:55
Retry
Edit
Copy
You can query Screenpipe via its local REST API or directly against the SQLite database.
REST API (easiest)
REST API (easiest)
Screenpipe runs a local server, by default on port
3030
:
Copy to clipboard
bash
# Search recent OCR/screen content
curl
"http://localhost:3030/search?q=your+query&limit=10"
# With content type filter
curl
"http://localhost:3030/search?q=jiminny&content_type=ocr&limit=20"
# Audio transcriptions only
curl
"http://localhost:3030/search?q=meeting&content_type=audio&limit=10"
# Time-bounded query (ISO 8601)
curl
"http://localhost:3030/search?q=code&start_time=2026-04-09T09:00:00Z&end_time=2026-04-09T18:00:00Z"
# Health check / confirm it's running
curl
"http://localhost:3030/health"
Direct SQLite queries
Direct SQLite queries
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
# See what tables exist
.tables
# Recent OCR captures
SELECT timestamp, text, app_name, window_name
FROM ocr_text
ORDER BY timestamp DESC
LIMIT
20
;
# Search OCR for keyword
SELECT timestamp, app_name, window_name, text
FROM ocr_text
WHERE text LIKE
'%jiminny%'
ORDER BY timestamp DESC
;
# Recent audio transcriptions
SELECT timestamp, transcription, device
FROM audio_transcriptions
ORDER BY timestamp DESC
LIMIT
20
;
Quick schema check
Quick schema check
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
".schema"
This will show you the exact table/column names — worth running first since the schema can vary by version.
The REST API is generally more convenient for ad-hoc queries; SQLite is better for complex joins or bulk exports. Want me to help craft a specific query for something you're looking for?
Copy
Give positive feedback
Give negative feedback
Retry
Reply...
Reply...
Add files, connectors, and more
Sonnet 4.6
Sonnet 4.6
Settings
Press and hold to record
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses.
Share chat...
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"Close sidebar","depth":11,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Back","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward","depth":11,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Chat","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Cowork","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Code","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"New chat","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘O","depth":17,"role_description":"text"},{"role":"AXLink","text":"Search","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Search","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⌘K","depth":17,"role_description":"text"},{"role":"AXLink","text":"Customize","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":18,"role_description":"text"},{"role":"AXLink","text":"Chats","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chats","depth":19,"role_description":"text"},{"role":"AXLink","text":"Projects","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Projects","depth":19,"role_description":"text"},{"role":"AXLink","text":"Artifacts","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Artifacts","depth":18,"role_description":"text"},{"role":"AXHeading","text":"Starred","depth":18,"role_description":"heading"},{"role":"AXStaticText","text":"Starred","depth":19,"role_description":"text"},{"role":"AXLink","text":"Bulgarian citizenship application process for EU residents","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bulgarian citizenship application process for EU residents","depth":22,"role_description":"text"},{"role":"AXLink","text":"Dawarich location tracking project","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dawarich location tracking project","depth":22,"role_description":"text"},{"role":"AXButton","text":"Recents Hide","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Recents","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"Hide","depth":19,"role_description":"text"},{"role":"AXLink","text":"Screenpipe database query setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe database query setup","depth":22,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe database query setup","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Running screenpipe for free","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running screenpipe for free","depth":22,"role_description":"text"},{"role":"AXLink","text":"Mac Studio network switch setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Mac Studio network switch setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Claude extension in Vivaldi browser","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude extension in Vivaldi browser","depth":22,"role_description":"text"},{"role":"AXLink","text":"General information request","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"General information request","depth":22,"role_description":"text"},{"role":"AXLink","text":"Red dots on neck causes","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Red dots on neck causes","depth":22,"role_description":"text"},{"role":"AXLink","text":"Change approval","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Change approval","depth":22,"role_description":"text"},{"role":"AXLink","text":"Querying Screenpipe with Claude AI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Querying Screenpipe with Claude AI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up daily backups in Ugreen NAS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up daily backups in Ugreen NAS","depth":22,"role_description":"text"},{"role":"AXLink","text":"Upcoming reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Upcoming reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"Accessing tools in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Accessing tools in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Laravel issue troubleshooting","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel issue troubleshooting","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminder to take rodný list","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminder to take rodný list","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up reminders in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up reminders in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"NAS reverse proxy access issues after UGOS update","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"NAS reverse proxy access issues after UGOS update","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminders summary and management","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminders summary and management","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted screen recording and activity tracking","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted screen recording and activity tracking","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminders connector not syncing to iOS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminders connector not syncing to iOS","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up Gemma model in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up Gemma model in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"List my reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"List my reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"List my reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"List my reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"List my reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"List my reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"List my reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"List my reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"List my reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"List my reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"Next task inquiry","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Next task inquiry","depth":22,"role_description":"text"},{"role":"AXLink","text":"Last visit to Lovech","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last visit to Lovech","depth":22,"role_description":"text"},{"role":"AXLink","text":"💬 I want to figure out auth on m…","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"💬 I want to figure out auth on m…","depth":22,"role_description":"text"},{"role":"AXLink","text":"Git push and SSH authentication errors with Gitea","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Git push and SSH authentication errors with Gitea","depth":22,"role_description":"text"},{"role":"AXLink","text":"DIA browser RAM configuration","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DIA browser RAM configuration","depth":22,"role_description":"text"},{"role":"AXLink","text":"Claude Pro usage limits and promotion changes","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude Pro usage limits and promotion changes","depth":22,"role_description":"text"},{"role":"AXLink","text":"Running Gemma 4 on NAS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running Gemma 4 on NAS","depth":22,"role_description":"text"},{"role":"AXLink","text":"All chats","depth":19,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All chats","depth":20,"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Kovalik, Settings","depth":16,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"LK","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Pro plan","depth":17,"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe database query setup","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe database query setup","depth":16,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe database query setup","depth":14,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"what do I need to query screenpipe lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll ~/.screenpipe\ntotal 97288\ndrwxr-xr-x 9 lukas staff 288 9 Apr 20:14 .\ndrwx------+ 88 lukas staff 2816 9 Apr 20:51 ..\n-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json\ndrwxr-xr-x 4 lukas staff 128 9 Apr 20:40 data\n-rw-r--r-- 1 lukas staff 40198144 9 Apr 20:51 db.sqlite\n-rw-r--r-- 1 lukas staff 32768 9 Apr 20:31 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 8680872 9 Apr 20:54 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 117068 9 Apr 20:53 screenpipe.2026-04-09.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"20:55","depth":17,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"You can query Screenpipe via its local REST API or directly against the SQLite database.","depth":18,"role_description":"text"},{"role":"AXHeading","text":"REST API (easiest)","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"REST API (easiest)","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"Screenpipe runs a local server, by default on port","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"3030","depth":19,"role_description":"text"},{"role":"AXStaticText","text":":","depth":18,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"# Search recent OCR/screen content","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?q=your+query&limit=10\"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"# With content type filter","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?q=jiminny&content_type=ocr&limit=20\"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"# Audio transcriptions only","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?q=meeting&content_type=audio&limit=10\"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"# Time-bounded query (ISO 8601)","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?q=code&start_time=2026-04-09T09:00:00Z&end_time=2026-04-09T18:00:00Z\"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"# Health check / confirm it's running","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/health\"","depth":21,"role_description":"text"},{"role":"AXHeading","text":"Direct SQLite queries","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"Direct SQLite queries","depth":18,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"# See what tables exist","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":".tables","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"# Recent OCR captures","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"SELECT timestamp, text, app_name, window_name","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"FROM ocr_text","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"ORDER BY timestamp DESC","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"LIMIT","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":20,"role_description":"text"},{"role":"AXStaticText","text":";","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"# Search OCR for keyword","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"SELECT timestamp, app_name, window_name, text","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"FROM ocr_text","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"WHERE text LIKE","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"'%jiminny%'","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"ORDER BY timestamp DESC","depth":20,"role_description":"text"},{"role":"AXStaticText","text":";","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"# Recent audio transcriptions","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"SELECT timestamp, transcription, device","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"FROM audio_transcriptions","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"ORDER BY timestamp DESC","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"LIMIT","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":20,"role_description":"text"},{"role":"AXStaticText","text":";","depth":20,"role_description":"text"},{"role":"AXHeading","text":"Quick schema check","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"Quick schema check","depth":18,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"\".schema\"","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"This will show you the exact table/column names — worth running first since the schema can vary by version.","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"The REST API is generally more convenient for ad-hoc queries; SQLite is better for complex joins or bulk exports. Want me to help craft a specific query for something you're looking for?","depth":18,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Reply...","depth":20,"value":"Reply...","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reply...","depth":23,"role_description":"text"},{"role":"AXPopUpButton","text":"Add files, connectors, and more","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Sonnet 4.6","depth":21,"bounds":{"left":0.20972222,"top":0.0,"width":0.072222225,"height":0.036666665},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sonnet 4.6","depth":23,"bounds":{"left":0.21666667,"top":0.0,"width":0.048611112,"height":0.02},"role_description":"text"},{"role":"AXPopUpButton","text":"Settings","depth":21,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Press and hold to record","depth":20,"bounds":{"left":0.2875,"top":0.0,"width":0.022222223,"height":0.032222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":17,"bounds":{"left":0.0,"top":0.0,"width":0.26805556,"height":0.016666668},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":18,"bounds":{"left":0.0,"top":0.0,"width":0.26805556,"height":0.016666668},"role_description":"text"},{"role":"AXButton","text":"Share chat","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7565397304765403546
|
7470970071761053728
|
app_switch
|
accessibility
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Screenpipe database query setup
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
Reminders connector not syncing to iOS
Reminders connector not syncing to iOS
Setting up Gemma model in Open WebUI
Setting up Gemma model in Open WebUI
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
List my reminders
Next task inquiry
Next task inquiry
Last visit to Lovech
Last visit to Lovech
💬 I want to figure out auth on m…
💬 I want to figure out auth on m…
Git push and SSH authentication errors with Gitea
Git push and SSH authentication errors with Gitea
DIA browser RAM configuration
DIA browser RAM configuration
Claude Pro usage limits and promotion changes
Claude Pro usage limits and promotion changes
Running Gemma 4 on NAS
Running Gemma 4 on NAS
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe database query setup
Screenpipe database query setup
More options for Screenpipe database query setup
what do I need to query screenpipe lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll ~/.screenpipe
total 97288
drwxr-xr-x 9 lukas staff 288 9 Apr 20:14 .
drwx------+ 88 lukas staff 2816 9 Apr 20:51 ..
-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json
drwxr-xr-x 4 lukas staff 128 9 Apr 20:40 data
-rw-r--r-- 1 lukas staff 40198144 9 Apr 20:51 db.sqlite
-rw-r--r-- 1 lukas staff 32768 9 Apr 20:31 db.sqlite-shm
-rw-r--r-- 1 lukas staff 8680872 9 Apr 20:54 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 117068 9 Apr 20:53 screenpipe.2026-04-09.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
20:55
Retry
Edit
Copy
You can query Screenpipe via its local REST API or directly against the SQLite database.
REST API (easiest)
REST API (easiest)
Screenpipe runs a local server, by default on port
3030
:
Copy to clipboard
bash
# Search recent OCR/screen content
curl
"http://localhost:3030/search?q=your+query&limit=10"
# With content type filter
curl
"http://localhost:3030/search?q=jiminny&content_type=ocr&limit=20"
# Audio transcriptions only
curl
"http://localhost:3030/search?q=meeting&content_type=audio&limit=10"
# Time-bounded query (ISO 8601)
curl
"http://localhost:3030/search?q=code&start_time=2026-04-09T09:00:00Z&end_time=2026-04-09T18:00:00Z"
# Health check / confirm it's running
curl
"http://localhost:3030/health"
Direct SQLite queries
Direct SQLite queries
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
# See what tables exist
.tables
# Recent OCR captures
SELECT timestamp, text, app_name, window_name
FROM ocr_text
ORDER BY timestamp DESC
LIMIT
20
;
# Search OCR for keyword
SELECT timestamp, app_name, window_name, text
FROM ocr_text
WHERE text LIKE
'%jiminny%'
ORDER BY timestamp DESC
;
# Recent audio transcriptions
SELECT timestamp, transcription, device
FROM audio_transcriptions
ORDER BY timestamp DESC
LIMIT
20
;
Quick schema check
Quick schema check
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
".schema"
This will show you the exact table/column names — worth running first since the schema can vary by version.
The REST API is generally more convenient for ad-hoc queries; SQLite is better for complex joins or bulk exports. Want me to help craft a specific query for something you're looking for?
Copy
Give positive feedback
Give negative feedback
Retry
Reply...
Reply...
Add files, connectors, and more
Sonnet 4.6
Sonnet 4.6
Settings
Press and hold to record
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses.
Share chat...
|
NULL
|
|
497
|
12
|
33
|
2026-04-09T18:20:04.733251+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-09/1775 /Users/lukas/.screenpipe/data/data/2026-04-09/1775758804733_m1.jpg...
|
Slack
|
* support (Channel) - Jiminny Inc - Slack
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
Channels
Channels
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Lukas Kovalik
you
Apps
Apps
Jira Cloud
Toast
Messages
Messages
Files
Files
Bookmarks
Bookmarks
Pins
Pins
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Gabriela Dureva
Apr 1st at 8:59:36 AM
8:59 AM
Morning team, is Jiminny down?
Screenshot 2026-04-01 at 8.59.29.png
Toggle file
Screenshot 2026-04-01 at 8.59.29.png
1 reaction, react with eyes emoji
1
Add reaction…
3 replies
Last reply 8 days ago
View thread
Petko Kashinski
Apr 1st at 8:59:52 AM
8:59 AM
Yes
Apr 1st at 8:59:54 AM
8:59
Same for me
1 reaction, react with cry emoji
1
Add reaction…
Jump to date
Iliyana Netseva
Apr 6th at 10:31:55 AM
10:31 AM
was added to #support by
Mira
.
Jump to date
Adelina Petrova
Today at 6:22:24 PM
6:22 PM
Hey
@support_team
@support_team
, after deploying the new paragraph breaker, we had an issue with older activity transcripts because they were stored differently compared to the previous sentence breaker. We’re working on it and will provide a fix soon.
[URL_WITH_CREDENTIALS] butler
@becky butler
,
@Chloe Cross
@Chloe Cross
, and 3 others in this channel can't view this
Jira Service Management
item in
jiminny
jiminny
. Invite them?
Invite all 5 people
Invite all 5 people
Choose people
Choose people
Dismiss
Loading messages for engineering…
Channel support...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Jiminny Inc","depth":12,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Jiminny (Staging)","depth":12,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Add workspaces","depth":12,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Home","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Home","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"DMs","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DMs","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Activity","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Activity","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"Later","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Later","depth":16,"role_description":"text"},{"role":"AXRadioButton","text":"More…","depth":14,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Unreads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Threads","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Huddles","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Drafts & sent","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"Directories","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"platform-inner-team","depth":23,"role_description":"text"},{"role":"AXButton","text":"Channels","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Channels","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"ai-chapter","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"alerts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"confusion-clinic","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"curiosity_lab","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"engineering","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"general","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"infra-changes","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-bg","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"platform-tickets","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"product_launches","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"random","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"releases","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"sofia-office","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"support","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"thank-yous","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"the_people_of_jiminny","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Adelina Petrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Ilian Kyuchukov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Adelina Petrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Steliyan Georgiev","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Galya Dimitrova","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"you","depth":23,"role_description":"text"},{"role":"AXButton","text":"Apps","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Jira Cloud","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Toast","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"Messages","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"Messages","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Files","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Files","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Bookmarks","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bookmarks","depth":19,"role_description":"text"},{"role":"AXRadioButton","text":"Pins","depth":17,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Pins","depth":19,"role_description":"text"},{"role":"AXPopUpButton","text":"Add and Edit Channel Tabs","depth":17,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Canvas","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"List","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":17,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Gabriela Dureva","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 8:59:36 AM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8:59 AM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Morning team, is Jiminny down?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Screenshot 2026-04-01 at 8.59.29.png","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Toggle file","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Screenshot 2026-04-01 at 8.59.29.png","depth":26,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"1 reaction, react with eyes emoji","depth":24,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":25,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"3 replies","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last reply 8 days ago","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"View thread","depth":24,"role_description":"text"},{"role":"AXButton","text":"Petko Kashinski","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 8:59:52 AM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8:59 AM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Yes","depth":24,"role_description":"text"},{"role":"AXLink","text":"Apr 1st at 8:59:54 AM","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"8:59","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Same for me","depth":24,"role_description":"text"},{"role":"AXCheckBox","text":"1 reaction, react with cry emoji","depth":24,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":25,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Iliyana Netseva","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Apr 6th at 10:31:55 AM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:31 AM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"was added to #support by","depth":23,"role_description":"text"},{"role":"AXButton","text":"Mira","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":".","depth":23,"role_description":"text"},{"role":"AXPopUpButton","text":"Jump to date","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Adelina Petrova","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Today at 6:22:24 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:22 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Hey","depth":24,"role_description":"text"},{"role":"AXLink","text":"@support_team","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@support_team","depth":25,"role_description":"text"},{"role":"AXStaticText","text":", after deploying the new paragraph breaker, we had an issue with older activity transcripts because they were stored differently compared to the previous sentence breaker. We’re working on it and will provide a fix soon.","depth":24,"role_description":"text"},{"role":"AXLink","text":"https://jiminny.atlassian.net/browse/SRD-6782","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"https://jiminny.atlassian.net/browse/SRD-6782","depth":25,"role_description":"text"},{"role":"AXLink","text":"SRD-6782 Transcription issue","depth":26,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"SRD-6782 Transcription issue","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Status:","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"In Progress","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Type:","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Bug","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Assignee:","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Mihail Mihaylov","depth":25,"role_description":"text"},{"role":"AXButton","text":"Assign","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Assign","depth":27,"role_description":"text"},{"role":"AXButton","text":"Change status","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Change status","depth":27,"role_description":"text"},{"role":"AXButton","text":"sparkles emoji AI Summarise","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"AI Summarise","depth":27,"role_description":"text"},{"role":"AXComboBox","text":"More actions...","depth":26,"role_description":"combo box","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Added by","depth":25,"role_description":"text"},{"role":"AXLink","text":"Jira Cloud","depth":25,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Jira Cloud","depth":26,"role_description":"text"},{"role":"AXCheckBox","text":"2 reactions, react with pray emoji","depth":24,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":25,"role_description":"text"},{"role":"AXCheckBox","text":"1 reaction, react with dart emoji","depth":24,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":25,"role_description":"text"},{"role":"AXButton","text":"Add reaction…","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"5 replies","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Last reply today at 7:34 PM","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"View thread","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Only visible to you","depth":23,"role_description":"text"},{"role":"AXButton","text":"Jira Cloud","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"APP","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Today at 6:22:29 PM","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6:22 PM","depth":24,"role_description":"text"},{"role":"AXLink","text":"@becky butler","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@becky butler","depth":25,"role_description":"text"},{"role":"AXStaticText","text":",","depth":24,"role_description":"text"},{"role":"AXLink","text":"@Chloe Cross","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"@Chloe Cross","depth":25,"role_description":"text"},{"role":"AXStaticText","text":", and 3 others in this channel can't view this","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Jira Service Management","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"item in","depth":24,"role_description":"text"},{"role":"AXLink","text":"jiminny","depth":24,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"jiminny","depth":25,"role_description":"text"},{"role":"AXStaticText","text":". Invite them?","depth":24,"role_description":"text"},{"role":"AXButton","text":"Invite all 5 people","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Invite all 5 people","depth":26,"role_description":"text"},{"role":"AXButton","text":"Choose people","depth":24,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Choose people","depth":26,"role_description":"text"},{"role":"AXComboBox","text":"Dismiss","depth":25,"role_description":"combo box","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"","depth":23,"value":"","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Loading messages for engineering…","depth":11,"role_description":"text"},{"role":"AXStaticText","text":"Channel support","depth":11,"role_description":"text"}]...
|
-2225394727302583675
|
6244296541798342285
|
app_switch
|
hybrid
|
NULL
|
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Jiminny Inc
Jiminny (Staging)
Add workspaces
Home
Home
DMs
DMs
Activity
Activity
Files
Files
Later
Later
More…
More
Unreads
Threads
Huddles
Drafts & sent
Directories
platform-inner-team
Channels
Channels
ai-chapter
alerts
backend
confusion-clinic
curiosity_lab
engineering
frontend
general
infra-changes
jiminny-bg
platform-tickets
product_launches
random
releases
sofia-office
support
thank-yous
the_people_of_jiminny
Steliyan Georgiev
Adelina Petrova
,
Ilian Kyuchukov
,
Steliyan Georgiev
Adelina Petrova
Galya Dimitrova
Vasil Vasilev
Nikolay Nikolov
Galya Dimitrova
,
Nikolay Nikolov
Aneliya Angelova
,
Nikolay Yankov
,
Steliyan Georgiev
Galya Dimitrova
,
Nikolay Yankov
Nikolay Yankov
Lukas Kovalik
you
Apps
Apps
Jira Cloud
Toast
Messages
Messages
Files
Files
Bookmarks
Bookmarks
Pins
Pins
Add and Edit Channel Tabs
Canvas
List
Folder
Jump to date
Gabriela Dureva
Apr 1st at 8:59:36 AM
8:59 AM
Morning team, is Jiminny down?
Screenshot 2026-04-01 at 8.59.29.png
Toggle file
Screenshot 2026-04-01 at 8.59.29.png
1 reaction, react with eyes emoji
1
Add reaction…
3 replies
Last reply 8 days ago
View thread
Petko Kashinski
Apr 1st at 8:59:52 AM
8:59 AM
Yes
Apr 1st at 8:59:54 AM
8:59
Same for me
1 reaction, react with cry emoji
1
Add reaction…
Jump to date
Iliyana Netseva
Apr 6th at 10:31:55 AM
10:31 AM
was added to #support by
Mira
.
Jump to date
Adelina Petrova
Today at 6:22:24 PM
6:22 PM
Hey
@support_team
@support_team
, after deploying the new paragraph breaker, we had an issue with older activity transcripts because they were stored differently compared to the previous sentence breaker. We’re working on it and will provide a fix soon.
[URL_WITH_CREDENTIALS] butler
@becky butler
,
@Chloe Cross
@Chloe Cross
, and 3 others in this channel can't view this
Jira Service Management
item in
jiminny
jiminny
. Invite them?
Invite all 5 people
Invite all 5 people
Choose people
Choose people
Dismiss
Loading messages for engineering…
Channel support
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp>° lbl100% <47*• Research Western Digital Red Plus pricing• Research Western Digital Red...Thu 9 Apr 21:20:04L81*6+DOCKERDEV (-zsh)APP (-zsh)X4-75h• ₴5-zsh|Recalled 1 memory (ctrl+o to expand)• I don't have any memory of previous conversations about Western Digital Red Plus pricing, and I don't have accessto real-time pricing data or shopping history.Could you give me more context? For example:- Are you referring to a specific capacity (e.g., 2ТB, 4ТВ, 6ТВ)?- Are you asking aboutcurrent prices, historical prices, or prices you've seen somewhere specific?- Is this related to a NAS build or storage project I may have helped with before?6tb and I am reffering to screenpipe• screenpipe - Search Content (MCP)(q: "Western Digital Red Plus 6TB", limit: 10, max_content_length: 500)• These results are mostly terminal noise. Let me search more specifically for pricing content in a browser.• screenpipe - Search Content (MCP)(q: "WD Red Plus 6TB price", limit: 10, max_content_length: 500, content_type: "accessibility")• Let me search specifically in browser windows where pricing would appear.• screenpipe - Search Content (MCP)(q: "WD Red Plus 6TB", limit: 10, max_content_length: 800, app_name: "Google Chrome")• screenpipe - Search Content (MCP)(q: "Red Plus 6TB", limit: 10, max_ content_length: 800, app_name:"Safari")• screenpipe - Search Content (MCP)(q: "Red Plus6TB price", limit: 15, max_content_length: 800)• All results so far are terminal noise. Let metry the keyword search tool instead.• screenpipe - Keyword Search (MCP)(q: "WD Red Plus 6TB", limit: 20)• screenpipe - Keyword Search (MCP)Cq: "Red Plus6TB", limit: 20)• screenpipe - Keyword Search (MCP)(q: "Western Digital Red", limit: 20)• screenpipe - Keyword Search (MCP)(q: "WD6004FFBX", limit: 20)• Let me try the activitysummaryapproach instead.* Infusing..(525. + 272tokensthinking)L Tip: Use /btw to ask aquick sidequestionW1nterrupting Claude's current workSlack$1esc to interrupt...
|
NULL
|
|
525
|
13
|
1
|
2026-04-11T11:52:55.363839+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775908375363_m1.jpg...
|
Firefox
|
Loď Orion úspešne pristála na Zemi. Desať vecí, kt Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N — Personal...
|
True
|
dennikn.sk/5263377/lod-orion-uspesne-pristala-na-z dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
UGREEN NAS
Inbox (1) - [EMAIL] - Gmail
How to Get UGREEN NAS
Inbox (1) - [EMAIL] - Gmail
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
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)
Denník N - Nezávislý denník
Denník N - Nezávislý denník
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
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
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
11. APRÍLA 2026 2:28
TECHNOLÓGIE
TECHNOLÓGIE
VESMÍR
VESMÍR
Denník N Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II
Otakar Horák Otakar Horák
Otakar Horák
Odoberať
ODOBERAŤ
Zobraziť diskusiu (počet príspevkov: 25)
25
KOMENTÁRE
Odstrániť zo zoznamu na neskôr
ČÍTAŤ NESKÔR
Zdieľať
ZDIEĽAŤ
Odomknúť
ODOMKNÚŤ
Loď Orion úspešne dopadla do vôd Tichého oceánu. Reprofoto – NASA
Loď Orion úspešne dopadla do vôd Tichého oceánu. Reprofoto – NASA
Posun vzad o 15 sekúnd
15
Prehrať
Posun vpred o 30 sekúnd
30
00:00
20:36
undefined
Prečítajte si viac o
počúvaní Denníka N
počúvaní Denníka N
.
Misia Artemis II – oblet Mesiaca – sa skončila úspešne. Kozmická loď Orion – so štvorčlennou posádkou na palube – dopadla do vôd Tichého oceánu pri pobreží San Diega v sobotu 11. apríla o 2.07 nášho času.
„Toto bol učebnicový vstup [do atmosféry] a učebnicový dopad,“ povedal Rob Navias, komentátor prenosu NASA.
Misia štartovala 2. apríla o 0.35 nášho času a trvala viac ako 9 dní.
Posádka je po pristátí v poriadku. Zhruba hodinu po pristátí ju z oceána vyzdvihol záchranný tím a astronautov previezol na výsadkovú loď USS John P. Murtha. Po lekárskom vyšetrení ich čaká cesta do Johnsonovho vesmírneho strediska v Houstone.
reklama
Pristátie – rovnako ako štart –
sa radí
sa radí
medzi najnáročnejšie fázy letu.
Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha
PREČÍTAJTE SI TIEŽ
Zvedavosť Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha
Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha
Približne 20 minút pred vstupom do atmosféry sa loď Orion
oddelila
oddelila
od servisného modulu a trysky ju správne natočili. Tesne pred vstupom do atmosféry dosiahol Orion svoju maximálnu rýchlosť, okolo 39 688 kilometrov za hodinu.
Tepelný štít chránil posádku pred teplotou okolo 2700 °C, čo je zhruba polovica teploty na povrchu Slnka. O 1:53 nášho času sa začal šesťminútový výpadok komunikácie, keď sa počas vrcholného zahrievania vytvorila okolo kapsuly plazma.
V časti odbornej verejnosti
panovali
panovali
obavy, že tepelný štít môže zlyhať. Pochyby pochádzali z testu misie Artemis I, keď sa štít poškodil viac, ako sa očakávalo. Podľa NASA ani také poškodenie nepredstavovalo hrozbu, inžinieri navyše
upravili
upravili
plán návratu vesmírnej misie Artemis II tak, aby sa najhorúcejšia časť návratu skrátila na minimum.
[ Radi čítate o ľudskej mysli, prírode, zdraví či vesmíre?
Aktivujte si týždenný newsletter Otakara Horáka
s výberom najlepších článkov. ]
Počas pristávania zažila posádka preťaženie až 3,9 G. Pri pristávaní sa postupne rozvinulo 11 padákov, ktoré loď spomalili na rýchlosť menej než 30 kilometrov za hodinu. Orion potom bezpečne dopadol do vôd Tichého oceánu. „Gratulujem. Artemis II, misia splnená,“
napísal
napísal
riaditeľ NASA Jared Isaacman.
Záverečná fáza pristátia
Play video
Hide player controls
Posádka misie Artemis II úspešne pristála na Zemi
Posádka misie Artemis II úspešne pristála na Zemi
Denník N
Denník N
Denník N
107K subscribers
Subscribe
Subscribe
Share
Watch later
Watch on YouTube
Watch on
V tomto článku priblížime 10 vecí, ktoré si pamätať v súvislosti s misiou Artemis II.
1. Rekordná vzdialenosť od Zeme
1. Rekordná vzdialen
osť od Zeme
Posádka misie Artemis II obletela Mesiac a dostala sa do rekordnej vzdialenosti od Zeme.
Doterajšie maximum misie Apollo 13 z roku 1970 prekročila 6. apríla 2026 o 19.57 nášho času.
7. apríla o 1.00 nášho času došlo k najväčšiemu priblíženiu posádky k Mesiacu. Kozmická loď Orion preletela zhruba 6500 kilometrov nad jeho povrchom. V tejto vzdialenosti
vyzeral
vyzeral
Mesiac asi taký veľký ako basketbalová lopta, ak by ju človek držal v natiahnutej ruke.
O dve minúty neskôr – 7. apríla o 1.02 – dosiahla misia Artemis II svoju maximálnu vzdialenosť od Zeme 406 771 kilometrov. Predošlý rekord tým prekonala o zhruba 6500 kilometrov.
Čo videli astronauti misie Artemis II, keď leteli okolo odvrátenej strany Mesiaca. Zdroj – NASA/X
Visit this post on X
NASA Verified account
NASA
@NASA
@NASA
Follow
Follow
View on X
It's not just a phase
Artemis II astronauts captured these views of the Moon as the Orion spacecraft flew around the far side of the Moon on April 6, 2026.
Play Video. 1 minute 40 seconds long
Watch on X
Watch on X
4:31 AM · Apr 8, 2026
4:31 AM · Apr 8, 2026
X Ads info and privacy
Like. This post has 89.5K likes
89.5K
Reply to this post on X
Reply
Copy link
Copy link
Read 1.2K replies
Read 1.2K replies
2. Odvrátená strana Mesiaca
2. Odvrátená strana Mesiaca
Počas obletu pozorovala posádka Artemis II odvrátenú stranu Mesiaca a videla
časti lunárneho povrchu, ktoré ľudia na vlastné oči ešte nevideli.
Na odvrátenú stranu sa dostali aj misie programu Apollo v rokoch 1968 až 1972, ale leteli oveľa bližšie k Mesiacu, čo obmedzovalo rozsah ich pozorovaní.
Astronauti programu Apollo pozorovali pred polstoročím odvrátenú stranu Mesiaca v tme, keďže trajektória ich misie bola navrhnutá tak, aby na privrátenej strane pristáli počas mesačného dňa.
Počas obletu Mesiaca misiou Artemis II sa približne 21 % disku odvrátenej strany – vrátane Panvy Orientale – nachádzalo v osvetlenej časti. Zvyšok osvetlenej časti Mesiaca tvorila privrátená strana,
píše
píše
časopis Nature. Oblet odvrátenej strany
trval
trval
celkovo zhruba 7 hodín.
Spomínaná Panva Orientale „predstavuje poslednú skutočne veľkú impaktnú udalosť
(udalosť, pri ktorej dochádza k zrážke dvoch vesmírnych telies – pozn. red.)
, ktorá sa na Mesiaci odohrala“,
napísal
napísal
na Facebooku Pavel Gabzdyl z Masarykovej univerzity v Brne, autor knihy
Průvodce po Měsíci
. Podľa neho ide o jednu „z
najlepšie zachovaných skutočne veľkých impaktných stôp v celej slnečnej sústave“.
Visit this post on X
Pavel Gabzdyl
Pavel Gabzdyl
@GabzdylPavel
@GabzdylPavel
Follow
Follow
View on X
Replying to @GabzdylPavel
Replying to
@GabzdylPavel
6/7 Centrum tvoří Mare Orientale obklopené valy připomínajícími ztuhlé kruhy na vodě (Rookovo pohoří a Kordillery). Jsou tu i obří radiální údolí, jako 300 km dlouhé Vallis Bouvard!
Chcete vidět fotku Mare Orientale na mozaice snímků ze sond? Mrkněte na banner mého profilu :-)
Image
5:22 PM · Apr 6, 2026
5:22 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 165 likes
165
Reply to this post on X
Reply
Copy link
Copy link
Read 1 reply
Read 1 reply
Počas obletu Mesiaca pracovala posádka vo dvojiciach; astronauti sledovali farebné odtiene na povrchu Mesiaca. Zmeny farieb môžu naznačovať jeho minerálne zloženie. Zachytiť rôzne odtiene na satelitných snímkach je ťažké. „Toto je niečo, v čom ľudské oko jednoducho vyniká, pretože dokáže odhaliť tie najjemnejšie detaily,“
povedala
povedala
vedkyňa Kelsey Young z NASA. Celkovo bola loď Orion
vybavená
vybavená
desiatkami kamier a fotoaparátov.
Pozorovania misie Artemis II by mohli pomôcť lepšie pochopiť rozdiely medzi privrátenou a odvrátenou stranou Mesiaca – kým na odvrátenej strane je množstvo impaktných kráterov ako dôkazov o dopadoch vesmírnych telies, povrch privrátenej strany je oveľa hladší.
Mesiac sa od Zeme každý rok
vzďaľuje
vzďaľuje
o necelé 4 centimetre. Pred zhruba 4,5 miliardami rokov, keď Mesiac vznikol, bol k Zemi oveľa bližšie ako dnes. Zem na neho vyžarovala veľké množstvo tepla, keďže sama bola roztavená. To znamená, že privrátená strana Mesiaca chladla oveľa pomalšie ako tá odvrátená. Vďaka tomu mohla odvrátená strana narásť do hrúbky, zato privrátená bola tenšia.
„Keď pod povrchom máte magmu, ktorá sa snaží dostať na povrch, bude pre ňu oveľa ľahšie dostať sa na povrch tam, kde je kôra tenšia, než tam, kde je hrubšia,“
povedal
povedal
v Českej televízii geológ a planetárny vulkanológ Petr Brož z Geofyzikálneho ústavu Akadémie vied ČR. Výsledkom je, že privrátená strana Mesiaca je hladšia, keďže ju zaliala magma. Podľa vedca však ide len o jednu z možných hypotéz. Poznatky misie Artemis II by ju mohli pomôcť potvrdiť či vyvrátiť.
Poznatky z nových pozorovaní by sa dali využiť pri nepilotovanom (robotickom)
pristátí na Mesiaci. Posádka zazrela aj mesačný južný pól, miesto, kde by ľudia podľa súčasných plánov NASA mali pristáť v roku 2028.
Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie
PREČÍTAJTE SI TIEŽ
Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie
Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie
3. Zatmenie Slnka, fotky Zeme a Mesiaca
3. Zatmenie Slnka, fotky Zeme a Mesiaca
Tesne po oblete Mesiaca zverejnila NASA fotografie z tejto fázy misie,
dostupné sú
dostupné sú
na stránke vesmírnej agentúry.
Astronauti vyfotili aj zatmenie Slnka, keď sa predeň – z ich perspektívy – dostal Mesiac. Počas zatmenia boli viditeľné časti slnečnej koróny, vonkajšej atmosféry Slnka.
Na Zemi trvá zatmenie Slnka len niekoľko minút, v tomto prípade to bola skoro hodina. „Bez ohľadu na to, ako dlho sa na to pozeráme, naše mozgy nedokážu spracovať obraz pred nami,“
povedal
povedal
veliteľ posádky Reid Wiseman. „Je to absolútne úchvatné, priam neskutočné. Na toto skrátka neexistujú prídavné mená,“ dodal.
Zobraziť väčšie rozlíšenie
Mesiac na snímke úplne zakrýva Slnko. Foto – NASA
Počas misie spravil Reid Wiseman fotku Mesiaca so Zemou, ktorá dostala názov „Earthset“, čiže Západ Zeme.
Pripomína známu fotografiu „Earthrise“, čiže Východ Zeme, ktorú v roku 1968 urobil William Anders, astronaut misie Apollo 8.
Porovnanie snímok: hore „Earthrise“ z roku 1968, dole „Eartset“ z roku 2026. Zdroj – The Aviation Circle/Instagram
theaviationcircle
theaviationcircle Verified
theaviationcircle
Verified
184K followers
View profile
View profile
Instagram post shared by @theaviationcircle
theaviationcircle theaviationcircle Verified 3,134 posts · 184K followers
theaviationcircle
Verified
3,134 posts · 184K followers
View more on Instagram
View more on Instagram
Like
Like
Comment
Comment
Share
Share
Save
Save
21,628 likes
21,628 likes
Add a comment...
Add a comment...
Instagram
Instagram
Táto fotografia naštartovala globálne environmentálne hnutie a v roku 1970 prispela k vzniku Dňa Zeme, podujatia, ktoré upozorňuje na význam ochrany životného prostredia.
Tak ako „Earthrise“ z roku 1968, aj fotografie misie Artemis II
obracajú
obracajú
našu pozornosť na Zem a v kontraste s nehostinným vesmírom nám ukazujú, aký je život na Zemi krehký a zraniteľný.
Ďalšia ikonická snímka misie Artemis II (podobá sa na záber z roku 1972 nazvaný
The Blue Marble
The Blue Marble
, Modrá sklenená guľôčka). Zdroj – Pavel Gabzdyl
Visit this post on X
Pavel Gabzdyl
Pavel Gabzdyl
@GabzdylPavel
@GabzdylPavel
Follow
Follow
View on X
No páni! Tento snímek srpku našeho kosmického domova (osvětleného měsíčním úplňkem) včera pořídila posádka Artemis II.
- sever dole
- nápadný kontinent je Afrika
- jasná „hvězda“ je Venuše
- dole je patrné zodiakální světlo
- u obou pólů je polární záře
Foto: NASA/R. Wiseman
Image
6:25 PM · Apr 3, 2026
6:25 PM · Apr 3, 2026
X Ads info and privacy
Like. This post has 883 likes
883
Reply to this post on X
Reply
Copy link
Copy link
Read 24 replies
Read 24 replies
4. Dojemná chvíľa
4. Dojemná chvíľa
Najdojemnejšia chvíľa celej misie nastala 6. apríla po tom, ako loď Orion prekonala rekord misie Apollo 13 z roku 1970, čo sa týka vzdialenosti od Zeme.
Významný míľnik si astronauti uctili tým, že navrhli mená pre dosiaľ bezmenné krátery na Mesiaci. Jeden z nich pomenovali Integrity, čo je názov lode Orion, v ktorej posádka letela.
Pre ďalší útvar, ktorý sa nachádza pri hranici medzi privrátenou a odvrátenou stranou Mesiaca, navrhli meno Carroll. „Pred mnohými rokmi sme sa v našej zomknutej astronautickej rodine vydali na túto cestu a stratili sme milovaného človeka… volala sa Carroll,“ povedal chvejúcim sa hlasom letový špecialista Jeremy Hansen.
Carroll bola manželka veliteľa misie Reida Wisemana a v roku 2020, keď mala 46 rokov, podľahla rakovine. Po dojemnom momente, keď si členovia posádky utierali slzy, sa celá posádka objala.
Posádka navrhuje mená Integrity a Carroll pre mesačné krátery. Zdroj – NASA/X
Visit this post on X
NASA Verified account
NASA
@NASA
@NASA
Follow
Follow
View on X
Replying to @NASA
Replying to
@NASA
To commemorate the Artemis II mission, the astronauts announced their suggestion to rename certain features on the Moon to honor the Orion spacecraft, named Integrity, as well as commander Reid Wiseman's late wife, Carroll.
Play Video. 2 minutes 46 seconds long
Watch on X
Watch on X
9:27 PM · Apr 6, 2026
9:27 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 16.3K likes
16.3K
Reply to this post on X
Reply
Copy link
Copy link
Read 272 replies
Read 272 replies
5. Pekné a vtipné momenty
5. Pekné a vtipné momenty
Pasažierka komerčného letu Jane Clukey, ktorá letela z Amerických Panenských ostrovov do Charlotte v Severnej Karolíne, natočila cez okno lietadla štart misie Artemis II.
Štart misie Artemis II z lietadla. Zdroj – Guardian News/YouTube
Play video
Hide player controls
Footage captured by plane passenger shows Artemis launch from air
Footage captured by plane passenger shows Artemis launch from air
Guardian News
Guardian News
Guardian News
4.01M subscribers
Subscribe
Subscribe
Share
Watch later
Watch on YouTube
Watch on
Misia odštartovala 2. apríla o 0.35 nášho času z Kennedyho vesmírneho strediska na myse Canaveral na Floride. Použila sa rampa 39B.
Sloganom misie sa stala hláška „Moon Joy“, čiže mesačná radosť alebo nadšenie. Výraz vznikol z výmeny medzi veliteľom misie Reidom Wisemanom a riadiacim strediskom v Houstone. Keď astronaut nadšene vymenúval útvary na Mesiaci, ktoré videl zblízka po prvý raz, riadiace stredisko odpovedalo: „Rozumiem, mesačná radosť“.
Vedci z misie Artemis II podľa časopisu
Nature
hovorili
hovorili
, že si dajú vyrobiť tričká s týmto nápisom.
Virálnym hitom sa stalo video, na ktorom sa počas priameho prenosu z misie vznáša pohár s Nutellou. Nutella bola jednou zo 189 položiek na jedálnom lístku posádky. Menu astronautov sa zostavilo podľa ich osobných preferencií a nárokov na nutričné a technické požiadavky lode.
Spoločnosť túto reklamu okamžite
využila
využila
, napríklad sloganom „šírime úsmevy až do vesmíru“.
Nutella sa vznáša v Orione počas misie Artemis II. Zdroj – Associated Press/YouTube
Play video
Hide player controls
Nutella jar seen spinning through spacecraft during Artemis II mission
Nutella jar seen spinning through spacecraft during Artemis II mission
Associated Press
Associated Press
Associated Press
4.41M subscribers
Subscribe
Subscribe
Share
Watch later
Watch on YouTube
Watch on
Na lodi
bolo
bolo
niekoľko symbolických predmetov, napríklad americká vlajka, ktorá mala letieť Apollo 18, no táto misia sa zrušila, alebo kúsok mušelínovej látky z lietadla Wright Flyer. Bratia Wrightovci v ňom v roku 1903 uskutočnili prvý motorový let v dejinách. „Historické predmety na palube Artemis II odrážajú dlhú cestu amerického výskumu a generácií inovátorov, ktorí umožnili, aby sa tento okamih [let k Mesiacu] stal realitou,“
uviedol
uviedol
vo vyhlásení riaditeľ NASA Jared Isaacman.
6. Platformy a sociálne siete
6. Platformy a sociálne siete
Priame prenosy z misie Artemis II sa vysielali na viacerých platformách vrátane YouTubu, Amazon Prime, Apple TV, Netflixu, HBO Max alebo Discovery+. Astronauti počas celej misie komunikovali s médiami a odpovedali na otázky ľudí.
Najdôležitejšie momenty z misie NASA okamžite vešala na sociálne siete X, Facebook a Instagram.
Ešte nikdy nebol vesmírny výskum tak blízko takému počtu obyvateľov na Zemi. „Áno, je to neuveriteľné, ale takto sa, dámy a páni, pozoruje Mesiac v 21. storočí,“ napísal na sociálnej sieti X Pavel Gabzdyl z Masarykovej univerzity v Brne. K textu priložil fotku, ako z pohodlia domova sleduje priebeh misie.
Visit this post on X
Pavel Gabzdyl
Pavel Gabzdyl
@GabzdylPavel
@GabzdylPavel
Follow
Follow
View on X
Ano, je to neuvěřitelné, ale takto se dámy a pánové pozoruje Měsíc ve 21. století :-)
Image
10:27 PM · Apr 6, 2026
10:27 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 360 likes
360
Reply to this post on X
Reply
Copy link
Copy link
Read 10 replies
Read 10 replies
Na sociálnych sieťach boli počas misie aktívni aj astronauti. Tesne pred obletom Mesiaca astronaut Reid Wiseman napísal, že je vďačný za to, že mohol byť súčasťou misie. K tomu priložil príspevok starý 10 rokov: „Snívalo sa mi, že som bo
l v noci na obežnej dráhe Mesiaca. Celé ráno mám z toho zvláštnu ťažobu – ako zo sna, ktorý bol živý, pritom nebol skutočný.“ Po 10 rokoch sa tento sen stal skutočnosťou.
Visit this post on X
Reid Wiseman Verified account
Reid Wiseman
@astro_reid
@astro_reid
Follow
Follow
View on X
All I feel is gratitude for this experience.
Visit this post on X
Reid Wiseman
@astro_reid
Dreamt I was in lunar orbit last night. Been in that post-vivid-dream-that-wasn't-real funk all morning.
6:01 PM · Apr 6, 2026
6:01 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 131.3K likes
131.3K
Reply to this post on X
Reply
Copy link
Copy link
Read 739 replies
Read 739 replies...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"UGREEN NAS","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1) - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"How to Get Through the Product Management Bottleneck","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to Get Through the Product Management Bottleneck","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Denník N - Nezávislý denník","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N - Nezávislý denník","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Preskočiť hlavnú navigáciu","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Preskočiť hlavnú navigáciu","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Preskočiť na text","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Preskočiť na text","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Denník N","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Vyhľadávaný výraz","depth":9,"help_text":"","placeholder":"Zadajte vyhľadávaný výraz …","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hľadaj","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hľadaj","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vypnúť reklamu","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vypnúť reklamu","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SK","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SK","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HU","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HU","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CZ","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CZ","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"EU","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"EU","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Otvoriť hlavné menu","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MENU","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11. APRÍLA 2026 2:28","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"TECHNOLÓGIE","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"TECHNOLÓGIE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"VESMÍR","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VESMÍR","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Denník N Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Otakar Horák Otakar Horák","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Otakar Horák","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Odoberať","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ODOBERAŤ","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 25)","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Odstrániť zo zoznamu na neskôr","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ČÍTAŤ NESKÔR","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zdieľať","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ZDIEĽAŤ","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Odomknúť","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ODOMKNÚŤ","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Loď Orion úspešne dopadla do vôd Tichého oceánu. Reprofoto – NASA","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne dopadla do vôd Tichého oceánu. Reprofoto – NASA","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Posun vzad o 15 sekúnd","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Prehrať","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Posun vpred o 30 sekúnd","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"30","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"00:00","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20:36","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXPopUpButton","text":"undefined","depth":10,"help_text":"","role_description":"pop up button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Prečítajte si viac o","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"počúvaní Denníka N","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"počúvaní Denníka N","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Misia Artemis II – oblet Mesiaca – sa skončila úspešne. Kozmická loď Orion – so štvorčlennou posádkou na palube – dopadla do vôd Tichého oceánu pri pobreží San Diega v sobotu 11. apríla o 2.07 nášho času.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"„Toto bol učebnicový vstup [do atmosféry] a učebnicový dopad,“ povedal Rob Navias, komentátor prenosu NASA.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Misia štartovala 2. apríla o 0.35 nášho času a trvala viac ako 9 dní.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Posádka je po pristátí v poriadku. Zhruba hodinu po pristátí ju z oceána vyzdvihol záchranný tím a astronautov previezol na výsadkovú loď USS John P. Murtha. Po lekárskom vyšetrení ich čaká cesta do Johnsonovho vesmírneho strediska v Houstone.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reklama","depth":14,"bounds":{"left":0.4375,"top":0.0,"width":0.022222223,"height":0.011111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pristátie – rovnako ako štart –","depth":11,"bounds":{"left":0.23055555,"top":0.38666666,"width":0.16875,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"sa radí","depth":11,"bounds":{"left":0.39791667,"top":0.38666666,"width":0.03888889,"height":0.028888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"sa radí","depth":12,"bounds":{"left":0.39930555,"top":0.38666666,"width":0.036111113,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"medzi najnáročnejšie fázy letu.","depth":11,"bounds":{"left":0.43541667,"top":0.38666666,"width":0.17291667,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha","depth":12,"bounds":{"left":0.5729167,"top":0.46555555,"width":0.08611111,"height":0.07444444},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PREČÍTAJTE SI TIEŽ","depth":13,"bounds":{"left":0.23958333,"top":0.46666667,"width":0.08125,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Zvedavosť Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha","depth":13,"bounds":{"left":0.23819445,"top":0.48666668,"width":0.31944445,"height":0.075555556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha","depth":14,"bounds":{"left":0.23958333,"top":0.48666668,"width":0.31666666,"height":0.075555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Približne 20 minút pred vstupom do atmosféry sa loď Orion","depth":11,"bounds":{"left":0.23055555,"top":0.61,"width":0.33333334,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"oddelila","depth":11,"bounds":{"left":0.5625,"top":0.61,"width":0.045833334,"height":0.028888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"oddelila","depth":12,"bounds":{"left":0.5638889,"top":0.61,"width":0.043055557,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"od servisného modulu a trysky ju správne natočili. Tesne pred vstupom do atmosféry dosiahol Orion svoju maximálnu rýchlosť, okolo 39 688 kilometrov za hodinu.","depth":11,"bounds":{"left":0.23055555,"top":0.61,"width":0.425,"height":0.12888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tepelný štít chránil posádku pred teplotou okolo 2700 °C, čo je zhruba polovica teploty na povrchu Slnka. O 1:53 nášho času sa začal šesťminútový výpadok komunikácie, keď sa počas vrcholného zahrievania vytvorila okolo kapsuly plazma.","depth":11,"bounds":{"left":0.23055555,"top":0.77666664,"width":0.43333334,"height":0.12888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"V časti odbornej verejnosti","depth":11,"bounds":{"left":0.23055555,"top":0.9433333,"width":0.15,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"panovali","depth":11,"bounds":{"left":0.37916666,"top":0.9433333,"width":0.049305554,"height":0.028888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"panovali","depth":12,"bounds":{"left":0.38055557,"top":0.9433333,"width":0.046527777,"height":0.028888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"obavy, že tepelný štít môže zlyhať. Pochyby pochádzali z testu misie Artemis I, keď sa štít poškodil viac, ako sa očakávalo. Podľa NASA ani také poškodenie nepredstavovalo hrozbu, inžinieri navyše","depth":11,"bounds":{"left":0.23055555,"top":0.9433333,"width":0.4340278,"height":0.056666672},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"upravili","depth":11,"bounds":{"left":0.22916667,"top":1.0,"width":0.045138888,"height":-0.043333292},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"upravili","depth":12,"bounds":{"left":0.23055555,"top":1.0,"width":0.04236111,"height":-0.043333292},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"plán návratu vesmírnej misie Artemis II tak, aby sa najhorúcejšia časť návratu skrátila na minimum.","depth":11,"bounds":{"left":0.23055555,"top":1.0,"width":0.42777777,"height":-0.043333292},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[ Radi čítate o ľudskej mysli, prírode, zdraví či vesmíre?","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aktivujte si týždenný newsletter Otakara Horáka","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"s výberom najlepších článkov. ]","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Počas pristávania zažila posádka preťaženie až 3,9 G. Pri pristávaní sa postupne rozvinulo 11 padákov, ktoré loď spomalili na rýchlosť menej než 30 kilometrov za hodinu. Orion potom bezpečne dopadol do vôd Tichého oceánu. „Gratulujem. Artemis II, misia splnená,“","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"napísal","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"napísal","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"riaditeľ NASA Jared Isaacman.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Záverečná fáza pristátia","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Play video","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide player controls","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Posádka misie Artemis II úspešne pristála na Zemi","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Posádka misie Artemis II úspešne pristála na Zemi","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Denník N","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Denník N","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"107K subscribers","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Subscribe","depth":26,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Subscribe","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Share","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch later","depth":23,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch on YouTube","depth":21,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watch on","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"V tomto článku priblížime 10 vecí, ktoré si pamätať v súvislosti s misiou Artemis II.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Rekordná vzdialenosť od Zeme","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Rekordná vzdialen","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"osť od Zeme","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Posádka misie Artemis II obletela Mesiac a dostala sa do rekordnej vzdialenosti od Zeme.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Doterajšie maximum misie Apollo 13 z roku 1970 prekročila 6. apríla 2026 o 19.57 nášho času.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7. apríla o 1.00 nášho času došlo k najväčšiemu priblíženiu posádky k Mesiacu. Kozmická loď Orion preletela zhruba 6500 kilometrov nad jeho povrchom. V tejto vzdialenosti","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vyzeral","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vyzeral","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mesiac asi taký veľký ako basketbalová lopta, ak by ju človek držal v natiahnutej ruke.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"O dve minúty neskôr – 7. apríla o 1.02 – dosiahla misia Artemis II svoju maximálnu vzdialenosť od Zeme 406 771 kilometrov. Predošlý rekord tým prekonala o zhruba 6500 kilometrov.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Čo videli astronauti misie Artemis II, keď leteli okolo odvrátenej strany Mesiaca. Zdroj – NASA/X","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"NASA Verified account","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NASA","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@NASA","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"@NASA","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"It's not just a phase","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Artemis II astronauts captured these views of the Moon as the Orion spacecraft flew around the far side of the Moon on April 6, 2026.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Play Video. 1 minute 40 seconds long","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch on X","depth":18,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watch on X","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"4:31 AM · Apr 8, 2026","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"4:31 AM · Apr 8, 2026","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"X Ads info and privacy","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Like. This post has 89.5K likes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"89.5K","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply to this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copy link","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read 1.2K replies","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read 1.2K replies","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Odvrátená strana Mesiaca","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Odvrátená strana Mesiaca","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Počas obletu pozorovala posádka Artemis II odvrátenú stranu Mesiaca a videla","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"časti lunárneho povrchu, ktoré ľudia na vlastné oči ešte nevideli.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Na odvrátenú stranu sa dostali aj misie programu Apollo v rokoch 1968 až 1972, ale leteli oveľa bližšie k Mesiacu, čo obmedzovalo rozsah ich pozorovaní.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Astronauti programu Apollo pozorovali pred polstoročím odvrátenú stranu Mesiaca v tme, keďže trajektória ich misie bola navrhnutá tak, aby na privrátenej strane pristáli počas mesačného dňa.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Počas obletu Mesiaca misiou Artemis II sa približne 21 % disku odvrátenej strany – vrátane Panvy Orientale – nachádzalo v osvetlenej časti. Zvyšok osvetlenej časti Mesiaca tvorila privrátená strana,","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"píše","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"píše","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"časopis Nature. Oblet odvrátenej strany","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"trval","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"trval","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"celkovo zhruba 7 hodín.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Spomínaná Panva Orientale „predstavuje poslednú skutočne veľkú impaktnú udalosť","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(udalosť, pri ktorej dochádza k zrážke dvoch vesmírnych telies – pozn. red.)","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ktorá sa na Mesiaci odohrala“,","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"napísal","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"napísal","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"na Facebooku Pavel Gabzdyl z Masarykovej univerzity v Brne, autor knihy","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Průvodce po Měsíci","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Podľa neho ide o jednu „z","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"najlepšie zachovaných skutočne veľkých impaktných stôp v celej slnečnej sústave“.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Pavel Gabzdyl","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pavel Gabzdyl","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@GabzdylPavel","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"@GabzdylPavel","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Replying to @GabzdylPavel","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Replying to","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@GabzdylPavel","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6/7 Centrum tvoří Mare Orientale obklopené valy připomínajícími ztuhlé kruhy na vodě (Rookovo pohoří a Kordillery). Jsou tu i obří radiální údolí, jako 300 km dlouhé Vallis Bouvard! \n\nChcete vidět fotku Mare Orientale na mozaice snímků ze sond? Mrkněte na banner mého profilu :-)","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Image","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"5:22 PM · Apr 6, 2026","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5:22 PM · Apr 6, 2026","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"X Ads info and privacy","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Like. This post has 165 likes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"165","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply to this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copy link","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read 1 reply","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read 1 reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Počas obletu Mesiaca pracovala posádka vo dvojiciach; astronauti sledovali farebné odtiene na povrchu Mesiaca. Zmeny farieb môžu naznačovať jeho minerálne zloženie. Zachytiť rôzne odtiene na satelitných snímkach je ťažké. „Toto je niečo, v čom ľudské oko jednoducho vyniká, pretože dokáže odhaliť tie najjemnejšie detaily,“","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"povedala","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"povedala","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vedkyňa Kelsey Young z NASA. Celkovo bola loď Orion","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vybavená","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vybavená","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"desiatkami kamier a fotoaparátov.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pozorovania misie Artemis II by mohli pomôcť lepšie pochopiť rozdiely medzi privrátenou a odvrátenou stranou Mesiaca – kým na odvrátenej strane je množstvo impaktných kráterov ako dôkazov o dopadoch vesmírnych telies, povrch privrátenej strany je oveľa hladší.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mesiac sa od Zeme každý rok","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vzďaľuje","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vzďaľuje","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o necelé 4 centimetre. Pred zhruba 4,5 miliardami rokov, keď Mesiac vznikol, bol k Zemi oveľa bližšie ako dnes. Zem na neho vyžarovala veľké množstvo tepla, keďže sama bola roztavená. To znamená, že privrátená strana Mesiaca chladla oveľa pomalšie ako tá odvrátená. Vďaka tomu mohla odvrátená strana narásť do hrúbky, zato privrátená bola tenšia.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"„Keď pod povrchom máte magmu, ktorá sa snaží dostať na povrch, bude pre ňu oveľa ľahšie dostať sa na povrch tam, kde je kôra tenšia, než tam, kde je hrubšia,“","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"povedal","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"povedal","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"v Českej televízii geológ a planetárny vulkanológ Petr Brož z Geofyzikálneho ústavu Akadémie vied ČR. Výsledkom je, že privrátená strana Mesiaca je hladšia, keďže ju zaliala magma. Podľa vedca však ide len o jednu z možných hypotéz. Poznatky misie Artemis II by ju mohli pomôcť potvrdiť či vyvrátiť.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Poznatky z nových pozorovaní by sa dali využiť pri nepilotovanom (robotickom)","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pristátí na Mesiaci. Posádka zazrela aj mesačný južný pól, miesto, kde by ľudia podľa súčasných plánov NASA mali pristáť v roku 2028.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PREČÍTAJTE SI TIEŽ","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Zatmenie Slnka, fotky Zeme a Mesiaca","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Zatmenie Slnka, fotky Zeme a Mesiaca","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tesne po oblete Mesiaca zverejnila NASA fotografie z tejto fázy misie,","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"dostupné sú","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"dostupné sú","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"na stránke vesmírnej agentúry.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Astronauti vyfotili aj zatmenie Slnka, keď sa predeň – z ich perspektívy – dostal Mesiac. Počas zatmenia boli viditeľné časti slnečnej koróny, vonkajšej atmosféry Slnka.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Na Zemi trvá zatmenie Slnka len niekoľko minút, v tomto prípade to bola skoro hodina. „Bez ohľadu na to, ako dlho sa na to pozeráme, naše mozgy nedokážu spracovať obraz pred nami,“","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"povedal","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"povedal","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"veliteľ posádky Reid Wiseman. „Je to absolútne úchvatné, priam neskutočné. Na toto skrátka neexistujú prídavné mená,“ dodal.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Zobraziť väčšie rozlíšenie","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Mesiac na snímke úplne zakrýva Slnko. Foto – NASA","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Počas misie spravil Reid Wiseman fotku Mesiaca so Zemou, ktorá dostala názov „Earthset“, čiže Západ Zeme.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pripomína známu fotografiu „Earthrise“, čiže Východ Zeme, ktorú v roku 1968 urobil William Anders, astronaut misie Apollo 8.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Porovnanie snímok: hore „Earthrise“ z roku 1968, dole „Eartset“ z roku 2026. Zdroj – The Aviation Circle/Instagram","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"theaviationcircle","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"theaviationcircle Verified","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"theaviationcircle","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Verified","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"184K followers","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View profile","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View profile","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Instagram post shared by @theaviationcircle","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"theaviationcircle theaviationcircle Verified 3,134 posts · 184K followers","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"theaviationcircle","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Verified","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3,134 posts · 184K followers","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View more on Instagram","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"View more on Instagram","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Like","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Like","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Comment","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comment","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Share","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Share","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Save","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Save","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"21,628 likes","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"21,628 likes","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Add a comment...","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add a comment...","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Instagram","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Instagram","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Táto fotografia naštartovala globálne environmentálne hnutie a v roku 1970 prispela k vzniku Dňa Zeme, podujatia, ktoré upozorňuje na význam ochrany životného prostredia.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tak ako „Earthrise“ z roku 1968, aj fotografie misie Artemis II","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"obracajú","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"obracajú","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"našu pozornosť na Zem a v kontraste s nehostinným vesmírom nám ukazujú, aký je život na Zemi krehký a zraniteľný.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ďalšia ikonická snímka misie Artemis II (podobá sa na záber z roku 1972 nazvaný","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"The Blue Marble","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"The Blue Marble","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Modrá sklenená guľôčka). Zdroj – Pavel Gabzdyl","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Pavel Gabzdyl","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pavel Gabzdyl","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@GabzdylPavel","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"@GabzdylPavel","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No páni! Tento snímek srpku našeho kosmického domova (osvětleného měsíčním úplňkem) včera pořídila posádka Artemis II.\n\n- sever dole\n- nápadný kontinent je Afrika\n- jasná „hvězda“ je Venuše\n- dole je patrné zodiakální světlo\n- u obou pólů je polární záře\n\nFoto: NASA/R. Wiseman","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Image","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"6:25 PM · Apr 3, 2026","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6:25 PM · Apr 3, 2026","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"X Ads info and privacy","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Like. This post has 883 likes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"883","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply to this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copy link","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read 24 replies","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read 24 replies","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Dojemná chvíľa","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Dojemná chvíľa","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Najdojemnejšia chvíľa celej misie nastala 6. apríla po tom, ako loď Orion prekonala rekord misie Apollo 13 z roku 1970, čo sa týka vzdialenosti od Zeme.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Významný míľnik si astronauti uctili tým, že navrhli mená pre dosiaľ bezmenné krátery na Mesiaci. Jeden z nich pomenovali Integrity, čo je názov lode Orion, v ktorej posádka letela.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pre ďalší útvar, ktorý sa nachádza pri hranici medzi privrátenou a odvrátenou stranou Mesiaca, navrhli meno Carroll. „Pred mnohými rokmi sme sa v našej zomknutej astronautickej rodine vydali na túto cestu a stratili sme milovaného človeka… volala sa Carroll,“ povedal chvejúcim sa hlasom letový špecialista Jeremy Hansen.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Carroll bola manželka veliteľa misie Reida Wisemana a v roku 2020, keď mala 46 rokov, podľahla rakovine. Po dojemnom momente, keď si členovia posádky utierali slzy, sa celá posádka objala.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Posádka navrhuje mená Integrity a Carroll pre mesačné krátery. Zdroj – NASA/X","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"NASA Verified account","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NASA","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@NASA","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"@NASA","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Replying to @NASA","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Replying to","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@NASA","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To commemorate the Artemis II mission, the astronauts announced their suggestion to rename certain features on the Moon to honor the Orion spacecraft, named Integrity, as well as commander Reid Wiseman's late wife, Carroll.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Play Video. 2 minutes 46 seconds long","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch on X","depth":18,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watch on X","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"9:27 PM · Apr 6, 2026","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"9:27 PM · Apr 6, 2026","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"X Ads info and privacy","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Like. This post has 16.3K likes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"16.3K","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply to this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copy link","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read 272 replies","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read 272 replies","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Pekné a vtipné momenty","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Pekné a vtipné momenty","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pasažierka komerčného letu Jane Clukey, ktorá letela z Amerických Panenských ostrovov do Charlotte v Severnej Karolíne, natočila cez okno lietadla štart misie Artemis II.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Štart misie Artemis II z lietadla. Zdroj – Guardian News/YouTube","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Play video","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide player controls","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Footage captured by plane passenger shows Artemis launch from air","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Footage captured by plane passenger shows Artemis launch from air","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Guardian News","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Guardian News","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Guardian News","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4.01M subscribers","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Subscribe","depth":26,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Subscribe","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Share","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch later","depth":23,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch on YouTube","depth":21,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watch on","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Misia odštartovala 2. apríla o 0.35 nášho času z Kennedyho vesmírneho strediska na myse Canaveral na Floride. Použila sa rampa 39B.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sloganom misie sa stala hláška „Moon Joy“, čiže mesačná radosť alebo nadšenie. Výraz vznikol z výmeny medzi veliteľom misie Reidom Wisemanom a riadiacim strediskom v Houstone. Keď astronaut nadšene vymenúval útvary na Mesiaci, ktoré videl zblízka po prvý raz, riadiace stredisko odpovedalo: „Rozumiem, mesačná radosť“.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vedci z misie Artemis II podľa časopisu","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nature","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"hovorili","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"hovorili","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", že si dajú vyrobiť tričká s týmto nápisom.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Virálnym hitom sa stalo video, na ktorom sa počas priameho prenosu z misie vznáša pohár s Nutellou. Nutella bola jednou zo 189 položiek na jedálnom lístku posádky. Menu astronautov sa zostavilo podľa ich osobných preferencií a nárokov na nutričné a technické požiadavky lode.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Spoločnosť túto reklamu okamžite","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"využila","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"využila","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", napríklad sloganom „šírime úsmevy až do vesmíru“.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nutella sa vznáša v Orione počas misie Artemis II. Zdroj – Associated Press/YouTube","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Play video","depth":17,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hide player controls","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Nutella jar seen spinning through spacecraft during Artemis II mission","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nutella jar seen spinning through spacecraft during Artemis II mission","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Associated Press","depth":22,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Associated Press","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Associated Press","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4.41M subscribers","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Subscribe","depth":26,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Subscribe","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Share","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch later","depth":23,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Watch on YouTube","depth":21,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Watch on","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Na lodi","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"bolo","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"bolo","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"niekoľko symbolických predmetov, napríklad americká vlajka, ktorá mala letieť Apollo 18, no táto misia sa zrušila, alebo kúsok mušelínovej látky z lietadla Wright Flyer. Bratia Wrightovci v ňom v roku 1903 uskutočnili prvý motorový let v dejinách. „Historické predmety na palube Artemis II odrážajú dlhú cestu amerického výskumu a generácií inovátorov, ktorí umožnili, aby sa tento okamih [let k Mesiacu] stal realitou,“","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"uviedol","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"uviedol","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"vo vyhlásení riaditeľ NASA Jared Isaacman.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"6. Platformy a sociálne siete","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6. Platformy a sociálne siete","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priame prenosy z misie Artemis II sa vysielali na viacerých platformách vrátane YouTubu, Amazon Prime, Apple TV, Netflixu, HBO Max alebo Discovery+. Astronauti počas celej misie komunikovali s médiami a odpovedali na otázky ľudí.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Najdôležitejšie momenty z misie NASA okamžite vešala na sociálne siete X, Facebook a Instagram.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ešte nikdy nebol vesmírny výskum tak blízko takému počtu obyvateľov na Zemi. „Áno, je to neuveriteľné, ale takto sa, dámy a páni, pozoruje Mesiac v 21. storočí,“ napísal na sociálnej sieti X Pavel Gabzdyl z Masarykovej univerzity v Brne. K textu priložil fotku, ako z pohodlia domova sleduje priebeh misie.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Pavel Gabzdyl","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pavel Gabzdyl","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@GabzdylPavel","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"@GabzdylPavel","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ano, je to neuvěřitelné, ale takto se dámy a pánové pozoruje Měsíc ve 21. století :-)","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Image","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"10:27 PM · Apr 6, 2026","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10:27 PM · Apr 6, 2026","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"X Ads info and privacy","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Like. This post has 360 likes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"360","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply to this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copy link","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read 10 replies","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read 10 replies","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Na sociálnych sieťach boli počas misie aktívni aj astronauti. Tesne pred obletom Mesiaca astronaut Reid Wiseman napísal, že je vďačný za to, že mohol byť súčasťou misie. K tomu priložil príspevok starý 10 rokov: „Snívalo sa mi, že som bo","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"l v noci na obežnej dráhe Mesiaca. Celé ráno mám z toho zvláštnu ťažobu – ako zo sna, ktorý bol živý, pritom nebol skutočný.“ Po 10 rokoch sa tento sen stal skutočnosťou.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Reid Wiseman Verified account","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reid Wiseman","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@astro_reid","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"@astro_reid","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Follow","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Follow","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"View on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All I feel is gratitude for this experience.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Visit this post on X","depth":18,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reid Wiseman","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"@astro_reid","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dreamt I was in lunar orbit last night. Been in that post-vivid-dream-that-wasn't-real funk all morning.","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"6:01 PM · Apr 6, 2026","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"6:01 PM · Apr 6, 2026","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"X Ads info and privacy","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Like. This post has 131.3K likes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"131.3K","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Reply to this post on X","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reply","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copy link","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Read 739 replies","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Read 739 replies","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3520759479991996923
|
6702205158208633483
|
app_switch
|
accessibility
|
NULL
|
UGREEN NAS
Inbox (1) - [EMAIL] - Gmail
How to Get UGREEN NAS
Inbox (1) - [EMAIL] - Gmail
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
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)
Denník N - Nezávislý denník
Denník N - Nezávislý denník
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
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
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
11. APRÍLA 2026 2:28
TECHNOLÓGIE
TECHNOLÓGIE
VESMÍR
VESMÍR
Denník N Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II
Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II
Otakar Horák Otakar Horák
Otakar Horák
Odoberať
ODOBERAŤ
Zobraziť diskusiu (počet príspevkov: 25)
25
KOMENTÁRE
Odstrániť zo zoznamu na neskôr
ČÍTAŤ NESKÔR
Zdieľať
ZDIEĽAŤ
Odomknúť
ODOMKNÚŤ
Loď Orion úspešne dopadla do vôd Tichého oceánu. Reprofoto – NASA
Loď Orion úspešne dopadla do vôd Tichého oceánu. Reprofoto – NASA
Posun vzad o 15 sekúnd
15
Prehrať
Posun vpred o 30 sekúnd
30
00:00
20:36
undefined
Prečítajte si viac o
počúvaní Denníka N
počúvaní Denníka N
.
Misia Artemis II – oblet Mesiaca – sa skončila úspešne. Kozmická loď Orion – so štvorčlennou posádkou na palube – dopadla do vôd Tichého oceánu pri pobreží San Diega v sobotu 11. apríla o 2.07 nášho času.
„Toto bol učebnicový vstup [do atmosféry] a učebnicový dopad,“ povedal Rob Navias, komentátor prenosu NASA.
Misia štartovala 2. apríla o 0.35 nášho času a trvala viac ako 9 dní.
Posádka je po pristátí v poriadku. Zhruba hodinu po pristátí ju z oceána vyzdvihol záchranný tím a astronautov previezol na výsadkovú loď USS John P. Murtha. Po lekárskom vyšetrení ich čaká cesta do Johnsonovho vesmírneho strediska v Houstone.
reklama
Pristátie – rovnako ako štart –
sa radí
sa radí
medzi najnáročnejšie fázy letu.
Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha
PREČÍTAJTE SI TIEŽ
Zvedavosť Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha
Kapsula misie Artemis sa cestou späť odrazí od atmosféry ako kamienok na hladine, hovorí astronóm Šilha
Približne 20 minút pred vstupom do atmosféry sa loď Orion
oddelila
oddelila
od servisného modulu a trysky ju správne natočili. Tesne pred vstupom do atmosféry dosiahol Orion svoju maximálnu rýchlosť, okolo 39 688 kilometrov za hodinu.
Tepelný štít chránil posádku pred teplotou okolo 2700 °C, čo je zhruba polovica teploty na povrchu Slnka. O 1:53 nášho času sa začal šesťminútový výpadok komunikácie, keď sa počas vrcholného zahrievania vytvorila okolo kapsuly plazma.
V časti odbornej verejnosti
panovali
panovali
obavy, že tepelný štít môže zlyhať. Pochyby pochádzali z testu misie Artemis I, keď sa štít poškodil viac, ako sa očakávalo. Podľa NASA ani také poškodenie nepredstavovalo hrozbu, inžinieri navyše
upravili
upravili
plán návratu vesmírnej misie Artemis II tak, aby sa najhorúcejšia časť návratu skrátila na minimum.
[ Radi čítate o ľudskej mysli, prírode, zdraví či vesmíre?
Aktivujte si týždenný newsletter Otakara Horáka
s výberom najlepších článkov. ]
Počas pristávania zažila posádka preťaženie až 3,9 G. Pri pristávaní sa postupne rozvinulo 11 padákov, ktoré loď spomalili na rýchlosť menej než 30 kilometrov za hodinu. Orion potom bezpečne dopadol do vôd Tichého oceánu. „Gratulujem. Artemis II, misia splnená,“
napísal
napísal
riaditeľ NASA Jared Isaacman.
Záverečná fáza pristátia
Play video
Hide player controls
Posádka misie Artemis II úspešne pristála na Zemi
Posádka misie Artemis II úspešne pristála na Zemi
Denník N
Denník N
Denník N
107K subscribers
Subscribe
Subscribe
Share
Watch later
Watch on YouTube
Watch on
V tomto článku priblížime 10 vecí, ktoré si pamätať v súvislosti s misiou Artemis II.
1. Rekordná vzdialenosť od Zeme
1. Rekordná vzdialen
osť od Zeme
Posádka misie Artemis II obletela Mesiac a dostala sa do rekordnej vzdialenosti od Zeme.
Doterajšie maximum misie Apollo 13 z roku 1970 prekročila 6. apríla 2026 o 19.57 nášho času.
7. apríla o 1.00 nášho času došlo k najväčšiemu priblíženiu posádky k Mesiacu. Kozmická loď Orion preletela zhruba 6500 kilometrov nad jeho povrchom. V tejto vzdialenosti
vyzeral
vyzeral
Mesiac asi taký veľký ako basketbalová lopta, ak by ju človek držal v natiahnutej ruke.
O dve minúty neskôr – 7. apríla o 1.02 – dosiahla misia Artemis II svoju maximálnu vzdialenosť od Zeme 406 771 kilometrov. Predošlý rekord tým prekonala o zhruba 6500 kilometrov.
Čo videli astronauti misie Artemis II, keď leteli okolo odvrátenej strany Mesiaca. Zdroj – NASA/X
Visit this post on X
NASA Verified account
NASA
@NASA
@NASA
Follow
Follow
View on X
It's not just a phase
Artemis II astronauts captured these views of the Moon as the Orion spacecraft flew around the far side of the Moon on April 6, 2026.
Play Video. 1 minute 40 seconds long
Watch on X
Watch on X
4:31 AM · Apr 8, 2026
4:31 AM · Apr 8, 2026
X Ads info and privacy
Like. This post has 89.5K likes
89.5K
Reply to this post on X
Reply
Copy link
Copy link
Read 1.2K replies
Read 1.2K replies
2. Odvrátená strana Mesiaca
2. Odvrátená strana Mesiaca
Počas obletu pozorovala posádka Artemis II odvrátenú stranu Mesiaca a videla
časti lunárneho povrchu, ktoré ľudia na vlastné oči ešte nevideli.
Na odvrátenú stranu sa dostali aj misie programu Apollo v rokoch 1968 až 1972, ale leteli oveľa bližšie k Mesiacu, čo obmedzovalo rozsah ich pozorovaní.
Astronauti programu Apollo pozorovali pred polstoročím odvrátenú stranu Mesiaca v tme, keďže trajektória ich misie bola navrhnutá tak, aby na privrátenej strane pristáli počas mesačného dňa.
Počas obletu Mesiaca misiou Artemis II sa približne 21 % disku odvrátenej strany – vrátane Panvy Orientale – nachádzalo v osvetlenej časti. Zvyšok osvetlenej časti Mesiaca tvorila privrátená strana,
píše
píše
časopis Nature. Oblet odvrátenej strany
trval
trval
celkovo zhruba 7 hodín.
Spomínaná Panva Orientale „predstavuje poslednú skutočne veľkú impaktnú udalosť
(udalosť, pri ktorej dochádza k zrážke dvoch vesmírnych telies – pozn. red.)
, ktorá sa na Mesiaci odohrala“,
napísal
napísal
na Facebooku Pavel Gabzdyl z Masarykovej univerzity v Brne, autor knihy
Průvodce po Měsíci
. Podľa neho ide o jednu „z
najlepšie zachovaných skutočne veľkých impaktných stôp v celej slnečnej sústave“.
Visit this post on X
Pavel Gabzdyl
Pavel Gabzdyl
@GabzdylPavel
@GabzdylPavel
Follow
Follow
View on X
Replying to @GabzdylPavel
Replying to
@GabzdylPavel
6/7 Centrum tvoří Mare Orientale obklopené valy připomínajícími ztuhlé kruhy na vodě (Rookovo pohoří a Kordillery). Jsou tu i obří radiální údolí, jako 300 km dlouhé Vallis Bouvard!
Chcete vidět fotku Mare Orientale na mozaice snímků ze sond? Mrkněte na banner mého profilu :-)
Image
5:22 PM · Apr 6, 2026
5:22 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 165 likes
165
Reply to this post on X
Reply
Copy link
Copy link
Read 1 reply
Read 1 reply
Počas obletu Mesiaca pracovala posádka vo dvojiciach; astronauti sledovali farebné odtiene na povrchu Mesiaca. Zmeny farieb môžu naznačovať jeho minerálne zloženie. Zachytiť rôzne odtiene na satelitných snímkach je ťažké. „Toto je niečo, v čom ľudské oko jednoducho vyniká, pretože dokáže odhaliť tie najjemnejšie detaily,“
povedala
povedala
vedkyňa Kelsey Young z NASA. Celkovo bola loď Orion
vybavená
vybavená
desiatkami kamier a fotoaparátov.
Pozorovania misie Artemis II by mohli pomôcť lepšie pochopiť rozdiely medzi privrátenou a odvrátenou stranou Mesiaca – kým na odvrátenej strane je množstvo impaktných kráterov ako dôkazov o dopadoch vesmírnych telies, povrch privrátenej strany je oveľa hladší.
Mesiac sa od Zeme každý rok
vzďaľuje
vzďaľuje
o necelé 4 centimetre. Pred zhruba 4,5 miliardami rokov, keď Mesiac vznikol, bol k Zemi oveľa bližšie ako dnes. Zem na neho vyžarovala veľké množstvo tepla, keďže sama bola roztavená. To znamená, že privrátená strana Mesiaca chladla oveľa pomalšie ako tá odvrátená. Vďaka tomu mohla odvrátená strana narásť do hrúbky, zato privrátená bola tenšia.
„Keď pod povrchom máte magmu, ktorá sa snaží dostať na povrch, bude pre ňu oveľa ľahšie dostať sa na povrch tam, kde je kôra tenšia, než tam, kde je hrubšia,“
povedal
povedal
v Českej televízii geológ a planetárny vulkanológ Petr Brož z Geofyzikálneho ústavu Akadémie vied ČR. Výsledkom je, že privrátená strana Mesiaca je hladšia, keďže ju zaliala magma. Podľa vedca však ide len o jednu z možných hypotéz. Poznatky misie Artemis II by ju mohli pomôcť potvrdiť či vyvrátiť.
Poznatky z nových pozorovaní by sa dali využiť pri nepilotovanom (robotickom)
pristátí na Mesiaci. Posádka zazrela aj mesačný južný pól, miesto, kde by ľudia podľa súčasných plánov NASA mali pristáť v roku 2028.
Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie
PREČÍTAJTE SI TIEŽ
Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie
Artemis II môže obrátiť pozornosť na krehkosť života na Zemi. Úvaha o význame misie
3. Zatmenie Slnka, fotky Zeme a Mesiaca
3. Zatmenie Slnka, fotky Zeme a Mesiaca
Tesne po oblete Mesiaca zverejnila NASA fotografie z tejto fázy misie,
dostupné sú
dostupné sú
na stránke vesmírnej agentúry.
Astronauti vyfotili aj zatmenie Slnka, keď sa predeň – z ich perspektívy – dostal Mesiac. Počas zatmenia boli viditeľné časti slnečnej koróny, vonkajšej atmosféry Slnka.
Na Zemi trvá zatmenie Slnka len niekoľko minút, v tomto prípade to bola skoro hodina. „Bez ohľadu na to, ako dlho sa na to pozeráme, naše mozgy nedokážu spracovať obraz pred nami,“
povedal
povedal
veliteľ posádky Reid Wiseman. „Je to absolútne úchvatné, priam neskutočné. Na toto skrátka neexistujú prídavné mená,“ dodal.
Zobraziť väčšie rozlíšenie
Mesiac na snímke úplne zakrýva Slnko. Foto – NASA
Počas misie spravil Reid Wiseman fotku Mesiaca so Zemou, ktorá dostala názov „Earthset“, čiže Západ Zeme.
Pripomína známu fotografiu „Earthrise“, čiže Východ Zeme, ktorú v roku 1968 urobil William Anders, astronaut misie Apollo 8.
Porovnanie snímok: hore „Earthrise“ z roku 1968, dole „Eartset“ z roku 2026. Zdroj – The Aviation Circle/Instagram
theaviationcircle
theaviationcircle Verified
theaviationcircle
Verified
184K followers
View profile
View profile
Instagram post shared by @theaviationcircle
theaviationcircle theaviationcircle Verified 3,134 posts · 184K followers
theaviationcircle
Verified
3,134 posts · 184K followers
View more on Instagram
View more on Instagram
Like
Like
Comment
Comment
Share
Share
Save
Save
21,628 likes
21,628 likes
Add a comment...
Add a comment...
Instagram
Instagram
Táto fotografia naštartovala globálne environmentálne hnutie a v roku 1970 prispela k vzniku Dňa Zeme, podujatia, ktoré upozorňuje na význam ochrany životného prostredia.
Tak ako „Earthrise“ z roku 1968, aj fotografie misie Artemis II
obracajú
obracajú
našu pozornosť na Zem a v kontraste s nehostinným vesmírom nám ukazujú, aký je život na Zemi krehký a zraniteľný.
Ďalšia ikonická snímka misie Artemis II (podobá sa na záber z roku 1972 nazvaný
The Blue Marble
The Blue Marble
, Modrá sklenená guľôčka). Zdroj – Pavel Gabzdyl
Visit this post on X
Pavel Gabzdyl
Pavel Gabzdyl
@GabzdylPavel
@GabzdylPavel
Follow
Follow
View on X
No páni! Tento snímek srpku našeho kosmického domova (osvětleného měsíčním úplňkem) včera pořídila posádka Artemis II.
- sever dole
- nápadný kontinent je Afrika
- jasná „hvězda“ je Venuše
- dole je patrné zodiakální světlo
- u obou pólů je polární záře
Foto: NASA/R. Wiseman
Image
6:25 PM · Apr 3, 2026
6:25 PM · Apr 3, 2026
X Ads info and privacy
Like. This post has 883 likes
883
Reply to this post on X
Reply
Copy link
Copy link
Read 24 replies
Read 24 replies
4. Dojemná chvíľa
4. Dojemná chvíľa
Najdojemnejšia chvíľa celej misie nastala 6. apríla po tom, ako loď Orion prekonala rekord misie Apollo 13 z roku 1970, čo sa týka vzdialenosti od Zeme.
Významný míľnik si astronauti uctili tým, že navrhli mená pre dosiaľ bezmenné krátery na Mesiaci. Jeden z nich pomenovali Integrity, čo je názov lode Orion, v ktorej posádka letela.
Pre ďalší útvar, ktorý sa nachádza pri hranici medzi privrátenou a odvrátenou stranou Mesiaca, navrhli meno Carroll. „Pred mnohými rokmi sme sa v našej zomknutej astronautickej rodine vydali na túto cestu a stratili sme milovaného človeka… volala sa Carroll,“ povedal chvejúcim sa hlasom letový špecialista Jeremy Hansen.
Carroll bola manželka veliteľa misie Reida Wisemana a v roku 2020, keď mala 46 rokov, podľahla rakovine. Po dojemnom momente, keď si členovia posádky utierali slzy, sa celá posádka objala.
Posádka navrhuje mená Integrity a Carroll pre mesačné krátery. Zdroj – NASA/X
Visit this post on X
NASA Verified account
NASA
@NASA
@NASA
Follow
Follow
View on X
Replying to @NASA
Replying to
@NASA
To commemorate the Artemis II mission, the astronauts announced their suggestion to rename certain features on the Moon to honor the Orion spacecraft, named Integrity, as well as commander Reid Wiseman's late wife, Carroll.
Play Video. 2 minutes 46 seconds long
Watch on X
Watch on X
9:27 PM · Apr 6, 2026
9:27 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 16.3K likes
16.3K
Reply to this post on X
Reply
Copy link
Copy link
Read 272 replies
Read 272 replies
5. Pekné a vtipné momenty
5. Pekné a vtipné momenty
Pasažierka komerčného letu Jane Clukey, ktorá letela z Amerických Panenských ostrovov do Charlotte v Severnej Karolíne, natočila cez okno lietadla štart misie Artemis II.
Štart misie Artemis II z lietadla. Zdroj – Guardian News/YouTube
Play video
Hide player controls
Footage captured by plane passenger shows Artemis launch from air
Footage captured by plane passenger shows Artemis launch from air
Guardian News
Guardian News
Guardian News
4.01M subscribers
Subscribe
Subscribe
Share
Watch later
Watch on YouTube
Watch on
Misia odštartovala 2. apríla o 0.35 nášho času z Kennedyho vesmírneho strediska na myse Canaveral na Floride. Použila sa rampa 39B.
Sloganom misie sa stala hláška „Moon Joy“, čiže mesačná radosť alebo nadšenie. Výraz vznikol z výmeny medzi veliteľom misie Reidom Wisemanom a riadiacim strediskom v Houstone. Keď astronaut nadšene vymenúval útvary na Mesiaci, ktoré videl zblízka po prvý raz, riadiace stredisko odpovedalo: „Rozumiem, mesačná radosť“.
Vedci z misie Artemis II podľa časopisu
Nature
hovorili
hovorili
, že si dajú vyrobiť tričká s týmto nápisom.
Virálnym hitom sa stalo video, na ktorom sa počas priameho prenosu z misie vznáša pohár s Nutellou. Nutella bola jednou zo 189 položiek na jedálnom lístku posádky. Menu astronautov sa zostavilo podľa ich osobných preferencií a nárokov na nutričné a technické požiadavky lode.
Spoločnosť túto reklamu okamžite
využila
využila
, napríklad sloganom „šírime úsmevy až do vesmíru“.
Nutella sa vznáša v Orione počas misie Artemis II. Zdroj – Associated Press/YouTube
Play video
Hide player controls
Nutella jar seen spinning through spacecraft during Artemis II mission
Nutella jar seen spinning through spacecraft during Artemis II mission
Associated Press
Associated Press
Associated Press
4.41M subscribers
Subscribe
Subscribe
Share
Watch later
Watch on YouTube
Watch on
Na lodi
bolo
bolo
niekoľko symbolických predmetov, napríklad americká vlajka, ktorá mala letieť Apollo 18, no táto misia sa zrušila, alebo kúsok mušelínovej látky z lietadla Wright Flyer. Bratia Wrightovci v ňom v roku 1903 uskutočnili prvý motorový let v dejinách. „Historické predmety na palube Artemis II odrážajú dlhú cestu amerického výskumu a generácií inovátorov, ktorí umožnili, aby sa tento okamih [let k Mesiacu] stal realitou,“
uviedol
uviedol
vo vyhlásení riaditeľ NASA Jared Isaacman.
6. Platformy a sociálne siete
6. Platformy a sociálne siete
Priame prenosy z misie Artemis II sa vysielali na viacerých platformách vrátane YouTubu, Amazon Prime, Apple TV, Netflixu, HBO Max alebo Discovery+. Astronauti počas celej misie komunikovali s médiami a odpovedali na otázky ľudí.
Najdôležitejšie momenty z misie NASA okamžite vešala na sociálne siete X, Facebook a Instagram.
Ešte nikdy nebol vesmírny výskum tak blízko takému počtu obyvateľov na Zemi. „Áno, je to neuveriteľné, ale takto sa, dámy a páni, pozoruje Mesiac v 21. storočí,“ napísal na sociálnej sieti X Pavel Gabzdyl z Masarykovej univerzity v Brne. K textu priložil fotku, ako z pohodlia domova sleduje priebeh misie.
Visit this post on X
Pavel Gabzdyl
Pavel Gabzdyl
@GabzdylPavel
@GabzdylPavel
Follow
Follow
View on X
Ano, je to neuvěřitelné, ale takto se dámy a pánové pozoruje Měsíc ve 21. století :-)
Image
10:27 PM · Apr 6, 2026
10:27 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 360 likes
360
Reply to this post on X
Reply
Copy link
Copy link
Read 10 replies
Read 10 replies
Na sociálnych sieťach boli počas misie aktívni aj astronauti. Tesne pred obletom Mesiaca astronaut Reid Wiseman napísal, že je vďačný za to, že mohol byť súčasťou misie. K tomu priložil príspevok starý 10 rokov: „Snívalo sa mi, že som bo
l v noci na obežnej dráhe Mesiaca. Celé ráno mám z toho zvláštnu ťažobu – ako zo sna, ktorý bol živý, pritom nebol skutočný.“ Po 10 rokoch sa tento sen stal skutočnosťou.
Visit this post on X
Reid Wiseman Verified account
Reid Wiseman
@astro_reid
@astro_reid
Follow
Follow
View on X
All I feel is gratitude for this experience.
Visit this post on X
Reid Wiseman
@astro_reid
Dreamt I was in lunar orbit last night. Been in that post-vivid-dream-that-wasn't-real funk all morning.
6:01 PM · Apr 6, 2026
6:01 PM · Apr 6, 2026
X Ads info and privacy
Like. This post has 131.3K likes
131.3K
Reply to this post on X
Reply
Copy link
Copy link
Read 739 replies
Read 739 replies...
|
NULL
|
|
983
|
24
|
1
|
2026-04-11T12:44:23.193819+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911463193_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% C-zshDOCKERO ₴1DEV (-zsh)O ₴2APP (-zsh)• *3-zsh• 84-zsh• *5ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3~/.screenpipe/db.sqlite"SELECT pipe_name, status, started_at, finished_at, stdout, stderrFROM pipe_executionsORDER BY started_at DESCLIMIT 5;"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pgrep -1 screenpipe20525 screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ls -lh ~/.screenpipe/db.sqlite ~/.screenpipe/db.sqlite-wal ~/.screenpipe/db.sqlite-shm-rw-r--r--1 lukas1lukas-rw-r--r--1lukas01260412604staffstaffstaff80M 11 Apr 15:37 /Users/Lukas/.screenpipe/db.sqlite32K 11Apr 14:52 /Users/lukas/.screenpipe/db.sqlite-shm8.5M11 Apr 15:39/Users/lukas/.screenpipe/db.sqlite-wallukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S sqlite3~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"lukas@lukas-Kovoliks-MocBook-Pro-liminnv ~Ssolite3~/.screennine/dh.solite "PRAGMA walchecknoint:"-zshSat 11 Apr 15:44:22-zshT81X7lodlNTailscaleOlouuruuolukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \~/.screenpipe/db.sqlite \Admin@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqliteug_start_server,check access user: 1000, group: 10getuidO: 1000geteuid(): 1000login group is admin, set euid asrootcannot seteuid as rootinvalid path:'/volume1/docker/screenpipe/db.sqlite'rsync error:errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]rsync: connection unexpectedly closed (0 bytes received so far) [sender]rsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453)[sender=2.6.9]lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd/Volumeslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Nolumes$ 11total 0drwxr-xr-xdrwxr-xr-xlrwxr-xr-x3 root20 root1 rootwheel96 11 Apr 11:14wheel6404 Aug2024wheel1 11 Apr 11:13 MacintoshHD-> /lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes...
|
NULL
|
-5459797854944901819
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% C-zshDOCKERO ₴1DEV (-zsh)O ₴2APP (-zsh)• *3-zsh• 84-zsh• *5ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3~/.screenpipe/db.sqlite"SELECT pipe_name, status, started_at, finished_at, stdout, stderrFROM pipe_executionsORDER BY started_at DESCLIMIT 5;"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ pgrep -1 screenpipe20525 screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ls -lh ~/.screenpipe/db.sqlite ~/.screenpipe/db.sqlite-wal ~/.screenpipe/db.sqlite-shm-rw-r--r--1 lukas1lukas-rw-r--r--1lukas01260412604staffstaffstaff80M 11 Apr 15:37 /Users/Lukas/.screenpipe/db.sqlite32K 11Apr 14:52 /Users/lukas/.screenpipe/db.sqlite-shm8.5M11 Apr 15:39/Users/lukas/.screenpipe/db.sqlite-wallukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ S sqlite3~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"lukas@lukas-Kovoliks-MocBook-Pro-liminnv ~Ssolite3~/.screennine/dh.solite "PRAGMA walchecknoint:"-zshSat 11 Apr 15:44:22-zshT81X7lodlNTailscaleOlouuruuolukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \~/.screenpipe/db.sqlite \Admin@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqliteug_start_server,check access user: 1000, group: 10getuidO: 1000geteuid(): 1000login group is admin, set euid asrootcannot seteuid as rootinvalid path:'/volume1/docker/screenpipe/db.sqlite'rsync error:errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]rsync: connection unexpectedly closed (0 bytes received so far) [sender]rsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453)[sender=2.6.9]lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd/Volumeslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Nolumes$ 11total 0drwxr-xr-xdrwxr-xr-xlrwxr-xr-x3 root20 root1 rootwheel96 11 Apr 11:14wheel6404 Aug2024wheel1 11 Apr 11:13 MacintoshHD-> /lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes...
|
NULL
|
|
992
|
24
|
10
|
2026-04-11T12:44:43.253416+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911483253_m1.jpg...
|
NetAuthAgent
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
You are attempting to connect to the server “[IP_A You are attempting to connect to the server “[IP_ADDRESS]”.
Click Connect to continue.
Cancel
Connect...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"You are attempting to connect to the server “100.73.206.126”.","depth":1,"bounds":{"left":0.42222223,"top":0.32555556,"width":0.15555556,"height":0.035555556},"automation_id":"_NS:78","role_description":"text"},{"role":"AXStaticText","text":"Click Connect to continue.","depth":1,"bounds":{"left":0.42222223,"top":0.37222221,"width":0.15555556,"height":0.015555556},"automation_id":"_NS:58","role_description":"text"},{"role":"AXButton","text":"Cancel","depth":1,"bounds":{"left":0.41666666,"top":0.3988889,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-2","role_description":"button","is_enabled":true,"is_focused":true},{"role":"AXButton","text":"Connect","depth":1,"bounds":{"left":0.49861112,"top":0.3988889,"width":0.08472222,"height":0.044444446},"automation_id":"action-button-1","role_description":"button","is_enabled":true,"is_focused":false}]...
|
503569374908914351
|
-4458832263596867383
|
app_switch
|
accessibility
|
NULL
|
You are attempting to connect to the server “[IP_A You are attempting to connect to the server “[IP_ADDRESS]”.
Click Connect to continue.
Cancel
Connect...
|
NULL
|
|
993
|
24
|
11
|
2026-04-11T12:44:44.345165+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911484345_m1.jpg...
|
NetAuthAgent
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Connect
Cancel
Enter your name and password for th Connect
Cancel
Enter your name and password for the server “[IP_ADDRESS]”.
lukas
Connect As:
Name:
Password:
[PASSWORD] this password in my keychain
Guest
Registered User...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Connect","depth":1,"bounds":{"left":0.58055556,"top":0.46,"width":0.059722222,"height":0.035555556},"automation_id":"_NS:135","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Cancel","depth":1,"bounds":{"left":0.5222222,"top":0.46,"width":0.059722222,"height":0.035555556},"automation_id":"_NS:73","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Enter your name and password for the server “100.73.206.126”.","depth":1,"bounds":{"left":0.41319445,"top":0.24555555,"width":0.22361112,"height":0.035555556},"automation_id":"_NS:142","role_description":"text"},{"role":"AXTextField","text":"lukas","depth":1,"bounds":{"left":0.47152779,"top":0.35666665,"width":0.16388889,"height":0.023333333},"automation_id":"_NS:162","value":"lukas","help_text":"Domain\\Username","role_description":"text field","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Connect As:","depth":1,"bounds":{"left":0.41319445,"top":0.29222223,"width":0.054166667,"height":0.017777778},"automation_id":"_NS:90","role_description":"text"},{"role":"AXStaticText","text":"Name:","depth":1,"bounds":{"left":0.41319445,"top":0.3588889,"width":0.054166667,"height":0.017777778},"automation_id":"_NS:165","role_description":"text"},{"role":"AXStaticText","text":"Password:","depth":1,"bounds":{"left":0.42152777,"top":0.39333335,"width":0.045833334,"height":0.017777778},"automation_id":"_NS:171","role_description":"text"},{"role":"AXCheckBox","text":"Remember this password in my keychain","depth":1,"bounds":{"left":0.42152777,"top":0.42444444,"width":0.18888889,"height":0.02},"automation_id":"_NS:177","role_description":"tickbox","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Guest","depth":1,"bounds":{"left":0.47013888,"top":0.2911111,"width":0.043055557,"height":0.02},"automation_id":"_NS:98","role_description":"radio button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Registered User","depth":1,"bounds":{"left":0.47013888,"top":0.31555554,"width":0.08611111,"height":0.02},"automation_id":"_NS:185","role_description":"radio button","is_enabled":true,"is_focused":false}]...
|
6036086878475845940
|
-5116765239370960177
|
app_switch
|
accessibility
|
NULL
|
Connect
Cancel
Enter your name and password for th Connect
Cancel
Enter your name and password for the server “[IP_ADDRESS]”.
lukas
Connect As:
Name:
Password:
[PASSWORD] this password in my keychain
Guest
Registered User...
|
NULL
|
|
994
|
24
|
12
|
2026-04-11T12:44:51.620704+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911491620_m1.jpg...
|
Finder
|
Connecting to Server
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Connecting to smb://[IP_ADDRESS] …
stop progress
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Connecting to smb://100.73.206.126 …","depth":2,"bounds":{"left":0.4027778,"top":0.28666666,"width":0.21736111,"height":0.015555556},"automation_id":"_NS:59","role_description":"text"},{"role":"AXButton","text":"stop progress","depth":2,"bounds":{"left":0.62430555,"top":0.30277777,"width":0.009027778,"height":0.014444444},"automation_id":"_NS:8","role_description":"button","is_enabled":true,"is_focused":false}]...
|
-6771789453710362571
|
2307253270419169996
|
app_switch
|
hybrid
|
NULL
|
Connecting to smb://[IP_ADDRESS] …
stop progress
F Connecting to smb://[IP_ADDRESS] …
stop progress
FinderFileEditViewGoWindowHelp-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴3-zsh• 84-zshukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~$sqlite3~/.screenpipe/db.sqlite"SELECT pipe_name,status, started_at,finished_at, stdout, stderrFROM pipe_executionsORDER BY started_at DESCRecentsLIMIT 5;"lukas@Lukas-Kovaliks-MacBook-PrdG lukas20525 screenpipelukas@Lukas-Kovaliks-MacBook-Prdlhl100% <47Sat 11 Apr 15:44:51181• ₴5-zshO ₴6-zshX7Date Last Opened-rw-r--r--1 lukasstaffiCloud• iCloud DriveMMM1lukasstaffEnter your name and password for the server"[IP_ADDRESS]".Connect As:-rw-r--r--1lukasstaff80328.5288 Sync folderGuestRegistered Userlukas@Lukas-Kovaliks-MacBook-Prd01260412604lukas@Lukas-Kovaliks-MacBook-PrdTags• CRMName:AdminPassword:[PASSWORD] •015771577• Orangelukas@Lukas-Kovaliks-MacBook-ProRemember this password in my keychain~/.screenpipe/db.sqlite \• RedAdm1n@[IP_ADDRESS]:/volume1/• YellowCancelConnectssh: connect to host 100.73.206.rsync: connection unexpectedly d• Green|rsync error: unexplained error (• Bluesender=2.6.9]lukas@Lukas-Kovaliks-MacBook-Prd• Purple,CleanShot 2022-08-25 at [EMAIL]-large.jpg018681868PNG imageJPEG imageJPEG imageJPEG image14 December 2021 at 14:2617 February 2022 at 19:0423 February 2022 at 16:5423 February 2022 at 16:5623 February 2022 at 16:5923 February 2022 at 17:0123 February 2022 at 17:0423 February 2022 at 17:0524 July 2022 at 14:3824 July 2022 at 15:0124 July 2022 at 15:029 August 2022 at 19:4825 August 2022 at 18:2411 January 2023 at 16:2511 January 2023 at 16:2811 January 2023 at 16:28urces/rsync/rsync/io.c(453) [lukas@Lukas-Kovaliks-MacBook-Prd@ All Tags....83 items~/.screenpipe/db.sqlite \Adm1n@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqliteug_start_server, check access user: 1000, group: 10getuidO: 1000geteuidO: 1000login group is admin, set euid as rootcannot set euid as rootinvalid path: '/volume1/docker/screenpipe/db.sqlite'rsync error: errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1)rsync: connection unexpectedly closed (0 bytes received so far) [sender]rsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453)[sender=2.6.9]lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd/Volumeslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Nolumes$ 11total 0drwxr-xr-xdrwxr-xr-xlrwxr-xr-x3 root20 root1 rootwheel96 11 Apr 11:14wheel6404 Aug2024wheel1 11 Apr 11:13 Macintosh HD- 1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes$...
|
NULL
|
|
996
|
24
|
14
|
2026-04-11T12:44:59.238922+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911499238_m1.jpg...
|
Finder
|
Connecting to Server
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Connecting to smb://[IP_ADDRESS] …
stop progress
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Connecting to smb://100.73.206.126 …","depth":2,"bounds":{"left":0.4027778,"top":0.28666666,"width":0.21736111,"height":0.015555556},"automation_id":"_NS:59","role_description":"text"},{"role":"AXButton","text":"stop progress","depth":2,"bounds":{"left":0.62430555,"top":0.30277777,"width":0.009027778,"height":0.014444444},"automation_id":"_NS:8","role_description":"button","is_enabled":true,"is_focused":false}]...
|
-6771789453710362571
|
2307253270419169996
|
app_switch
|
hybrid
|
NULL
|
Connecting to smb://[IP_ADDRESS] …
stop progress
F Connecting to smb://[IP_ADDRESS] …
stop progress
FinderFileEditViewGoWindowHelplhl100% <47Sat 11 Apr 15:44:58-zsh181DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zshX7ukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~$sqlite3~/.screenpipe/db.sqlite"SELECT pipe_name,status, started_at,finished_at, stdout, stderrFROM pipe_executionsORDER BY started_at DESCLIMIT 5;"lukas@Lukas-Kovaliks-MacBook-ProG lukas20525 screenpipelukas@Lukas-Kovaliks-MacBook-PrdiMMCDate Last OpenedSelect the volumes you want to mount on"[IP_ADDRESS]":-rw-r--r--1 lukasstaffiCloud• iCloud Drivent1lukasstaff-rw-r--r--1lukasstaff80328.5288 Sync folderlukas@Lukas-Kovaliks-MacBook-Prd01260412604lukas@Lukas-Kovaliks-MacBook-PrdTags• CRM015771577• Orangelukas@Lukas-Kovaliks-MacBook-Pro~/.screenpipe/db.sqlite \• RedAdm1n@[IP_ADDRESS]:/volume1/• YellowgamesGoogleMartiMediaMoviesMusicpersonal_folderTestWorkYoutubessh: connect to host 100.73.206.otsotsptsrsync: connection unexpectedly d• Green|rsync error: unexplained error (CancelOK• Bluesender=2.6.9]lukas@Lukas-Kovaliks-MacBook-Prd• Purple,background-large.jpg018681868JPEG image14 December 2021 at 14:2617 February 2022 at 19:0423 February 2022 at 16:5423 February 2022 at 16:5623 February 2022 at 16:5923 February 2022 at 17:0123 February 2022 at 17:0423 February 2022 at 17:0524 July 2022 at 14:3824 July 2022 at 15:0124 July 2022 at 15:029 August 2022 at 19:4825 August 2022 at 18:2411 January 2023 at 16:2511 January 2023 at 16:2811 January 2023 at 16:28urces/rsync/rsync/io.c(453) [lukas@Lukas-Kovaliks-MacBook-Prd@ All Tags....83 items~/.screenpipe/db.sqlite \Adm1n@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqliteug_start_server, check access user: 1000, group: 10getuidO: 1000geteuidO: 1000login group is admin, set euid as rootcannot set euid as rootinvalid path: '/volume1/docker/screenpipe/db.sqlite'rsync error: errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]rsync: connection unexpectedly closed (0 bytes received so far) [sender]rsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453)[sender=2.6.9]lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd/Volumeslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Nolumes$ 11total 0drwxr-xr-xdrwxr-xr-xlrwxr-xr-x3 root20 root1 rootwheel96 11 Apr 11:14wheel6404 Aug2024wheel1 11 Apr 11:13 Macintosh HD- 1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes$...
|
NULL
|
|
1051
|
24
|
69
|
2026-04-11T12:48:00.522071+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911680522_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 80M 11 Apr 15:37 /Us -rw-r--r-- 1 lukas staff 80M 11 Apr 15:37 /Users/lukas/.screenpipe/db.sqlite
-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 /Users/lukas/.screenpipe/db.sqlite-shm
-rw-r--r-- 1 lukas staff 8.5M 11 Apr 15:39 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"
0|2604|2604
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"
0|577|577
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \
~/.screenpipe/db.sqlite \
Adm1n@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqlite
ssh: connect to host [IP_ADDRESS] port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"
0|868|868
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \
~/.screenpipe/db.sqlite \
Adm1n@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqlite
ug_start_server, check access user: 1000, group: 10
getuid(): 1000 geteuid(): 1000
login group is admin, set euid as root
cannot set euid as root
invalid path: '/volume1/docker/screenpipe/db.sqlite'
rsync error: errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 0
drwxr-xr-x 3 root wheel 96 11 Apr 11:14 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 64
drwxr-xr-x 5 root wheel 160 11 Apr 15:45 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 13 Jan 12:37 BT
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ du -sh ~/.screenpipe/
du -sh ~/.screenpipe/data/
du -sh ~/.screenpipe/data/* 2>/dev/null
189M /Users/lukas/.screenpipe/
92M /Users/lukas/.screenpipe/data/
92M /Users/lukas/.screenpipe/data/data
0B /Users/lukas/.screenpipe/data/pending-transcriptions
0B /Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 80M 11 Apr 15:37 /Users/lukas/.screenpipe/db.sqlite\n-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 /Users/lukas/.screenpipe/db.sqlite-shm\n-rw-r--r-- 1 lukas staff 8.5M 11 Apr 15:39 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint;\"\n0|2604|2604\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint;\"\n0|577|577\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \\\n ~/.screenpipe/db.sqlite \\\n Adm1n@100.73.206.126:/volume1/docker/screenpipe/db.sqlite\nssh: connect to host 100.73.206.126 port 22: Connection refused\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: unexplained error (code 255) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint;\"\n0|868|868\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \\ \n ~/.screenpipe/db.sqlite \\\n Adm1n@100.73.206.126:/volume1/docker/screenpipe/db.sqlite\nug_start_server, check access user: 1000, group: 10\ngetuid(): 1000\u0000\tgeteuid(): 1000\nlogin group is admin, set euid as root\ncannot set euid as root\ninvalid path: '/volume1/docker/screenpipe/db.sqlite'\nrsync error: errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 0\ndrwxr-xr-x 3 root wheel 96 11 Apr 11:14 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll \ntotal 64\ndrwxr-xr-x 5 root wheel 160 11 Apr 15:45 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\ndrwx------ 1 lukas staff 16384 13 Jan 12:37 BT\nlrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ du -sh ~/.screenpipe/\ndu -sh ~/.screenpipe/data/\ndu -sh ~/.screenpipe/data/* 2>/dev/null\n189M\u0000\u0000\u0000\t/Users/lukas/.screenpipe/\n 92M\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/\n 92M\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/data\n 0B\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/pending-transcriptions\n 0B\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $","depth":4,"value":"-rw-r--r-- 1 lukas staff 80M 11 Apr 15:37 /Users/lukas/.screenpipe/db.sqlite\n-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 /Users/lukas/.screenpipe/db.sqlite-shm\n-rw-r--r-- 1 lukas staff 8.5M 11 Apr 15:39 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint;\"\n0|2604|2604\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint;\"\n0|577|577\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \\\n ~/.screenpipe/db.sqlite \\\n Adm1n@100.73.206.126:/volume1/docker/screenpipe/db.sqlite\nssh: connect to host 100.73.206.126 port 22: Connection refused\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: unexplained error (code 255) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint;\"\n0|868|868\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \\ \n ~/.screenpipe/db.sqlite \\\n Adm1n@100.73.206.126:/volume1/docker/screenpipe/db.sqlite\nug_start_server, check access user: 1000, group: 10\ngetuid(): 1000\u0000\tgeteuid(): 1000\nlogin group is admin, set euid as root\ncannot set euid as root\ninvalid path: '/volume1/docker/screenpipe/db.sqlite'\nrsync error: errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 0\ndrwxr-xr-x 3 root wheel 96 11 Apr 11:14 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll \ntotal 64\ndrwxr-xr-x 5 root wheel 160 11 Apr 15:45 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\ndrwx------ 1 lukas staff 16384 13 Jan 12:37 BT\nlrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ du -sh ~/.screenpipe/\ndu -sh ~/.screenpipe/data/\ndu -sh ~/.screenpipe/data/* 2>/dev/null\n189M\u0000\u0000\u0000\t/Users/lukas/.screenpipe/\n 92M\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/\n 92M\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/data\n 0B\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/pending-transcriptions\n 0B\u0000\u0000\u0000\t/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-2750168966753561933
|
7854997359215476593
|
app_switch
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 80M 11 Apr 15:37 /Us -rw-r--r-- 1 lukas staff 80M 11 Apr 15:37 /Users/lukas/.screenpipe/db.sqlite
-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 /Users/lukas/.screenpipe/db.sqlite-shm
-rw-r--r-- 1 lukas staff 8.5M 11 Apr 15:39 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"
0|2604|2604
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"
0|577|577
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \
~/.screenpipe/db.sqlite \
Adm1n@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqlite
ssh: connect to host [IP_ADDRESS] port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint;"
0|868|868
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ rsync -avz --progress \
~/.screenpipe/db.sqlite \
Adm1n@[IP_ADDRESS]:/volume1/docker/screenpipe/db.sqlite
ug_start_server, check access user: 1000, group: 10
getuid(): 1000 geteuid(): 1000
login group is admin, set euid as root
cannot set euid as root
invalid path: '/volume1/docker/screenpipe/db.sqlite'
rsync error: errors selecting input/output files, dirs (code 3) at clientserver.c(2089) [Receiver=3.4.1]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/rsync/rsync/io.c(453) [sender=2.6.9]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 0
drwxr-xr-x 3 root wheel 96 11 Apr 11:14 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 64
drwxr-xr-x 5 root wheel 160 11 Apr 15:45 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 13 Jan 12:37 BT
lrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cp ~/.screenpipe/db.sqlite /Volumes/Test/screenpipe/db.sqlite
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ du -sh ~/.screenpipe/
du -sh ~/.screenpipe/data/
du -sh ~/.screenpipe/data/* 2>/dev/null
189M /Users/lukas/.screenpipe/
92M /Users/lukas/.screenpipe/data/
92M /Users/lukas/.screenpipe/data/data
0B /Users/lukas/.screenpipe/data/pending-transcriptions
0B /Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
1096
|
25
|
15
|
2026-04-11T12:52:50.122327+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775911970122_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpШOOA-zshDOCKER0 ₴1DEV (-zsh)-O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5lukas@Lukas-Kovaliks-MacBook-Pro-JiminnyNolumes$du-sh ~/.screenpipe/du-sh~/.screenpipe/data/du-sh~/.screenpipe/data/* 2>/dev/null189M/Users/lukas/.screenpipe/92M/Users/lukas/.screenpipe/data/92M/Users/lukas/.screenpipe/data/dataOB/Users/lukas/.screenpipe/data/pending-transcriptionsOB/Users/lukas/.screenpipe/data/screenpipe.dblukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes$ ls -lah ~/.screenpipe/data/data/ | head -20du-sh~/.screenpipe/data/data/*total 24drwxr-xr-xlukasstaff160B11 Apr 14:52drwxr-xr-x5lukasstaff160B11 Apr15:03-rw-r--r--@1lukasstaff8.0K9 Apr20:43DS_Storedrwxr-xr-x14 lukasstaff448B11 Apr14:532026-04-09drwxr-xr-x169 lukasstaff5.3K 11 Apr 15:492026-04-11-39M/Users/lukas/. screenpipe/data/data/2026-04-0954M/Users<as,screenpipe/data/data/2026-04-11asetotalidrwxrotdrwxrotdrwx-kaslrwxr-xr-xrootwheetАртdrwxlukasstaffl16384 11 Apr 15:46FinderLukaserukasKovaltks-масьоок- угоJcirtrinyNolumes $ calukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Volumes/Test $ ls#recycleGitara1910229e6394bdc967d792141382106f.ug-tmp Jazykylocation-history(1).jsonlocation-history.jsonCODESyncDatascreenpipeComputer ScienceSkolastart machine.wavlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Volumes/Test $ cd screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Nolumes/Test/screenpipe $ lsdb.sqlitelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes/Test/screenpipe $ cp -r ~/.screenpipe/data/data/ /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes/Test/screenpipe $ 11total 175224drwxrwxrwx1 lukasstaff16384 11 Apr 15:50drwx--1lukasstaffdrwxrwxrwx1 lukasstaff1638411 Apr 15:461638411 Apr 15:51-rwxrwxrwx1 lukasstaffdata89665536 11 Apr 15:47db.sqlitelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes/Test/screenpipe $ 0-zsh100% <478Sat 11 Apr 15:52:50181• ₴6-zsh*7Nubuntu-24.04.4-live-server-amd64.iso...
|
NULL
|
3037039973143731241
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpШOOA-zshDOCKER0 ₴1DEV (-zsh)-O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5lukas@Lukas-Kovaliks-MacBook-Pro-JiminnyNolumes$du-sh ~/.screenpipe/du-sh~/.screenpipe/data/du-sh~/.screenpipe/data/* 2>/dev/null189M/Users/lukas/.screenpipe/92M/Users/lukas/.screenpipe/data/92M/Users/lukas/.screenpipe/data/dataOB/Users/lukas/.screenpipe/data/pending-transcriptionsOB/Users/lukas/.screenpipe/data/screenpipe.dblukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes$ ls -lah ~/.screenpipe/data/data/ | head -20du-sh~/.screenpipe/data/data/*total 24drwxr-xr-xlukasstaff160B11 Apr 14:52drwxr-xr-x5lukasstaff160B11 Apr15:03-rw-r--r--@1lukasstaff8.0K9 Apr20:43DS_Storedrwxr-xr-x14 lukasstaff448B11 Apr14:532026-04-09drwxr-xr-x169 lukasstaff5.3K 11 Apr 15:492026-04-11-39M/Users/lukas/. screenpipe/data/data/2026-04-0954M/Users<as,screenpipe/data/data/2026-04-11asetotalidrwxrotdrwxrotdrwx-kaslrwxr-xr-xrootwheetАртdrwxlukasstaffl16384 11 Apr 15:46FinderLukaserukasKovaltks-масьоок- угоJcirtrinyNolumes $ calukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Volumes/Test $ ls#recycleGitara1910229e6394bdc967d792141382106f.ug-tmp Jazykylocation-history(1).jsonlocation-history.jsonCODESyncDatascreenpipeComputer ScienceSkolastart machine.wavlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Volumes/Test $ cd screenpipelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny Nolumes/Test/screenpipe $ lsdb.sqlitelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes/Test/screenpipe $ cp -r ~/.screenpipe/data/data/ /Volumes/Test/screenpipe/data/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes/Test/screenpipe $ 11total 175224drwxrwxrwx1 lukasstaff16384 11 Apr 15:50drwx--1lukasstaffdrwxrwxrwx1 lukasstaff1638411 Apr 15:461638411 Apr 15:51-rwxrwxrwx1 lukasstaffdata89665536 11 Apr 15:47db.sqlitelukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes/Test/screenpipe $ 0-zsh100% <478Sat 11 Apr 15:52:50181• ₴6-zsh*7Nubuntu-24.04.4-live-server-amd64.iso...
|
NULL
|
|
1183
|
26
|
2
|
2026-04-11T15:15:28.760874+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775920528760_m1.jpg...
|
Firefox
|
Screenpipe Dashboard — Personal
|
True
|
http://100.73.206.126:8766
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How t DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
Časť 2 • HBO Max
Časť 2 • 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)
Denník N - Nezávislý denník
Denník N - Nezávislý denník
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
Problem loading page
Problem loading page
Machines - Tailscale
Machines - Tailscale
New Tab
New Tab
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Screenpipe
Screenpipe
Activity
Search
Audio
Summary
Date
09
/
04
/
2026
Calendar
Generate
Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1) - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"How to Get Through the Product Management Bottleneck","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to Get Through the Product Management Bottleneck","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Časť 2 • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Časť 2 • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Denník N - Nezávislý denník","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N - Nezávislý denník","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summary","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"09","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Generate","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5852082822010159623
|
-5376380977329844698
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How t DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
Časť 2 • HBO Max
Časť 2 • 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)
Denník N - Nezávislý denník
Denník N - Nezávislý denník
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
Problem loading page
Problem loading page
Machines - Tailscale
Machines - Tailscale
New Tab
New Tab
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Screenpipe
Screenpipe
Activity
Search
Audio
Summary
Date
09
/
04
/
2026
Calendar
Generate
Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data...
|
NULL
|
|
1185
|
26
|
4
|
2026-04-11T15:15:30.698776+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775920530698_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Sat Apr 11 12:38:46 on ttys011
Poetry Last login: Sat Apr 11 12:38:46 on ttys011
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 20490
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T14:52:50.886162Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T14:52:51.442353Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T14:52:51.443782Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T14:52:51.443780Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T14:52:51.443941Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T14:52:51.443951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T14:52:51.444116Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T14:52:51.444432Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T14:52:51.444553Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T14:52:51.444773Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T14:52:51.445452Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T14:52:51.445634Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T14:52:51.445793Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T14:52:51.446633Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T14:52:51.446657Z 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 │
2026-04-11T14:52:51.448625Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ 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-11T14:53:41.176568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7145100424875438454, trigger=visual_change)
2026-04-11T14:53:44.196346Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8924437196598515817, trigger=visual_change)
2026-04-11T14:53:51.491091Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible frames
2026-04-11T14:53:53.255989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155058752030339254, trigger=visual_change)
2026-04-11T14:53:56.264554Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 60 frames, 12.8MB → 8.5MB (1.5x), 60 JPEGs deleted
2026-04-11T14:57:11.256385Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3715613797207636890, trigger=clipboard)
2026-04-11T14:57:36.317569Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3611280572921422139, trigger=click)
2026-04-11T14:57:51.477153Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-11T14:58:26.484102Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T11:58:26.484075+00:00 (14d retention)
2026-04-11T14:58:56.266654Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-11T15:00:33.486284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=click)
2026-04-11T15:00:35.489067Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)
2026-04-11T15:00:38.060832Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)
2026-04-11T15:00:38.295434Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)
2026-04-11T15:02:51.477093Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-11T15:03:20.087215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)
2026-04-11T15:03:26.483078Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:03:26.483055+00:00 (14d retention)
2026-04-11T15:03:36.679760Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)
2026-04-11T15:03:38.215178Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=visual_change)
2026-04-11T15:03:38.695370Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)
2026-04-11T15:03:41.263013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6568947442135654933, trigger=visual_change)
2026-04-11T15:03:56.274203Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-04-11T15:03:57.988896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.8MB → 1.3MB (3.8x), 24 JPEGs deleted
2026-04-11T15:04:40.833804Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)
2026-04-11T15:04:41.063399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)
2026-04-11T15:04:41.343922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)
2026-04-11T15:04:51.650601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366181484518213906, trigger=visual_change)
2026-04-11T15:04:57.731740Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:00.748662Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:03.793468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:06.839941Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:33.935746Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-547577931005912570, trigger=click)
2026-04-11T15:06:15.466345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4589231096839639958, trigger=clipboard)
2026-04-11T15:06:51.363267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ 2026-04-11T15:06:56.924057Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)
2026-04-11T15:06:58.812503Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=clipboard)
2026-04-11T15:07:27.981850Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=click)
2026-04-11T15:07:28.855213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)
2026-04-11T15:07:30.747378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=clipboard)
2026-04-11T15:07:31.878497Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)
2026-04-11T15:08:26.482996Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:08:26.482982+00:00 (14d retention)
2026-04-11T15:08:28.537647Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=click)
2026-04-11T15:08:29.619210Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)
2026-04-11T15:08:31.986959Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)
2026-04-11T15:08:32.220910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)
2026-04-11T15:08:56.701928Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)
2026-04-11T15:08:57.991295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames
2026-04-11T15:09:01.110425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 7.8MB → 1.1MB (6.9x), 52 JPEGs deleted
2026-04-11T15:09:39.659472Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4034464612027230115, trigger=visual_change)
2026-04-11T15:09:57.798237Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-332181317459790359, trigger=visual_change)
2026-04-11T15:10:00.853194Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)
2026-04-11T15:10:02.957219Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=click)
2026-04-11T15:10:06.913321Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)
2026-04-11T15:10:37.190961Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8552368549857249682, trigger=visual_change)
2026-04-11T15:11:28.570703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)
2026-04-11T15:11:30.150570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)
2026-04-11T15:11:30.380213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)
2026-04-11T15:11:47.203026Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)
2026-04-11T15:13:26.442200Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:13:26.442182+00:00 (14d retention)
2026-04-11T15:14:01.076698Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 48 eligible frames
2026-04-11T15:14:03.929360Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 47 frames, 8.6MB → 1.2MB (7.4x), 47 JPEGs deleted
2026-04-11T15:16:26.114162Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)
2026-04-11T15:17:16.375594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8664222300600007459, trigger=clipboard)
2026-04-11T15:18:26.439614Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:18:26.439591+00:00 (14d retention)
2026-04-11T15:19:03.933805Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 69 eligible frames
2026-04-11T15:19:07.923190Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 10.3MB → 3.3MB (3.1x), 68 JPEGs deleted
2026-04-11T15:20:02.648297Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6431438662058337885, trigger=visual_change)
2026-04-11T15:20:37.441332Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=visual_change)
2026-04-11T15:20:38.458630Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)
2026-04-11T15:20:38.716873Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)
2026-04-11T15:22:23.478202Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=click)
2026-04-11T15:22:24.015541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=visual_change)
2026-04-11T15:22:26.578068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)
2026-04-11T15:22:26.815998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)
2026-04-11T15:23:26.436715Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:23:26.436698+00:00 (14d retention)
2026-04-11T15:23:33.641125Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:23:43.204440Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)
2026-04-11T15:23:45.679302Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:23:46.270898Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)
2026-04-11T15:23:46.508979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)
2026-04-11T15:23:55.286170Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:24:07.927287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames
2026-04-11T15:24:09.961238Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.1MB → 1.3MB (3.1x), 32 JPEGs deleted
2026-04-11T15:26:02.825639Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:05.829121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:08.835629Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:17.897094Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:20.900827Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:23.954160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:27.005692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:28.232448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)
2026-04-11T15:26:39.134537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:26:54.258448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:27:00.336862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:27:30.527153Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:27:43.109467Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5564327341532259539, trigger=visual_change)
2026-04-11T15:27:51.425755Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-11T15:27:52.134799Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:27:55.120375Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:28:04.227314Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:28:13.314950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:28:16.343373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5290834076233419911, trigger=visual_change)
2026-04-11T15:28:25.838550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1228449716849478253, trigger=visual_change)
2026-04-11T15:28:26.432056Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:28:26.432033+00:00 (14d retention)
2026-04-11T15:29:02.447960Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)
2026-04-11T15:29:03.526204Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)
2026-04-11T15:29:05.484796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)
2026-04-11T15:29:09.963979Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames
2026-04-11T15:29:11.524366Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.5MB → 1.5MB (2.3x), 22 JPEGs deleted
2026-04-11T15:32:51.441443Z INFO screenpipe_engine::server: api_usage_5min: 12 requests
2026-04-11T15:33:26.448896Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:33:26.448868+00:00 (14d retention)
2026-04-11T15:34:11.548370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 60 eligible frames
2026-04-11T15:34:15.198715Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 59 frames, 8.7MB → 2.7MB (3.2x), 59 JPEGs deleted
2026-04-11T15:36:55.421711Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1056278002134347819, trigger=click)
2026-04-11T15:38:26.445883Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:38:26.445874+00:00 (14d retention)
2026-04-11T15:39:15.203199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames
2026-04-11T15:39:17.896042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 7.9MB → 3.3MB (2.4x), 41 JPEGs deleted
2026-04-11T15:39:22.628009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)
2026-04-11T15:40:51.085780Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)
2026-04-11T15:40:54.090036Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)
2026-04-11T15:41:14.942757Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=click)
2026-04-11T15:41:51.925274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=visual_change)
2026-04-11T15:42:06.733148Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9134333679151793210, trigger=clipboard)
2026-04-11T15:43:26.444777Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:43:26.444758+00:00 (14d retention)
2026-04-11T15:44:17.901896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-11T15:44:19.819823Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 6.7MB → 0.6MB (10.4x), 31 JPEGs deleted
2026-04-11T15:44:43.561161Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=visual_change)
2026-04-11T15:44:44.116555Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=click)
2026-04-11T15:44:46.602387Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)
2026-04-11T15:44:46.848485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)
2026-04-11T15:44:58.298333Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)
2026-04-11T15:44:58.831343Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)
2026-04-11T15:45:15.852305Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1943114942963285964, trigger=click)
2026-04-11T15:46:30.230807Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-690409241556429904, trigger=visual_change)
2026-04-11T15:48:11.105141Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)
2026-04-11T15:48:16.072342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)
2026-04-11T15:48:16.986426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)
2026-04-11T15:48:17.226747Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)
2026-04-11T15:48:19.222226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)
2026-04-11T15:48:19.455433Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)
2026-04-11T15:48:26.442297Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:48:26.442286+00:00 (14d retention)
2026-04-11T15:49:05.772543Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)
2026-04-11T15:49:07.408013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=clipboard)
2026-04-11T15:49:19.824722Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-04-11T15:49:21.472806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 5.9MB → 0.3MB (17.1x), 27 JPEGs deleted
2026-04-11T15:49:32.920437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)
2026-04-11T15:49:37.735984Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=click)
2026-04-11T15:50:00.068149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3600375799318452972, trigger=visual_change)
2026-04-11T15:50:14.797396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7921159148465848282, trigger=clipboard)
2026-04-11T15:53:18.703240Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1683969307061943435, trigger=visual_change)
2026-04-11T15:53:26.451103Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:53:26.451090+00:00 (14d retention)
2026-04-11T15:53:36.786681Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8386364132144698109, trigger=visual_change)
2026-04-11T15:54:17.269264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)
2026-04-11T15:54:20.988571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)
2026-04-11T15:54:21.486111Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 56 eligible frames
2026-04-11T15:54:24.770729Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 12.0MB → 3.1MB (3.8x), 55 JPEGs deleted
2026-04-11T15:54:49.610552Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=visual_change)
2026-04-11T15:55:23.294042Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8172723579764904334, trigger=click)
2026-04-11T15:55:29.615394Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-840032284230470516, trigger=visual_change)
2026-04-11T15:55:32.627864Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=visual_change)
2026-04-11T15:55:36.657285Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=clipboard)
2026-04-11T15:56:12.334814Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)
2026-04-11T15:56:12.814703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)
2026-04-11T15:56:15.221473Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)
2026-04-11T15:56:30.880641Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)
2026-04-11T15:56:40.189869Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8183394029421591510, trigger=visual_change)
2026-04-11T15:56:57.575912Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7147084487812223121, trigger=click)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll ~/.screenpipe
total 228936
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .
drwx------+ 89 lukas staff 2848 11 Apr 15:55 ..
-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json
drwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data
-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite
-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll /Volumes
total 96
drwxr-xr-x 6 root wheel 192 11 Apr 16:12 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 13 Jan 12:37 BT
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:13 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite db.sqlite-wal screenpipe.2026-04-09.0.log
data db.sqlite-shm pipes screenpipe.2026-04-11.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 228936
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .
drwx------+ 89 lukas staff 2848 11 Apr 15:55 ..
-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json
drwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data
-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite
-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ls
data pending-transcriptions screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ls
2026-04-09 2026-04-11
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start
[1] 32288
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T17:08:36.719897Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T17:08:37.215460Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T17:08:37.217673Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T17:08:37.217680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T17:08:37.217858Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T17:08:37.217996Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T17:08:37.218044Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T17:08:37.218389Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T17:08:37.218608Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T17:08:37.218658Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T17:08:37.219291Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T17:08:37.219520Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T17:08:37.219693Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T17:08:37.220505Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T17:08:37.220526Z 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] ~/.screenpipe/data/data $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start
[1] 35889
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T18:14:48.637930Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T18:14:49.152954Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T18:14:49.154482Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T18:14:49.154483Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T18:14:49.154704Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T18:14:49.154709Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T18:14:49.154760Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T18:14:49.155177Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T18:14:49.155059Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T18:14:49.155400Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T18:14:49.156082Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T18:14:49.156255Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T18:14:49.156410Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T18:14:49.157294Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T18:14:49.157319Z 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 │
├────────────────────────┼────────────────...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Sat Apr 11 12:38:46 on ttys011\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\n[1] 20490\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-11T14:52:50.886162Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-11T14:52:51.442353Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-11T14:52:51.443782Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-11T14:52:51.443780Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-11T14:52:51.443941Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-11T14:52:51.443951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-11T14:52:51.444116Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-11T14:52:51.444432Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-11T14:52:51.444553Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-11T14:52:51.444773Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-11T14:52:51.445452Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-11T14:52:51.445634Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-11T14:52:51.445793Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-11T14:52:51.446633Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-11T14:52:51.446657Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-04-11T14:52:51.448625Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-11T14:52:51.449041Z INFO screenpipe: starting UI event capture\n2026-04-11T14:52:51.452565Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-11T14:52:51.454874Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-11T14:52:51.462971Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-11T14:52:51.476861Z INFO screenpipe_engine::ui_recorder: UI recording session started: 3c87e288-1128-414e-a08e-08b835039941\n2026-04-11T14:52:51.476943Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-10 11:52:51.476940 UTC to 2026-04-11 11:52:51.476940 UTC)\n2026-04-11T14:52:51.476899Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-11T14:52:51.477747Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-11T14:52:51.478180Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-04-10 11:52:51.476940 UTC\n2026-04-11T14:52:51.482338Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-11T14:52:51.487512Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-11T14:52:51.553834Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-11T14:52:51.553858Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-11T14:52:51.553868Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) — not in allowed list\n2026-04-11T14:52:51.553885Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-11T14:52:51.553903Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-11T14:52:52.265339Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-11T14:52:52.345651Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=524, dur=35ms\n2026-04-11T14:52:56.482318Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-11T14:52:56.483070Z INFO screenpipe: local retention auto-enabled (14 days)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ 2026-04-11T14:53:41.176568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7145100424875438454, trigger=visual_change)\n2026-04-11T14:53:44.196346Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8924437196598515817, trigger=visual_change)\n2026-04-11T14:53:51.491091Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible frames\n2026-04-11T14:53:53.255989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155058752030339254, trigger=visual_change)\n2026-04-11T14:53:56.264554Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 60 frames, 12.8MB → 8.5MB (1.5x), 60 JPEGs deleted\n2026-04-11T14:57:11.256385Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3715613797207636890, trigger=clipboard)\n2026-04-11T14:57:36.317569Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3611280572921422139, trigger=click)\n2026-04-11T14:57:51.477153Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-11T14:58:26.484102Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T11:58:26.484075+00:00 (14d retention)\n2026-04-11T14:58:56.266654Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-11T15:00:33.486284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=click)\n2026-04-11T15:00:35.489067Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)\n2026-04-11T15:00:38.060832Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)\n2026-04-11T15:00:38.295434Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)\n2026-04-11T15:02:51.477093Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-11T15:03:20.087215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)\n2026-04-11T15:03:26.483078Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:03:26.483055+00:00 (14d retention)\n2026-04-11T15:03:36.679760Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)\n2026-04-11T15:03:38.215178Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=visual_change)\n2026-04-11T15:03:38.695370Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)\n2026-04-11T15:03:41.263013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6568947442135654933, trigger=visual_change)\n2026-04-11T15:03:56.274203Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-04-11T15:03:57.988896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.8MB → 1.3MB (3.8x), 24 JPEGs deleted\n2026-04-11T15:04:40.833804Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)\n2026-04-11T15:04:41.063399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)\n2026-04-11T15:04:41.343922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)\n2026-04-11T15:04:51.650601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366181484518213906, trigger=visual_change)\n2026-04-11T15:04:57.731740Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:00.748662Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:03.793468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:06.839941Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:33.935746Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-547577931005912570, trigger=click)\n2026-04-11T15:06:15.466345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4589231096839639958, trigger=clipboard)\n2026-04-11T15:06:51.363267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ 2026-04-11T15:06:56.924057Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)\n2026-04-11T15:06:58.812503Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=clipboard)\n2026-04-11T15:07:27.981850Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=click)\n2026-04-11T15:07:28.855213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)\n2026-04-11T15:07:30.747378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=clipboard)\n2026-04-11T15:07:31.878497Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)\n2026-04-11T15:08:26.482996Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:08:26.482982+00:00 (14d retention)\n2026-04-11T15:08:28.537647Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=click)\n2026-04-11T15:08:29.619210Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)\n2026-04-11T15:08:31.986959Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)\n2026-04-11T15:08:32.220910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)\n2026-04-11T15:08:56.701928Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)\n2026-04-11T15:08:57.991295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames\n2026-04-11T15:09:01.110425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 7.8MB → 1.1MB (6.9x), 52 JPEGs deleted\n2026-04-11T15:09:39.659472Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4034464612027230115, trigger=visual_change)\n2026-04-11T15:09:57.798237Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-332181317459790359, trigger=visual_change)\n2026-04-11T15:10:00.853194Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)\n2026-04-11T15:10:02.957219Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=click)\n2026-04-11T15:10:06.913321Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)\n2026-04-11T15:10:37.190961Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8552368549857249682, trigger=visual_change)\n2026-04-11T15:11:28.570703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)\n2026-04-11T15:11:30.150570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)\n2026-04-11T15:11:30.380213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)\n2026-04-11T15:11:47.203026Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)\n2026-04-11T15:13:26.442200Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:13:26.442182+00:00 (14d retention)\n2026-04-11T15:14:01.076698Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 48 eligible frames\n2026-04-11T15:14:03.929360Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 47 frames, 8.6MB → 1.2MB (7.4x), 47 JPEGs deleted\n2026-04-11T15:16:26.114162Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)\n2026-04-11T15:17:16.375594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8664222300600007459, trigger=clipboard)\n2026-04-11T15:18:26.439614Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:18:26.439591+00:00 (14d retention)\n2026-04-11T15:19:03.933805Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 69 eligible frames\n2026-04-11T15:19:07.923190Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 10.3MB → 3.3MB (3.1x), 68 JPEGs deleted\n2026-04-11T15:20:02.648297Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6431438662058337885, trigger=visual_change)\n2026-04-11T15:20:37.441332Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=visual_change)\n2026-04-11T15:20:38.458630Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)\n2026-04-11T15:20:38.716873Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)\n2026-04-11T15:22:23.478202Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=click)\n2026-04-11T15:22:24.015541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=visual_change)\n2026-04-11T15:22:26.578068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)\n2026-04-11T15:22:26.815998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)\n2026-04-11T15:23:26.436715Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:23:26.436698+00:00 (14d retention)\n2026-04-11T15:23:33.641125Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:23:43.204440Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)\n2026-04-11T15:23:45.679302Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:23:46.270898Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)\n2026-04-11T15:23:46.508979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)\n2026-04-11T15:23:55.286170Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:24:07.927287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-11T15:24:09.961238Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.1MB → 1.3MB (3.1x), 32 JPEGs deleted\n2026-04-11T15:26:02.825639Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:05.829121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:08.835629Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:17.897094Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:20.900827Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:23.954160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:27.005692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:28.232448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)\n2026-04-11T15:26:39.134537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:26:54.258448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:27:00.336862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:27:30.527153Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:27:43.109467Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5564327341532259539, trigger=visual_change)\n2026-04-11T15:27:51.425755Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-11T15:27:52.134799Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:27:55.120375Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:28:04.227314Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:28:13.314950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:28:16.343373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5290834076233419911, trigger=visual_change)\n2026-04-11T15:28:25.838550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1228449716849478253, trigger=visual_change)\n2026-04-11T15:28:26.432056Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:28:26.432033+00:00 (14d retention)\n2026-04-11T15:29:02.447960Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)\n2026-04-11T15:29:03.526204Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)\n2026-04-11T15:29:05.484796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)\n2026-04-11T15:29:09.963979Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-04-11T15:29:11.524366Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.5MB → 1.5MB (2.3x), 22 JPEGs deleted\n2026-04-11T15:32:51.441443Z INFO screenpipe_engine::server: api_usage_5min: 12 requests\n2026-04-11T15:33:26.448896Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:33:26.448868+00:00 (14d retention)\n2026-04-11T15:34:11.548370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 60 eligible frames\n2026-04-11T15:34:15.198715Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 59 frames, 8.7MB → 2.7MB (3.2x), 59 JPEGs deleted\n2026-04-11T15:36:55.421711Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1056278002134347819, trigger=click)\n2026-04-11T15:38:26.445883Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:38:26.445874+00:00 (14d retention)\n2026-04-11T15:39:15.203199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames\n2026-04-11T15:39:17.896042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 7.9MB → 3.3MB (2.4x), 41 JPEGs deleted\n2026-04-11T15:39:22.628009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)\n2026-04-11T15:40:51.085780Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)\n2026-04-11T15:40:54.090036Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)\n2026-04-11T15:41:14.942757Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=click)\n2026-04-11T15:41:51.925274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=visual_change)\n2026-04-11T15:42:06.733148Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9134333679151793210, trigger=clipboard)\n2026-04-11T15:43:26.444777Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:43:26.444758+00:00 (14d retention)\n2026-04-11T15:44:17.901896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-11T15:44:19.819823Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 6.7MB → 0.6MB (10.4x), 31 JPEGs deleted\n2026-04-11T15:44:43.561161Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=visual_change)\n2026-04-11T15:44:44.116555Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=click)\n2026-04-11T15:44:46.602387Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)\n2026-04-11T15:44:46.848485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)\n2026-04-11T15:44:58.298333Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)\n2026-04-11T15:44:58.831343Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)\n2026-04-11T15:45:15.852305Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1943114942963285964, trigger=click)\n2026-04-11T15:46:30.230807Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-690409241556429904, trigger=visual_change)\n2026-04-11T15:48:11.105141Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)\n2026-04-11T15:48:16.072342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)\n2026-04-11T15:48:16.986426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)\n2026-04-11T15:48:17.226747Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)\n2026-04-11T15:48:19.222226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)\n2026-04-11T15:48:19.455433Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)\n2026-04-11T15:48:26.442297Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:48:26.442286+00:00 (14d retention)\n2026-04-11T15:49:05.772543Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)\n2026-04-11T15:49:07.408013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=clipboard)\n2026-04-11T15:49:19.824722Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-04-11T15:49:21.472806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 5.9MB → 0.3MB (17.1x), 27 JPEGs deleted\n2026-04-11T15:49:32.920437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)\n2026-04-11T15:49:37.735984Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=click)\n2026-04-11T15:50:00.068149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3600375799318452972, trigger=visual_change)\n2026-04-11T15:50:14.797396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7921159148465848282, trigger=clipboard)\n2026-04-11T15:53:18.703240Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1683969307061943435, trigger=visual_change)\n2026-04-11T15:53:26.451103Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:53:26.451090+00:00 (14d retention)\n2026-04-11T15:53:36.786681Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8386364132144698109, trigger=visual_change)\n2026-04-11T15:54:17.269264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)\n2026-04-11T15:54:20.988571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)\n2026-04-11T15:54:21.486111Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 56 eligible frames\n2026-04-11T15:54:24.770729Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 12.0MB → 3.1MB (3.8x), 55 JPEGs deleted\n2026-04-11T15:54:49.610552Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=visual_change)\n2026-04-11T15:55:23.294042Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8172723579764904334, trigger=click)\n2026-04-11T15:55:29.615394Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-840032284230470516, trigger=visual_change)\n2026-04-11T15:55:32.627864Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=visual_change)\n2026-04-11T15:55:36.657285Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=clipboard)\n2026-04-11T15:56:12.334814Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)\n2026-04-11T15:56:12.814703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)\n2026-04-11T15:56:15.221473Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)\n2026-04-11T15:56:30.880641Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)\n2026-04-11T15:56:40.189869Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8183394029421591510, trigger=visual_change)\n2026-04-11T15:56:57.575912Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7147084487812223121, trigger=click)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop\nscreenpipe stopped\n[1] + terminated npx screenpipe@latest record --disable-audio \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll ~/.screenpipe \ntotal 228936\ndrwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .\ndrwx------+ 89 lukas staff 2848 11 Apr 15:55 ..\n-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json\ndrwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data\n-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite\n-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll /Volumes \ntotal 96\ndrwxr-xr-x 6 root wheel 192 11 Apr 16:12 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\ndrwx------ 1 lukas staff 16384 13 Jan 12:37 BT\nlrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 11 Apr 16:13 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 228936\ndrwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .\ndrwx------+ 89 lukas staff 2848 11 Apr 15:55 ..\n-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json\ndrwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data\n-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite\n-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ls\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ls\n2026-04-09\u0000\u0000\u0000\u0000\u0000\t2026-04-11\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 32288\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-11T17:08:36.719897Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-11T17:08:37.215460Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-11T17:08:37.217673Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-11T17:08:37.217680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-11T17:08:37.217858Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-11T17:08:37.217996Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-11T17:08:37.218044Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-11T17:08:37.218389Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-11T17:08:37.218608Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-11T17:08:37.218658Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-11T17:08:37.219291Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-11T17:08:37.219520Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-11T17:08:37.219693Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-11T17:08:37.220505Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-11T17:08:37.220526Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-11T17:08:37.222937Z INFO screenpipe: starting UI event capture\n2026-04-11T17:08:37.222392Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-11T17:08:37.226036Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-11T17:08:37.229120Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-11T17:08:37.236636Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-11T17:08:37.250644Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-11T17:08:37.250727Z INFO screenpipe_engine::ui_recorder: UI recording session started: 0835a866-1525-418d-9b28-4bee2db007a7\n2026-04-11T17:08:37.250727Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-10 14:08:37.250721 UTC to 2026-04-11 14:08:37.250721 UTC)\n2026-04-11T17:08:37.251401Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-11T17:08:37.256857Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-11T17:08:37.262382Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-11T17:08:37.334531Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 654 frame entries, coverage from 2026-04-10 14:08:37.250721 UTC\n2026-04-11T17:08:37.441736Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-11T17:08:37.441853Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-11T17:08:37.441863Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) — not in allowed list\n2026-04-11T17:08:37.441870Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-11T17:08:37.441915Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-11T17:08:38.177260Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-11T17:08:38.324389Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1178, dur=66ms\n2026-04-11T17:08:42.255826Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-11T17:08:42.256358Z INFO screenpipe: local retention auto-enabled (14 days)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-stop \nscreenpipe stopped\n[1] + terminated npx screenpipe@latest record --disable-audio \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 35889\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-11T18:14:48.637930Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-11T18:14:49.152954Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-11T18:14:49.154482Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-11T18:14:49.154483Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-11T18:14:49.154704Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-11T18:14:49.154709Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-11T18:14:49.154760Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-11T18:14:49.155177Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-11T18:14:49.155059Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-11T18:14:49.155400Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-11T18:14:49.156082Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-11T18:14:49.156255Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-11T18:14:49.156410Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-11T18:14:49.157294Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-11T18:14:49.157319Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-11T18:14:49.158771Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-11T18:14:49.159009Z INFO screenpipe: starting UI event capture\n2026-04-11T18:14:49.162404Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-11T18:14:49.164084Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-11T18:14:49.172587Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-11T18:14:49.187022Z INFO screenpipe_engine::ui_recorder: UI recording session started: f5ab4a30-2a53-4ae6-8f03-89fe11f27c08\n2026-04-11T18:14:49.187167Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-11T18:14:49.187268Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-10 15:14:49.187266 UTC to 2026-04-11 15:14:49.187266 UTC)\n2026-04-11T18:14:49.187516Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-11T18:14:49.193188Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-11T18:14:49.196809Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-11T18:14:49.282504Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 657 frame entries, coverage from 2026-04-10 15:14:49.187266 UTC\n2026-04-11T18:14:49.430508Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-11T18:14:49.430533Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-11T18:14:49.430543Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) — not in allowed list\n2026-04-11T18:14:49.430551Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-11T18:14:49.430591Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-11T18:14:50.196560Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-11T18:14:50.336787Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1181, dur=69ms\n2026-04-11T18:14:54.191574Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-11T18:14:54.191989Z INFO screenpipe: local retention auto-enabled (14 days)","depth":4,"value":"Last login: Sat Apr 11 12:38:46 on ttys011\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start\n[1] 20490\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-11T14:52:50.886162Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-11T14:52:51.442353Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-11T14:52:51.443782Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-11T14:52:51.443780Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-11T14:52:51.443941Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-11T14:52:51.443951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-11T14:52:51.444116Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-11T14:52:51.444432Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-11T14:52:51.444553Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-11T14:52:51.444773Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-11T14:52:51.445452Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-11T14:52:51.445634Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-11T14:52:51.445793Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-11T14:52:51.446633Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-11T14:52:51.446657Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-04-11T14:52:51.448625Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-11T14:52:51.449041Z INFO screenpipe: starting UI event capture\n2026-04-11T14:52:51.452565Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-11T14:52:51.454874Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-11T14:52:51.462971Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-11T14:52:51.476861Z INFO screenpipe_engine::ui_recorder: UI recording session started: 3c87e288-1128-414e-a08e-08b835039941\n2026-04-11T14:52:51.476943Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-10 11:52:51.476940 UTC to 2026-04-11 11:52:51.476940 UTC)\n2026-04-11T14:52:51.476899Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-11T14:52:51.477747Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-11T14:52:51.478180Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 0 frame entries, coverage from 2026-04-10 11:52:51.476940 UTC\n2026-04-11T14:52:51.482338Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-11T14:52:51.487512Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-11T14:52:51.553834Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-11T14:52:51.553858Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-11T14:52:51.553868Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) — not in allowed list\n2026-04-11T14:52:51.553885Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-11T14:52:51.553903Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-11T14:52:52.265339Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-11T14:52:52.345651Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=524, dur=35ms\n2026-04-11T14:52:56.482318Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-11T14:52:56.483070Z INFO screenpipe: local retention auto-enabled (14 days)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ 2026-04-11T14:53:41.176568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7145100424875438454, trigger=visual_change)\n2026-04-11T14:53:44.196346Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8924437196598515817, trigger=visual_change)\n2026-04-11T14:53:51.491091Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible frames\n2026-04-11T14:53:53.255989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155058752030339254, trigger=visual_change)\n2026-04-11T14:53:56.264554Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 60 frames, 12.8MB → 8.5MB (1.5x), 60 JPEGs deleted\n2026-04-11T14:57:11.256385Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3715613797207636890, trigger=clipboard)\n2026-04-11T14:57:36.317569Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3611280572921422139, trigger=click)\n2026-04-11T14:57:51.477153Z INFO screenpipe_engine::server: api_usage_5min: 1 requests\n2026-04-11T14:58:26.484102Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T11:58:26.484075+00:00 (14d retention)\n2026-04-11T14:58:56.266654Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames\n2026-04-11T15:00:33.486284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=click)\n2026-04-11T15:00:35.489067Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)\n2026-04-11T15:00:38.060832Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)\n2026-04-11T15:00:38.295434Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)\n2026-04-11T15:02:51.477093Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-11T15:03:20.087215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)\n2026-04-11T15:03:26.483078Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:03:26.483055+00:00 (14d retention)\n2026-04-11T15:03:36.679760Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)\n2026-04-11T15:03:38.215178Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=visual_change)\n2026-04-11T15:03:38.695370Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)\n2026-04-11T15:03:41.263013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6568947442135654933, trigger=visual_change)\n2026-04-11T15:03:56.274203Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames\n2026-04-11T15:03:57.988896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.8MB → 1.3MB (3.8x), 24 JPEGs deleted\n2026-04-11T15:04:40.833804Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)\n2026-04-11T15:04:41.063399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)\n2026-04-11T15:04:41.343922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)\n2026-04-11T15:04:51.650601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366181484518213906, trigger=visual_change)\n2026-04-11T15:04:57.731740Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:00.748662Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:03.793468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:06.839941Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)\n2026-04-11T15:05:33.935746Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-547577931005912570, trigger=click)\n2026-04-11T15:06:15.466345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4589231096839639958, trigger=clipboard)\n2026-04-11T15:06:51.363267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ 2026-04-11T15:06:56.924057Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)\n2026-04-11T15:06:58.812503Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=clipboard)\n2026-04-11T15:07:27.981850Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=click)\n2026-04-11T15:07:28.855213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)\n2026-04-11T15:07:30.747378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=clipboard)\n2026-04-11T15:07:31.878497Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)\n2026-04-11T15:08:26.482996Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:08:26.482982+00:00 (14d retention)\n2026-04-11T15:08:28.537647Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=click)\n2026-04-11T15:08:29.619210Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)\n2026-04-11T15:08:31.986959Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)\n2026-04-11T15:08:32.220910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)\n2026-04-11T15:08:56.701928Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)\n2026-04-11T15:08:57.991295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames\n2026-04-11T15:09:01.110425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 7.8MB → 1.1MB (6.9x), 52 JPEGs deleted\n2026-04-11T15:09:39.659472Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4034464612027230115, trigger=visual_change)\n2026-04-11T15:09:57.798237Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-332181317459790359, trigger=visual_change)\n2026-04-11T15:10:00.853194Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)\n2026-04-11T15:10:02.957219Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=click)\n2026-04-11T15:10:06.913321Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)\n2026-04-11T15:10:37.190961Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8552368549857249682, trigger=visual_change)\n2026-04-11T15:11:28.570703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)\n2026-04-11T15:11:30.150570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)\n2026-04-11T15:11:30.380213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)\n2026-04-11T15:11:47.203026Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)\n2026-04-11T15:13:26.442200Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:13:26.442182+00:00 (14d retention)\n2026-04-11T15:14:01.076698Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 48 eligible frames\n2026-04-11T15:14:03.929360Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 47 frames, 8.6MB → 1.2MB (7.4x), 47 JPEGs deleted\n2026-04-11T15:16:26.114162Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)\n2026-04-11T15:17:16.375594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8664222300600007459, trigger=clipboard)\n2026-04-11T15:18:26.439614Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:18:26.439591+00:00 (14d retention)\n2026-04-11T15:19:03.933805Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 69 eligible frames\n2026-04-11T15:19:07.923190Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 10.3MB → 3.3MB (3.1x), 68 JPEGs deleted\n2026-04-11T15:20:02.648297Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6431438662058337885, trigger=visual_change)\n2026-04-11T15:20:37.441332Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=visual_change)\n2026-04-11T15:20:38.458630Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)\n2026-04-11T15:20:38.716873Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)\n2026-04-11T15:22:23.478202Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=click)\n2026-04-11T15:22:24.015541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=visual_change)\n2026-04-11T15:22:26.578068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)\n2026-04-11T15:22:26.815998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)\n2026-04-11T15:23:26.436715Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:23:26.436698+00:00 (14d retention)\n2026-04-11T15:23:33.641125Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:23:43.204440Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)\n2026-04-11T15:23:45.679302Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:23:46.270898Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)\n2026-04-11T15:23:46.508979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)\n2026-04-11T15:23:55.286170Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:24:07.927287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames\n2026-04-11T15:24:09.961238Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.1MB → 1.3MB (3.1x), 32 JPEGs deleted\n2026-04-11T15:26:02.825639Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:05.829121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:08.835629Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:17.897094Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:20.900827Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:23.954160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:27.005692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)\n2026-04-11T15:26:28.232448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)\n2026-04-11T15:26:39.134537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:26:54.258448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:27:00.336862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:27:30.527153Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)\n2026-04-11T15:27:43.109467Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5564327341532259539, trigger=visual_change)\n2026-04-11T15:27:51.425755Z INFO screenpipe_engine::server: api_usage_5min: 3 requests\n2026-04-11T15:27:52.134799Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:27:55.120375Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:28:04.227314Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:28:13.314950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)\n2026-04-11T15:28:16.343373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5290834076233419911, trigger=visual_change)\n2026-04-11T15:28:25.838550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1228449716849478253, trigger=visual_change)\n2026-04-11T15:28:26.432056Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:28:26.432033+00:00 (14d retention)\n2026-04-11T15:29:02.447960Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)\n2026-04-11T15:29:03.526204Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)\n2026-04-11T15:29:05.484796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)\n2026-04-11T15:29:09.963979Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames\n2026-04-11T15:29:11.524366Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.5MB → 1.5MB (2.3x), 22 JPEGs deleted\n2026-04-11T15:32:51.441443Z INFO screenpipe_engine::server: api_usage_5min: 12 requests\n2026-04-11T15:33:26.448896Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:33:26.448868+00:00 (14d retention)\n2026-04-11T15:34:11.548370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 60 eligible frames\n2026-04-11T15:34:15.198715Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 59 frames, 8.7MB → 2.7MB (3.2x), 59 JPEGs deleted\n2026-04-11T15:36:55.421711Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1056278002134347819, trigger=click)\n2026-04-11T15:38:26.445883Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:38:26.445874+00:00 (14d retention)\n2026-04-11T15:39:15.203199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames\n2026-04-11T15:39:17.896042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 7.9MB → 3.3MB (2.4x), 41 JPEGs deleted\n2026-04-11T15:39:22.628009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)\n2026-04-11T15:40:51.085780Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)\n2026-04-11T15:40:54.090036Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)\n2026-04-11T15:41:14.942757Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=click)\n2026-04-11T15:41:51.925274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=visual_change)\n2026-04-11T15:42:06.733148Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9134333679151793210, trigger=clipboard)\n2026-04-11T15:43:26.444777Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:43:26.444758+00:00 (14d retention)\n2026-04-11T15:44:17.901896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames\n2026-04-11T15:44:19.819823Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 6.7MB → 0.6MB (10.4x), 31 JPEGs deleted\n2026-04-11T15:44:43.561161Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=visual_change)\n2026-04-11T15:44:44.116555Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=click)\n2026-04-11T15:44:46.602387Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)\n2026-04-11T15:44:46.848485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)\n2026-04-11T15:44:58.298333Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)\n2026-04-11T15:44:58.831343Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)\n2026-04-11T15:45:15.852305Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1943114942963285964, trigger=click)\n2026-04-11T15:46:30.230807Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-690409241556429904, trigger=visual_change)\n2026-04-11T15:48:11.105141Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)\n2026-04-11T15:48:16.072342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)\n2026-04-11T15:48:16.986426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)\n2026-04-11T15:48:17.226747Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)\n2026-04-11T15:48:19.222226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)\n2026-04-11T15:48:19.455433Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)\n2026-04-11T15:48:26.442297Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:48:26.442286+00:00 (14d retention)\n2026-04-11T15:49:05.772543Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)\n2026-04-11T15:49:07.408013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=clipboard)\n2026-04-11T15:49:19.824722Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-04-11T15:49:21.472806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 5.9MB → 0.3MB (17.1x), 27 JPEGs deleted\n2026-04-11T15:49:32.920437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)\n2026-04-11T15:49:37.735984Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=click)\n2026-04-11T15:50:00.068149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3600375799318452972, trigger=visual_change)\n2026-04-11T15:50:14.797396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7921159148465848282, trigger=clipboard)\n2026-04-11T15:53:18.703240Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1683969307061943435, trigger=visual_change)\n2026-04-11T15:53:26.451103Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:53:26.451090+00:00 (14d retention)\n2026-04-11T15:53:36.786681Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8386364132144698109, trigger=visual_change)\n2026-04-11T15:54:17.269264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)\n2026-04-11T15:54:20.988571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)\n2026-04-11T15:54:21.486111Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 56 eligible frames\n2026-04-11T15:54:24.770729Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 12.0MB → 3.1MB (3.8x), 55 JPEGs deleted\n2026-04-11T15:54:49.610552Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=visual_change)\n2026-04-11T15:55:23.294042Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8172723579764904334, trigger=click)\n2026-04-11T15:55:29.615394Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-840032284230470516, trigger=visual_change)\n2026-04-11T15:55:32.627864Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=visual_change)\n2026-04-11T15:55:36.657285Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=clipboard)\n2026-04-11T15:56:12.334814Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)\n2026-04-11T15:56:12.814703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)\n2026-04-11T15:56:15.221473Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)\n2026-04-11T15:56:30.880641Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)\n2026-04-11T15:56:40.189869Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8183394029421591510, trigger=visual_change)\n2026-04-11T15:56:57.575912Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7147084487812223121, trigger=click)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop\nscreenpipe stopped\n[1] + terminated npx screenpipe@latest record --disable-audio \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll ~/.screenpipe \ntotal 228936\ndrwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .\ndrwx------+ 89 lukas staff 2848 11 Apr 15:55 ..\n-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json\ndrwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data\n-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite\n-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll /Volumes \ntotal 96\ndrwxr-xr-x 6 root wheel 192 11 Apr 16:12 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\ndrwx------ 1 lukas staff 16384 13 Jan 12:37 BT\nlrwxr-xr-x 1 root wheel 1 11 Apr 11:13 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 11 Apr 16:13 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll\ntotal 228936\ndrwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .\ndrwx------+ 89 lukas staff 2848 11 Apr 15:55 ..\n-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json\ndrwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data\n-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite\n-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ls\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ls\n2026-04-09\u0000\u0000\u0000\u0000\u0000\t2026-04-11\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 32288\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-11T17:08:36.719897Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-11T17:08:37.215460Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-11T17:08:37.217673Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-11T17:08:37.217680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-11T17:08:37.217858Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-11T17:08:37.217996Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-11T17:08:37.218044Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-11T17:08:37.218389Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-11T17:08:37.218608Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-11T17:08:37.218658Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-11T17:08:37.219291Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-11T17:08:37.219520Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-11T17:08:37.219693Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-11T17:08:37.220505Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-11T17:08:37.220526Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-11T17:08:37.222937Z INFO screenpipe: starting UI event capture\n2026-04-11T17:08:37.222392Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-11T17:08:37.226036Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-11T17:08:37.229120Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-11T17:08:37.236636Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-11T17:08:37.250644Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-11T17:08:37.250727Z INFO screenpipe_engine::ui_recorder: UI recording session started: 0835a866-1525-418d-9b28-4bee2db007a7\n2026-04-11T17:08:37.250727Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-10 14:08:37.250721 UTC to 2026-04-11 14:08:37.250721 UTC)\n2026-04-11T17:08:37.251401Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-11T17:08:37.256857Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-11T17:08:37.262382Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-11T17:08:37.334531Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 654 frame entries, coverage from 2026-04-10 14:08:37.250721 UTC\n2026-04-11T17:08:37.441736Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-11T17:08:37.441853Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-11T17:08:37.441863Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) — not in allowed list\n2026-04-11T17:08:37.441870Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-11T17:08:37.441915Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-11T17:08:38.177260Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-11T17:08:38.324389Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1178, dur=66ms\n2026-04-11T17:08:42.255826Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-11T17:08:42.256358Z INFO screenpipe: local retention auto-enabled (14 days)\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-stop \nscreenpipe stopped\n[1] + terminated npx screenpipe@latest record --disable-audio \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start\n[1] 35889\ndetected hardware tier: Mid\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-11T18:14:48.637930Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-11T18:14:49.152954Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-11T18:14:49.154482Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-11T18:14:49.154483Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-11T18:14:49.154704Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-11T18:14:49.154709Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-11T18:14:49.154760Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-11T18:14:49.155177Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-11T18:14:49.155059Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-11T18:14:49.155400Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-11T18:14:49.156082Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-11T18:14:49.156255Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-11T18:14:49.156410Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-11T18:14:49.157294Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-11T18:14:49.157319Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ no monitors available │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-11T18:14:49.158771Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n2026-04-11T18:14:49.159009Z INFO screenpipe: starting UI event capture\n2026-04-11T18:14:49.162404Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-04-11T18:14:49.164084Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-11T18:14:49.172587Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-11T18:14:49.187022Z INFO screenpipe_engine::ui_recorder: UI recording session started: f5ab4a30-2a53-4ae6-8f03-89fe11f27c08\n2026-04-11T18:14:49.187167Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-11T18:14:49.187268Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-10 15:14:49.187266 UTC to 2026-04-11 15:14:49.187266 UTC)\n2026-04-11T18:14:49.187516Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-11T18:14:49.193188Z INFO screenpipe_engine::server: Server listening on 0.0.0.0:3030\n2026-04-11T18:14:49.196809Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-11T18:14:49.282504Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 657 frame entries, coverage from 2026-04-10 15:14:49.187266 UTC\n2026-04-11T18:14:49.430508Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-11T18:14:49.430533Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-11T18:14:49.430543Z INFO screenpipe_engine::vision_manager::manager: Skipping monitor 2 (Display 2_2560x1440_-597,-1440) — not in allowed list\n2026-04-11T18:14:49.430551Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-11T18:14:49.430591Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-11T18:14:50.196560Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps)\n2026-04-11T18:14:50.336787Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1181, dur=69ms\n2026-04-11T18:14:54.191574Z INFO screenpipe_engine::retention: retention: initialized with 14d retention\n2026-04-11T18:14:54.191989Z INFO screenpipe: local retention auto-enabled (14 days)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12291667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12708333,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24583334,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.36875,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37291667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.49166667,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.49583334,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6145833,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61875,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7375,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7416667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ssh","depth":2,"bounds":{"left":0.86041665,"top":0.05888889,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8645833,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
2963523872015364328
|
3292597621806441849
|
app_switch
|
accessibility
|
NULL
|
Last login: Sat Apr 11 12:38:46 on ttys011
Poetry Last login: Sat Apr 11 12:38:46 on ttys011
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-start
[1] 20490
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T14:52:50.886162Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T14:52:51.442353Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T14:52:51.443782Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T14:52:51.443780Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T14:52:51.443941Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T14:52:51.443951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T14:52:51.444116Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T14:52:51.444432Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T14:52:51.444553Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T14:52:51.444773Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T14:52:51.445452Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T14:52:51.445634Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T14:52:51.445793Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T14:52:51.446633Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T14:52:51.446657Z 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 │
2026-04-11T14:52:51.448625Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ 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-11T14:53:41.176568Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7145100424875438454, trigger=visual_change)
2026-04-11T14:53:44.196346Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8924437196598515817, trigger=visual_change)
2026-04-11T14:53:51.491091Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible frames
2026-04-11T14:53:53.255989Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155058752030339254, trigger=visual_change)
2026-04-11T14:53:56.264554Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 60 frames, 12.8MB → 8.5MB (1.5x), 60 JPEGs deleted
2026-04-11T14:57:11.256385Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3715613797207636890, trigger=clipboard)
2026-04-11T14:57:36.317569Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3611280572921422139, trigger=click)
2026-04-11T14:57:51.477153Z INFO screenpipe_engine::server: api_usage_5min: 1 requests
2026-04-11T14:58:26.484102Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T11:58:26.484075+00:00 (14d retention)
2026-04-11T14:58:56.266654Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible frames
2026-04-11T15:00:33.486284Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=click)
2026-04-11T15:00:35.489067Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)
2026-04-11T15:00:38.060832Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)
2026-04-11T15:00:38.295434Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=clipboard)
2026-04-11T15:02:51.477093Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-11T15:03:20.087215Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8792901288695439909, trigger=visual_change)
2026-04-11T15:03:26.483078Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:03:26.483055+00:00 (14d retention)
2026-04-11T15:03:36.679760Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)
2026-04-11T15:03:38.215178Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=visual_change)
2026-04-11T15:03:38.695370Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6401966732595570582, trigger=click)
2026-04-11T15:03:41.263013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6568947442135654933, trigger=visual_change)
2026-04-11T15:03:56.274203Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames
2026-04-11T15:03:57.988896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 4.8MB → 1.3MB (3.8x), 24 JPEGs deleted
2026-04-11T15:04:40.833804Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)
2026-04-11T15:04:41.063399Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)
2026-04-11T15:04:41.343922Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=clipboard)
2026-04-11T15:04:51.650601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1366181484518213906, trigger=visual_change)
2026-04-11T15:04:57.731740Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:00.748662Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:03.793468Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:06.839941Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5209459478567814992, trigger=visual_change)
2026-04-11T15:05:33.935746Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-547577931005912570, trigger=click)
2026-04-11T15:06:15.466345Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4589231096839639958, trigger=clipboard)
2026-04-11T15:06:51.363267Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ 2026-04-11T15:06:56.924057Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=click)
2026-04-11T15:06:58.812503Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=581186469891904606, trigger=clipboard)
2026-04-11T15:07:27.981850Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=click)
2026-04-11T15:07:28.855213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)
2026-04-11T15:07:30.747378Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=clipboard)
2026-04-11T15:07:31.878497Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2949593395551601951, trigger=visual_change)
2026-04-11T15:08:26.482996Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:08:26.482982+00:00 (14d retention)
2026-04-11T15:08:28.537647Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=click)
2026-04-11T15:08:29.619210Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)
2026-04-11T15:08:31.986959Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)
2026-04-11T15:08:32.220910Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=clipboard)
2026-04-11T15:08:56.701928Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5853192385605379516, trigger=visual_change)
2026-04-11T15:08:57.991295Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 53 eligible frames
2026-04-11T15:09:01.110425Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 52 frames, 7.8MB → 1.1MB (6.9x), 52 JPEGs deleted
2026-04-11T15:09:39.659472Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4034464612027230115, trigger=visual_change)
2026-04-11T15:09:57.798237Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-332181317459790359, trigger=visual_change)
2026-04-11T15:10:00.853194Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)
2026-04-11T15:10:02.957219Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=click)
2026-04-11T15:10:06.913321Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8864343563964157069, trigger=visual_change)
2026-04-11T15:10:37.190961Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8552368549857249682, trigger=visual_change)
2026-04-11T15:11:28.570703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)
2026-04-11T15:11:30.150570Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)
2026-04-11T15:11:30.380213Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)
2026-04-11T15:11:47.203026Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=visual_change)
2026-04-11T15:13:26.442200Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:13:26.442182+00:00 (14d retention)
2026-04-11T15:14:01.076698Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 48 eligible frames
2026-04-11T15:14:03.929360Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 47 frames, 8.6MB → 1.2MB (7.4x), 47 JPEGs deleted
2026-04-11T15:16:26.114162Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2193639622446553113, trigger=clipboard)
2026-04-11T15:17:16.375594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8664222300600007459, trigger=clipboard)
2026-04-11T15:18:26.439614Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:18:26.439591+00:00 (14d retention)
2026-04-11T15:19:03.933805Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 69 eligible frames
2026-04-11T15:19:07.923190Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 10.3MB → 3.3MB (3.1x), 68 JPEGs deleted
2026-04-11T15:20:02.648297Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6431438662058337885, trigger=visual_change)
2026-04-11T15:20:37.441332Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=visual_change)
2026-04-11T15:20:38.458630Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)
2026-04-11T15:20:38.716873Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8744299132617807326, trigger=clipboard)
2026-04-11T15:22:23.478202Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=click)
2026-04-11T15:22:24.015541Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=visual_change)
2026-04-11T15:22:26.578068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)
2026-04-11T15:22:26.815998Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2155183469395643749, trigger=clipboard)
2026-04-11T15:23:26.436715Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:23:26.436698+00:00 (14d retention)
2026-04-11T15:23:33.641125Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:23:43.204440Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)
2026-04-11T15:23:45.679302Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:23:46.270898Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)
2026-04-11T15:23:46.508979Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=clipboard)
2026-04-11T15:23:55.286170Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:24:07.927287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 33 eligible frames
2026-04-11T15:24:09.961238Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.1MB → 1.3MB (3.1x), 32 JPEGs deleted
2026-04-11T15:26:02.825639Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:05.829121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:08.835629Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:17.897094Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:20.900827Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:23.954160Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:27.005692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=visual_change)
2026-04-11T15:26:28.232448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1614245617554003222, trigger=click)
2026-04-11T15:26:39.134537Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:26:54.258448Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:27:00.336862Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:27:30.527153Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2710504821594427847, trigger=visual_change)
2026-04-11T15:27:43.109467Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5564327341532259539, trigger=visual_change)
2026-04-11T15:27:51.425755Z INFO screenpipe_engine::server: api_usage_5min: 3 requests
2026-04-11T15:27:52.134799Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:27:55.120375Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:28:04.227314Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:28:13.314950Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=2383013018574745247, trigger=visual_change)
2026-04-11T15:28:16.343373Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5290834076233419911, trigger=visual_change)
2026-04-11T15:28:25.838550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1228449716849478253, trigger=visual_change)
2026-04-11T15:28:26.432056Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:28:26.432033+00:00 (14d retention)
2026-04-11T15:29:02.447960Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)
2026-04-11T15:29:03.526204Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)
2026-04-11T15:29:05.484796Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=visual_change)
2026-04-11T15:29:09.963979Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 23 eligible frames
2026-04-11T15:29:11.524366Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.5MB → 1.5MB (2.3x), 22 JPEGs deleted
2026-04-11T15:32:51.441443Z INFO screenpipe_engine::server: api_usage_5min: 12 requests
2026-04-11T15:33:26.448896Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:33:26.448868+00:00 (14d retention)
2026-04-11T15:34:11.548370Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 60 eligible frames
2026-04-11T15:34:15.198715Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 59 frames, 8.7MB → 2.7MB (3.2x), 59 JPEGs deleted
2026-04-11T15:36:55.421711Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-1056278002134347819, trigger=click)
2026-04-11T15:38:26.445883Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:38:26.445874+00:00 (14d retention)
2026-04-11T15:39:15.203199Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 42 eligible frames
2026-04-11T15:39:17.896042Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 7.9MB → 3.3MB (2.4x), 41 JPEGs deleted
2026-04-11T15:39:22.628009Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5040064046657482078, trigger=click)
2026-04-11T15:40:51.085780Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)
2026-04-11T15:40:54.090036Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7256840241734884045, trigger=visual_change)
2026-04-11T15:41:14.942757Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=click)
2026-04-11T15:41:51.925274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3122514411329033846, trigger=visual_change)
2026-04-11T15:42:06.733148Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9134333679151793210, trigger=clipboard)
2026-04-11T15:43:26.444777Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:43:26.444758+00:00 (14d retention)
2026-04-11T15:44:17.901896Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 32 eligible frames
2026-04-11T15:44:19.819823Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 6.7MB → 0.6MB (10.4x), 31 JPEGs deleted
2026-04-11T15:44:43.561161Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=visual_change)
2026-04-11T15:44:44.116555Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=503569374908914351, trigger=click)
2026-04-11T15:44:46.602387Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)
2026-04-11T15:44:46.848485Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6036086878475845940, trigger=click)
2026-04-11T15:44:58.298333Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)
2026-04-11T15:44:58.831343Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8955148216857723207, trigger=click)
2026-04-11T15:45:15.852305Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1943114942963285964, trigger=click)
2026-04-11T15:46:30.230807Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-690409241556429904, trigger=visual_change)
2026-04-11T15:48:11.105141Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)
2026-04-11T15:48:16.072342Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)
2026-04-11T15:48:16.986426Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=click)
2026-04-11T15:48:17.226747Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=visual_change)
2026-04-11T15:48:19.222226Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)
2026-04-11T15:48:19.455433Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2750168966753561933, trigger=clipboard)
2026-04-11T15:48:26.442297Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:48:26.442286+00:00 (14d retention)
2026-04-11T15:49:05.772543Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)
2026-04-11T15:49:07.408013Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=clipboard)
2026-04-11T15:49:19.824722Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-04-11T15:49:21.472806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 5.9MB → 0.3MB (17.1x), 27 JPEGs deleted
2026-04-11T15:49:32.920437Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=visual_change)
2026-04-11T15:49:37.735984Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2267783208743854967, trigger=click)
2026-04-11T15:50:00.068149Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3600375799318452972, trigger=visual_change)
2026-04-11T15:50:14.797396Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7921159148465848282, trigger=clipboard)
2026-04-11T15:53:18.703240Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1683969307061943435, trigger=visual_change)
2026-04-11T15:53:26.451103Z INFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T12:53:26.451090+00:00 (14d retention)
2026-04-11T15:53:36.786681Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8386364132144698109, trigger=visual_change)
2026-04-11T15:54:17.269264Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)
2026-04-11T15:54:20.988571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=click)
2026-04-11T15:54:21.486111Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 56 eligible frames
2026-04-11T15:54:24.770729Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 55 frames, 12.0MB → 3.1MB (3.8x), 55 JPEGs deleted
2026-04-11T15:54:49.610552Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4852040557833493511, trigger=visual_change)
2026-04-11T15:55:23.294042Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-8172723579764904334, trigger=click)
2026-04-11T15:55:29.615394Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-840032284230470516, trigger=visual_change)
2026-04-11T15:55:32.627864Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=visual_change)
2026-04-11T15:55:36.657285Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-2790297092733594032, trigger=clipboard)
2026-04-11T15:56:12.334814Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)
2026-04-11T15:56:12.814703Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=click)
2026-04-11T15:56:15.221473Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)
2026-04-11T15:56:30.880641Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3958933543995388716, trigger=clipboard)
2026-04-11T15:56:40.189869Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8183394029421591510, trigger=visual_change)
2026-04-11T15:56:57.575912Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7147084487812223121, trigger=click)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll ~/.screenpipe
total 228936
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .
drwx------+ 89 lukas staff 2848 11 Apr 15:55 ..
-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json
drwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data
-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite
-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ll /Volumes
total 96
drwxr-xr-x 6 root wheel 192 11 Apr 16:12 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
drwx------ 1 lukas staff 16384 13 Jan 12:37 BT
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:13 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ cd ~/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls
config.json db.sqlite db.sqlite-wal screenpipe.2026-04-09.0.log
data db.sqlite-shm pipes screenpipe.2026-04-11.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 228936
drwxr-xr-x 10 lukas staff 320 11 Apr 14:52 .
drwx------+ 89 lukas staff 2848 11 Apr 15:55 ..
-rw-r--r-- 1 lukas staff 270 9 Apr 20:27 config.json
drwxr-xr-x 5 lukas staff 160 11 Apr 15:03 data
-rw-r--r-- 1 lukas staff 97337344 11 Apr 15:54 db.sqlite
-rw-r--r-- 1 lukas staff 32768 11 Apr 14:52 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16484152 11 Apr 15:57 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 37529 11 Apr 15:56 screenpipe.2026-04-11.0.log
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ls
data pending-transcriptions screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ls
2026-04-09 2026-04-11
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start
[1] 32288
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T17:08:36.719897Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T17:08:37.215460Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T17:08:37.217673Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T17:08:37.217680Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T17:08:37.217858Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T17:08:37.217996Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T17:08:37.218044Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T17:08:37.218389Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T17:08:37.218608Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T17:08:37.218658Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T17:08:37.219291Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T17:08:37.219520Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T17:08:37.219693Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T17:08:37.220505Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T17:08:37.220526Z 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] ~/.screenpipe/data/data $ sp-stop
screenpipe stopped
[1] + terminated npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-start
[1] 35889
detected hardware tier: Mid
checking permissions...
screen recording: ok
accessibility: ok
2026-04-11T18:14:48.637930Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-11T18:14:49.152954Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-11T18:14:49.154482Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-11T18:14:49.154483Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-11T18:14:49.154704Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-11T18:14:49.154709Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-11T18:14:49.154760Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-11T18:14:49.155177Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-11T18:14:49.155059Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-11T18:14:49.155400Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-11T18:14:49.156082Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-11T18:14:49.156255Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-11T18:14:49.156410Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-11T18:14:49.157294Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-11T18:14:49.157319Z 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 │
├────────────────────────┼────────────────...
|
NULL
|
|
1194
|
27
|
6
|
2026-04-11T15:17:35.961210+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775920655961_m1.jpg...
|
Firefox
|
Screenpipe Dashboard — Personal
|
True
|
http://100.73.206.126:8766
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How t DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
Časť 2 • HBO Max
Časť 2 • 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)
Denník N - Nezávislý denník
Denník N - Nezávislý denník
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
Problem loading page
Problem loading page
Machines - Tailscale
Machines - Tailscale
New Tab
New Tab
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Screenpipe
Screenpipe
Activity
Search
Audio
Summary
Date
09
/
04
/
2026
Calendar
Generate
Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1) - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"How to Get Through the Product Management Bottleneck","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to Get Through the Product Management Bottleneck","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Časť 2 • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Časť 2 • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Denník N - Nezávislý denník","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N - Nezávislý denník","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Summary","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"09","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Generate","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5852082822010159623
|
-5376380977329844698
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How t DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
Časť 2 • HBO Max
Časť 2 • 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)
Denník N - Nezávislý denník
Denník N - Nezávislý denník
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
Problem loading page
Problem loading page
Machines - Tailscale
Machines - Tailscale
New Tab
New Tab
Screenpipe Dashboard
Screenpipe Dashboard
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Screenpipe
Screenpipe
Activity
Search
Audio
Summary
Date
09
/
04
/
2026
Calendar
Generate
Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data...
|
NULL
|
|
1356
|
30
|
10
|
2026-04-11T15:34:49.431339+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775921689431_m1.jpg...
|
Alfred
|
Alfred
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Alfred Search Field
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"Alfred Search Field","depth":1,"bounds":{"left":0.26180556,"top":0.16777778,"width":0.4763889,"height":0.05888889},"help_text":"Alfred Search","role_description":"text field","is_enabled":true,"is_focused":true}]...
|
7926243118367575
|
7570943109877468232
|
app_switch
|
hybrid
|
NULL
|
Alfred Search Field
FirefoxFileEditViewHistoryBook Alfred Search Field
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp(ahlsshDOCKER981DEV (-zsh)0 82APP (-zsh)• *3-zsh• *4-zsh-zshO 886=>= writingimagesha256:1cc7249e9796b8284c46f3dc76d83af56a9b1903a27d24f170ef37e32d4250d1namingto docker.io/library/app-screenpipe-app[+]Running 1/1• Container screenpipe-appStartedAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/ar[+]Building 1.4s (10/10) FINISHED=> [screenpipe-app internal] load build def'=>=> transferring dockerfile: 266B=> [screenpipe-app internal] load metadata fordocker.io/library/python:3.12-slim= [screenpipe-app internal] load .dockerignore=>=> transferring context:2B=> [screenpipe-app 1/5]FROM docker.io/library/python:3.12-slim@sha256:804ddf3251a60bbf9c92e73b7566c40428d54d0e79d3428194edf40da6521286=> [screenpipe-app internal]load buildcontext= => transferringcontext: 38.85kB=> CACHED [screenpipe-app 2/5] WORKDIR|/app=> CACHED [screenpipe-app3/5JCOPY requirements.txt=> CACHED [screenpipe-app4/5] RUN pip install--no-cache-dir -r requirements.txt[screenpipe-app 5/5]COPY=> [screenpipe-app] exporting to image= => exporting layers= => writingimage sha256:419c50efa06cbdea99ee696ab64e21b0c1be3e80c7c0c907cfa4397d3c8922fe=> => namingto docker.io/library/app-screenpipe-app[+] Running 1/1• Container screenpipe-appStartedAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ sudo docker compose up -d--build[+]Building 1.6s (10/10) FINISHED[screenpipe-app internal] load build definition from Dockerfile= transferring dockerfile: 266B=> [screenpipe-app internal]load metadata fordocker.io/library/python:3.12-slim= [screenpipe-app internal] loaddockerignore= transferringcontext: 2B=> [screenpipe-app 1/5] FROM docker.io/library/python:3.12-slim@sha256:804ddf3251a60bbf9c92e73b7566c40428d54d0e79d3428194edf40da6521286=> [screenpipe-app internal] load build context= = transferring context: 47.13kB=> CACHED [screenpipe-app 2/5] WORKDIR /app=> CACHED [screenpipe-app 3/5] COPY requirements.txt=> CACHED [screenpipe-app 4/5] RUN pip install--no-cache-dir -r requirements.txt=>[screenpipe-app 5/5]COPY=> [screenpipe-app] exporting to image= exporting layers= writing image sha256:573a54bded4817332baee83c3f0af51cabcb12859f06ebcf0f7ad428c1553e42namingto docker.io/library/app-screenpipe-app[+] Running 1/1• Container screenpipe-appStartedAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ U-zsh100% C787Sat 11 Apr 18:34:49T81ssh0.0s0.0s0.85docker:default0.150.0s0.650.0s0.0s0.0s0.0s0.050.050.0s0.0s0.250.2s0.150.0s0.0s0.85docker:default0.150.050.850.050.050.0s0.150.0s0.050.0s0.[IP_ADDRESS].0s0.0s0.85...
|
NULL
|
|
1357
|
30
|
11
|
2026-04-11T15:34:52.475611+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775921692475_m1.jpg...
|
Firefox
|
Vimium Options — Personal
|
True
|
moz-extension://f5e9c63e-b25b-4f15-8ba2-4813105e11 moz-extension://f5e9c63e-b25b-4f15-8ba2-4813105e11bb/pages/options.html...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
Edit DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
Edit profile
Edit profile
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
Časť 2 • HBO Max
Časť 2 • 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)
Maďarské voľby – Denník N
Maďarské voľby – Denník N
Vimium Options
Vimium Options
Close tab
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
Problem loading page
Problem loading page
Machines - Tailscale
Machines - Tailscale
New Tab
New Tab
Screenpipe Dashboard
Screenpipe Dashboard
New Tab
New Tab
New Tab
New Tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Google Account: Lukáš Koválik ([EMAIL])
Main menu
New chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said how to use vimium in firefox
You said
how to use vimium in firefox
Show more options
Show thinking
Gemini said
Gemini said
Vimium (specifically
Vimium-FF
for Firefox) is a fantastic extension that lets you navigate the web entirely from your keyboard,
using standard Vim shortcuts.
Here is a guide on how to get started and the essential commands you need to know.
1. Installation
1. Installation
If you haven't already,
go to the Firefox Add-ons page,
search for
Vimium-FF
,
and click
Add to Firefox
.
Ask Gemini
Ask Gemini
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Gemini is AI and can make mistakes, including about people.
Your privacy and Gemini Opens in a new window
Your privacy and Gemini
Opens in a new window
Summarize page
Summarize page
Vimium Options
Excluded URLs and keys
Excluded URLs and keys
Patterns
Keys to exclude
https?://mail.google.com/*
All
✖
Patterns
https?://mail.google.com/*
Keys to exclude
All
✖
Add rule
Disable Vimium on URLs.
"Patterns" are URL regular expressions.
*
will match zero or more characters.
"Keys": Vimium will exclude these keys and pass them through to the page.
Custom key mappings
Custom key mappings
# Insert your preferred key mappings here.
Example syntax:
map j scrollDown
map z2 setZoom level=2
unmap j
unmapAll
" this is a comment
# this is also a comment
See all available commands
See all available commands
.
Custom search engines
Custom search engines
w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia
# More examples.
#
# (Vimium supports search completion Wikipedia, as
# above, and for these.)
#
# g: https://www.google.com/search?q=%s Google
# l: https://www.google.com/search?q=%s&btnI I'm feeling lucky...
# y: https://www.youtube.com/results?search_query=%s Youtube
# gm: https://www.google.com/maps?q=%s Google maps
# b: https://www.bing.com/search?q=%s Bing
# d: https://duckduckgo.com/?q=%s DuckDuckGo
# az: https://www.amazon.com/s/?field-keywords=%s
# qw: https://www.qwant.com/?q=%s Qwant
Add search-engine shortcuts to the Vomnibar. Format:
a: http://a.com/?q=%s
b: http://b.com/?q=%s description
" this is a comment
# this is also a comment
%s is replaced with the search terms.
For search completion, see
here
here
.
New tab URL
New tab URL
Vimium blank new tab page
Vimium blank new tab page
Open the Vomnibar when the page loads
Open the Vomnibar when the page loads
Browser's default new tab page
Browser's default new tab page
Custom URL
Custom URL
The page to open when using Vimium's "create new tab" command. To have Vimium commands work on
all
new tab pages opened by the browser, a separate Vimium new tab extension is required. See the full details
here
here
.
Advanced Options
Scroll step size
Scroll step size
60
px
The size for basic movements (usually j/k/h/l).
Characters used for link hints
Characters used for link hints
sadfjklewcmpgh
Reset
Reset
The characters placed next to each link after typing "f" to enter link-hint mode.
Use smooth scrolling
Use smooth scrolling
Use the link's name and characters for link-hint filtering
Use the link's name and characters for link-hint filtering
In link-hint mode, this option lets you select a link by typing its text.
Don't let pages steal the focus on load
Don't let pages steal the focus on load
Prevent pages from focusing an input on load (e.g. Google, Bing, etc.).
Hide the Heads Up Display (HUD) in insert mode
Hide the Heads Up Display (HUD) in insert mode
When enabled, the HUD will not be displayed in insert mode.
Hide update notifications
Hide update notifications
When enabled, "Vimium has been updated" notifications will not be shown.
Treat find queries as JavaScript regular expressions
Treat find queries as JavaScript regular expressions
Switch back to plain find mode by using the
\R
escape sequence.
Ignore keyboard layout
Ignore keyboard layout
This forces the use of
en-US
QWERTY layout and can be helpful for non-Latin keyboards.
Previous patterns
Previous patterns
prev,previous,back,older,<,‹,←,«,≪,<<
Reset
Reset
The "navigate to previous page" command uses these patterns to find the link to follow.
Next patterns
Next patterns
next,more,newer,>,›,→,»,≫,>>
Reset
Reset
The "navigate to next page" command uses these patterns to find the link to follow.
CSS for Vimium UI
CSS for Vimium UI
div > .vimiumHintMarker {
/* linkhint boxes */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFF785),
color-stop(100%,#FFC542));
border: 1px solid #E3BE23;
}
div > .vimiumHintMarker span {
/* linkhint text */
color: black;
font-weight: bold;
font-size: 12px;
}
div > .vimiumHintMarker > .matchingCharacter {
}
Reset
Reset
These styles are applied to link hints, the Vomnibar, the help dialog, the exclusions pop-up and the HUD.
By default, this CSS is used to style the characters next to each link hint.
These styles are used in addition to and take precedence over Vimium's default styles.
[SEED_PHRASE].
Restore
Restore
Browse… No file selected.
Browse…
No file selected.
Choose a backup file to restore.
Type
?
to show the help dialog.
Type
Cmd-Enter
to save all options.
No changes...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1) - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Edit profile","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit profile","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to Get Through the Product Management Bottleneck","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to Get Through the Product Management Bottleneck","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Časť 2 • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Časť 2 • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Maďarské voľby – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Maďarské voľby – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":21,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":21,"role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said how to use vimium in firefox","depth":21,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how to use vimium in firefox","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Show more options","depth":23,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Show thinking","depth":29,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Gemini said","depth":23,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vimium (specifically","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vimium-FF","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for Firefox) is a fantastic extension that lets you navigate the web entirely from your keyboard,","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"using standard Vim shortcuts.","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a guide on how to get started and the essential commands you need to know.","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Installation","depth":26,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Installation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If you haven't already,","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"go to the Firefox Add-ons page,","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"search for","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vimium-FF","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and click","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Add to Firefox","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"Ask Gemini","depth":20,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open upload file menu","depth":20,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tools","depth":18,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open mode picker","depth":20,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pro","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Stop response","depth":19,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini is AI and can make mistakes, including about people.","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy and Gemini Opens in a new window","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy and Gemini","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vimium Options","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Excluded URLs and keys","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Excluded URLs and keys","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Patterns","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Keys to exclude","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"https?://mail.google.com/*","depth":12,"value":"https?://mail.google.com/*","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"All","depth":12,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"✖","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Patterns","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"https?://mail.google.com/*","depth":12,"value":"https?://mail.google.com/*","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Keys to exclude","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"All","depth":12,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"✖","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add rule","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Disable Vimium on URLs.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"Patterns\" are URL regular expressions.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"*","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will match zero or more characters.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"Keys\": Vimium will exclude these keys and pass them through to the page.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Custom key mappings","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Custom key mappings","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"# Insert your preferred key mappings here.","depth":8,"value":"# Insert your preferred key mappings here.","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Example syntax:","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"map j scrollDown\nmap z2 setZoom level=2\nunmap j\nunmapAll\n\" this is a comment\n# this is also a comment","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"See all available commands","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"See all available commands","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Custom search engines","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Custom search engines","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia\n\n# More examples.\n#\n# (Vimium supports search completion Wikipedia, as\n# above, and for these.)\n#\n# g: https://www.google.com/search?q=%s Google\n# l: https://www.google.com/search?q=%s&btnI I'm feeling lucky...\n# y: https://www.youtube.com/results?search_query=%s Youtube\n# gm: https://www.google.com/maps?q=%s Google maps\n# b: https://www.bing.com/search?q=%s Bing\n# d: https://duckduckgo.com/?q=%s DuckDuckGo\n# az: https://www.amazon.com/s/?field-keywords=%s\n# qw: https://www.qwant.com/?q=%s Qwant","depth":8,"value":"w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia\n\n# More examples.\n#\n# (Vimium supports search completion Wikipedia, as\n# above, and for these.)\n#\n# g: https://www.google.com/search?q=%s Google\n# l: https://www.google.com/search?q=%s&btnI I'm feeling lucky...\n# y: https://www.youtube.com/results?search_query=%s Youtube\n# gm: https://www.google.com/maps?q=%s Google maps\n# b: https://www.bing.com/search?q=%s Bing\n# d: https://duckduckgo.com/?q=%s DuckDuckGo\n# az: https://www.amazon.com/s/?field-keywords=%s\n# qw: https://www.qwant.com/?q=%s Qwant","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add search-engine shortcuts to the Vomnibar. Format:","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a: http://a.com/?q=%s\nb: http://b.com/?q=%s description\n\" this is a comment\n# this is also a comment","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s is replaced with the search terms.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"For search completion, see","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"here","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"here","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"New tab URL","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"New tab URL","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium blank new tab page","depth":9,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium blank new tab page","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Open the Vomnibar when the page loads","depth":10,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open the Vomnibar when the page loads","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser's default new tab page","depth":9,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser's default new tab page","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Custom URL","depth":9,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Custom URL","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The page to open when using Vimium's \"create new tab\" command. To have Vimium commands work on","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"all","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"new tab pages opened by the browser, a separate Vimium new tab extension is required. See the full details","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"here","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"here","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advanced Options","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Scroll step size","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scroll step size","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"60","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"px","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The size for basic movements (usually j/k/h/l).","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Characters used for link hints","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Characters used for link hints","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"sadfjklewcmpgh","depth":10,"value":"sadfjklewcmpgh","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Reset","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reset","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The characters placed next to each link after typing \"f\" to enter link-hint mode.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Use smooth scrolling","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Use smooth scrolling","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Use the link's name and characters for link-hint filtering","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Use the link's name and characters for link-hint filtering","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"In link-hint mode, this option lets you select a link by typing its text.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Don't let pages steal the focus on load","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Don't let pages steal the focus on load","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Prevent pages from focusing an input on load (e.g. Google, Bing, etc.).","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Hide the Heads Up Display (HUD) in insert mode","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hide the Heads Up Display (HUD) in insert mode","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"When enabled, the HUD will not be displayed in insert mode.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Hide update notifications","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hide update notifications","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"When enabled, \"Vimium has been updated\" notifications will not be shown.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Treat find queries as JavaScript regular expressions","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Treat find queries as JavaScript regular expressions","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Switch back to plain find mode by using the","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\\R","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"escape sequence.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Ignore keyboard layout","depth":9,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ignore keyboard layout","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This forces the use of","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"en-US","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QWERTY layout and can be helpful for non-Latin keyboards.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Previous patterns","depth":8,"bounds":{"left":0.05277778,"top":0.0,"width":0.39375,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Previous patterns","depth":9,"bounds":{"left":0.05277778,"top":0.0,"width":0.08680555,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"prev,previous,back,older,<,‹,←,«,≪,<<","depth":9,"bounds":{"left":0.05277778,"top":0.0,"width":0.17152777,"height":0.026666667},"value":"prev,previous,back,older,<,‹,←,«,≪,<<","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Reset","depth":10,"bounds":{"left":0.20277777,"top":0.0,"width":0.021527778,"height":0.015555556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reset","depth":11,"bounds":{"left":0.20277777,"top":0.0,"width":0.021527778,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The \"navigate to previous page\" command uses these patterns to find the link to follow.","depth":9,"bounds":{"left":0.23819445,"top":0.0,"width":0.19930555,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Next patterns","depth":8,"bounds":{"left":0.05277778,"top":0.022222223,"width":0.39375,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Next patterns","depth":9,"bounds":{"left":0.05277778,"top":0.022222223,"width":0.065972224,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"next,more,newer,>,›,→,»,≫,>>","depth":9,"bounds":{"left":0.05277778,"top":0.057777777,"width":0.17152777,"height":0.026666667},"value":"next,more,newer,>,›,→,»,≫,>>","help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Reset","depth":10,"bounds":{"left":0.20277777,"top":0.08555555,"width":0.021527778,"height":0.015555556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reset","depth":11,"bounds":{"left":0.20277777,"top":0.08555555,"width":0.021527778,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The \"navigate to next page\" command uses these patterns to find the link to follow.","depth":9,"bounds":{"left":0.23819445,"top":0.05888889,"width":0.18402778,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"CSS for Vimium UI","depth":8,"bounds":{"left":0.05277778,"top":0.115555555,"width":0.39375,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CSS for Vimium UI","depth":9,"bounds":{"left":0.05277778,"top":0.115555555,"width":0.093055554,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextArea","text":"div > .vimiumHintMarker {\n/* linkhint boxes */\nbackground: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFF785),\n color-stop(100%,#FFC542));\nborder: 1px solid #E3BE23;\n}\n\ndiv > .vimiumHintMarker span {\n/* linkhint text */\ncolor: black;\nfont-weight: bold;\nfont-size: 12px;\n}\n\ndiv > .vimiumHintMarker > .matchingCharacter {\n}","depth":9,"bounds":{"left":0.05277778,"top":0.15222222,"width":0.17152777,"height":0.15555556},"value":"div > .vimiumHintMarker {\n/* linkhint boxes */\nbackground: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFF785),\n color-stop(100%,#FFC542));\nborder: 1px solid #E3BE23;\n}\n\ndiv > .vimiumHintMarker span {\n/* linkhint text */\ncolor: black;\nfont-weight: bold;\nfont-size: 12px;\n}\n\ndiv > .vimiumHintMarker > .matchingCharacter {\n}","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Reset","depth":10,"bounds":{"left":0.20277777,"top":0.31,"width":0.021527778,"height":0.015555556},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reset","depth":11,"bounds":{"left":0.20277777,"top":0.31,"width":0.021527778,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"These styles are applied to link hints, the Vomnibar, the help dialog, the exclusions pop-up and the HUD.","depth":9,"bounds":{"left":0.23819445,"top":0.15222222,"width":0.20347223,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"By default, this CSS is used to style the characters next to each link hint.","depth":9,"bounds":{"left":0.23819445,"top":0.18777777,"width":0.2048611,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"These styles are used in addition to and take precedence over Vimium's default styles.","depth":9,"bounds":{"left":0.23819445,"top":0.24111111,"width":0.16527778,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backup and Restore","depth":9,"bounds":{"left":0.05277778,"top":0.34888887,"width":0.11319444,"height":0.023333333},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Backup","depth":8,"bounds":{"left":0.05277778,"top":0.40333334,"width":0.39375,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backup","depth":9,"bounds":{"left":0.05277778,"top":0.40444446,"width":0.036805555,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Download backup","depth":8,"bounds":{"left":0.05277778,"top":0.43888888,"width":0.17152777,"height":0.017777778},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Download backup","depth":9,"bounds":{"left":0.05277778,"top":0.43888888,"width":0.077083334,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Download a backup of your settings.","depth":9,"bounds":{"left":0.23819445,"top":0.44,"width":0.13402778,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Restore","depth":8,"bounds":{"left":0.05277778,"top":0.47,"width":0.39375,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Restore","depth":9,"bounds":{"left":0.05277778,"top":0.47111112,"width":0.03888889,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Browse… No file selected.","depth":8,"bounds":{"left":0.05277778,"top":0.50555557,"width":0.17152777,"height":0.024444444},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browse…","depth":9,"bounds":{"left":0.056944445,"top":0.5088889,"width":0.03888889,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No file selected.","depth":9,"bounds":{"left":0.103472225,"top":0.5088889,"width":0.07013889,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Choose a backup file to restore.","depth":9,"bounds":{"left":0.23819445,"top":0.50666666,"width":0.11736111,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Type","depth":10,"bounds":{"left":0.05277778,"top":0.0,"width":0.02013889,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"?","depth":11,"bounds":{"left":0.072916664,"top":0.0,"width":0.0055555557,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to show the help dialog.","depth":10,"bounds":{"left":0.07847222,"top":0.0,"width":0.08958333,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Type","depth":10,"bounds":{"left":0.05277778,"top":0.0,"width":0.02013889,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cmd-Enter","depth":11,"bounds":{"left":0.072916664,"top":0.0,"width":0.043055557,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to save all options.","depth":10,"bounds":{"left":0.11597222,"top":0.0,"width":0.07083333,"height":0.015555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"No changes","depth":10,"bounds":{"left":0.4138889,"top":0.0,"width":0.06736111,"height":0.025555555},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false}]...
|
-2730673543363518224
|
3307685878295759494
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
Edit DXP4800PLUS-B5F8
Inbox (1) - [EMAIL] - Gmail
Edit profile
Edit profile
How to Get Through the Product Management Bottleneck
How to Get Through the Product Management Bottleneck
Časť 2 • HBO Max
Časť 2 • 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)
Maďarské voľby – Denník N
Maďarské voľby – Denník N
Vimium Options
Vimium Options
Close tab
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
Problem loading page
Problem loading page
Machines - Tailscale
Machines - Tailscale
New Tab
New Tab
Screenpipe Dashboard
Screenpipe Dashboard
New Tab
New Tab
New Tab
New Tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Google Account: Lukáš Koválik ([EMAIL])
Main menu
New chat
Open menu for conversation actions.
Conversation with Gemini
Conversation with Gemini
Copy prompt
Edit
You said how to use vimium in firefox
You said
how to use vimium in firefox
Show more options
Show thinking
Gemini said
Gemini said
Vimium (specifically
Vimium-FF
for Firefox) is a fantastic extension that lets you navigate the web entirely from your keyboard,
using standard Vim shortcuts.
Here is a guide on how to get started and the essential commands you need to know.
1. Installation
1. Installation
If you haven't already,
go to the Firefox Add-ons page,
search for
Vimium-FF
,
and click
Add to Firefox
.
Ask Gemini
Ask Gemini
Open upload file menu
Tools
Open mode picker
Pro
Stop response
Gemini is AI and can make mistakes, including about people.
Your privacy and Gemini Opens in a new window
Your privacy and Gemini
Opens in a new window
Summarize page
Summarize page
Vimium Options
Excluded URLs and keys
Excluded URLs and keys
Patterns
Keys to exclude
https?://mail.google.com/*
All
✖
Patterns
https?://mail.google.com/*
Keys to exclude
All
✖
Add rule
Disable Vimium on URLs.
"Patterns" are URL regular expressions.
*
will match zero or more characters.
"Keys": Vimium will exclude these keys and pass them through to the page.
Custom key mappings
Custom key mappings
# Insert your preferred key mappings here.
Example syntax:
map j scrollDown
map z2 setZoom level=2
unmap j
unmapAll
" this is a comment
# this is also a comment
See all available commands
See all available commands
.
Custom search engines
Custom search engines
w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia
# More examples.
#
# (Vimium supports search completion Wikipedia, as
# above, and for these.)
#
# g: https://www.google.com/search?q=%s Google
# l: https://www.google.com/search?q=%s&btnI I'm feeling lucky...
# y: https://www.youtube.com/results?search_query=%s Youtube
# gm: https://www.google.com/maps?q=%s Google maps
# b: https://www.bing.com/search?q=%s Bing
# d: https://duckduckgo.com/?q=%s DuckDuckGo
# az: https://www.amazon.com/s/?field-keywords=%s
# qw: https://www.qwant.com/?q=%s Qwant
Add search-engine shortcuts to the Vomnibar. Format:
a: http://a.com/?q=%s
b: http://b.com/?q=%s description
" this is a comment
# this is also a comment
%s is replaced with the search terms.
For search completion, see
here
here
.
New tab URL
New tab URL
Vimium blank new tab page
Vimium blank new tab page
Open the Vomnibar when the page loads
Open the Vomnibar when the page loads
Browser's default new tab page
Browser's default new tab page
Custom URL
Custom URL
The page to open when using Vimium's "create new tab" command. To have Vimium commands work on
all
new tab pages opened by the browser, a separate Vimium new tab extension is required. See the full details
here
here
.
Advanced Options
Scroll step size
Scroll step size
60
px
The size for basic movements (usually j/k/h/l).
Characters used for link hints
Characters used for link hints
sadfjklewcmpgh
Reset
Reset
The characters placed next to each link after typing "f" to enter link-hint mode.
Use smooth scrolling
Use smooth scrolling
Use the link's name and characters for link-hint filtering
Use the link's name and characters for link-hint filtering
In link-hint mode, this option lets you select a link by typing its text.
Don't let pages steal the focus on load
Don't let pages steal the focus on load
Prevent pages from focusing an input on load (e.g. Google, Bing, etc.).
Hide the Heads Up Display (HUD) in insert mode
Hide the Heads Up Display (HUD) in insert mode
When enabled, the HUD will not be displayed in insert mode.
Hide update notifications
Hide update notifications
When enabled, "Vimium has been updated" notifications will not be shown.
Treat find queries as JavaScript regular expressions
Treat find queries as JavaScript regular expressions
Switch back to plain find mode by using the
\R
escape sequence.
Ignore keyboard layout
Ignore keyboard layout
This forces the use of
en-US
QWERTY layout and can be helpful for non-Latin keyboards.
Previous patterns
Previous patterns
prev,previous,back,older,<,‹,←,«,≪,<<
Reset
Reset
The "navigate to previous page" command uses these patterns to find the link to follow.
Next patterns
Next patterns
next,more,newer,>,›,→,»,≫,>>
Reset
Reset
The "navigate to next page" command uses these patterns to find the link to follow.
CSS for Vimium UI
CSS for Vimium UI
div > .vimiumHintMarker {
/* linkhint boxes */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFF785),
color-stop(100%,#FFC542));
border: 1px solid #E3BE23;
}
div > .vimiumHintMarker span {
/* linkhint text */
color: black;
font-weight: bold;
font-size: 12px;
}
div > .vimiumHintMarker > .matchingCharacter {
}
Reset
Reset
These styles are applied to link hints, the Vomnibar, the help dialog, the exclusions pop-up and the HUD.
By default, this CSS is used to style the characters next to each link hint.
These styles are used in addition to and take precedence over Vimium's default styles.
[SEED_PHRASE].
Restore
Restore
Browse… No file selected.
Browse…
No file selected.
Choose a backup file to restore.
Type
?
to show the help dialog.
Type
Cmd-Enter
to save all options.
No changes...
|
NULL
|
|
1360
|
30
|
14
|
2026-04-11T15:35:02.797578+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775921702797_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Sat Apr 11 15:55:23 on ttys013
sp-stop Last login: Sat Apr 11 15:55:23 on ttys013
sp-stop
DOCKER
Close Tab
DEV (-zsh)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Sat Apr 11 15:55:23 on ttys013\nsp-stop","depth":4,"bounds":{"left":0.0,"top":0.08777778,"width":0.9895833,"height":0.9122222},"value":"Last login: Sat Apr 11 15:55:23 on ttys013\nsp-stop","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.109375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_focused":false,"is_selected":false,"is_expanded":false}]...
|
4002333871090605046
|
3072080568334697144
|
app_switch
|
hybrid
|
NULL
|
Last login: Sat Apr 11 15:55:23 on ttys013
sp-stop Last login: Sat Apr 11 15:55:23 on ttys013
sp-stop
DOCKER
Close Tab
DEV (-zsh)
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp$0• 0sshDOCKER981DEV (-zsh)0 82APP (-zsh)• *3-zsh• *4-zsh-zshO 886=>= writingimage sha256:1cc7249e9796b8284c46f3dc76d83af56a9b1903a27d24f170ef37e32d4250d1namingto docker.io/library/app-screenpipe-app[+] Running 1/1• Container screenpipe-appStartedAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ sudo docker compose up -d --build[+]Building 1.4s (10/10) FINISHED=> [screenpipe-app internal] load build definition from Dockerfiletransferring dockerfile: 266B=> [screenpipe-app internal] load metadata fordocker.io/library/python:3.12-slim= [screenpipe-app internal] load .dockerignore=>= transferring context:2B=> [screenpipe-app 1/5]FROM docker.io/library/python:3.12-slim@sha256:804ddf3251a60bbf9c92e73b7566c40428d54d0e79d3428194edf40da6521286=> [screenpipe-app internal]load buildcontext= => transferringcontext: 38.85kB=> CACHED [screenpipe-app 2/5] WORKDIR/app=> CACHED [screenpipe-app3/5JCOPY requirements.txt=> CACHED [screenpipe-app 4/5] RUN pip install--no-cache-dir -r requirements.txt=> [screenpipe-app 5/5]COPY=> [screenpipe-app] exporting to image= => exporting layers= => writingimage sha256:419c50efa06cbdea99ee696ab64e21b0c1be3e80c7c0c907cfa4397d3c8922fe=> => namingto docker.io/library/app-screenpipe-app[+] Running 1/1• Container screenpipe-appStartedAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ sudo docker compose up -d--build[+]Building 1.6s (10/10) FINISHED[screenpipe-app internal] load build definition from Dockerfile= transferring dockerfile: 266B=> [screenpipe-app internal]load metadata fordocker.io/library/python:3.12-slim= [screenpipe-app internal] loaddockerignore= transferringcontext: 2B=> [screenpipe-app 1/5] FROM docker.io/library/python:3.12-slim@sha256:804ddf3251a60bbf9c92e73b7566c40428d54d0e79d3428194edf40da6521286=> [screenpipe-app internal] load build context= = transferring context: 47.13kB=> CACHED [screenpipe-app 2/5] WORKDIR /app=> CACHED [screenpipe-app 3/5] COPY requirements.txt=> CACHED [screenpipe-app 4/5] RUN pip install--no-cache-dir -r requirements.txt=>[screenpipe-app 5/5]COPY=> [screenpipe-app] exporting to image= exporting layers= writing image sha256:573a54bded4817332baee83c3f0af51cabcb12859f06ebcf0f7ad428c1553e42namingto docker.io/library/app-screenpipe-app[+] Running 1/1• Container screenpipe-appStartedAdm1n@DXP4800PLUS-B5F8:/volume1/screenpipe/app$ U100% C-zshSat 11 Apr 18:35:02T81ssh0.0s0.0s0.85docker:default0.150.0s0.650.0s0.0s0.0s0.0s0.050.050.0s0.0s0.250.2s0.150.0s0.0s0.85docker:default0.150.050.850.050.050.0s0.150.0s0.050.0s0.[IP_ADDRESS].0s0.0s0.85...
|
NULL
|
|
1408
|
31
|
1
|
2026-04-11T17:26:09.946632+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928369946_m1.jpg...
|
Firefox
|
Personal — Mozilla Firefox
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Časť 3 DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Časť 3 • HBO Max
Časť 3 • 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
Search results for "bitwarden" – Add-ons for Firefox (en-US)
Search results for "bitwarden" – Add-ons for Firefox (en-US)
New Tab
New Tab
Close 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
22°
C
New York City
Open menu
Do you want to see the weather for your location?
Do you want to see the weather for your location?
Not now
Not now
Yes
Yes
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
UGREEN NAS
UGREEN NAS
Open context menu for UGREEN NAS
Časť 2 • HBO Max
Časť 2 • HBO Max
Open context menu for Časť 2 • HBO Max
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Open context menu for Vimium – Get this Extension for 🦊 Firefox (en-US)
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Open context menu for How to use AI-enhanced tab groups | Firefox Help
Screenpipe Dashboard
Screenpipe Dashboard
Open context menu for Screenpipe Dashboard
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
Open context menu for Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Wikipedia
Wikipedia
Open context menu for Wikipedia
Customize
Customize...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Časť 3 • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Časť 3 • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search results for \"bitwarden\" – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search results for \"bitwarden\" – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"22°","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"C","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"New York City","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Open menu","depth":7,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Do you want to see the weather for your location?","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Do you want to see the weather for your location?","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Not now","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Not now","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Yes","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yes","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Mozilla Firefox","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Search with Google or enter address","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search with Google or enter address","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Inbox - kovaliklukas@gmail.com - Gmail","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"UGREEN NAS","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UGREEN NAS","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for UGREEN NAS","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Časť 2 • HBO Max","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Časť 2 • HBO Max","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Časť 2 • HBO Max","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"How to use AI-enhanced tab groups | Firefox Help","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for How to use AI-enhanced tab groups | Firefox Help","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe Dashboard","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Screenpipe Dashboard","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Wikipedia","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wikipedia","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open context menu for Wikipedia","depth":12,"help_text":"Open menu","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":8,"help_text":"Customize this page","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customize","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4711193219250801630
|
-5341263399910241562
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Časť 3 DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Časť 3 • HBO Max
Časť 3 • 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
Search results for "bitwarden" – Add-ons for Firefox (en-US)
Search results for "bitwarden" – Add-ons for Firefox (en-US)
New Tab
New Tab
Close 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
22°
C
New York City
Open menu
Do you want to see the weather for your location?
Do you want to see the weather for your location?
Not now
Not now
Yes
Yes
Mozilla Firefox
Search with Google or enter address
Search with Google or enter address
Inbox - [EMAIL] - Gmail
Inbox - [EMAIL] - Gmail
Open context menu for Inbox - [EMAIL] - Gmail
UGREEN NAS
UGREEN NAS
Open context menu for UGREEN NAS
Časť 2 • HBO Max
Časť 2 • HBO Max
Open context menu for Časť 2 • HBO Max
Vimium – Get this Extension for 🦊 Firefox (en-US)
Vimium – Get this Extension for 🦊 Firefox (en-US)
Open context menu for Vimium – Get this Extension for 🦊 Firefox (en-US)
How to use AI-enhanced tab groups | Firefox Help
How to use AI-enhanced tab groups | Firefox Help
Open context menu for How to use AI-enhanced tab groups | Firefox Help
Screenpipe Dashboard
Screenpipe Dashboard
Open context menu for Screenpipe Dashboard
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
Open context menu for Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N
Wikipedia
Wikipedia
Open context menu for Wikipedia
Customize
Customize...
|
NULL
|
|
1420
|
31
|
13
|
2026-04-11T17:26:37.089062+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928397089_m1.jpg...
|
Code
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Cannot reconnect. Please reload the window.
Reload Cannot reconnect. Please reload the window.
Reload Window
Cancel...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Cannot reconnect. Please reload the window.","depth":1,"automation_id":"_NS:78","role_description":"text"},{"role":"AXButton","text":"Reload Window","depth":1,"automation_id":"action-button--999","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Cancel","depth":1,"automation_id":"action-button--998","role_description":"button","is_enabled":true,"is_focused":true}]...
|
-9215443531147982391
|
7852115060714784816
|
app_switch
|
hybrid
|
NULL
|
Cannot reconnect. Please reload the window.
Reload Cannot reconnect. Please reload the window.
Reload Window
Cancel
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp-zshDOCKER• 881use all monitorsignored windowsincluded windowscloud syncauto-destruct piddeepgram keylanguagesDEV (-zsh)truedisablednot setO 82APP (-zsh)• *3-zsh• *4-zsh• 285$0(ahl-zsh886-zsh100% <7O 87Sat 11 Apr 20:26:37-zshT81• *8all languagesmonitorsno monitors availableaudio devicesdisabledyou 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: 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 UIevent capture2026-04-11T20:26:05.353656ZWARNscreenpipe:2026-04-11T20:26:05.358540ZINFOpiagent install failed: bun notfound- install from https://bun.shscreenpipe_engine::power::manager:initialpower profile:Performance (on_ac=true, battery=Some(100))2026-04-11T20:26:05.3638642INFOscreenpipe_engine::ui_recorder: Starting UIeventcapture2026-04-11T20:26:05.378325ZINFOscreenpipe_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-1117:26:05.378561 UTC)2026-04-11720:26:05.3794672INFO2026-04-11T20:26:05.384798Zscreenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)INFOscreenpipe_engine::server: Server listening on [IP_ADDRESS]:30302026-04-11T20:26:05.389960ZINFOscreenpipe_connect::mdns: mdns: advertising screenpipeon port 30302026-04-11T20:26:05.5281072INFOscreenpipe_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 recording for 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.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.488545ZINFOsck_rs::stream_manager:persistentSCK stream started for display 1 (1440x900,2fps)2026-04-11T20:26:07.067446ZINFOscreenpipe_engine::event_driven_capture: startupcapture for monitor 1:2026-04-11T20:26:08.752985ZINFOtrame_1d=140r, aur=33/msscreenpipe_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.383762ZINFO screenpipe: local retention auto-enabled (14 days)...
|
NULL
|
|
1431
|
32
|
0
|
2026-04-11T17:27:18.249125+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928438249_m1.jpg...
|
Firefox
|
Screenpipe Dashboard — Personal
|
True
|
http://100.73.206.126:8766
|
monitor_1
|
NULL
|
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
Search results for "bitwarden" – Add-ons for Firefox (en-US)
Search results for "bitwarden" – Add-ons 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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Search results for \"bitwarden\" – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search results for \"bitwarden\" – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TOTAL SPAN","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:52 → 15:54","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIVE","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BREAKS","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 breaks · 0.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SESSIONS","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"62m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FRAMES","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"612","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"APPS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UI EVENTS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1344","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AUDIO","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIVE PERIOD","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:52 → 15:54","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TIME PER APP","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— CLICK TO FILTER RIGHT PANEL","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.2m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.5m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.6m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.5m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NetAuthAgent","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Websites","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Windows","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"UI Events","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"nas.lakylak.xyz/desktop/#/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.7m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nas.lakylak.xyz/desktop/#/login/account","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"login.tailscale.com/login?next_url=%2Fadmin","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://localhost:3030","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"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","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-817909191078697115
|
-5356146286853993268
|
app_switch
|
accessibility
|
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
Search results for "bitwarden" – Add-ons for Firefox (en-US)
Search results for "bitwarden" – Add-ons 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...
|
NULL
|
|
1432
|
32
|
1
|
2026-04-11T17:27:18.683634+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928438683_m1.jpg...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
True
|
NULL
|
monitor_1
|
NULL
|
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
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
ai-habits
pipe.md
day-recap
meeting-summary
standup-update
time-breakdown
video-export
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
#!/bin/bash
DB="/volume1/Test/screenpipe/db.sqlite"
DATE=${1:-$(date -d "yesterday" '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo -e "\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 -e "\n⌨️ ACTIVITY TYPE PER APP"
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 -e "\n🌐 BROWSER URLS"
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 -e "\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 -e "\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 -e "\n📋 CLIPBOARD"
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 -e "\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';"
#!/bin/bash
DB="/volume1/Test/screenpipe/db.sqlite"
DATE=${1:-$(date -d "yesterday" '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo -e "\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 -e "\n⌨️ ACTIVITY TYPE PER APP"
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 -e "\n🌐 BROWSER URLS"
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 -e "\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 -e "\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 -e "\n📋 CLIPBOARD"
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 -e "\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';"
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
Info: Setting up SSH Host [IP_ADDRESS]: Setting up SSH tunnel
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
docker --version && docker compose version 2>/dev/null
Copy code to clipboard
OUT
Docker version 26.1.0, build 9714adc
Docker Compose version v2.26.1
[rerun: b8]
Bash
Create app directory structure
IN
mkdir -p /volume1/screenpipe/app/consumers /volume1/screenpipe/app/static
Copy code to clipboard
OUT
[rerun: b9]
Now let me build everything. I'll create all the files:
Write
requirements.txt
requirements.txt
6 lines
fastapi==0.115.12
uvicorn[standard]==0.34.0
click==8.1.8
anthropic==0.49.0
python-dotenv==1.1.0
Write
Dockerfile
Dockerfile
13 lines
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "[IP_ADDRESS]", "--port", "8000"]
Write
db.py
db.py
28 lines
import sqlite3
from contextlib import contextmanager
from datetime import date, datetime, timedelta, timezone
from typing import Generator
DB_PATH = "/data/db.sqlite"
@contextmanager
def get_conn() -> Generator[sqlite3.Connection, None, None]:
conn = sqlite3.connect(f"file:{DB_PATH}?mode=ro", uri=True)
conn.row_factory = sqlite3.Row
try:
yield conn
finally:
conn.close()
def date_range(for_date: date) -> tuple[str, str]:
"""Return ISO timestamps for start/end of a given date (UTC)."""
start = datetime(for_date.year, for_date.month, for_date.day, tzinfo=timezone.utc)
end = start + timedelta(days=1)
return start.isoformat(), end.isoformat()
def today() -> date:
return datetime.now(timezone.utc).date()
Write
__init__.py
__init__.py
1 line
Write
activity.py
activity.py
123 lines
"""App usage and window focus time consumer."""
from datetime import date
from typing import Any
from db import get_conn, date_range, today as _today
def app_time(for_date: date | None = None) -> list[dict[str, Any]]:
"""Return minutes spent per app for a given date, sorted descending."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT
o.app_name,
COUNT(*) as frame_count,
-- each frame ~ 2s at 0.5fps; convert to minutes
ROUND(COUNT(*) * 2.0 / 60, 1) as minutes
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
GROUP BY o.app_name
ORDER BY frame_count DESC
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
def window_time(for_date: date | None = None, app: str | None = None) -> list[dict[str, Any]]:
"""Return minutes spent per window/tab, optionally filtered by app."""
d = for_date or _today()
start, end = date_range(d)
query = """
SELECT
o.app_name,
o.window_name,
COUNT(*) as frame_count,
ROUND(COUNT(*) * 2.0 / 60, 1) as minutes
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
"""
params: list = [start, end]
if app:
query += " AND o.app_name = ?"
params.append(app)
query += " GROUP BY o.app_name, o.window_name ORDER BY frame_count DESC LIMIT 50"
with get_conn() as conn:
rows = conn.execute(query, params).fetchall()
return [dict(r) for r in rows]
def timeline(for_date: date | None = None, interval_minutes: int = 15) -> list[dict[str, Any]]:
"""Return activity bucketed into N-minute intervals."""
d = for_date or _today()
start, end = date_range(d)
interval_sec = interval_minutes * 60
with get_conn() as conn:
rows = conn.execute(
f"""
SELECT
datetime(
(strftime('%s', f.timestamp) / {interval_sec}) * {interval_sec},
'unixepoch'
) as bucket,
o.app_name,
COUNT(*) as frames
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
GROUP BY bucket, o.app_name
ORDER BY bucket, frames DESC
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
def summary_stats(for_date: date | None = None) -> dict[str, Any]:
"""Return high-level stats for a date."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
frames_row = conn.execute(
"SELECT COUNT(*) as n, MIN(timestamp) as first, MAX(timestamp) as last "
"FROM frames WHERE timestamp >= ? AND timestamp < ?",
(start, end),
).fetchone()
app_count = conn.execute(
"""
SELECT COUNT(DISTINCT o.app_name) as n
FROM frames f JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ? AND o.app_name != ''
""",
(start, end),
).fetchone()
audio_count = conn.execute(
"SELECT COUNT(*) as n FROM audio_transcriptions "
"WHERE timestamp >= ? AND timestamp < ?",
(start, end),
).fetchone()
return {
"date": str(d),
"total_frames": frames_row["n"],
"first_seen": frames_row["first"],
"last_seen": frames_row["last"],
"unique_apps": app_count["n"],
"audio_segments": audio_count["n"],
}
Write
ocr.py
ocr.py
92 lines
"""OCR text search and aggregation consumer."""
from datetime import date
from typing import Any
from db import get_conn, date_range, today as _today
def search(query: str, for_date: date | None = None, limit: int = 50) -> list[dict[str, Any]]:
"""Full-text search OCR content."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT
f.timestamp,
o.app_name,
o.window_name,
snippet(ocr_text_fts, 0, '[', ']', '...', 20) as snippet
FROM ocr_text_fts
JOIN ocr_text o ON ocr_text_fts.rowid = o.rowid
JOIN frames f ON o.frame_id = f.id
WHERE ocr_text_fts MATCH ?
AND f.timestamp >= ? AND f.timestamp < ?
ORDER BY rank
LIMIT ?
""",
(query, start, end, limit),
).fetchall()
return [dict(r) for r in rows]
def text_for_date(for_date: date | None = None, focused_only: bool = True) -> list[dict[str, Any]]:
"""Return all OCR text for a date, optionally only focused windows."""
d = for_date or _today()
start, end = date_range(d)
query = """
SELECT
f.timestamp,
o.app_name,
o.window_name,
o.text
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
AND length(o.text) > 20
"""
params: list = [start, end]
if focused_only:
query += " AND o.focused = TRUE"
query += " ORDER BY f.timestamp"
with get_conn() as conn:
rows = conn.execute(query, params).fetchall()
return [dict(r) for r in rows]
def deduplicated_text(for_date: date | None = None, chunk_minutes: int = 5) -> list[dict[str, Any]]:
"""
Return OCR text deduplicated by time chunk + app to reduce LLM token usage.
Groups frames into N-minute buckets and returns one representative text per app per bucket.
"""
d = for_date or _today()
start, end = date_range(d)
interval_sec = chunk_minutes * 60
with get_conn() as conn:
rows = conn.execute(
f"""
SELECT
datetime(
(strftime('%s', f.timestamp) / {interval_sec}) * {interval_sec},
'unixepoch'
) as bucket,
o.app_name,
o.window_name,
substr(o.text, 1, 500) as text
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
AND length(o.text) > 20
GROUP BY bucket, o.app_name
ORDER BY bucket
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
Write
audio.py
audio.py
61 lines
"""Audio transcription consumer."""
from datetime import date
from typing import Any
from db import get_conn, date_range, today as _today
def transcriptions(for_date: date | None = None) -> list[dict[str, Any]]:
"""Return all audio transcriptions for a date."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT timestamp, transcription, device, is_input_device, speaker_id
FROM audio_transcriptions
WHERE timestamp >= ? AND timestamp < ?
AND length(transcription) > 2
ORDER BY timestamp
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
def search(query: str, for_date: date | None = None, limit: int = 30) -> list[dict[str, Any]]:
"""Search audio transcriptions."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT
a.timestamp,
a.device,
snippet(audio_transcriptions_fts, 0, '[', ']', '...', 20) as snippet
FROM audio_transcriptions_fts
JOIN audio_transcriptions a ON audio_transcriptions_fts.rowid = a.id
WHERE audio_transcriptions_fts MATCH ?
AND a.timestamp >= ? AND a.timestamp < ?
ORDER BY rank
LIMIT ?
""",
(query, start, end, limit),
).fetchall()
return [dict(r) for r in rows]
def formatted_transcript(for_date: date | None = None) -> str:
"""Return audio as a readable transcript string."""
rows = transcriptions(for_date)
if not rows:
return "(no audio transcriptions)"
lines = []
for r in rows:
label = "MIC" if r["is_input_device"] else "SYS"
lines.append(f"[{r['timestamp']}] [{label}] {r['transcription']}")
return "\n".join(lines)
Write
summary.py
summary.py
162 lines
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps 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]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Now the FastAPI backend and CLI:
Write
main.py
main.py
89 lines
"""Screenpipe dashboard — FastAPI web UI."""
import os
from datetime import date, datetime
from typing import Any
from dotenv import load_dotenv
from fastapi import FastAPI, Query
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
load_dotenv()
from consumers.activity import app_time, window_time, timeline, summary_stats
from consumers.ocr import search as ocr_search
from consumers.audio import transcriptions, search as audio_search
from consumers.summary import generate as gen_summary, SUMMARY_TYPES
app = FastAPI(title="Screenpipe Dashboard")
app.mount("/static", StaticFiles(directory="static"), name="static")
def _parse_date(d: str | None) -> date | None:
if not d:
return None
try:
return date.fromisoformat(d)
except ValueError:
return None
@app.get("/", response_class=HTMLResponse)
async def index():
with open("static/index.html") as f:
return f.read()
# ── Activity ──────────────────────────────────────────────────────────────────
@app.get("/api/stats")
async def stats(d: str | None = Query(None)):
return summary_stats(_parse_date(d))
@app.get("/api/activity/apps")
async def activity_apps(d: str | None = Query(None)):
return app_time(_parse_date(d))
@app.get("/api/activity/windows")
async def activity_windows(d: str | None = Query(None), app_name: str | None = Query(None)):
return window_time(_parse_date(d), app_name)
@app.get("/api/activity/timeline")
async def activity_timeline(d: str | None = Query(None), interval: int = Query(15)):
return timeline(_parse_date(d), interval)
# ── Search ───────────────────────────────────────────────────────────────────
@app.get("/api/search/ocr")
async def search_ocr(q: str, d: str | None = Query(None), limit: int = 50):
return ocr_search(q, _parse_date(d), limit)
@app.get("/api/search/audio")
async def search_audio_endpoint(q: str, d: str | None = Query(None), limit: int = 30):
return audio_search(q, _parse_date(d), limit)
# ── Audio ─────────────────────────────────────────────────────────────────────
@app.get("/api/audio")
async def audio(d: str | None = Query(None)):
return transcriptions(_parse_date(d))
# ── Summaries ─────────────────────────────────────────────────────────────────
@app.get("/api/summary/types")
async def summary_types():
return [{"id": k, "title": v["title"]} for k, v in SUMMARY_TYPES.items()]
@app.post("/api/summary/generate")
async def generate_summary(type: str = "day_recap", d: str | None = None):
result = gen_summary(type, _parse_date(d))
return result
Write
cli.py
cli.py
131 lines
#!/usr/bin/env python3
"""Screenpipe CLI — run summaries and reports on demand."""
import os
import sys
from datetime import date, timedelta
import click
from dotenv import load_dotenv
load_dotenv()
sys.path.insert(0, os.path.dirname(__file__))
from consumers.activity import app_time, window_time, summary_stats
from consumers.ocr import search as ocr_search
from consumers.audio import transcriptions
from consumers.summary import generate as gen_summary, SUMMARY_TYPES
def _resolve_date(d_str: str | None) -> date | None:
if not d_str:
return None
if d_str == "yesterday":
return date.today() - timedelta(days=1)
if d_str == "today":
return date.today()
return date.fromisoformat(d_str)
@click.group()
def cli():
"""Screenpipe data explorer and summariser."""
@cli.command()
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
@click.option("--type", "-t", "summary_type", default="day_recap",
type=click.Choice(list(SUMMARY_TYPES.keys())), show_default=True)
def summary(d, summary_type):
"""Generate an AI summary for a date (default: today)."""
target = _resolve_date(d)
click.echo(f"Generating {SUMMARY_TYPES[summary_type]['title']} for {target or date.today()}...")
result = gen_summary(summary_type, target)
click.echo(f"\n{'─'*60}")
click.echo(f" {result['title']} — {result['date']}")
click.echo(f"{'─'*60}\n")
click.echo(result["content"])
if "stats" in result:
s = result["stats"]
click.echo(f"\n[data: {s['total_frames']} frames, {s['unique_apps']} apps, "
f"{s['audio_segments']} audio segments]")
@cli.command()
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
@click.option("--app", "-a", default=None, help="Filter by app name")
@click.option("--windows", "-w", is_flag=True, help="Show window breakdown instead of apps")
def activity(d, app, windows):
"""Show time spent per app or window."""
target = _resolve_date(d)
label = str(target or date.today())
if windows or app:
rows = window_time(target, app)
click.echo(f"\nWindow time — {label}" + (f" [{app}]" if app else ""))
click.echo(f"{'App':<25} {'Window':<40} {'Min':>6}")
click.echo("─" * 75)
for r in rows:
click.echo(f"{r['app_name']:<25} {(r['window_name'] or '')[:40]:<40} {r['minutes']:>6}")
else:
rows = app_time(target)
stats = summary_stats(target)
click.echo(f"\nApp time — {label}")
click.echo(f"{'App':<30} {'Minutes':>8}")
click.echo("─" * 40)
for r in rows:
click.echo(f"{r['app_name']:<30} {r['minutes']:>8}")
click.echo(f"\nTotal frames: {stats['total_frames']} | "
f"Active: {stats['first_seen']} → {stats['last_seen']}")
@cli.command()
@click.argument("query")
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
@click.option("--audio", is_flag=True, help="Search audio instead of screen text")
@click.option("--limit", "-n", default=20, show_default=True)
def search(query, d, audio, limit):
"""Search OCR screen text or audio transcriptions."""
from consumers.audio import search as audio_search_fn
target = _resolve_date(d)
if audio:
rows = audio_search_fn(query, target, limit)
click.echo(f"\nAudio results for '{query}':")
for r in rows:
click.echo(f" [{r['timestamp']}] {r['snippet']}")
else:
rows = ocr_search(query, target, limit)
click.echo(f"\nOCR results for '{query}':")
for r in rows:
click.echo(f" [{r['timestamp']}] {r['app_name']} / {r['window_name'] or ''}")
click.echo(f" {r['snippet']}")
@cli.command()
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
def audio(d):
"""Show audio transcriptions for a date."""
target = _resolve_date(d)
rows = transcriptions(target)
if not rows:
click.echo("No audio transcriptions found.")
return
click.echo(f"\nAudio transcriptions — {target or date.today()}")
click.echo("─" * 60)
for r in rows:
label = "MIC" if r["is_input_device"] else "SYS"
click.echo(f"[{r['timestamp']}] [{label}] {r['transcription']}")
@cli.command()
def serve():
"""Start the web UI (runs uvicorn on port 8000)."""
import uvicorn
click.echo("Starting Screenpipe dashboard at http://localhost:8000")
uvicorn.run("main:app", host="[IP_ADDRESS]", port=8000, reload=False)
if __name__ == "__main__":
cli()
Now the frontend:
Write...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: 100.73.206.126]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"ai-habits","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"day-recap","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"meeting-summary","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"standup-update","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"time-breakdown","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"video-export","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"#!/bin/bash • Untitled-1, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\nDB=\"/volume1/Test/screenpipe/db.sqlite\"\nDATE=${1:-$(date -d \"yesterday\" '+%Y-%m-%d')}\n\necho \"═══════════════════════════════════════\"\necho \" SCREENPIPE REPORT — $DATE\"\necho \"═══════════════════════════════════════\"\n\necho -e \"\\n📱 APP USAGE (frames + estimated time)\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-30s %5d frames ~%5.1f min', app_name, COUNT(*), ROUND(COUNT(*) * 4.5 / 60.0, 1))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY app_name ORDER BY COUNT(*) DESC;\"\n\necho -e \"\\n⌨️ ACTIVITY TYPE PER APP\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-25s clicks:%-5d keys:%-5d switches:%-4d',\n app_name,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END),\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END),\n SUM(CASE WHEN event_type='app_switch' THEN 1 ELSE 0 END))\nFROM ui_events\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY app_name ORDER BY COUNT(*) DESC;\"\n\necho -e \"\\n🌐 BROWSER URLS\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%4d frames %s', COUNT(*), browser_url)\nFROM frames\nWHERE date(timestamp) = '$DATE' AND browser_url IS NOT NULL\nGROUP BY browser_url ORDER BY COUNT(*) DESC LIMIT 20;\"\n\necho -e \"\\n🪟 WINDOW TITLES (top 20)\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-20s %3d %s', app_name, COUNT(*), SUBSTR(window_name,1,60))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND window_name IS NOT NULL AND app_name IS NOT NULL\nGROUP BY app_name, window_name ORDER BY COUNT(*) DESC LIMIT 20;\"\n\necho -e \"\\n🕐 HOURLY TIMELINE\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%s %-20s %3d frames', strftime('%H:00', timestamp), app_name, COUNT(*))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY strftime('%H', timestamp), app_name\nORDER BY strftime('%H', timestamp), COUNT(*) DESC;\"\n\necho -e \"\\n📋 CLIPBOARD\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-20s %s', app_name, SUBSTR(text_content, 1, 80))\nFROM ui_events\nWHERE date(timestamp) = '$DATE' AND event_type = 'clipboard' AND text_content IS NOT NULL\nORDER BY timestamp LIMIT 20;\"\n\necho -e \"\\n🔢 TOTALS\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"SELECT 'Frames: ' || COUNT(*) FROM frames WHERE date(timestamp) = '$DATE';\"\nsqlite3 \"$DB\" \"SELECT 'UI Events: ' || COUNT(*) FROM ui_events WHERE date(timestamp) = '$DATE';\"","depth":28,"value":"#!/bin/bash\nDB=\"/volume1/Test/screenpipe/db.sqlite\"\nDATE=${1:-$(date -d \"yesterday\" '+%Y-%m-%d')}\n\necho \"═══════════════════════════════════════\"\necho \" SCREENPIPE REPORT — $DATE\"\necho \"═══════════════════════════════════════\"\n\necho -e \"\\n📱 APP USAGE (frames + estimated time)\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-30s %5d frames ~%5.1f min', app_name, COUNT(*), ROUND(COUNT(*) * 4.5 / 60.0, 1))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY app_name ORDER BY COUNT(*) DESC;\"\n\necho -e \"\\n⌨️ ACTIVITY TYPE PER APP\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-25s clicks:%-5d keys:%-5d switches:%-4d',\n app_name,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END),\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END),\n SUM(CASE WHEN event_type='app_switch' THEN 1 ELSE 0 END))\nFROM ui_events\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY app_name ORDER BY COUNT(*) DESC;\"\n\necho -e \"\\n🌐 BROWSER URLS\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%4d frames %s', COUNT(*), browser_url)\nFROM frames\nWHERE date(timestamp) = '$DATE' AND browser_url IS NOT NULL\nGROUP BY browser_url ORDER BY COUNT(*) DESC LIMIT 20;\"\n\necho -e \"\\n🪟 WINDOW TITLES (top 20)\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-20s %3d %s', app_name, COUNT(*), SUBSTR(window_name,1,60))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND window_name IS NOT NULL AND app_name IS NOT NULL\nGROUP BY app_name, window_name ORDER BY COUNT(*) DESC LIMIT 20;\"\n\necho -e \"\\n🕐 HOURLY TIMELINE\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%s %-20s %3d frames', strftime('%H:00', timestamp), app_name, COUNT(*))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY strftime('%H', timestamp), app_name\nORDER BY strftime('%H', timestamp), COUNT(*) DESC;\"\n\necho -e \"\\n📋 CLIPBOARD\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-20s %s', app_name, SUBSTR(text_content, 1, 80))\nFROM ui_events\nWHERE date(timestamp) = '$DATE' AND event_type = 'clipboard' AND text_content IS NOT NULL\nORDER BY timestamp LIMIT 20;\"\n\necho -e \"\\n🔢 TOTALS\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"SELECT 'Frames: ' || COUNT(*) FROM frames WHERE date(timestamp) = '$DATE';\"\nsqlite3 \"$DB\" \"SELECT 'UI Events: ' || COUNT(*) FROM ui_events WHERE date(timestamp) = '$DATE';\"","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\nDB=\"/volume1/Test/screenpipe/db.sqlite\"\nDATE=${1:-$(date -d \"yesterday\" '+%Y-%m-%d')}\n\necho \"═══════════════════════════════════════\"\necho \" SCREENPIPE REPORT — $DATE\"\necho \"═══════════════════════════════════════\"\n\necho -e \"\\n📱 APP USAGE (frames + estimated time)\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-30s %5d frames ~%5.1f min', app_name, COUNT(*), ROUND(COUNT(*) * 4.5 / 60.0, 1))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY app_name ORDER BY COUNT(*) DESC;\"\n\necho -e \"\\n⌨️ ACTIVITY TYPE PER APP\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-25s clicks:%-5d keys:%-5d switches:%-4d',\n app_name,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END),\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END),\n SUM(CASE WHEN event_type='app_switch' THEN 1 ELSE 0 END))\nFROM ui_events\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY app_name ORDER BY COUNT(*) DESC;\"\n\necho -e \"\\n🌐 BROWSER URLS\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%4d frames %s', COUNT(*), browser_url)\nFROM frames\nWHERE date(timestamp) = '$DATE' AND browser_url IS NOT NULL\nGROUP BY browser_url ORDER BY COUNT(*) DESC LIMIT 20;\"\n\necho -e \"\\n🪟 WINDOW TITLES (top 20)\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-20s %3d %s', app_name, COUNT(*), SUBSTR(window_name,1,60))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND window_name IS NOT NULL AND app_name IS NOT NULL\nGROUP BY app_name, window_name ORDER BY COUNT(*) DESC LIMIT 20;\"\n\necho -e \"\\n🕐 HOURLY TIMELINE\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%s %-20s %3d frames', strftime('%H:00', timestamp), app_name, COUNT(*))\nFROM frames\nWHERE date(timestamp) = '$DATE' AND app_name IS NOT NULL\nGROUP BY strftime('%H', timestamp), app_name\nORDER BY strftime('%H', timestamp), COUNT(*) DESC;\"\n\necho -e \"\\n📋 CLIPBOARD\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"\nSELECT printf('%-20s %s', app_name, SUBSTR(text_content, 1, 80))\nFROM ui_events\nWHERE date(timestamp) = '$DATE' AND event_type = 'clipboard' AND text_content IS NOT NULL\nORDER BY timestamp LIMIT 20;\"\n\necho -e \"\\n🔢 TOTALS\"\necho \"───────────────────────────────────────\"\nsqlite3 \"$DB\" \"SELECT 'Frames: ' || COUNT(*) FROM frames WHERE date(timestamp) = '$DATE';\"\nsqlite3 \"$DB\" \"SELECT 'UI Events: ' || COUNT(*) FROM ui_events WHERE date(timestamp) = '$DATE';\"","depth":29,"role_description":"text"},{"role":"AXRadioButton","text":"Build screenpipe data UI…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: 100.73.206.126","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: 100.73.206.126","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Update is ready, click to restart.","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Update is ready, click to restart.","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host 100.73.206.126: Setting up SSH tunnel","depth":12,"role_description":"text"},{"role":"AXButton","text":"Build screenpipe data UI and summary app","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":18,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":18,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"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.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the screenpipe directory to understand what we're working with.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List screenpipe directory contents","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"data\ndb.sqlite\npipes\n#recycle\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List data and pipes directories","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09\n2026-04-11\nai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List tables in screenpipe SQLite database","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \".tables\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx\n[rerun: b3]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get ocr_text table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(ocr_text);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|frame_id|INTEGER|1||0\n1|text|TEXT|1||0\n2|text_json|TEXT|0||0\n3|app_name|TEXT|1|''|0\n4|ocr_engine|TEXT|1|'unknown'|0\n5|window_name|TEXT|0||0\n6|focused|BOOLEAN|0|FALSE|0\n7|text_length|INTEGER|0||0\n8|sync_id|TEXT|0||0\n9|synced_at|DATETIME|0||0\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get audio_transcriptions table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(audio_transcriptions);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|audio_chunk_id|INTEGER|1||0\n2|offset_index|INTEGER|1||0\n3|timestamp|TIMESTAMP|1||0\n4|transcription|TEXT|1||0\n5|device|TEXT|1|''|0\n6|is_input_device|BOOLEAN|1|TRUE|0\n7|speaker_id|INTEGER|0||0\n8|transcription_engine|TEXT|1|'Whisper'|0\n9|start_time|REAL|0||0\n10|end_time|REAL|0||0\n11|text_length|INTEGER|0||0\n12|sync_id|TEXT|0||0\n13|synced_at|DATETIME|0||0\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get frames, ui_events, video_chunks schemas","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|video_chunk_id|INTEGER|0|NULL|0\n2|offset_index|INTEGER|1|0|0\n3|timestamp|TIMESTAMP|1||0\n4|name|TEXT|0||0\n5|app_name|TEXT|0|NULL|0\n6|window_name|TEXT|0|NULL|0\n7|focused|BOOLEAN|0|NULL|0\n8|browser_url|TEXT|0|NULL|0\n9|device_name|TEXT|1|''|0\n10|sync_id|TEXT|0||0\n11|machine_id|TEXT|0||0\n12|synced_at|DATETIME|0||0\n13|snapshot_path|TEXT|0|NULL|0\n14|accessibility_text|TEXT|0|NULL|0\n15|accessibility_tree_json|TEXT|0|NULL|0\n16|content_hash|INTEGER|0|NULL|0\n17|simhash|INTEGER|0|NULL|0\n18|capture_trigger|TEXT|0|NULL|0\n19|text_source|TEXT|0|NULL|0\n20|cloud_blob_id|TEXT|0|NULL|0\n21|full_text|TEXT|0|NULL|0\n22|elements_ref_frame_id|INTEGER|0|NULL|0\n0|id|INTEGER|0||1\n1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0\n2|session_id|TEXT|0||0\n3|relative_ms|INTEGER|1|0|0\n4|event_type|TEXT|1||0\n5|x|INTEGER|0||0\n6|y|INTEGER|0||0\n7|delta_x|INTEGER|0||0\n8|delta_y|INTEGER|0||0\n9|button|INTEGER|0||0\n10|click_count|INTEGER|0||0\n11|key_code|INTEGER|0||0\n12|modifiers|INTEGER|0||0\n13|text_content|TEXT|0||0\n14|text_length|INTEGER|0||0\n15|app_name|TEXT|0||0\n16|app_pid|INTEGER|0||0\n17|window_title|TEXT|0||0\n18|browser_url|TEXT|0||0\n19|element_role|TEXT|0||0\n20|element_name|TEXT|0||0\n21|element_value|TEXT|0||0\n22|element_description|TEXT|0||0\n23|element_automation_id|TEXT|0||0\n24|element_bounds|TEXT|0||0\n25|frame_id|INTEGER|0||0\n26|sync_id|TEXT|0||0\n27|machine_id|TEXT|0||0\n28|synced_at|DATETIME|0||0\n0|id|INTEGER|0||1\n1|file_path|TEXT|1||0\n2|device_name|TEXT|1|''|0\n3|sync_id|TEXT|0||0\n4|machine_id|TEXT|0||0\n5|synced_at|DATETIME|0||0\n6|fps|REAL|1|0.5|0\n7|cloud_blob_id|TEXT|0|NULL|0\n[rerun: b6]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check data counts and date ranges","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*) FROM ocr_text;\" 2>/dev/null","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00\n3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00\n666\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Explore existing pipes for patterns","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\n[rerun: b8]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Read day-recap pipe documentation","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n[rerun: b9]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample app names from frames","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Safari\nActivity Monitor\nDia\niTerm2\nControl Centre\nUserNotificationCenter\nFinder\nClaude\nSlack\nFirefox\nRaycast\nNetAuthAgent\nQuickTime Player\n[rerun: b10]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample joined frame+ocr data for today","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"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;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE\n2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER\n2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p\n2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p\n2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi\n[rerun: b11]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample recent audio transcriptions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09T17:02:52+00:00|.|System Audio\n2026-04-09T16:59:22+00:00|Class is technically...|System Audio\n2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio\n[rerun: b12]","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Good data to work with. Here's what we have:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Screen captures with OCR text, app name, window name (1135 frames so far)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Voice/system audio transcripts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ui_events","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Mouse/keyboard events with app context","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video_chunks","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Raw video files","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Before I start building, a few quick questions:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Tech stack","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"AI summaries","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— 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?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"What summaries matter most?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Day recap (what apps/windows you used, key text seen)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"App time breakdown (time per app)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Audio/conversation recap","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Custom searchable timeline","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Here's the architecture I'm thinking:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"/volume1/screenpipe/app/\n├── main.py # FastAPI web UI\n├── cli.py # Click CLI: `python cli.py day-recap`\n├── db.py # Read-only queries against db.sqlite\n├── consumers/\n│ ├── activity.py # App usage, time per window\n│ ├── ocr.py # OCR text aggregation + search\n│ ├── audio.py # Transcription queries\n│ └── summary.py # AI summary builder\n└── static/\n └── index.html # Single-page UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"CLI commands would look like:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"python cli.py day-recap # EOD summary\npython cli.py activity --date today # App time breakdown\npython cli.py search \"docker\" # Search OCR/audio text\npython cli.py serve # Launch web UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Does this direction work? Any preferences on the stack or which summaries to prioritize?","depth":22,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"seesm ok","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Python and available packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 --version && pip3 list 2>/dev/null | grep -E \"fastapi|uvicorn|click|anthropic|httpx|jinja\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Python 3.11.2\n[rerun: b1]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Verify join works for today's data","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"\nSELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len\nFROM frames f JOIN ocr_text o ON f.id = o.frame_id\nWHERE DATE(f.timestamp) = '2026-04-11'\nORDER BY f.timestamp DESC LIMIT 3;\n\"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T12:54:42.597794+00:00|||2111\n2026-04-11T12:54:41.915916+00:00|||2110\n2026-04-11T12:54:39.912712+00:00|||2111\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install required packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"/bin/bash: line 1: pip3: command not found\n[rerun: b3]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Find pip","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"which pip || which pip3 || python3 -m pip --version 2>/dev/null","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n[rerun: b4]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bootstrap pip then install packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n/usr/bin/python3: No module named ensurepip\n[rerun: b5]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install pip via apt","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"apt-get install -y python3-pip python3-venv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?\n[rerun: b6]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install pip with sudo","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Reason:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"lets make it in docker, not to install it in nas directly","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sudo apt-get install -y python3-pip python3-venv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Good call. Let me check what Docker setup you already have and build a proper containerized app.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check existing docker-compose for reference","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume2/docker/paperlessngx/ && cat /volume2/docker/paperlessngx/docker-compose.yml 2>/dev/null | head -30","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"consume\ndata\ndb\ndocker-compose.yml\nexport\nmcp-server\nmedia\nredis\ntrash\nservices:\n redis:\n image: redis:8\n command:\n - /bin/sh\n - -c\n - redis-server --requirepass redispass\n container_name: PaperlessNGX-REDIS\n hostname: paper-redis\n security_opt:\n - no-new-privileges:true\n read_only: true\n user: 1000:10\n healthcheck:\n test: [\"CMD-SHELL\", \"redis-cli ping || exit 1\"]\n volumes:\n - /volume2/docker/paperlessngx/redis:/data:rw\n environment:\n TZ: Europe/Sofia\n restart: always\n\n db:\n image: postgres:17\n container_name: PaperlessNGX-DB\n hostname: paper-db\n mem_limit: 1g\n security_opt:\n - no-new-privileges:true\n healthcheck:\n test: [\"CMD\", \"pg_isready\", \"-q\", \"-d\", \"paperless\", \"-U\", \"paperlessuser\"]\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Docker availability","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"docker --version && docker compose version 2>/dev/null","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Docker version 26.1.0, build 9714adc\nDocker Compose version v2.26.1\n[rerun: b8]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Create app directory structure","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"mkdir -p /volume1/screenpipe/app/consumers /volume1/screenpipe/app/static","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"[rerun: b9]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Now let me build everything. I'll create all the files:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"requirements.txt","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"requirements.txt","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"6 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"fastapi==0.115.12\nuvicorn[standard]==0.34.0\nclick==8.1.8\nanthropic==0.49.0\npython-dotenv==1.1.0","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"Dockerfile","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dockerfile","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"13 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"FROM python:3.12-slim\n\nWORKDIR /app\n\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\nEXPOSE 8000\n\nCMD [\"uvicorn\", \"main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\"]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"db.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"db.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"28 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"import sqlite3\nfrom contextlib import contextmanager\nfrom datetime import date, datetime, timedelta, timezone\nfrom typing import Generator\n\nDB_PATH = \"/data/db.sqlite\"\n\n\n@contextmanager\ndef get_conn() -> Generator[sqlite3.Connection, None, None]:\n conn = sqlite3.connect(f\"file:{DB_PATH}?mode=ro\", uri=True)\n conn.row_factory = sqlite3.Row\n try:\n yield conn\n finally:\n conn.close()\n\n\ndef date_range(for_date: date) -> tuple[str, str]:\n \"\"\"Return ISO timestamps for start/end of a given date (UTC).\"\"\"\n start = datetime(for_date.year, for_date.month, for_date.day, tzinfo=timezone.utc)\n end = start + timedelta(days=1)\n return start.isoformat(), end.isoformat()\n\n\ndef today() -> date:\n return datetime.now(timezone.utc).date()","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"__init__.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"__init__.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"1 line","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"activity.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"activity.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"123 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"App usage and window focus time consumer.\"\"\"\nfrom datetime import date\nfrom typing import Any\n\nfrom db import get_conn, date_range, today as _today\n\n\ndef app_time(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Return minutes spent per app for a given date, sorted descending.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT\n o.app_name,\n COUNT(*) as frame_count,\n -- each frame ~ 2s at 0.5fps; convert to minutes\n ROUND(COUNT(*) * 2.0 / 60, 1) as minutes\n FROM frames f\n JOIN ocr_text o ON f.id = o.frame_id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND o.app_name != ''\n GROUP BY o.app_name\n ORDER BY frame_count DESC\n \"\"\",\n (start, end),\n ).fetchall()\n return [dict(r) for r in rows]\n\n\ndef window_time(for_date: date | None = None, app: str | None = None) -> list[dict[str, Any]]:\n \"\"\"Return minutes spent per window/tab, optionally filtered by app.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n query = \"\"\"\n SELECT\n o.app_name,\n o.window_name,\n COUNT(*) as frame_count,\n ROUND(COUNT(*) * 2.0 / 60, 1) as minutes\n FROM frames f\n JOIN ocr_text o ON f.id = o.frame_id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND o.app_name != ''\n \"\"\"\n params: list = [start, end]\n if app:\n query += \" AND o.app_name = ?\"\n params.append(app)\n query += \" GROUP BY o.app_name, o.window_name ORDER BY frame_count DESC LIMIT 50\"\n\n with get_conn() as conn:\n rows = conn.execute(query, params).fetchall()\n return [dict(r) for r in rows]\n\n\ndef timeline(for_date: date | None = None, interval_minutes: int = 15) -> list[dict[str, Any]]:\n \"\"\"Return activity bucketed into N-minute intervals.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n interval_sec = interval_minutes * 60\n\n with get_conn() as conn:\n rows = conn.execute(\n f\"\"\"\n SELECT\n datetime(\n (strftime('%s', f.timestamp) / {interval_sec}) * {interval_sec},\n 'unixepoch'\n ) as bucket,\n o.app_name,\n COUNT(*) as frames\n FROM frames f\n JOIN ocr_text o ON f.id = o.frame_id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND o.app_name != ''\n GROUP BY bucket, o.app_name\n ORDER BY bucket, frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n return [dict(r) for r in rows]\n\n\ndef summary_stats(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Return high-level stats for a date.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n frames_row = conn.execute(\n \"SELECT COUNT(*) as n, MIN(timestamp) as first, MAX(timestamp) as last \"\n \"FROM frames WHERE timestamp >= ? AND timestamp < ?\",\n (start, end),\n ).fetchone()\n\n app_count = conn.execute(\n \"\"\"\n SELECT COUNT(DISTINCT o.app_name) as n\n FROM frames f JOIN ocr_text o ON f.id = o.frame_id\n WHERE f.timestamp >= ? AND f.timestamp < ? AND o.app_name != ''\n \"\"\",\n (start, end),\n ).fetchone()\n\n audio_count = conn.execute(\n \"SELECT COUNT(*) as n FROM audio_transcriptions \"\n \"WHERE timestamp >= ? AND timestamp < ?\",\n (start, end),\n ).fetchone()\n\n return {\n \"date\": str(d),\n \"total_frames\": frames_row[\"n\"],\n \"first_seen\": frames_row[\"first\"],\n \"last_seen\": frames_row[\"last\"],\n \"unique_apps\": app_count[\"n\"],\n \"audio_segments\": audio_count[\"n\"],\n }","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"ocr.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"ocr.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"92 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"OCR text search and aggregation consumer.\"\"\"\nfrom datetime import date\nfrom typing import Any\n\nfrom db import get_conn, date_range, today as _today\n\n\ndef search(query: str, for_date: date | None = None, limit: int = 50) -> list[dict[str, Any]]:\n \"\"\"Full-text search OCR content.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT\n f.timestamp,\n o.app_name,\n o.window_name,\n snippet(ocr_text_fts, 0, '[', ']', '...', 20) as snippet\n FROM ocr_text_fts\n JOIN ocr_text o ON ocr_text_fts.rowid = o.rowid\n JOIN frames f ON o.frame_id = f.id\n WHERE ocr_text_fts MATCH ?\n AND f.timestamp >= ? AND f.timestamp < ?\n ORDER BY rank\n LIMIT ?\n \"\"\",\n (query, start, end, limit),\n ).fetchall()\n return [dict(r) for r in rows]\n\n\ndef text_for_date(for_date: date | None = None, focused_only: bool = True) -> list[dict[str, Any]]:\n \"\"\"Return all OCR text for a date, optionally only focused windows.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n query = \"\"\"\n SELECT\n f.timestamp,\n o.app_name,\n o.window_name,\n o.text\n FROM frames f\n JOIN ocr_text o ON f.id = o.frame_id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND o.app_name != ''\n AND length(o.text) > 20\n \"\"\"\n params: list = [start, end]\n if focused_only:\n query += \" AND o.focused = TRUE\"\n query += \" ORDER BY f.timestamp\"\n\n with get_conn() as conn:\n rows = conn.execute(query, params).fetchall()\n return [dict(r) for r in rows]\n\n\ndef deduplicated_text(for_date: date | None = None, chunk_minutes: int = 5) -> list[dict[str, Any]]:\n \"\"\"\n Return OCR text deduplicated by time chunk + app to reduce LLM token usage.\n Groups frames into N-minute buckets and returns one representative text per app per bucket.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n interval_sec = chunk_minutes * 60\n\n with get_conn() as conn:\n rows = conn.execute(\n f\"\"\"\n SELECT\n datetime(\n (strftime('%s', f.timestamp) / {interval_sec}) * {interval_sec},\n 'unixepoch'\n ) as bucket,\n o.app_name,\n o.window_name,\n substr(o.text, 1, 500) as text\n FROM frames f\n JOIN ocr_text o ON f.id = o.frame_id\n WHERE f.timestamp >= ? AND f.timestamp < ?\n AND o.app_name != ''\n AND length(o.text) > 20\n GROUP BY bucket, o.app_name\n ORDER BY bucket\n \"\"\",\n (start, end),\n ).fetchall()\n return [dict(r) for r in rows]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"audio.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"audio.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"61 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"Audio transcription consumer.\"\"\"\nfrom datetime import date\nfrom typing import Any\n\nfrom db import get_conn, date_range, today as _today\n\n\ndef transcriptions(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Return all audio transcriptions for a date.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT timestamp, transcription, device, is_input_device, speaker_id\n FROM audio_transcriptions\n WHERE timestamp >= ? AND timestamp < ?\n AND length(transcription) > 2\n ORDER BY timestamp\n \"\"\",\n (start, end),\n ).fetchall()\n return [dict(r) for r in rows]\n\n\ndef search(query: str, for_date: date | None = None, limit: int = 30) -> list[dict[str, Any]]:\n \"\"\"Search audio transcriptions.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT\n a.timestamp,\n a.device,\n snippet(audio_transcriptions_fts, 0, '[', ']', '...', 20) as snippet\n FROM audio_transcriptions_fts\n JOIN audio_transcriptions a ON audio_transcriptions_fts.rowid = a.id\n WHERE audio_transcriptions_fts MATCH ?\n AND a.timestamp >= ? AND a.timestamp < ?\n ORDER BY rank\n LIMIT ?\n \"\"\",\n (query, start, end, limit),\n ).fetchall()\n return [dict(r) for r in rows]\n\n\ndef formatted_transcript(for_date: date | None = None) -> str:\n \"\"\"Return audio as a readable transcript string.\"\"\"\n rows = transcriptions(for_date)\n if not rows:\n return \"(no audio transcriptions)\"\n lines = []\n for r in rows:\n label = \"MIC\" if r[\"is_input_device\"] else \"SYS\"\n lines.append(f\"[{r['timestamp']}] [{label}] {r['transcription']}\")\n return \"\\n\".join(lines)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"summary.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"summary.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"162 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"AI summary generator using Claude.\"\"\"\nimport os\nfrom datetime import date\nfrom typing import Any\n\nfrom consumers.activity import app_time, summary_stats\nfrom consumers.ocr import deduplicated_text\nfrom consumers.audio import formatted_transcript\n\n\nSUMMARY_TYPES = {\n \"day_recap\": {\n \"title\": \"Day Recap\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a concise day recap using EXACTLY this format:\n\n## Summary\nOne sentence: what I mainly worked on today.\n\n## Accomplishments\n- Top 3 things I finished, with approximate times\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things seen or heard, with timestamps\n\n## Unfinished Work\n- What to continue tomorrow\n\n## Patterns\n- Apps used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with:\n**Next step:** [most important thing to continue]\"\"\",\n },\n \"standup\": {\n \"title\": \"Standup Update\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\n## Audio/speech:\n{audio}\n\nWrite a brief standup update:\n\n**Yesterday:** What I worked on (2-3 bullets)\n**Today:** What I plan to continue (1-2 bullets)\n**Blockers:** Any issues observed (or \"None\")\n\nKeep it under 150 words. Only report what's verifiable from the data.\"\"\",\n },\n \"focus_time\": {\n \"title\": \"Focus & Distraction Analysis\",\n \"prompt\": \"\"\"\\\nYou are analyzing a person's computer activity for the day.\n\n## App usage (minutes per app):\n{app_time}\n\n## Screen content (sampled every 5 minutes):\n{ocr_text}\n\nAnalyze focus vs distraction patterns:\n\n## Deep Work Periods\n- When and how long were sustained focus sessions?\n- What was being worked on?\n\n## Distractions\n- Which apps/sites were used recreationally?\n- How much time was lost to context switching?\n\n## Recommendations\n- 2-3 concrete suggestions to improve focus tomorrow\n\nBe specific with times and app names.\"\"\",\n },\n}\n\n\ndef _build_context(for_date: date) -> dict[str, str]:\n apps = app_time(for_date)\n app_lines = \"\\n\".join(f\"- {a['app_name']}: {a['minutes']} min\" for a in apps[:20])\n\n ocr_rows = deduplicated_text(for_date, chunk_minutes=5)\n ocr_lines = \"\\n\".join(\n f\"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}\"\n for r in ocr_rows[:100]\n )\n\n audio = formatted_transcript(for_date)\n\n return {\n \"app_time\": app_lines or \"(no app data)\",\n \"ocr_text\": ocr_lines or \"(no screen data)\",\n \"audio\": audio[:3000] if len(audio) > 3000 else audio,\n }\n\n\ndef generate(\n summary_type: str = \"day_recap\",\n for_date: date | None = None,\n api_key: str | None = None,\n) -> dict[str, Any]:\n \"\"\"Generate an AI summary. Returns dict with 'title', 'content', 'date'.\"\"\"\n import anthropic\n\n d = for_date or date.today()\n key = api_key or os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n if not key:\n return {\n \"title\": \"Error\",\n \"content\": \"ANTHROPIC_API_KEY not set. Add it to your .env file.\",\n \"date\": str(d),\n }\n\n spec = SUMMARY_TYPES.get(summary_type)\n if not spec:\n return {\"title\": \"Error\", \"content\": f\"Unknown summary type: {summary_type}\", \"date\": str(d)}\n\n stats = summary_stats(d)\n if stats[\"total_frames\"] == 0:\n return {\n \"title\": spec[\"title\"],\n \"content\": f\"No screen data found for {d}.\",\n \"date\": str(d),\n }\n\n ctx = _build_context(d)\n prompt = spec[\"prompt\"].format(**ctx)\n\n client = anthropic.Anthropic(api_key=key)\n message = client.messages.create(\n model=\"claude-opus-4-6\",\n max_tokens=1024,\n messages=[{\"role\": \"user\", \"content\": prompt}],\n )\n\n return {\n \"title\": spec[\"title\"],\n \"content\": message.content[0].text,\n \"date\": str(d),\n \"stats\": stats,\n }","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now the FastAPI backend and CLI:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"main.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"main.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"89 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"\"\"Screenpipe dashboard — FastAPI web UI.\"\"\"\nimport os\nfrom datetime import date, datetime\nfrom typing import Any\n\nfrom dotenv import load_dotenv\nfrom fastapi import FastAPI, Query\nfrom fastapi.responses import HTMLResponse, JSONResponse\nfrom fastapi.staticfiles import StaticFiles\n\nload_dotenv()\n\nfrom consumers.activity import app_time, window_time, timeline, summary_stats\nfrom consumers.ocr import search as ocr_search\nfrom consumers.audio import transcriptions, search as audio_search\nfrom consumers.summary import generate as gen_summary, SUMMARY_TYPES\n\napp = FastAPI(title=\"Screenpipe Dashboard\")\napp.mount(\"/static\", StaticFiles(directory=\"static\"), name=\"static\")\n\n\ndef _parse_date(d: str | None) -> date | None:\n if not d:\n return None\n try:\n return date.fromisoformat(d)\n except ValueError:\n return None\n\n\n@app.get(\"/\", response_class=HTMLResponse)\nasync def index():\n with open(\"static/index.html\") as f:\n return f.read()\n\n\n# ── Activity ──────────────────────────────────────────────────────────────────\n\n@app.get(\"/api/stats\")\nasync def stats(d: str | None = Query(None)):\n return summary_stats(_parse_date(d))\n\n\n@app.get(\"/api/activity/apps\")\nasync def activity_apps(d: str | None = Query(None)):\n return app_time(_parse_date(d))\n\n\n@app.get(\"/api/activity/windows\")\nasync def activity_windows(d: str | None = Query(None), app_name: str | None = Query(None)):\n return window_time(_parse_date(d), app_name)\n\n\n@app.get(\"/api/activity/timeline\")\nasync def activity_timeline(d: str | None = Query(None), interval: int = Query(15)):\n return timeline(_parse_date(d), interval)\n\n\n# ── Search ───────────────────────────────────────────────────────────────────\n\n@app.get(\"/api/search/ocr\")\nasync def search_ocr(q: str, d: str | None = Query(None), limit: int = 50):\n return ocr_search(q, _parse_date(d), limit)\n\n\n@app.get(\"/api/search/audio\")\nasync def search_audio_endpoint(q: str, d: str | None = Query(None), limit: int = 30):\n return audio_search(q, _parse_date(d), limit)\n\n\n# ── Audio ─────────────────────────────────────────────────────────────────────\n\n@app.get(\"/api/audio\")\nasync def audio(d: str | None = Query(None)):\n return transcriptions(_parse_date(d))\n\n\n# ── Summaries ─────────────────────────────────────────────────────────────────\n\n@app.get(\"/api/summary/types\")\nasync def summary_types():\n return [{\"id\": k, \"title\": v[\"title\"]} for k, v in SUMMARY_TYPES.items()]\n\n\n@app.post(\"/api/summary/generate\")\nasync def generate_summary(type: str = \"day_recap\", d: str | None = None):\n result = gen_summary(type, _parse_date(d))\n return result","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXLink","text":"cli.py","depth":23,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"cli.py","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"131 lines","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"#!/usr/bin/env python3\n\"\"\"Screenpipe CLI — run summaries and reports on demand.\"\"\"\nimport os\nimport sys\nfrom datetime import date, timedelta\n\nimport click\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\nsys.path.insert(0, os.path.dirname(__file__))\n\nfrom consumers.activity import app_time, window_time, summary_stats\nfrom consumers.ocr import search as ocr_search\nfrom consumers.audio import transcriptions\nfrom consumers.summary import generate as gen_summary, SUMMARY_TYPES\n\n\ndef _resolve_date(d_str: str | None) -> date | None:\n if not d_str:\n return None\n if d_str == \"yesterday\":\n return date.today() - timedelta(days=1)\n if d_str == \"today\":\n return date.today()\n return date.fromisoformat(d_str)\n\n\n@click.group()\ndef cli():\n \"\"\"Screenpipe data explorer and summariser.\"\"\"\n\n\n@cli.command()\n@click.option(\"--date\", \"-d\", \"d\", default=None, help=\"Date (YYYY-MM-DD, today, yesterday)\")\n@click.option(\"--type\", \"-t\", \"summary_type\", default=\"day_recap\",\n type=click.Choice(list(SUMMARY_TYPES.keys())), show_default=True)\ndef summary(d, summary_type):\n \"\"\"Generate an AI summary for a date (default: today).\"\"\"\n target = _resolve_date(d)\n click.echo(f\"Generating {SUMMARY_TYPES[summary_type]['title']} for {target or date.today()}...\")\n result = gen_summary(summary_type, target)\n click.echo(f\"\\n{'─'*60}\")\n click.echo(f\" {result['title']} — {result['date']}\")\n click.echo(f\"{'─'*60}\\n\")\n click.echo(result[\"content\"])\n if \"stats\" in result:\n s = result[\"stats\"]\n click.echo(f\"\\n[data: {s['total_frames']} frames, {s['unique_apps']} apps, \"\n f\"{s['audio_segments']} audio segments]\")\n\n\n@cli.command()\n@click.option(\"--date\", \"-d\", \"d\", default=None, help=\"Date (YYYY-MM-DD, today, yesterday)\")\n@click.option(\"--app\", \"-a\", default=None, help=\"Filter by app name\")\n@click.option(\"--windows\", \"-w\", is_flag=True, help=\"Show window breakdown instead of apps\")\ndef activity(d, app, windows):\n \"\"\"Show time spent per app or window.\"\"\"\n target = _resolve_date(d)\n label = str(target or date.today())\n\n if windows or app:\n rows = window_time(target, app)\n click.echo(f\"\\nWindow time — {label}\" + (f\" [{app}]\" if app else \"\"))\n click.echo(f\"{'App':<25} {'Window':<40} {'Min':>6}\")\n click.echo(\"─\" * 75)\n for r in rows:\n click.echo(f\"{r['app_name']:<25} {(r['window_name'] or '')[:40]:<40} {r['minutes']:>6}\")\n else:\n rows = app_time(target)\n stats = summary_stats(target)\n click.echo(f\"\\nApp time — {label}\")\n click.echo(f\"{'App':<30} {'Minutes':>8}\")\n click.echo(\"─\" * 40)\n for r in rows:\n click.echo(f\"{r['app_name']:<30} {r['minutes']:>8}\")\n click.echo(f\"\\nTotal frames: {stats['total_frames']} | \"\n f\"Active: {stats['first_seen']} → {stats['last_seen']}\")\n\n\n@cli.command()\n@click.argument(\"query\")\n@click.option(\"--date\", \"-d\", \"d\", default=None, help=\"Date (YYYY-MM-DD, today, yesterday)\")\n@click.option(\"--audio\", is_flag=True, help=\"Search audio instead of screen text\")\n@click.option(\"--limit\", \"-n\", default=20, show_default=True)\ndef search(query, d, audio, limit):\n \"\"\"Search OCR screen text or audio transcriptions.\"\"\"\n from consumers.audio import search as audio_search_fn\n\n target = _resolve_date(d)\n if audio:\n rows = audio_search_fn(query, target, limit)\n click.echo(f\"\\nAudio results for '{query}':\")\n for r in rows:\n click.echo(f\" [{r['timestamp']}] {r['snippet']}\")\n else:\n rows = ocr_search(query, target, limit)\n click.echo(f\"\\nOCR results for '{query}':\")\n for r in rows:\n click.echo(f\" [{r['timestamp']}] {r['app_name']} / {r['window_name'] or ''}\")\n click.echo(f\" {r['snippet']}\")\n\n\n@cli.command()\n@click.option(\"--date\", \"-d\", \"d\", default=None, help=\"Date (YYYY-MM-DD, today, yesterday)\")\ndef audio(d):\n \"\"\"Show audio transcriptions for a date.\"\"\"\n target = _resolve_date(d)\n rows = transcriptions(target)\n if not rows:\n click.echo(\"No audio transcriptions found.\")\n return\n click.echo(f\"\\nAudio transcriptions — {target or date.today()}\")\n click.echo(\"─\" * 60)\n for r in rows:\n label = \"MIC\" if r[\"is_input_device\"] else \"SYS\"\n click.echo(f\"[{r['timestamp']}] [{label}] {r['transcription']}\")\n\n\n@cli.command()\ndef serve():\n \"\"\"Start the web UI (runs uvicorn on port 8000).\"\"\"\n import uvicorn\n click.echo(\"Starting Screenpipe dashboard at http://localhost:8000\")\n uvicorn.run(\"main:app\", host=\"0.0.0.0\", port=8000, reload=False)\n\n\nif __name__ == \"__main__\":\n cli()","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Now the frontend:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Write","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"}]...
|
9119589316943796240
|
-8191624847160147962
|
app_switch
|
accessibility
|
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
static
.env
cli.py
db.py
docker-compose.yml
Dockerfile
main.py
requirements.txt
data
pipes
ai-habits
pipe.md
day-recap
meeting-summary
standup-update
time-breakdown
video-export
db.sqlite
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
pipe.md, Editor Group 1
#!/bin/bash • Untitled-1, Editor Group 1
#!/bin/bash
DB="/volume1/Test/screenpipe/db.sqlite"
DATE=${1:-$(date -d "yesterday" '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo -e "\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 -e "\n⌨️ ACTIVITY TYPE PER APP"
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 -e "\n🌐 BROWSER URLS"
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 -e "\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 -e "\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 -e "\n📋 CLIPBOARD"
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 -e "\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';"
#!/bin/bash
DB="/volume1/Test/screenpipe/db.sqlite"
DATE=${1:-$(date -d "yesterday" '+%Y-%m-%d')}
echo "═══════════════════════════════════════"
echo " SCREENPIPE REPORT — $DATE"
echo "═══════════════════════════════════════"
echo -e "\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 -e "\n⌨️ ACTIVITY TYPE PER APP"
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 -e "\n🌐 BROWSER URLS"
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 -e "\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 -e "\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 -e "\n📋 CLIPBOARD"
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 -e "\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';"
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
Info: Setting up SSH Host [IP_ADDRESS]: Setting up SSH tunnel
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
docker --version && docker compose version 2>/dev/null
Copy code to clipboard
OUT
Docker version 26.1.0, build 9714adc
Docker Compose version v2.26.1
[rerun: b8]
Bash
Create app directory structure
IN
mkdir -p /volume1/screenpipe/app/consumers /volume1/screenpipe/app/static
Copy code to clipboard
OUT
[rerun: b9]
Now let me build everything. I'll create all the files:
Write
requirements.txt
requirements.txt
6 lines
fastapi==0.115.12
uvicorn[standard]==0.34.0
click==8.1.8
anthropic==0.49.0
python-dotenv==1.1.0
Write
Dockerfile
Dockerfile
13 lines
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "[IP_ADDRESS]", "--port", "8000"]
Write
db.py
db.py
28 lines
import sqlite3
from contextlib import contextmanager
from datetime import date, datetime, timedelta, timezone
from typing import Generator
DB_PATH = "/data/db.sqlite"
@contextmanager
def get_conn() -> Generator[sqlite3.Connection, None, None]:
conn = sqlite3.connect(f"file:{DB_PATH}?mode=ro", uri=True)
conn.row_factory = sqlite3.Row
try:
yield conn
finally:
conn.close()
def date_range(for_date: date) -> tuple[str, str]:
"""Return ISO timestamps for start/end of a given date (UTC)."""
start = datetime(for_date.year, for_date.month, for_date.day, tzinfo=timezone.utc)
end = start + timedelta(days=1)
return start.isoformat(), end.isoformat()
def today() -> date:
return datetime.now(timezone.utc).date()
Write
__init__.py
__init__.py
1 line
Write
activity.py
activity.py
123 lines
"""App usage and window focus time consumer."""
from datetime import date
from typing import Any
from db import get_conn, date_range, today as _today
def app_time(for_date: date | None = None) -> list[dict[str, Any]]:
"""Return minutes spent per app for a given date, sorted descending."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT
o.app_name,
COUNT(*) as frame_count,
-- each frame ~ 2s at 0.5fps; convert to minutes
ROUND(COUNT(*) * 2.0 / 60, 1) as minutes
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
GROUP BY o.app_name
ORDER BY frame_count DESC
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
def window_time(for_date: date | None = None, app: str | None = None) -> list[dict[str, Any]]:
"""Return minutes spent per window/tab, optionally filtered by app."""
d = for_date or _today()
start, end = date_range(d)
query = """
SELECT
o.app_name,
o.window_name,
COUNT(*) as frame_count,
ROUND(COUNT(*) * 2.0 / 60, 1) as minutes
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
"""
params: list = [start, end]
if app:
query += " AND o.app_name = ?"
params.append(app)
query += " GROUP BY o.app_name, o.window_name ORDER BY frame_count DESC LIMIT 50"
with get_conn() as conn:
rows = conn.execute(query, params).fetchall()
return [dict(r) for r in rows]
def timeline(for_date: date | None = None, interval_minutes: int = 15) -> list[dict[str, Any]]:
"""Return activity bucketed into N-minute intervals."""
d = for_date or _today()
start, end = date_range(d)
interval_sec = interval_minutes * 60
with get_conn() as conn:
rows = conn.execute(
f"""
SELECT
datetime(
(strftime('%s', f.timestamp) / {interval_sec}) * {interval_sec},
'unixepoch'
) as bucket,
o.app_name,
COUNT(*) as frames
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
GROUP BY bucket, o.app_name
ORDER BY bucket, frames DESC
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
def summary_stats(for_date: date | None = None) -> dict[str, Any]:
"""Return high-level stats for a date."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
frames_row = conn.execute(
"SELECT COUNT(*) as n, MIN(timestamp) as first, MAX(timestamp) as last "
"FROM frames WHERE timestamp >= ? AND timestamp < ?",
(start, end),
).fetchone()
app_count = conn.execute(
"""
SELECT COUNT(DISTINCT o.app_name) as n
FROM frames f JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ? AND o.app_name != ''
""",
(start, end),
).fetchone()
audio_count = conn.execute(
"SELECT COUNT(*) as n FROM audio_transcriptions "
"WHERE timestamp >= ? AND timestamp < ?",
(start, end),
).fetchone()
return {
"date": str(d),
"total_frames": frames_row["n"],
"first_seen": frames_row["first"],
"last_seen": frames_row["last"],
"unique_apps": app_count["n"],
"audio_segments": audio_count["n"],
}
Write
ocr.py
ocr.py
92 lines
"""OCR text search and aggregation consumer."""
from datetime import date
from typing import Any
from db import get_conn, date_range, today as _today
def search(query: str, for_date: date | None = None, limit: int = 50) -> list[dict[str, Any]]:
"""Full-text search OCR content."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT
f.timestamp,
o.app_name,
o.window_name,
snippet(ocr_text_fts, 0, '[', ']', '...', 20) as snippet
FROM ocr_text_fts
JOIN ocr_text o ON ocr_text_fts.rowid = o.rowid
JOIN frames f ON o.frame_id = f.id
WHERE ocr_text_fts MATCH ?
AND f.timestamp >= ? AND f.timestamp < ?
ORDER BY rank
LIMIT ?
""",
(query, start, end, limit),
).fetchall()
return [dict(r) for r in rows]
def text_for_date(for_date: date | None = None, focused_only: bool = True) -> list[dict[str, Any]]:
"""Return all OCR text for a date, optionally only focused windows."""
d = for_date or _today()
start, end = date_range(d)
query = """
SELECT
f.timestamp,
o.app_name,
o.window_name,
o.text
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
AND length(o.text) > 20
"""
params: list = [start, end]
if focused_only:
query += " AND o.focused = TRUE"
query += " ORDER BY f.timestamp"
with get_conn() as conn:
rows = conn.execute(query, params).fetchall()
return [dict(r) for r in rows]
def deduplicated_text(for_date: date | None = None, chunk_minutes: int = 5) -> list[dict[str, Any]]:
"""
Return OCR text deduplicated by time chunk + app to reduce LLM token usage.
Groups frames into N-minute buckets and returns one representative text per app per bucket.
"""
d = for_date or _today()
start, end = date_range(d)
interval_sec = chunk_minutes * 60
with get_conn() as conn:
rows = conn.execute(
f"""
SELECT
datetime(
(strftime('%s', f.timestamp) / {interval_sec}) * {interval_sec},
'unixepoch'
) as bucket,
o.app_name,
o.window_name,
substr(o.text, 1, 500) as text
FROM frames f
JOIN ocr_text o ON f.id = o.frame_id
WHERE f.timestamp >= ? AND f.timestamp < ?
AND o.app_name != ''
AND length(o.text) > 20
GROUP BY bucket, o.app_name
ORDER BY bucket
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
Write
audio.py
audio.py
61 lines
"""Audio transcription consumer."""
from datetime import date
from typing import Any
from db import get_conn, date_range, today as _today
def transcriptions(for_date: date | None = None) -> list[dict[str, Any]]:
"""Return all audio transcriptions for a date."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT timestamp, transcription, device, is_input_device, speaker_id
FROM audio_transcriptions
WHERE timestamp >= ? AND timestamp < ?
AND length(transcription) > 2
ORDER BY timestamp
""",
(start, end),
).fetchall()
return [dict(r) for r in rows]
def search(query: str, for_date: date | None = None, limit: int = 30) -> list[dict[str, Any]]:
"""Search audio transcriptions."""
d = for_date or _today()
start, end = date_range(d)
with get_conn() as conn:
rows = conn.execute(
"""
SELECT
a.timestamp,
a.device,
snippet(audio_transcriptions_fts, 0, '[', ']', '...', 20) as snippet
FROM audio_transcriptions_fts
JOIN audio_transcriptions a ON audio_transcriptions_fts.rowid = a.id
WHERE audio_transcriptions_fts MATCH ?
AND a.timestamp >= ? AND a.timestamp < ?
ORDER BY rank
LIMIT ?
""",
(query, start, end, limit),
).fetchall()
return [dict(r) for r in rows]
def formatted_transcript(for_date: date | None = None) -> str:
"""Return audio as a readable transcript string."""
rows = transcriptions(for_date)
if not rows:
return "(no audio transcriptions)"
lines = []
for r in rows:
label = "MIC" if r["is_input_device"] else "SYS"
lines.append(f"[{r['timestamp']}] [{label}] {r['transcription']}")
return "\n".join(lines)
Write
summary.py
summary.py
162 lines
"""AI summary generator using Claude."""
import os
from datetime import date
from typing import Any
from consumers.activity import app_time, summary_stats
from consumers.ocr import deduplicated_text
from consumers.audio import formatted_transcript
SUMMARY_TYPES = {
"day_recap": {
"title": "Day Recap",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a concise day recap using EXACTLY this format:
## Summary
One sentence: what I mainly worked on today.
## Accomplishments
- Top 3 things I finished, with approximate times
- Name specific apps, files, or projects
## Key Moments
- Important things seen or heard, with timestamps
## Unfinished Work
- What to continue tomorrow
## Patterns
- Apps 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]""",
},
"standup": {
"title": "Standup Update",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Screen content (sampled every 5 minutes):
{ocr_text}
## Audio/speech:
{audio}
Write a brief standup update:
**Yesterday:** What I worked on (2-3 bullets)
**Today:** What I plan to continue (1-2 bullets)
**Blockers:** Any issues observed (or "None")
Keep it under 150 words. Only report what's verifiable from the data.""",
},
"focus_time": {
"title": "Focus & Distraction Analysis",
"prompt": """\
You are analyzing a person's computer activity for the day.
## App usage (minutes per app):
{app_time}
## Screen content (sampled every 5 minutes):
{ocr_text}
Analyze focus vs distraction patterns:
## Deep Work Periods
- When and how long were sustained focus sessions?
- What was being worked on?
## Distractions
- Which apps/sites were used recreationally?
- How much time was lost to context switching?
## Recommendations
- 2-3 concrete suggestions to improve focus tomorrow
Be specific with times and app names.""",
},
}
def _build_context(for_date: date) -> dict[str, str]:
apps = app_time(for_date)
app_lines = "\n".join(f"- {a['app_name']}: {a['minutes']} min" for a in apps[:20])
ocr_rows = deduplicated_text(for_date, chunk_minutes=5)
ocr_lines = "\n".join(
f"[{r['bucket']}] {r['app_name']} / {r['window_name'] or ''}: {r['text'][:200]}"
for r in ocr_rows[:100]
)
audio = formatted_transcript(for_date)
return {
"app_time": app_lines or "(no app data)",
"ocr_text": ocr_lines or "(no screen data)",
"audio": audio[:3000] if len(audio) > 3000 else audio,
}
def generate(
summary_type: str = "day_recap",
for_date: date | None = None,
api_key: str | None = None,
) -> dict[str, Any]:
"""Generate an AI summary. Returns dict with 'title', 'content', 'date'."""
import anthropic
d = for_date or date.today()
key = api_key or os.environ.get("ANTHROPIC_API_KEY", "")
if not key:
return {
"title": "Error",
"content": "ANTHROPIC_API_KEY not set. Add it to your .env file.",
"date": str(d),
}
spec = SUMMARY_TYPES.get(summary_type)
if not spec:
return {"title": "Error", "content": f"Unknown summary type: {summary_type}", "date": str(d)}
stats = summary_stats(d)
if stats["total_frames"] == 0:
return {
"title": spec["title"],
"content": f"No screen data found for {d}.",
"date": str(d),
}
ctx = _build_context(d)
prompt = spec["prompt"].format(**ctx)
client = anthropic.Anthropic(api_key=key)
message = client.messages.create(
model="claude-opus-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return {
"title": spec["title"],
"content": message.content[0].text,
"date": str(d),
"stats": stats,
}
Now the FastAPI backend and CLI:
Write
main.py
main.py
89 lines
"""Screenpipe dashboard — FastAPI web UI."""
import os
from datetime import date, datetime
from typing import Any
from dotenv import load_dotenv
from fastapi import FastAPI, Query
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
load_dotenv()
from consumers.activity import app_time, window_time, timeline, summary_stats
from consumers.ocr import search as ocr_search
from consumers.audio import transcriptions, search as audio_search
from consumers.summary import generate as gen_summary, SUMMARY_TYPES
app = FastAPI(title="Screenpipe Dashboard")
app.mount("/static", StaticFiles(directory="static"), name="static")
def _parse_date(d: str | None) -> date | None:
if not d:
return None
try:
return date.fromisoformat(d)
except ValueError:
return None
@app.get("/", response_class=HTMLResponse)
async def index():
with open("static/index.html") as f:
return f.read()
# ── Activity ──────────────────────────────────────────────────────────────────
@app.get("/api/stats")
async def stats(d: str | None = Query(None)):
return summary_stats(_parse_date(d))
@app.get("/api/activity/apps")
async def activity_apps(d: str | None = Query(None)):
return app_time(_parse_date(d))
@app.get("/api/activity/windows")
async def activity_windows(d: str | None = Query(None), app_name: str | None = Query(None)):
return window_time(_parse_date(d), app_name)
@app.get("/api/activity/timeline")
async def activity_timeline(d: str | None = Query(None), interval: int = Query(15)):
return timeline(_parse_date(d), interval)
# ── Search ───────────────────────────────────────────────────────────────────
@app.get("/api/search/ocr")
async def search_ocr(q: str, d: str | None = Query(None), limit: int = 50):
return ocr_search(q, _parse_date(d), limit)
@app.get("/api/search/audio")
async def search_audio_endpoint(q: str, d: str | None = Query(None), limit: int = 30):
return audio_search(q, _parse_date(d), limit)
# ── Audio ─────────────────────────────────────────────────────────────────────
@app.get("/api/audio")
async def audio(d: str | None = Query(None)):
return transcriptions(_parse_date(d))
# ── Summaries ─────────────────────────────────────────────────────────────────
@app.get("/api/summary/types")
async def summary_types():
return [{"id": k, "title": v["title"]} for k, v in SUMMARY_TYPES.items()]
@app.post("/api/summary/generate")
async def generate_summary(type: str = "day_recap", d: str | None = None):
result = gen_summary(type, _parse_date(d))
return result
Write
cli.py
cli.py
131 lines
#!/usr/bin/env python3
"""Screenpipe CLI — run summaries and reports on demand."""
import os
import sys
from datetime import date, timedelta
import click
from dotenv import load_dotenv
load_dotenv()
sys.path.insert(0, os.path.dirname(__file__))
from consumers.activity import app_time, window_time, summary_stats
from consumers.ocr import search as ocr_search
from consumers.audio import transcriptions
from consumers.summary import generate as gen_summary, SUMMARY_TYPES
def _resolve_date(d_str: str | None) -> date | None:
if not d_str:
return None
if d_str == "yesterday":
return date.today() - timedelta(days=1)
if d_str == "today":
return date.today()
return date.fromisoformat(d_str)
@click.group()
def cli():
"""Screenpipe data explorer and summariser."""
@cli.command()
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
@click.option("--type", "-t", "summary_type", default="day_recap",
type=click.Choice(list(SUMMARY_TYPES.keys())), show_default=True)
def summary(d, summary_type):
"""Generate an AI summary for a date (default: today)."""
target = _resolve_date(d)
click.echo(f"Generating {SUMMARY_TYPES[summary_type]['title']} for {target or date.today()}...")
result = gen_summary(summary_type, target)
click.echo(f"\n{'─'*60}")
click.echo(f" {result['title']} — {result['date']}")
click.echo(f"{'─'*60}\n")
click.echo(result["content"])
if "stats" in result:
s = result["stats"]
click.echo(f"\n[data: {s['total_frames']} frames, {s['unique_apps']} apps, "
f"{s['audio_segments']} audio segments]")
@cli.command()
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
@click.option("--app", "-a", default=None, help="Filter by app name")
@click.option("--windows", "-w", is_flag=True, help="Show window breakdown instead of apps")
def activity(d, app, windows):
"""Show time spent per app or window."""
target = _resolve_date(d)
label = str(target or date.today())
if windows or app:
rows = window_time(target, app)
click.echo(f"\nWindow time — {label}" + (f" [{app}]" if app else ""))
click.echo(f"{'App':<25} {'Window':<40} {'Min':>6}")
click.echo("─" * 75)
for r in rows:
click.echo(f"{r['app_name']:<25} {(r['window_name'] or '')[:40]:<40} {r['minutes']:>6}")
else:
rows = app_time(target)
stats = summary_stats(target)
click.echo(f"\nApp time — {label}")
click.echo(f"{'App':<30} {'Minutes':>8}")
click.echo("─" * 40)
for r in rows:
click.echo(f"{r['app_name']:<30} {r['minutes']:>8}")
click.echo(f"\nTotal frames: {stats['total_frames']} | "
f"Active: {stats['first_seen']} → {stats['last_seen']}")
@cli.command()
@click.argument("query")
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
@click.option("--audio", is_flag=True, help="Search audio instead of screen text")
@click.option("--limit", "-n", default=20, show_default=True)
def search(query, d, audio, limit):
"""Search OCR screen text or audio transcriptions."""
from consumers.audio import search as audio_search_fn
target = _resolve_date(d)
if audio:
rows = audio_search_fn(query, target, limit)
click.echo(f"\nAudio results for '{query}':")
for r in rows:
click.echo(f" [{r['timestamp']}] {r['snippet']}")
else:
rows = ocr_search(query, target, limit)
click.echo(f"\nOCR results for '{query}':")
for r in rows:
click.echo(f" [{r['timestamp']}] {r['app_name']} / {r['window_name'] or ''}")
click.echo(f" {r['snippet']}")
@cli.command()
@click.option("--date", "-d", "d", default=None, help="Date (YYYY-MM-DD, today, yesterday)")
def audio(d):
"""Show audio transcriptions for a date."""
target = _resolve_date(d)
rows = transcriptions(target)
if not rows:
click.echo("No audio transcriptions found.")
return
click.echo(f"\nAudio transcriptions — {target or date.today()}")
click.echo("─" * 60)
for r in rows:
label = "MIC" if r["is_input_device"] else "SYS"
click.echo(f"[{r['timestamp']}] [{label}] {r['transcription']}")
@cli.command()
def serve():
"""Start the web UI (runs uvicorn on port 8000)."""
import uvicorn
click.echo("Starting Screenpipe dashboard at http://localhost:8000")
uvicorn.run("main:app", host="[IP_ADDRESS]", port=8000, reload=False)
if __name__ == "__main__":
cli()
Now the frontend:
Write...
|
NULL
|
|
1448
|
32
|
17
|
2026-04-11T17:29:17.606275+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928557606_m1.jpg...
|
Firefox
|
Screenpipe Dashboard — Personal
|
True
|
http://100.73.206.126:8766
|
monitor_1
|
NULL
|
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
Search results for "bitwarden" – Add-ons for Firefox (en-US)
Search results for "bitwarden" – Add-ons 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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Search results for \"bitwarden\" – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search results for \"bitwarden\" – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TOTAL SPAN","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:52 → 15:54","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIVE","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BREAKS","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 breaks · 0.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SESSIONS","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"62m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FRAMES","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"612","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"APPS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UI EVENTS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1344","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AUDIO","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIVE PERIOD","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:52 → 15:54","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TIME PER APP","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— CLICK TO FILTER RIGHT PANEL","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.2m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.5m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.6m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.5m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NetAuthAgent","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Websites","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Windows","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"UI Events","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"nas.lakylak.xyz/desktop/#/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.7m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nas.lakylak.xyz/desktop/#/login/account","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"login.tailscale.com/login?next_url=%2Fadmin","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://localhost:3030","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"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","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-817909191078697115
|
-5356146286853993268
|
app_switch
|
accessibility
|
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
Search results for "bitwarden" – Add-ons for Firefox (en-US)
Search results for "bitwarden" – Add-ons 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...
|
NULL
|
|
1463
|
32
|
32
|
2026-04-11T17:30:20.682025+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928620682_m1.jpg...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
True
|
NULL
|
monitor_1
|
NULL
|
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?
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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: 100.73.206.126]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"__init__.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"activity.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"audio.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"ocr.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"report.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"summary.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"#!/bin/bash • Untitled-1, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report.py, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXTextArea","text":"report.py, preview, Editor Group 1","depth":28,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Build screenpipe data UI…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: 100.73.206.126","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: 100.73.206.126","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Update is ready, click to restart.","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Update is ready, click to restart.","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"expanded","depth":12,"role_description":"text"},{"role":"AXButton","text":"Build screenpipe data UI and summary app","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":18,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":18,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"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.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the screenpipe directory to understand what we're working with.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List screenpipe directory contents","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"data\ndb.sqlite\npipes\n#recycle\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List data and pipes directories","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09\n2026-04-11\nai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List tables in screenpipe SQLite database","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \".tables\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx\n[rerun: b3]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get ocr_text table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(ocr_text);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|frame_id|INTEGER|1||0\n1|text|TEXT|1||0\n2|text_json|TEXT|0||0\n3|app_name|TEXT|1|''|0\n4|ocr_engine|TEXT|1|'unknown'|0\n5|window_name|TEXT|0||0\n6|focused|BOOLEAN|0|FALSE|0\n7|text_length|INTEGER|0||0\n8|sync_id|TEXT|0||0\n9|synced_at|DATETIME|0||0\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get audio_transcriptions table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(audio_transcriptions);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|audio_chunk_id|INTEGER|1||0\n2|offset_index|INTEGER|1||0\n3|timestamp|TIMESTAMP|1||0\n4|transcription|TEXT|1||0\n5|device|TEXT|1|''|0\n6|is_input_device|BOOLEAN|1|TRUE|0\n7|speaker_id|INTEGER|0||0\n8|transcription_engine|TEXT|1|'Whisper'|0\n9|start_time|REAL|0||0\n10|end_time|REAL|0||0\n11|text_length|INTEGER|0||0\n12|sync_id|TEXT|0||0\n13|synced_at|DATETIME|0||0\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get frames, ui_events, video_chunks schemas","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|video_chunk_id|INTEGER|0|NULL|0\n2|offset_index|INTEGER|1|0|0\n3|timestamp|TIMESTAMP|1||0\n4|name|TEXT|0||0\n5|app_name|TEXT|0|NULL|0\n6|window_name|TEXT|0|NULL|0\n7|focused|BOOLEAN|0|NULL|0\n8|browser_url|TEXT|0|NULL|0\n9|device_name|TEXT|1|''|0\n10|sync_id|TEXT|0||0\n11|machine_id|TEXT|0||0\n12|synced_at|DATETIME|0||0\n13|snapshot_path|TEXT|0|NULL|0\n14|accessibility_text|TEXT|0|NULL|0\n15|accessibility_tree_json|TEXT|0|NULL|0\n16|content_hash|INTEGER|0|NULL|0\n17|simhash|INTEGER|0|NULL|0\n18|capture_trigger|TEXT|0|NULL|0\n19|text_source|TEXT|0|NULL|0\n20|cloud_blob_id|TEXT|0|NULL|0\n21|full_text|TEXT|0|NULL|0\n22|elements_ref_frame_id|INTEGER|0|NULL|0\n0|id|INTEGER|0||1\n1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0\n2|session_id|TEXT|0||0\n3|relative_ms|INTEGER|1|0|0\n4|event_type|TEXT|1||0\n5|x|INTEGER|0||0\n6|y|INTEGER|0||0\n7|delta_x|INTEGER|0||0\n8|delta_y|INTEGER|0||0\n9|button|INTEGER|0||0\n10|click_count|INTEGER|0||0\n11|key_code|INTEGER|0||0\n12|modifiers|INTEGER|0||0\n13|text_content|TEXT|0||0\n14|text_length|INTEGER|0||0\n15|app_name|TEXT|0||0\n16|app_pid|INTEGER|0||0\n17|window_title|TEXT|0||0\n18|browser_url|TEXT|0||0\n19|element_role|TEXT|0||0\n20|element_name|TEXT|0||0\n21|element_value|TEXT|0||0\n22|element_description|TEXT|0||0\n23|element_automation_id|TEXT|0||0\n24|element_bounds|TEXT|0||0\n25|frame_id|INTEGER|0||0\n26|sync_id|TEXT|0||0\n27|machine_id|TEXT|0||0\n28|synced_at|DATETIME|0||0\n0|id|INTEGER|0||1\n1|file_path|TEXT|1||0\n2|device_name|TEXT|1|''|0\n3|sync_id|TEXT|0||0\n4|machine_id|TEXT|0||0\n5|synced_at|DATETIME|0||0\n6|fps|REAL|1|0.5|0\n7|cloud_blob_id|TEXT|0|NULL|0\n[rerun: b6]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check data counts and date ranges","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*) FROM ocr_text;\" 2>/dev/null","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00\n3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00\n666\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Explore existing pipes for patterns","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\n[rerun: b8]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Read day-recap pipe documentation","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n[rerun: b9]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample app names from frames","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Safari\nActivity Monitor\nDia\niTerm2\nControl Centre\nUserNotificationCenter\nFinder\nClaude\nSlack\nFirefox\nRaycast\nNetAuthAgent\nQuickTime Player\n[rerun: b10]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample joined frame+ocr data for today","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"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;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE\n2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER\n2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p\n2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p\n2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi\n[rerun: b11]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample recent audio transcriptions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09T17:02:52+00:00|.|System Audio\n2026-04-09T16:59:22+00:00|Class is technically...|System Audio\n2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio\n[rerun: b12]","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Good data to work with. Here's what we have:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Screen captures with OCR text, app name, window name (1135 frames so far)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Voice/system audio transcripts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ui_events","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Mouse/keyboard events with app context","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video_chunks","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Raw video files","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Before I start building, a few quick questions:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Tech stack","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"AI summaries","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— 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?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"What summaries matter most?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Day recap (what apps/windows you used, key text seen)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"App time breakdown (time per app)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Audio/conversation recap","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Custom searchable timeline","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Here's the architecture I'm thinking:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"/volume1/screenpipe/app/\n├── main.py # FastAPI web UI\n├── cli.py # Click CLI: `python cli.py day-recap`\n├── db.py # Read-only queries against db.sqlite\n├── consumers/\n│ ├── activity.py # App usage, time per window\n│ ├── ocr.py # OCR text aggregation + search\n│ ├── audio.py # Transcription queries\n│ └── summary.py # AI summary builder\n└── static/\n └── index.html # Single-page UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"CLI commands would look like:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"python cli.py day-recap # EOD summary\npython cli.py activity --date today # App time breakdown\npython cli.py search \"docker\" # Search OCR/audio text\npython cli.py serve # Launch web UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Does this direction work? Any preferences on the stack or which summaries to prioritize?","depth":22,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"seesm ok","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Python and available packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 --version && pip3 list 2>/dev/null | grep -E \"fastapi|uvicorn|click|anthropic|httpx|jinja\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Python 3.11.2\n[rerun: b1]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Verify join works for today's data","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"\nSELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len\nFROM frames f JOIN ocr_text o ON f.id = o.frame_id\nWHERE DATE(f.timestamp) = '2026-04-11'\nORDER BY f.timestamp DESC LIMIT 3;\n\"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T12:54:42.597794+00:00|||2111\n2026-04-11T12:54:41.915916+00:00|||2110\n2026-04-11T12:54:39.912712+00:00|||2111\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install required packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"/bin/bash: line 1: pip3: command not found\n[rerun: b3]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Find pip","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"which pip || which pip3 || python3 -m pip --version 2>/dev/null","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n[rerun: b4]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bootstrap pip then install packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n/usr/bin/python3: No module named ensurepip\n[rerun: b5]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install pip via apt","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"apt-get install -y python3-pip python3-venv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?\n[rerun: b6]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install pip with sudo","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Reason:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"lets make it in docker, not to install it in nas directly","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sudo apt-get install -y python3-pip python3-venv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Good call. Let me check what Docker setup you already have and build a proper containerized app.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check existing docker-compose for reference","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume2/docker/paperlessngx/ && cat /volume2/docker/paperlessngx/docker-compose.yml 2>/dev/null | head -30","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"consume\ndata\ndb\ndocker-compose.yml\nexport\nmcp-server\nmedia\nredis\ntrash\nservices:\n redis:\n image: redis:8\n command:\n - /bin/sh\n - -c\n - redis-server --requirepass redispass\n container_name: PaperlessNGX-REDIS\n hostname: paper-redis\n security_opt:\n - no-new-privileges:true\n read_only: true\n user: 1000:10\n healthcheck:\n test: [\"CMD-SHELL\", \"redis-cli ping || exit 1\"]\n volumes:\n - /volume2/docker/paperlessngx/redis:/data:rw\n environment:\n TZ: Europe/Sofia\n restart: always\n\n db:\n image: postgres:17\n container_name: PaperlessNGX-DB\n hostname: paper-db\n mem_limit: 1g\n security_opt:\n - no-new-privileges:true\n healthcheck:\n test: [\"CMD\", \"pg_isready\", \"-q\", \"-d\", \"paperless\", \"-U\", \"paperlessuser\"]\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Docker availability","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"}]...
|
3683259882905867712
|
388033112159521377
|
app_switch
|
accessibility
|
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]
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...
|
NULL
|
|
1468
|
32
|
37
|
2026-04-11T17:31:03.082589+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928663082_m1.jpg...
|
Activity Monitor
|
Activity Monitor – All Processes
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
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...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Physical Memory:","depth":3,"automation_id":"_NS:456","help_text":"Total amount of memory installed in this computer.","role_description":"text"},{"role":"AXStaticText","text":"16,00 GB","depth":3,"automation_id":"_NS:448","help_text":"Total amount of memory installed in this computer.","role_description":"text"},{"role":"AXStaticText","text":"Memory Used:","depth":3,"bounds":{"left":0.85833335,"top":0.0,"width":0.05625,"height":0.015555556},"automation_id":"_NS:441","help_text":"Amount of physical memory that is in use by apps or the system.","role_description":"text"},{"role":"AXStaticText","text":"13,32 GB","depth":3,"bounds":{"left":0.9409722,"top":0.0,"width":0.038194444,"height":0.015555556},"automation_id":"_NS:435","help_text":"Amount of physical memory that is in use by apps or the system.","role_description":"text"},{"role":"AXStaticText","text":"Cached Files:","depth":3,"bounds":{"left":0.85833335,"top":0.0,"width":0.052083332,"height":0.015555556},"automation_id":"_NS:428","help_text":"Size of files cached by the system into unused memory to improve performance.","role_description":"text"},{"role":"AXStaticText","text":"2,66 GB","depth":3,"bounds":{"left":0.9458333,"top":0.0,"width":0.033333335,"height":0.015555556},"automation_id":"_NS:422","help_text":"Size of files cached by the system into unused memory to improve performance.","role_description":"text"},{"role":"AXStaticText","text":"Swap Used:","depth":3,"bounds":{"left":0.85833335,"top":0.0,"width":0.046527777,"height":0.015555556},"automation_id":"_NS:415","help_text":"Amount of compressed data temporarily moved to disk to make room in memory for more recently used data.","role_description":"text"},{"role":"AXStaticText","text":"0 bytes","depth":3,"bounds":{"left":0.94930553,"top":0.0,"width":0.029861111,"height":0.015555556},"automation_id":"_NS:409","help_text":"Amount of compressed data temporarily moved to disk to make room in memory for more recently used data.","role_description":"text"},{"role":"AXStaticText","text":"6,19 GB","depth":3,"bounds":{"left":1.0,"top":0.0,"width":-0.079861164,"height":0.015555556},"automation_id":"_NS:400","help_text":"Physical memory allocated by apps and system processes.","role_description":"text"},{"role":"AXStaticText","text":"Wired Memory:","depth":3,"bounds":{"left":0.9930556,"top":0.0,"width":0.006944418,"height":0.015555556},"automation_id":"_NS:393","help_text":"Physical memory containing data that cannot be compressed or swapped to disk.","role_description":"text"},{"role":"AXStaticText","text":"Compressed:","depth":3,"bounds":{"left":0.9930556,"top":0.0,"width":0.006944418,"height":0.015555556},"automation_id":"_NS:386","help_text":"Physical memory used to store a compressed version of data that has not been used recently.","role_description":"text"},{"role":"AXStaticText","text":"1,96 GB","depth":3,"bounds":{"left":1.0,"top":0.0,"width":-0.079861164,"height":0.015555556},"automation_id":"_NS:380","help_text":"Physical memory containing data that cannot be compressed or swapped to disk.","role_description":"text"},{"role":"AXStaticText","text":"4,59 GB","depth":3,"bounds":{"left":1.0,"top":0.0,"width":-0.079861164,"height":0.015555556},"automation_id":"_NS:374","help_text":"Physical memory used to store a compressed version of data that has not been used recently.","role_description":"text"},{"role":"AXStaticText","text":"App Memory:","depth":3,"bounds":{"left":0.9930556,"top":0.0,"width":0.006944418,"height":0.015555556},"automation_id":"_NS:367","help_text":"Physical memory allocated by apps and system processes.","role_description":"text"},{"role":"AXStaticText","text":"MEMORY PRESSURE","depth":3,"automation_id":"_NS:359","role_description":"text"},{"role":"AXStaticText","text":"Claude Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"683,7 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"15","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"218","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"2517","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Firefox","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"642,7 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"89","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"797","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16623","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"WindowServer","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"627,2 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"22","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"6 113","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"407","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"_windowserver","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"586,8 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"120","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18343","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"586,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"27","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"125","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18287","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"576,5 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"121","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16656","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Firefox GPU Helper","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"538,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"30","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"243","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16628","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Notion Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"364,5 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"20","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"315","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"1148","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"352,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"30","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"137","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16799","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"352,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"116","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17335","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"322,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"27","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"127","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16750","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Postman Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"292,7 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"253","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"42547","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Code Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"271,9 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"20","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"308","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"32708","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"232,9 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"121","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17319","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"iTerm2","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"216,2 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"7","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"919","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"4878","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Privileged Mozilla","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"195,4 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"125","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18134","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Code Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"181,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"167","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"42991","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Claude","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"180,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"55","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"713","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"2501","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"177,2 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"118","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18359","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"176,6 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"121","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"42273","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Code Helper (GPU)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"161,6 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"19","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"200","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"32705","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP WebExtensions","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"158,8 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"116","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16633","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Postman","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"148,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"46","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"430","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"42531","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Code","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"145,8 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"42","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"598","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"32700","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Wispr Flow Helper (GPU)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"138,4 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"224","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"3813","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Bitwarden Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"138,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"208","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16862","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"CursorUIViewService (Not Responding)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"134,1 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"3","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"4 550","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"842","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"128,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"22","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"113","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18346","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"127,7 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"118","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"26456","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Wispr Flow","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"126,9 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"50","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"535","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"3800","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Wispr Flow Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"117,1 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"486","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"3837","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Raycast","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"110,1 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"10","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"407","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"38842","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Finder","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"102,4 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"6","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"517","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"743","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"99,5 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"114","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18293","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Claude Helper","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"95,8 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"207","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"2511","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"88,2 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"116","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"27445","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Privileged Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"88,1 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"22","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"116","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16644","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Activity Monitor","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"86,7 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"5","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"385","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17101","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"85,8 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"114","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18329","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"84,6 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"24","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"121","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17432","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Code Helper","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"83,5 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"112","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"32929","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Notion","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"82,0 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"45","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"527","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"843","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"79,2 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"22","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"112","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18290","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Bitwarden","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"78,2 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"44","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"482","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"16856","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"77,1 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"23","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"114","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18320","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Firefox Media Plugin Helper","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"76,8 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"6","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"72","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"26451","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"loginwindow","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"76,4 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"3","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"606","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"410","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"VTDecoderXPCService","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"76,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"2","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"72","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"995","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"FirefoxCP Isolated Web Content","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"74,6 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"22","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"113","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18330","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Notion Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"74,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"18","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"171","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"1822","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Code Helper (Plugin)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"59,6 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"22","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"120","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"42911","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"Wispr Flow Helper (Renderer)","depth":5,"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"59,3 MB","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"17","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"362","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"3834","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":5,"automation_id":"_NS:9","role_description":"text"},{"role":"AXStaticText","text":"1Password","depth":5,"bounds":{"left":0.5083333,"top":0.0,"width":0.175,"height":0.015555556},"automation_id":"_NS:31","role_description":"text"},{"role":"AXStaticText","text":"58,8 MB","depth":5,"bounds":{"left":0.6951389,"top":0.0,"width":0.044444446,"height":0.015555556},"automation_id":"_NS:9","role_description":"text"}]...
|
5393706182861645365
|
538643591658919879
|
app_switch
|
accessibility
|
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...
|
NULL
|
|
1473
|
32
|
42
|
2026-04-11T17:31:23.291659+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928683291_m1.jpg...
|
Code
|
report.py — screenpipe [SSH: 100.73.206.126]
|
True
|
NULL
|
monitor_1
|
NULL
|
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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: 100.73.206.126]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"__init__.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"activity.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"audio.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"ocr.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"report.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"summary.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"#!/bin/bash • Untitled-1, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report.py, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXTextArea","text":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","depth":28,"value":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","depth":29,"role_description":"text"},{"role":"AXRadioButton","text":"Build screenpipe data UI…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: 100.73.206.126","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: 100.73.206.126","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Update is ready, click to restart.","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Update is ready, click to restart.","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"role_description":"text"},{"role":"AXButton","text":"Python","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 4","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 17, Col 87","depth":16,"bounds":{"left":1.0,"top":0.0,"width":-0.0645833,"height":0.024444444},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.9513889,"top":0.0,"width":0.048611104,"height":0.024444444},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"expanded","depth":12,"role_description":"text"},{"role":"AXButton","text":"Build screenpipe data UI and summary app","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":18,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":18,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"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.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the screenpipe directory to understand what we're working with.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List screenpipe directory contents","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"data\ndb.sqlite\npipes\n#recycle\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List data and pipes directories","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09\n2026-04-11\nai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List tables in screenpipe SQLite database","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \".tables\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx\n[rerun: b3]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get ocr_text table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(ocr_text);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|frame_id|INTEGER|1||0\n1|text|TEXT|1||0\n2|text_json|TEXT|0||0\n3|app_name|TEXT|1|''|0\n4|ocr_engine|TEXT|1|'unknown'|0\n5|window_name|TEXT|0||0\n6|focused|BOOLEAN|0|FALSE|0\n7|text_length|INTEGER|0||0\n8|sync_id|TEXT|0||0\n9|synced_at|DATETIME|0||0\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get audio_transcriptions table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(audio_transcriptions);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|audio_chunk_id|INTEGER|1||0\n2|offset_index|INTEGER|1||0\n3|timestamp|TIMESTAMP|1||0\n4|transcription|TEXT|1||0\n5|device|TEXT|1|''|0\n6|is_input_device|BOOLEAN|1|TRUE|0\n7|speaker_id|INTEGER|0||0\n8|transcription_engine|TEXT|1|'Whisper'|0\n9|start_time|REAL|0||0\n10|end_time|REAL|0||0\n11|text_length|INTEGER|0||0\n12|sync_id|TEXT|0||0\n13|synced_at|DATETIME|0||0\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get frames, ui_events, video_chunks schemas","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|video_chunk_id|INTEGER|0|NULL|0\n2|offset_index|INTEGER|1|0|0\n3|timestamp|TIMESTAMP|1||0\n4|name|TEXT|0||0\n5|app_name|TEXT|0|NULL|0\n6|window_name|TEXT|0|NULL|0\n7|focused|BOOLEAN|0|NULL|0\n8|browser_url|TEXT|0|NULL|0\n9|device_name|TEXT|1|''|0\n10|sync_id|TEXT|0||0\n11|machine_id|TEXT|0||0\n12|synced_at|DATETIME|0||0\n13|snapshot_path|TEXT|0|NULL|0\n14|accessibility_text|TEXT|0|NULL|0\n15|accessibility_tree_json|TEXT|0|NULL|0\n16|content_hash|INTEGER|0|NULL|0\n17|simhash|INTEGER|0|NULL|0\n18|capture_trigger|TEXT|0|NULL|0\n19|text_source|TEXT|0|NULL|0\n20|cloud_blob_id|TEXT|0|NULL|0\n21|full_text|TEXT|0|NULL|0\n22|elements_ref_frame_id|INTEGER|0|NULL|0\n0|id|INTEGER|0||1\n1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0\n2|session_id|TEXT|0||0\n3|relative_ms|INTEGER|1|0|0\n4|event_type|TEXT|1||0\n5|x|INTEGER|0||0\n6|y|INTEGER|0||0\n7|delta_x|INTEGER|0||0\n8|delta_y|INTEGER|0||0\n9|button|INTEGER|0||0\n10|click_count|INTEGER|0||0\n11|key_code|INTEGER|0||0\n12|modifiers|INTEGER|0||0\n13|text_content|TEXT|0||0\n14|text_length|INTEGER|0||0\n15|app_name|TEXT|0||0\n16|app_pid|INTEGER|0||0\n17|window_title|TEXT|0||0\n18|browser_url|TEXT|0||0\n19|element_role|TEXT|0||0\n20|element_name|TEXT|0||0\n21|element_value|TEXT|0||0\n22|element_description|TEXT|0||0\n23|element_automation_id|TEXT|0||0\n24|element_bounds|TEXT|0||0\n25|frame_id|INTEGER|0||0\n26|sync_id|TEXT|0||0\n27|machine_id|TEXT|0||0\n28|synced_at|DATETIME|0||0\n0|id|INTEGER|0||1\n1|file_path|TEXT|1||0\n2|device_name|TEXT|1|''|0\n3|sync_id|TEXT|0||0\n4|machine_id|TEXT|0||0\n5|synced_at|DATETIME|0||0\n6|fps|REAL|1|0.5|0\n7|cloud_blob_id|TEXT|0|NULL|0\n[rerun: b6]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check data counts and date ranges","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*) FROM ocr_text;\" 2>/dev/null","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00\n3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00\n666\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Explore existing pipes for patterns","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\n[rerun: b8]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Read day-recap pipe documentation","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n[rerun: b9]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample app names from frames","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Safari\nActivity Monitor\nDia\niTerm2\nControl Centre\nUserNotificationCenter\nFinder\nClaude\nSlack\nFirefox\nRaycast\nNetAuthAgent\nQuickTime Player\n[rerun: b10]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample joined frame+ocr data for today","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"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;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE\n2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER\n2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p\n2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p\n2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi\n[rerun: b11]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample recent audio transcriptions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09T17:02:52+00:00|.|System Audio\n2026-04-09T16:59:22+00:00|Class is technically...|System Audio\n2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio\n[rerun: b12]","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Good data to work with. Here's what we have:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Screen captures with OCR text, app name, window name (1135 frames so far)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Voice/system audio transcripts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ui_events","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Mouse/keyboard events with app context","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video_chunks","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Raw video files","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Before I start building, a few quick questions:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Tech stack","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"AI summaries","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— 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?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"What summaries matter most?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Day recap (what apps/windows you used, key text seen)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"App time breakdown (time per app)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Audio/conversation recap","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Custom searchable timeline","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Here's the architecture I'm thinking:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"/volume1/screenpipe/app/\n├── main.py # FastAPI web UI\n├── cli.py # Click CLI: `python cli.py day-recap`\n├── db.py # Read-only queries against db.sqlite\n├── consumers/\n│ ├── activity.py # App usage, time per window\n│ ├── ocr.py # OCR text aggregation + search\n│ ├── audio.py # Transcription queries\n│ └── summary.py # AI summary builder\n└── static/\n └── index.html # Single-page UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"CLI commands would look like:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"python cli.py day-recap # EOD summary\npython cli.py activity --date today # App time breakdown\npython cli.py search \"docker\" # Search OCR/audio text\npython cli.py serve # Launch web UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Does this direction work? Any preferences on the stack or which summaries to prioritize?","depth":22,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"seesm ok","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Python and available packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 --version && pip3 list 2>/dev/null | grep -E \"fastapi|uvicorn|click|anthropic|httpx|jinja\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Python 3.11.2\n[rerun: b1]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Verify join works for today's data","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"\nSELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len\nFROM frames f JOIN ocr_text o ON f.id = o.frame_id\nWHERE DATE(f.timestamp) = '2026-04-11'\nORDER BY f.timestamp DESC LIMIT 3;\n\"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T12:54:42.597794+00:00|||2111\n2026-04-11T12:54:41.915916+00:00|||2110\n2026-04-11T12:54:39.912712+00:00|||2111\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install required packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"/bin/bash: line 1: pip3: command not found\n[rerun: b3]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Find pip","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"which pip || which pip3 || python3 -m pip --version 2>/dev/null","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n[rerun: b4]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bootstrap pip then install packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10","depth":24,"role_description":"text"}]...
|
-6374743697256088562
|
-8717864774537180650
|
app_switch
|
accessibility
|
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...
|
NULL
|
|
1474
|
32
|
43
|
2026-04-11T17:31:26.528169+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928686528_m1.jpg...
|
Firefox
|
Irán – Denník N — Personal
|
True
|
dennikn.sk/tema/iran/
|
monitor_1
|
NULL
|
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
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Linkwarden – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Linkwarden – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Preskočiť hlavnú navigáciu","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Preskočiť hlavnú navigáciu","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Denník N","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Vyhľadávaný výraz","depth":9,"help_text":"","placeholder":"Zadajte vyhľadávaný výraz …","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hľadaj","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-9105879180169709780
|
-5340946877945836322
|
app_switch
|
accessibility
|
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
...
|
NULL
|
|
1479
|
33
|
1
|
2026-04-11T17:32:36.335579+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928756335_m1.jpg...
|
Code
|
report.py — screenpipe [SSH: 100.73.206.126]
|
True
|
NULL
|
monitor_1
|
NULL
|
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
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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: 100.73.206.126]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"__init__.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"activity.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"audio.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"ocr.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"report.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"summary.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"#!/bin/bash • Untitled-1, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report.py, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXTextArea","text":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","depth":28,"value":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","depth":29,"role_description":"text"},{"role":"AXRadioButton","text":"Build screenpipe data UI…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: 100.73.206.126","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: 100.73.206.126","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Update is ready, click to restart.","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Update is ready, click to restart.","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"role_description":"text"},{"role":"AXButton","text":"Python","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 4","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 17, Col 87","depth":16,"bounds":{"left":1.0,"top":0.0,"width":-0.0645833,"height":0.024444444},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.9513889,"top":0.0,"width":0.048611104,"height":0.024444444},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"expanded","depth":12,"role_description":"text"},{"role":"AXButton","text":"Build screenpipe data UI and summary app","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":18,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":18,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"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.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the screenpipe directory to understand what we're working with.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List screenpipe directory contents","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"data\ndb.sqlite\npipes\n#recycle\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List data and pipes directories","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09\n2026-04-11\nai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List tables in screenpipe SQLite database","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \".tables\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx\n[rerun: b3]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get ocr_text table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(ocr_text);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|frame_id|INTEGER|1||0\n1|text|TEXT|1||0\n2|text_json|TEXT|0||0\n3|app_name|TEXT|1|''|0\n4|ocr_engine|TEXT|1|'unknown'|0\n5|window_name|TEXT|0||0\n6|focused|BOOLEAN|0|FALSE|0\n7|text_length|INTEGER|0||0\n8|sync_id|TEXT|0||0\n9|synced_at|DATETIME|0||0\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get audio_transcriptions table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(audio_transcriptions);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|audio_chunk_id|INTEGER|1||0\n2|offset_index|INTEGER|1||0\n3|timestamp|TIMESTAMP|1||0\n4|transcription|TEXT|1||0\n5|device|TEXT|1|''|0\n6|is_input_device|BOOLEAN|1|TRUE|0\n7|speaker_id|INTEGER|0||0\n8|transcription_engine|TEXT|1|'Whisper'|0\n9|start_time|REAL|0||0\n10|end_time|REAL|0||0\n11|text_length|INTEGER|0||0\n12|sync_id|TEXT|0||0\n13|synced_at|DATETIME|0||0\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get frames, ui_events, video_chunks schemas","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|video_chunk_id|INTEGER|0|NULL|0\n2|offset_index|INTEGER|1|0|0\n3|timestamp|TIMESTAMP|1||0\n4|name|TEXT|0||0\n5|app_name|TEXT|0|NULL|0\n6|window_name|TEXT|0|NULL|0\n7|focused|BOOLEAN|0|NULL|0\n8|browser_url|TEXT|0|NULL|0\n9|device_name|TEXT|1|''|0\n10|sync_id|TEXT|0||0\n11|machine_id|TEXT|0||0\n12|synced_at|DATETIME|0||0\n13|snapshot_path|TEXT|0|NULL|0\n14|accessibility_text|TEXT|0|NULL|0\n15|accessibility_tree_json|TEXT|0|NULL|0\n16|content_hash|INTEGER|0|NULL|0\n17|simhash|INTEGER|0|NULL|0\n18|capture_trigger|TEXT|0|NULL|0\n19|text_source|TEXT|0|NULL|0\n20|cloud_blob_id|TEXT|0|NULL|0\n21|full_text|TEXT|0|NULL|0\n22|elements_ref_frame_id|INTEGER|0|NULL|0\n0|id|INTEGER|0||1\n1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0\n2|session_id|TEXT|0||0\n3|relative_ms|INTEGER|1|0|0\n4|event_type|TEXT|1||0\n5|x|INTEGER|0||0\n6|y|INTEGER|0||0\n7|delta_x|INTEGER|0||0\n8|delta_y|INTEGER|0||0\n9|button|INTEGER|0||0\n10|click_count|INTEGER|0||0\n11|key_code|INTEGER|0||0\n12|modifiers|INTEGER|0||0\n13|text_content|TEXT|0||0\n14|text_length|INTEGER|0||0\n15|app_name|TEXT|0||0\n16|app_pid|INTEGER|0||0\n17|window_title|TEXT|0||0\n18|browser_url|TEXT|0||0\n19|element_role|TEXT|0||0\n20|element_name|TEXT|0||0\n21|element_value|TEXT|0||0\n22|element_description|TEXT|0||0\n23|element_automation_id|TEXT|0||0\n24|element_bounds|TEXT|0||0\n25|frame_id|INTEGER|0||0\n26|sync_id|TEXT|0||0\n27|machine_id|TEXT|0||0\n28|synced_at|DATETIME|0||0\n0|id|INTEGER|0||1\n1|file_path|TEXT|1||0\n2|device_name|TEXT|1|''|0\n3|sync_id|TEXT|0||0\n4|machine_id|TEXT|0||0\n5|synced_at|DATETIME|0||0\n6|fps|REAL|1|0.5|0\n7|cloud_blob_id|TEXT|0|NULL|0\n[rerun: b6]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check data counts and date ranges","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*) FROM ocr_text;\" 2>/dev/null","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00\n3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00\n666\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Explore existing pipes for patterns","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\n[rerun: b8]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Read day-recap pipe documentation","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n[rerun: b9]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample app names from frames","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Safari\nActivity Monitor\nDia\niTerm2\nControl Centre\nUserNotificationCenter\nFinder\nClaude\nSlack\nFirefox\nRaycast\nNetAuthAgent\nQuickTime Player\n[rerun: b10]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample joined frame+ocr data for today","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"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;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE\n2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER\n2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p\n2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p\n2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi\n[rerun: b11]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample recent audio transcriptions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09T17:02:52+00:00|.|System Audio\n2026-04-09T16:59:22+00:00|Class is technically...|System Audio\n2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio\n[rerun: b12]","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Good data to work with. Here's what we have:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Screen captures with OCR text, app name, window name (1135 frames so far)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Voice/system audio transcripts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ui_events","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Mouse/keyboard events with app context","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video_chunks","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Raw video files","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Before I start building, a few quick questions:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Tech stack","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"AI summaries","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— 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?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"What summaries matter most?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Day recap (what apps/windows you used, key text seen)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"App time breakdown (time per app)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Audio/conversation recap","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Custom searchable timeline","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Here's the architecture I'm thinking:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"/volume1/screenpipe/app/\n├── main.py # FastAPI web UI\n├── cli.py # Click CLI: `python cli.py day-recap`\n├── db.py # Read-only queries against db.sqlite\n├── consumers/\n│ ├── activity.py # App usage, time per window\n│ ├── ocr.py # OCR text aggregation + search\n│ ├── audio.py # Transcription queries\n│ └── summary.py # AI summary builder\n└── static/\n └── index.html # Single-page UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"CLI commands would look like:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"python cli.py day-recap # EOD summary\npython cli.py activity --date today # App time breakdown\npython cli.py search \"docker\" # Search OCR/audio text\npython cli.py serve # Launch web UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Does this direction work? Any preferences on the stack or which summaries to prioritize?","depth":22,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"seesm ok","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Python and available packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 --version && pip3 list 2>/dev/null | grep -E \"fastapi|uvicorn|click|anthropic|httpx|jinja\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Python 3.11.2\n[rerun: b1]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Verify join works for today's data","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"\nSELECT f.timestamp, o.app_name, o.window_name, length(o.text) as txt_len\nFROM frames f JOIN ocr_text o ON f.id = o.frame_id\nWHERE DATE(f.timestamp) = '2026-04-11'\nORDER BY f.timestamp DESC LIMIT 3;\n\"","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T12:54:42.597794+00:00|||2111\n2026-04-11T12:54:41.915916+00:00|||2110\n2026-04-11T12:54:39.912712+00:00|||2111\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install required packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"pip3 install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"/bin/bash: line 1: pip3: command not found\n[rerun: b3]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Find pip","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"which pip || which pip3 || python3 -m pip --version 2>/dev/null","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n[rerun: b4]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bootstrap pip then install packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 -m ensurepip --upgrade 2>&1 && python3 -m pip install fastapi uvicorn click anthropic python-dotenv 2>&1 | tail -10","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Exit code 1\n/usr/bin/python3: No module named ensurepip\n[rerun: b5]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install pip via apt","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"apt-get install -y python3-pip python3-venv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)\nE: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?\n[rerun: b6]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Install pip with sudo","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Reason:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"lets make it in docker, not to install it in nas directly","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sudo apt-get install -y python3-pip python3-venv 2>&1 | tail -5","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Good call. Let me check what Docker setup you already have and build a proper containerized app.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check existing docker-compose for reference","depth":23,"role_description":"text"}]...
|
-6325690656424996630
|
-8717864774537180650
|
app_switch
|
accessibility
|
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
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...
|
NULL
|
|
1487
|
33
|
9
|
2026-04-11T17:34:25.101905+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928865101_m1.jpg...
|
Firefox
|
Irán – Denník N — Personal
|
True
|
dennikn.sk/tema/iran/
|
monitor_1
|
NULL
|
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í)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Linkwarden – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Linkwarden – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Preskočiť hlavnú navigáciu","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Preskočiť hlavnú navigáciu","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Denník N","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Vyhľadávaný výraz","depth":9,"help_text":"","placeholder":"Zadajte vyhľadávaný výraz …","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Hľadaj","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hľadaj","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vypnúť reklamu","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vypnúť reklamu","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SK","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SK","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"HU","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"HU","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CZ","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CZ","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"EU","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"EU","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Otvoriť hlavné menu","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MENU","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SVET","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SVET","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"DONALD TRUMP","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DONALD TRUMP","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"IRÁN","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"IRÁN","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"VIKTOR ORBÁN","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VIKTOR ORBÁN","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"VOJNA NA UKRAJINE","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VOJNA NA UKRAJINE","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"KONFLIKT NA BLÍZKOM VÝCHODE","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"KONFLIKT NA BLÍZKOM VÝCHODE","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"MAĎARSKÉ VOĽBY","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MAĎARSKÉ VOĽBY","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"USA","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"USA","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"RUSKO","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"RUSKO","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"VLADIMIR PUTIN","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VLADIMIR PUTIN","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"VÝVOJ BOJOV NA UKRAJINE","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"VÝVOJ BOJOV NA UKRAJINE","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Posun na nasledujúce","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Irán","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Irán","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"ODOBERAŤ","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ODOBERAŤ","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"36 hodín chaosu: Ako Trump hrozbou o vyhladení Iránu pokazil rokovania (reportáž denníka New York Times)","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"The New York Times","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"The New York Times","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 4)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Trump si vylial zlosť na šéfovi NATO, Rutteho stratégia ustupovania prestala vychádzať","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Soňa Weissová","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Soňa Weissová","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 24)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Irán je ako čierna skrinka, do ktorej nevidíme. Ťažké rokovania v Pakistane naznačia jeho budúcnosť","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Denisa Ballová","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denisa Ballová","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 4)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Trumpov svet (vývoj v Bielom dome) Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Trumpov svet (445. deň): Melania Trump náhle prehovorila o Epsteinovi a nikto nevie prečo","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiří Sobota","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiří Sobota","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 29)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"29","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Svetový newsfilter Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Svetový newsfilter: Poradcovia Trumpa mali pochybnosti o vojne, no nepovedali mu to do očí","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Denník N","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Denník N","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"a ďalší","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 1)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Energetická analytička: Dotovanie cien benzínu a verejnej dopravy nerieši hlavný problém, ktorý tu máme","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Tomáš Zemko","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tomáš Zemko","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 4)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Graf dňa Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Graf dňa: Po optimizme zavládla na trhoch opäť skepsa. Akciové indexy stále strácajú","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Tomáš Zemko","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tomáš Zemko","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dosiahol len otázne otvorenie prielivu, ktorý už bol pred jeho útokom otvorený. Trumpovo skóre v Iráne je mizivé","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jan Wirnitzer","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jan Wirnitzer","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9. apríla 2026","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 3)","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary","depth":12,"bounds":{"left":0.61527777,"top":0.0,"width":0.125,"height":0.13333334},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary","depth":12,"bounds":{"left":0.32152778,"top":0.0,"width":0.28541666,"height":0.08444444},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary","depth":13,"bounds":{"left":0.32152778,"top":0.0,"width":0.24375,"height":0.09},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vojna s Iránom stála USA desiatky miliárd dolárov, stratili lietadlá aj vzácne radary","depth":14,"bounds":{"left":0.32152778,"top":0.0,"width":0.24375,"height":0.09},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Tomáš Vasilko","depth":13,"bounds":{"left":0.32152778,"top":0.04777778,"width":0.06527778,"height":0.02},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tomáš Vasilko","depth":14,"bounds":{"left":0.32152778,"top":0.04777778,"width":0.06527778,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8. apríla 2026","depth":13,"bounds":{"left":0.3951389,"top":0.04777778,"width":0.0625,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zobraziť diskusiu (počet príspevkov: 1)","depth":13,"bounds":{"left":0.57569444,"top":0.04,"width":0.03125,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.58194447,"top":0.05111111,"width":0.009027778,"height":0.013333334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":14,"bounds":{"left":0.5951389,"top":0.05,"width":0.004166667,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KOMENTÁRE","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Č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í)","depth":12,"bounds":{"left":0.61527777,"top":0.13,"width":0.125,"height":0.13333334},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Č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í)","depth":12,"bounds":{"left":0.32152778,"top":0.13,"width":0.28541666,"height":0.08444444},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Č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í)","depth":13,"bounds":{"left":0.32152778,"top":0.12666667,"width":0.2701389,"height":0.09111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
4736451233347548774
|
2897809715368266758
|
app_switch
|
accessibility
|
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í)...
|
NULL
|
|
1500
|
33
|
22
|
2026-04-11T17:35:05.491922+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775928905491_m1.jpg...
|
Code
|
Build screenpipe data UI… — screenpipe [SSH: 100.7 Build screenpipe data UI… — screenpipe [SSH: 100.73.206.126]...
|
True
|
NULL
|
monitor_1
|
NULL
|
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
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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E) - 1 unsaved file","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update, 1 requires restart","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"3","depth":22,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: 100.73.206.126]","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: 100.73.206.126]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"consumers","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"__init__.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"activity.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"audio.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"elements.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"interactions.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"ocr.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"report.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"summary.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"static","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"cli.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"main.py","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"requirements.txt","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"role_description":"text"},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"#!/bin/bash • Untitled-1, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report.py, preview, Editor Group 1","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"role_description":"text"},{"role":"AXTextArea","text":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","depth":28,"value":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"\"\"\"Structured work report — no LLM needed.\"\"\"\nfrom datetime import date, datetime, timezone, timedelta\nfrom typing import Any\nfrom urllib.parse import urlparse\n\nfrom db import get_conn, date_range, today as _today\n\nBREAK_THRESHOLD_MIN = 10 # gap > 10 min = break\nWORK_APPS = {\n \"code\": {\"iTerm2\", \"Terminal\", \"Code\", \"Visual Studio Code\", \"PyCharm\", \"Xcode\", \"Cursor\"},\n \"browser\": {\"Firefox\", \"Safari\", \"Chrome\", \"Arc\", \"Dia\"},\n \"comms\": {\"Slack\", \"Teams\", \"Discord\", \"Zoom\", \"Telegram\", \"WhatsApp\"},\n \"docs\": {\"Word\", \"Pages\", \"Notion\", \"Obsidian\", \"Bear\", \"Typora\"},\n \"ai\": {\"Claude\", \"ChatGPT\"},\n \"design\": {\"Figma\", \"Sketch\", \"Photoshop\", \"Illustrator\"},\n \"media\": {\"QuickTime Player\", \"VLC\", \"Spotify\"},\n \"system\": {\"Finder\", \"Activity Monitor\", \"System Preferences\", \"System Settings\",\n \"Raycast\", \"Control Centre\", \"UserNotificationCenter\", \"NetAuthAgent\"},\n}\n\ndef _categorize(app_name: str) -> str:\n for cat, apps in WORK_APPS.items():\n if app_name in apps:\n return cat\n return \"other\"\n\ndef _extract_domain(url: str) -> str:\n try:\n h = urlparse(url).netloc\n return h.removeprefix(\"www.\") if h else url[:40]\n except Exception:\n return url[:40]\n\ndef _parse_ts(ts: str) -> datetime:\n ts = ts.replace(\"+00:00\", \"+00:00\") # already UTC\n try:\n return datetime.fromisoformat(ts)\n except ValueError:\n return datetime.fromisoformat(ts[:26] + \"+00:00\")\n\n\ndef session_breakdown(for_date: date | None = None, break_min: int = BREAK_THRESHOLD_MIN) -> dict[str, Any]:\n \"\"\"\n Detect work sessions and breaks from frame timestamps.\n Returns sessions, breaks, and totals.\n \"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"SELECT timestamp FROM frames WHERE timestamp >= ? AND timestamp < ? ORDER BY timestamp\",\n (start, end),\n ).fetchall()\n\n if not rows:\n return {\"sessions\": [], \"breaks\": [], \"total_active_min\": 0, \"total_break_min\": 0, \"date\": str(d)}\n\n timestamps = [_parse_ts(r[\"timestamp\"]) for r in rows]\n threshold = timedelta(minutes=break_min)\n\n sessions: list[dict] = []\n breaks: list[dict] = []\n sess_start = timestamps[0]\n prev = timestamps[0]\n\n for ts in timestamps[1:]:\n gap = ts - prev\n if gap > threshold:\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n breaks.append({\n \"start\": prev.isoformat(),\n \"end\": ts.isoformat(),\n \"duration_min\": round(gap.total_seconds() / 60, 1),\n })\n sess_start = ts\n prev = ts\n\n dur = (prev - sess_start).total_seconds() / 60\n sessions.append({\n \"start\": sess_start.isoformat(),\n \"end\": prev.isoformat(),\n \"duration_min\": round(dur, 1),\n })\n\n total_active = sum(s[\"duration_min\"] for s in sessions)\n total_break = sum(b[\"duration_min\"] for b in breaks)\n total_span = (timestamps[-1] - timestamps[0]).total_seconds() / 60\n\n return {\n \"date\": str(d),\n \"day_start\": timestamps[0].isoformat(),\n \"day_end\": timestamps[-1].isoformat(),\n \"total_span_min\": round(total_span, 1),\n \"total_active_min\": round(total_active, 1),\n \"total_break_min\": round(total_break, 1),\n \"sessions\": sessions,\n \"breaks\": breaks,\n }\n\n\ndef domain_breakdown(for_date: date | None = None) -> list[dict[str, Any]]:\n \"\"\"Browser time grouped by domain.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n rows = conn.execute(\n \"\"\"\n SELECT browser_url, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ?\n AND browser_url IS NOT NULL AND browser_url != ''\n GROUP BY browser_url\n ORDER BY frames DESC\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Group by domain\n domains: dict[str, dict] = {}\n for r in rows:\n domain = _extract_domain(r[\"browser_url\"])\n if domain not in domains:\n domains[domain] = {\"domain\": domain, \"minutes\": 0, \"urls\": []}\n domains[domain][\"minutes\"] = round(domains[domain][\"minutes\"] + r[\"minutes\"], 1)\n domains[domain][\"urls\"].append({\"url\": r[\"browser_url\"], \"minutes\": r[\"minutes\"]})\n\n return sorted(domains.values(), key=lambda x: x[\"minutes\"], reverse=True)\n\n\ndef slack_activity(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Slack-specific: time, channels, message activity.\"\"\"\n d = for_date or _today()\n start, end = date_range(d)\n\n with get_conn() as conn:\n # Time in Slack\n time_row = conn.execute(\n \"\"\"\n SELECT COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n # Channels from window names\n channels = conn.execute(\n \"\"\"\n SELECT window_name, COUNT(*) as frames, ROUND(COUNT(*)*2.0/60,1) as minutes\n FROM frames\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n AND window_name IS NOT NULL AND window_name != ''\n GROUP BY window_name ORDER BY frames DESC LIMIT 20\n \"\"\",\n (start, end),\n ).fetchall()\n\n # Keystrokes in Slack (proxy for messages sent)\n events = conn.execute(\n \"\"\"\n SELECT\n SUM(CASE WHEN event_type='key' THEN 1 ELSE 0 END) as keystrokes,\n SUM(CASE WHEN event_type='click' THEN 1 ELSE 0 END) as clicks\n FROM ui_events\n WHERE timestamp >= ? AND timestamp < ? AND app_name = 'Slack'\n \"\"\",\n (start, end),\n ).fetchone()\n\n return {\n \"minutes\": time_row[\"minutes\"] if time_row else 0,\n \"frames\": time_row[\"frames\"] if time_row else 0,\n \"keystrokes\": events[\"keystrokes\"] if events else 0,\n \"clicks\": events[\"clicks\"] if events else 0,\n \"channels\": [dict(r) for r in channels],\n }\n\n\ndef work_report(for_date: date | None = None) -> dict[str, Any]:\n \"\"\"Full structured work report — no AI needed.\"\"\"\n from consumers.activity import app_time, ui_event_summary\n\n d = for_date or _today()\n\n apps = app_time(d)\n # Annotate with category\n categorized: dict[str, list] = {}\n for a in apps:\n cat = _categorize(a[\"app_name\"])\n categorized.setdefault(cat, []).append(a)\n\n return {\n \"date\": str(d),\n \"sessions\": session_breakdown(d),\n \"apps_by_category\": categorized,\n \"domains\": domain_breakdown(d),\n \"slack\": slack_activity(d),\n \"ui_events\": ui_event_summary(d),\n }","depth":29,"role_description":"text"},{"role":"AXRadioButton","text":"Build screenpipe data UI…, Editor Group 2","depth":28,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"role_description":"text"},{"role":"AXButton","text":"remote SSH: 100.73.206.126","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"SSH: 100.73.206.126","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"role_description":"text"},{"role":"AXButton","text":"Update is ready, click to restart.","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Update is ready, click to restart.","depth":17,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Diff editor","depth":12,"role_description":"text"},{"role":"AXButton","text":"Build screenpipe data UI and summary app","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":18,"help_text":"Session history","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New session","depth":18,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"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.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Let me explore the screenpipe directory to understand what we're working with.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List screenpipe directory contents","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"data\ndb.sqlite\npipes\n#recycle\n[rerun: b1]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List data and pipes directories","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/data/ | head -20 && ls /volume1/screenpipe/pipes/","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09\n2026-04-11\nai-habits\nday-recap\nmeeting-summary\nstandup-update\ntime-breakdown\nvideo-export\n[rerun: b2]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"List tables in screenpipe SQLite database","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \".tables\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx\n[rerun: b3]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get ocr_text table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(ocr_text);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|frame_id|INTEGER|1||0\n1|text|TEXT|1||0\n2|text_json|TEXT|0||0\n3|app_name|TEXT|1|''|0\n4|ocr_engine|TEXT|1|'unknown'|0\n5|window_name|TEXT|0||0\n6|focused|BOOLEAN|0|FALSE|0\n7|text_length|INTEGER|0||0\n8|sync_id|TEXT|0||0\n9|synced_at|DATETIME|0||0\n[rerun: b4]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get audio_transcriptions table schema","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(audio_transcriptions);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|audio_chunk_id|INTEGER|1||0\n2|offset_index|INTEGER|1||0\n3|timestamp|TIMESTAMP|1||0\n4|transcription|TEXT|1||0\n5|device|TEXT|1|''|0\n6|is_input_device|BOOLEAN|1|TRUE|0\n7|speaker_id|INTEGER|0||0\n8|transcription_engine|TEXT|1|'Whisper'|0\n9|start_time|REAL|0||0\n10|end_time|REAL|0||0\n11|text_length|INTEGER|0||0\n12|sync_id|TEXT|0||0\n13|synced_at|DATETIME|0||0\n[rerun: b5]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Get frames, ui_events, video_chunks schemas","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"PRAGMA table_info(frames); PRAGMA table_info(ui_events); PRAGMA table_info(video_chunks);\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"0|id|INTEGER|0||1\n1|video_chunk_id|INTEGER|0|NULL|0\n2|offset_index|INTEGER|1|0|0\n3|timestamp|TIMESTAMP|1||0\n4|name|TEXT|0||0\n5|app_name|TEXT|0|NULL|0\n6|window_name|TEXT|0|NULL|0\n7|focused|BOOLEAN|0|NULL|0\n8|browser_url|TEXT|0|NULL|0\n9|device_name|TEXT|1|''|0\n10|sync_id|TEXT|0||0\n11|machine_id|TEXT|0||0\n12|synced_at|DATETIME|0||0\n13|snapshot_path|TEXT|0|NULL|0\n14|accessibility_text|TEXT|0|NULL|0\n15|accessibility_tree_json|TEXT|0|NULL|0\n16|content_hash|INTEGER|0|NULL|0\n17|simhash|INTEGER|0|NULL|0\n18|capture_trigger|TEXT|0|NULL|0\n19|text_source|TEXT|0|NULL|0\n20|cloud_blob_id|TEXT|0|NULL|0\n21|full_text|TEXT|0|NULL|0\n22|elements_ref_frame_id|INTEGER|0|NULL|0\n0|id|INTEGER|0||1\n1|timestamp|DATETIME|1|CURRENT_TIMESTAMP|0\n2|session_id|TEXT|0||0\n3|relative_ms|INTEGER|1|0|0\n4|event_type|TEXT|1||0\n5|x|INTEGER|0||0\n6|y|INTEGER|0||0\n7|delta_x|INTEGER|0||0\n8|delta_y|INTEGER|0||0\n9|button|INTEGER|0||0\n10|click_count|INTEGER|0||0\n11|key_code|INTEGER|0||0\n12|modifiers|INTEGER|0||0\n13|text_content|TEXT|0||0\n14|text_length|INTEGER|0||0\n15|app_name|TEXT|0||0\n16|app_pid|INTEGER|0||0\n17|window_title|TEXT|0||0\n18|browser_url|TEXT|0||0\n19|element_role|TEXT|0||0\n20|element_name|TEXT|0||0\n21|element_value|TEXT|0||0\n22|element_description|TEXT|0||0\n23|element_automation_id|TEXT|0||0\n24|element_bounds|TEXT|0||0\n25|frame_id|INTEGER|0||0\n26|sync_id|TEXT|0||0\n27|machine_id|TEXT|0||0\n28|synced_at|DATETIME|0||0\n0|id|INTEGER|0||1\n1|file_path|TEXT|1||0\n2|device_name|TEXT|1|''|0\n3|sync_id|TEXT|0||0\n4|machine_id|TEXT|0||0\n5|synced_at|DATETIME|0||0\n6|fps|REAL|1|0.5|0\n7|cloud_blob_id|TEXT|0|NULL|0\n[rerun: b6]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check data counts and date ranges","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM frames;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*), MIN(timestamp), MAX(timestamp) FROM audio_transcriptions;\" 2>/dev/null\nsqlite3 /volume1/screenpipe/db.sqlite \"SELECT COUNT(*) FROM ocr_text;\" 2>/dev/null","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"1135|2026-04-09T16:53:09.043761+00:00|2026-04-11T12:54:42.597794+00:00\n3|2026-04-09T16:53:20+00:00|2026-04-09T17:02:52+00:00\n666\n[rerun: b7]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Explore existing pipes for patterns","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls /volume1/screenpipe/pipes/day-recap/ 2>/dev/null && cat /volume1/screenpipe/pipes/day-recap/*.js 2>/dev/null | head -50","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"pipe.md\n[rerun: b8]","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Read day-recap pipe documentation","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"cat /volume1/screenpipe/pipes/day-recap/pipe.md","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"---\nschedule: manual\nenabled: true\ntemplate: true\ntitle: Day Recap\ndescription: \"Today's accomplishments, key moments, and unfinished work\"\nicon: \"📋\"\nfeatured: true\n---\n\nAnalyze my screen and audio recordings from today (last 16 hours only). \n\nRead screenpipe skill first.\n\nUse this exact format:\n\n## Summary\nOne sentence: what I mainly did today.\n\n## Accomplishments\n- Top 3 things I finished, with timestamps (e.g. \"2:30 PM\")\n- Name specific apps, files, or projects\n\n## Key Moments\n- Important things I saw, said, or heard — with timestamps\n\n## Unfinished Work\n- What I should continue tomorrow — name the app/file/task\n\n## Patterns\n- Apps I used most, topics that came up repeatedly\n\nOnly report what you can verify from the data. End with: \"**Next step:** [most important thing to continue]\"\n[rerun: b9]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample app names from frames","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM frames WHERE app_name != '' LIMIT 20;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Safari\nActivity Monitor\nDia\niTerm2\nControl Centre\nUserNotificationCenter\nFinder\nClaude\nSlack\nFirefox\nRaycast\nNetAuthAgent\nQuickTime Player\n[rerun: b10]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample joined frame+ocr data for today","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"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;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T11:53:00.627698+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <47H5Sat 11 Apr 14:53:00-zshDOCKE\n2026-04-11T11:53:02.005967+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA-zsh100% <7H5Sat 11 Apr 14:53:01-zshDOCKER\n2026-04-11T11:53:03.627468+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:03-zshDOCKERuse p\n2026-04-11T11:53:05.528794+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <47Sat 11 Apr 14:53:05-zshDOCKERuse p\n2026-04-11T11:53:07.662098+00:00|||iTerm2ShellEditViewSessionScriptsProfilesWindowHelp$0(ahlA100% <7Sat 11 Apr 14:53:07-zshDOCKERuse pi\n[rerun: b11]","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Sample recent audio transcriptions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 /volume1/screenpipe/db.sqlite \"SELECT timestamp, substr(transcription,1,100) as text, device FROM audio_transcriptions ORDER BY timestamp DESC LIMIT 5;\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUT","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-09T17:02:52+00:00|.|System Audio\n2026-04-09T16:59:22+00:00|Class is technically...|System Audio\n2026-04-09T16:53:20+00:00|I do for you. Run the credit check. Deal apartment. Okay.|System Audio\n[rerun: b12]","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Good data to work with. Here's what we have:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"+","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Screen captures with OCR text, app name, window name (1135 frames so far)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"audio_transcriptions","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Voice/system audio transcripts","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ui_events","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Mouse/keyboard events with app context","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"video_chunks","depth":24,"role_description":"text"},{"role":"AXStaticText","text":": Raw video files","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Before I start building, a few quick questions:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Tech stack","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— Python OK? (FastAPI for the web UI backend, Click for CLI commands, HTMX for the frontend to keep it simple)","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"AI summaries","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"— 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?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"What summaries matter most?","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Day recap (what apps/windows you used, key text seen)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"App time breakdown (time per app)","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Audio/conversation recap","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Custom searchable timeline","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Here's the architecture I'm thinking:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"/volume1/screenpipe/app/\n├── main.py # FastAPI web UI\n├── cli.py # Click CLI: `python cli.py day-recap`\n├── db.py # Read-only queries against db.sqlite\n├── consumers/\n│ ├── activity.py # App usage, time per window\n│ ├── ocr.py # OCR text aggregation + search\n│ ├── audio.py # Transcription queries\n│ └── summary.py # AI summary builder\n└── static/\n └── index.html # Single-page UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"CLI commands would look like:","depth":22,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":22,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"python cli.py day-recap # EOD summary\npython cli.py activity --date today # App time breakdown\npython cli.py search \"docker\" # Search OCR/audio text\npython cli.py serve # Launch web UI","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Does this direction work? Any preferences on the stack or which summaries to prioritize?","depth":22,"role_description":"text"},{"role":"AXButton","text":"Message actions","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"seesm ok","depth":24,"role_description":"text"},{"role":"AXButton","text":"Thinking","depth":22,"role_description":"disclosure triangle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thinking","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Bash","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check Python and available packages","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"IN","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"python3 --version && pip3 list 2>/dev/null | grep -E \"fastapi|uvicorn|click|anthropic|httpx|jinja\"","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy code to clipboard","depth":23,"help_text":"Copy code","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-8393704770092114008
|
-8790063097473529322
|
app_switch
|
accessibility
|
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
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...
|
NULL
|
|
1578
|
34
|
49
|
2026-04-11T17:41:07.481729+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929267481_m1.jpg...
|
Firefox
|
Settings — Personal
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
Close tab
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
Add-ons for Firefox (en-US)
Add-ons 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)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Customize sidebar
Close
Sidebar settings
Vertical tabs
Vertical tabs
Expand sidebar on hover
Expand sidebar on hover
Hide tabs and sidebar
Hide tabs and sidebar
Move sidebar to the right
Move sidebar to the right
Firefox tools
AI chatbot
AI chatbot
Tabs from other devices
Tabs from other devices
History
History
Bookmarks
Bookmarks
Passwords
Passwords
Sidebar extensions
Sidebar extensions
Bitwarden
Bitwarden
Manage Extensions
Manage Extensions
Manage Firefox settings
Manage Firefox settings
General
Home
Search
Privacy & Security
Sync
AI Controls
Firefox Labs
More from Mozilla
Extensions & Themes
Extensions & Themes
Firefox Support
Firefox Support
Your browser is being managed by your organization.
Your browser is being managed by your organization.
Find in Settings
General
General
Default browser
Default browser
Psst, Firefox isn’t your default.
Make default
Make default...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Customize sidebar","depth":6,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customize sidebar","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar settings","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Vertical tabs","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vertical tabs","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Expand sidebar on hover","depth":14,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Expand sidebar on hover","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Hide tabs and sidebar","depth":14,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hide tabs and sidebar","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Move sidebar to the right","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Move sidebar to the right","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox tools","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"AI chatbot","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"AI chatbot","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Tabs from other devices","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Tabs from other devices","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"History","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Bookmarks","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bookmarks","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Passwords","depth":13,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Passwords","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Sidebar extensions","depth":6,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sidebar extensions","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Bitwarden","depth":11,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Manage Extensions","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage Extensions","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Manage Firefox settings","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Manage Firefox settings","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"General","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Home","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Privacy & Security","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sync","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Controls","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox Labs","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More from Mozilla","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Extensions & Themes","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions & Themes","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Firefox Support","depth":7,"bounds":{"left":0.19861111,"top":0.0,"width":0.17083333,"height":0.04222222},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Firefox Support","depth":9,"bounds":{"left":0.22916667,"top":0.0,"width":0.06736111,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your browser is being managed by your organization.","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your browser is being managed by your organization.","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Find in Settings","depth":9,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"General","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"General","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Default browser","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Default browser","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Psst, Firefox isn’t your default.","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Make default","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Make default","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8582807571644243026
|
3890586094280788638
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameles DXP4800PLUS-B5F8
Inbox - [EMAIL] - Gmail
Shameless • HBO Max
Shameless • HBO Max
Settings
Settings
Close tab
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
Add-ons for Firefox (en-US)
Add-ons 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)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Customize sidebar
Customize sidebar
Close
Sidebar settings
Vertical tabs
Vertical tabs
Expand sidebar on hover
Expand sidebar on hover
Hide tabs and sidebar
Hide tabs and sidebar
Move sidebar to the right
Move sidebar to the right
Firefox tools
AI chatbot
AI chatbot
Tabs from other devices
Tabs from other devices
History
History
Bookmarks
Bookmarks
Passwords
Passwords
Sidebar extensions
Sidebar extensions
Bitwarden
Bitwarden
Manage Extensions
Manage Extensions
Manage Firefox settings
Manage Firefox settings
General
Home
Search
Privacy & Security
Sync
AI Controls
Firefox Labs
More from Mozilla
Extensions & Themes
Extensions & Themes
Firefox Support
Firefox Support
Your browser is being managed by your organization.
Your browser is being managed by your organization.
Find in Settings
General
General
Default browser
Default browser
Psst, Firefox isn’t your default.
Make default
Make default...
|
NULL
|
|
1580
|
34
|
51
|
2026-04-11T17:41:24.866426+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929284866_m1.jpg...
|
Code
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelpall100% CSat 11 Apr 20:41:24-zsh181DOCKER• 8812026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.99268822026-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• x4|-zsh• 85-zsh86-zshO 87-zshINFOscreenpipe_engine::retention:retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14 days)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: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible framesINFOINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedscreenpipe_engine::server: api_usage_5min: 1 requestsINFOscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head-20• *8du-sh~/.screenpipe/data/data/*total24drwxr-xr-x5lukasstaff160B 11 Apr 14:52drwxr-xr-xlukasstaff160B 11 Apr 15:03-rw-r--r--@lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14lukasstaff448B 11 Apr 14:532026-04-09drwxr-xr-x98lukasstaff3.1K 11Apr 20:322026-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.json99M/Users/lukas/.screenpipe/data126M/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 ~ $ 2026-04-11T20:34:53.551967Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9017845113719419888, trigger=click)2026-04-11T20:34:56.3796842INFO2026-04-11T20:34:58.704027Zscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9017845113719419888, trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9017845113719419888, trigger=click)2026-04-11T20:36:40.376312ZINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:36:40.376264+00:00 (14d retention)2026-04-11T20:36:53.215520ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1247300013418283538,trigger=click)2026-04-11T20:37:03.5494672INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1247300013418283538, trigger=click)2026-04-11T20:37:09.670722ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames2026-04-11T20:37:11.207501ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 5.3MB → 1.2MB (4.5x), 24 JPEGs deleted2026-04-11T20:37:44.461189ZINFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-259750597993296433, trigger=click)2026-04-11T20:37:58.4086082INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4847561377089731380, trigger=click)...
|
NULL
|
782738495924341858
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelpall100% CSat 11 Apr 20:41:24-zsh181DOCKER• 8812026-04-11T20:26:10.383131Z2026-04-11T20:26:10.383762Z2026-04-11T20:26:38.337011Z2026-04-11T20:26:55.99268822026-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• x4|-zsh• 85-zsh86-zshO 87-zshINFOscreenpipe_engine::retention:retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14 days)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: skipping capture for monitor 1 (hash=5606118560581161138, trigger=click)INFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 61 eligible framesINFOINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 61 frames, 9.4MB → 3.3MB (2.8x), 61 JPEGs deletedscreenpipe_engine::server: api_usage_5min: 1 requestsINFOscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:31:40.380594+00:00 (14d retention)INFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 1 eligible framesls -lah ~/.screenpipe/data/data/ | head-20• *8du-sh~/.screenpipe/data/data/*total24drwxr-xr-x5lukasstaff160B 11 Apr 14:52drwxr-xr-xlukasstaff160B 11 Apr 15:03-rw-r--r--@lukasstaff8.0K9 Apr 20:43.DS_Storedrwxr-xr-x14lukasstaff448B 11 Apr 14:532026-04-09drwxr-xr-x98lukasstaff3.1K 11Apr 20:322026-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.json99M/Users/lukas/.screenpipe/data126M/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 ~ $ 2026-04-11T20:34:53.551967Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9017845113719419888, trigger=click)2026-04-11T20:34:56.3796842INFO2026-04-11T20:34:58.704027Zscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9017845113719419888, trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9017845113719419888, trigger=click)2026-04-11T20:36:40.376312ZINFO screenpipe_engine::retention: retention: cleaning up data before 2026-03-28T17:36:40.376264+00:00 (14d retention)2026-04-11T20:36:53.215520ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1247300013418283538,trigger=click)2026-04-11T20:37:03.5494672INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=1247300013418283538, trigger=click)2026-04-11T20:37:09.670722ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 24 eligible frames2026-04-11T20:37:11.207501ZINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 24 frames, 5.3MB → 1.2MB (4.5x), 24 JPEGs deleted2026-04-11T20:37:44.461189ZINFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-259750597993296433, trigger=click)2026-04-11T20:37:58.4086082INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=4847561377089731380, trigger=click)...
|
NULL
|
|
1581
|
34
|
52
|
2026-04-11T17:41:53.712775+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929313712_m1.jpg...
|
Firefox
|
Screenpipe Dashboard — Personal
|
True
|
http://100.73.206.126:8766
|
monitor_1
|
NULL
|
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
Add-ons for Firefox (en-US)
Add-ons 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)
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...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"firefox sidebar - Google Search","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"firefox sidebar - Google Search","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"How to use AI-enhanced tab groups | Firefox Help","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"How to use AI-enhanced tab groups | Firefox Help","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Add-ons Manager","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons Manager","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Irán – Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Irán – Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Vimium Options","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Vimium Options","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Loď Orion úspešne pristála na Zemi. Desať vecí, ktoré si pamätať o misii Artemis II — Denník N","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Machines - Tailscale","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Machines - Tailscale","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bitwarden Password Manager – Get this Extension for 🦊 Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Browser Extension Getting Started | Bitwarden","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Browser Extension Getting Started | Bitwarden","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Extensions – Add-ons for Firefox (en-US)","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Extensions – Add-ons for Firefox (en-US)","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Screenpipe","depth":7,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Screenpipe","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Activity","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Audio","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Work Report","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Summary","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Date","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"04","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Calendar","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TOTAL SPAN","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:52 → 15:54","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIVE","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BREAKS","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 breaks · 0.0h","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SESSIONS","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"62m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FRAMES","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"612","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"APPS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UI EVENTS","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1344","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AUDIO","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIVE PERIOD","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14:52 → 15:54","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TIME PER APP","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— CLICK TO FILTER RIGHT PANEL","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"iTerm2","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.2m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1.5m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Finder","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.6m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QuickTime Player","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.5m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NetAuthAgent","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Raycast","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Websites","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Windows","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"UI Events","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"nas.lakylak.xyz/desktop/#/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.7m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"play.hbomax.com/video/watch/6b742798-e5fa-4f90-8beb-74c328dc5028/65d19c63-e85e-4392-8594-f0f2e0a1dc2d","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"nas.lakylak.xyz/desktop/#/login/account","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"login.tailscale.com/login?next_url=%2Fadmin","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"dennikn.sk/5263377/lod-orion-uspesne-pristala-na-zemi-desat-veci-ktore-si-pamatat-na-misii-artemis-ii/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0.1m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://localhost:3030","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"addons.mozilla.org/en-US/firefox/addon/vimium-ff/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"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","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0m","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3091908115894725819
|
-5356150684892378036
|
app_switch
|
accessibility
|
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
Add-ons for Firefox (en-US)
Add-ons 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)
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...
|
NULL
|
|
1611
|
35
|
23
|
2026-04-11T17:43:21.190292+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929401190_m1.jpg...
|
Firefox
|
Problem loading page — Work
|
True
|
app.dev.jiminny.com
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Open AI chatbot (⌃X)
Tabs from other devices
Open Open AI chatbot (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Customize sidebar
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Looks like there’s a problem with this site
Looks like there’s a problem with this site
Firefox can’t connect to the server at
app.dev.jiminny.com
What can you do about it?
What can you do about it?
Try connecting on a different device. Check your modem or router. Disconnect and reconnect to Wi-Fi.
Try Again
Try Again...
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"Open AI chatbot (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Bookmarks","depth":5,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bookmarks","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close sidebar","depth":6,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Search bookmarks","depth":7,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Looks like there’s a problem with this site","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Looks like there’s a problem with this site","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox can’t connect to the server at","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.dev.jiminny.com","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"What can you do about it?","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"What can you do about it?","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try connecting on a different device. Check your modem or router. Disconnect and reconnect to Wi-Fi.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Again","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Try Again","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3706728630941710938
|
-1563218222308097149
|
app_switch
|
accessibility
|
NULL
|
Open AI chatbot (⌃X)
Tabs from other devices
Open Open AI chatbot (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Customize sidebar
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Looks like there’s a problem with this site
Looks like there’s a problem with this site
Firefox can’t connect to the server at
app.dev.jiminny.com
What can you do about it?
What can you do about it?
Try connecting on a different device. Check your modem or router. Disconnect and reconnect to Wi-Fi.
Try Again
Try Again...
|
NULL
|
|
1619
|
35
|
31
|
2026-04-11T17:44:27.288209+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929467288_m1.jpg...
|
Firefox
|
Problem loading page — Work
|
True
|
app.dev.jiminny.com
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Open AI chatbot (⌃X)
Tabs from other devices
Open Open AI chatbot (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Customize sidebar
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Looks like there’s a problem with this site
Looks like there’s a problem with this site
Firefox can’t connect to the server at
app.dev.jiminny.com
What can you do about it?
What can you do about it?
Try connecting on a different device. Check your modem or router. Disconnect and reconnect to Wi-Fi.
Try Again
Try Again...
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"Open AI chatbot (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Bookmarks","depth":5,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bookmarks","depth":6,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close sidebar","depth":6,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Search bookmarks","depth":7,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Looks like there’s a problem with this site","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Looks like there’s a problem with this site","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Firefox can’t connect to the server at","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.dev.jiminny.com","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"What can you do about it?","depth":8,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"What can you do about it?","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Try connecting on a different device. Check your modem or router. Disconnect and reconnect to Wi-Fi.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Try Again","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Try Again","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
3706728630941710938
|
-1563218222308097149
|
app_switch
|
accessibility
|
NULL
|
Open AI chatbot (⌃X)
Tabs from other devices
Open Open AI chatbot (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Close bookmarks (⌘B)
Customize sidebar
Bookmarks
Bookmarks
Close sidebar
Search bookmarks
Looks like there’s a problem with this site
Looks like there’s a problem with this site
Firefox can’t connect to the server at
app.dev.jiminny.com
What can you do about it?
What can you do about it?
Try connecting on a different device. Check your modem or router. Disconnect and reconnect to Wi-Fi.
Try Again
Try Again...
|
NULL
|
|
1750
|
37
|
5
|
2026-04-11T17:52:41.517941+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775929961517_m1.jpg...
|
Code
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% CSat 11 Apr 20:52:41-zsh181*8DOCKER0 ₴12026-04-11T18:41:59.011341Z2026-04-11T18:41:59.165278Z2026-04-11718:41:59116530272026-04-11T18:41:59.165322Z2026-04-11T18:41:59.165338Z2026-04-11T18:41:59.165390Z2026-04-11T18:41:59.953409Z2026-04-11T18:42:00.086573Z2026-04-11T18:42:03.873046Z2026-04-11T18:42:03.873524Z2026-04-11T18:42:58.898798Z2026-04-11T18:43:01.495401Z2026-04-11T18:43:05.037916Z2026-04-11T18:43:05.70131372026-04-11T18:43:05.869321Z2026-04-11T18:44:34.370623Z2026-04-11T18:44:37.039894Z2026-04-11T18:44:43.637666Z2026-04-11T18:46:22.830023Z2026-04-11T18:46:24.746425Z2026-04-11718:46:26.145427Z2026-04-11T18:46:29.154628Z2026-04-11T18:46:45.161217Z2026-04-11T18:46:47.291011Z2026-04-11T18:46:58.867582Z2026-04-11718:47:33.87325622026-04-11T18:48:05.793658ZDEV (-zsh)O 82APP (-zsh)• 83-zsh-zsh• 86-zsh₴7INFOscreenpipe._engine: :hot_frame_cache:INFOhot_frame_cache:warmedwith 838framecoveragefrom 2026-04-10 15:41:58.867994 UTCINFOscreenpipe_engine::vision_manager::manager:entries,Starting vision recordingfor monitor1 (1440x900)screenpipe_engine::vision_manager::manager:Startingevent-driven capture formonitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager:Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOINFOscreenpipe_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)INFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)INFOscreenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1362, dur=65msINFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14 days)INFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 108eligibleframesINFOscreenpipe_engine::event_driven_capture: contentdedup:INFOskipping capture for monitor 1 Chash=810635838678462500,trigger=clipboard)screenpipe_engine::snapshot_compaction: snapshotcompaction: 99 frames,18.9MB → 1.8MB (10.7x), 99 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 8 frames,1.5MB → 0.4MB (3.7x), 8 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=8059017237112085187, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333, trigger=clipboard)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=-6150475841360271668, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=visual_change)INFO screenpipe_engine::server: api_usage_5min: 3 requestsINFOscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T15:47:33.873226+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 18eligible frames[1] + terminatednpx screenpipe@latest record --disable-audiolukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-statuszsh: command not found: sp-statuslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ source ~/.zprofilePoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe/data/data or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status{"Sratesst tusa thy""audio_status": "disabled""Last_frame": "2026-04-11T20:43:56+03:00","uptime": 1091.390855333,"fps": 0.19424755023745877,"frames": 212}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ |...
|
NULL
|
4547230856984592346
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp(ahl100% CSat 11 Apr 20:52:41-zsh181*8DOCKER0 ₴12026-04-11T18:41:59.011341Z2026-04-11T18:41:59.165278Z2026-04-11718:41:59116530272026-04-11T18:41:59.165322Z2026-04-11T18:41:59.165338Z2026-04-11T18:41:59.165390Z2026-04-11T18:41:59.953409Z2026-04-11T18:42:00.086573Z2026-04-11T18:42:03.873046Z2026-04-11T18:42:03.873524Z2026-04-11T18:42:58.898798Z2026-04-11T18:43:01.495401Z2026-04-11T18:43:05.037916Z2026-04-11T18:43:05.70131372026-04-11T18:43:05.869321Z2026-04-11T18:44:34.370623Z2026-04-11T18:44:37.039894Z2026-04-11T18:44:43.637666Z2026-04-11T18:46:22.830023Z2026-04-11T18:46:24.746425Z2026-04-11718:46:26.145427Z2026-04-11T18:46:29.154628Z2026-04-11T18:46:45.161217Z2026-04-11T18:46:47.291011Z2026-04-11T18:46:58.867582Z2026-04-11718:47:33.87325622026-04-11T18:48:05.793658ZDEV (-zsh)O 82APP (-zsh)• 83-zsh-zsh• 86-zsh₴7INFOscreenpipe._engine: :hot_frame_cache:INFOhot_frame_cache:warmedwith 838framecoveragefrom 2026-04-10 15:41:58.867994 UTCINFOscreenpipe_engine::vision_manager::manager:entries,Starting vision recordingfor monitor1 (1440x900)screenpipe_engine::vision_manager::manager:Startingevent-driven capture formonitor 1 (device: monitor_1)INFOscreenpipe_engine::vision_manager::manager:Skipping monitor 2 (Display 2_2560x1440_-597,-1440) - not in allowed listINFOINFOscreenpipe_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)INFOsck_rs::stream_manager:persistent SCK stream started for display 1 (1440x900, 2fps)INFOscreenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=1362, dur=65msINFOscreenpipe_engine::retention: retention: initialized with 14d retentionINFOscreenpipe:localretention auto-enabled (14 days)INFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: found 108eligibleframesINFOscreenpipe_engine::event_driven_capture: contentdedup:INFOskipping capture for monitor 1 Chash=810635838678462500,trigger=clipboard)screenpipe_engine::snapshot_compaction: snapshotcompaction: 99 frames,18.9MB → 1.8MB (10.7x), 99 JPEGSdeletedINFOscreenpipe_engine::snapshot_compaction: snapshotcompaction: 8 frames,1.5MB → 0.4MB (3.7x), 8 JPEGs deletedINFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=8059017237112085187, trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333,trigger=visual_change)INFOscreenpipe_engine::event_driven_capture: contentdedup: skipping capture for monitor 1 (hash=1954793808959611333, trigger=clipboard)INFOscreenpipe_engine::event_driven_capture: contentdedup:skipping capture for monitor 1 (hash=-6150475841360271668, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593,trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6692613549932102593, trigger=visual_change)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=click)INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-6037013225245471503, trigger=visual_change)INFO screenpipe_engine::server: api_usage_5min: 3 requestsINFOscreenpipe_engine::retention: retention: cleaning up data before 2026-03-28T15:47:33.873226+00:00 (14d retention)INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 18eligible frames[1] + terminatednpx screenpipe@latest record --disable-audiolukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-statuszsh: command not found: sp-statuslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ source ~/.zprofilePoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe/data/data or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ sp-status{"Sratesst tusa thy""audio_status": "disabled""Last_frame": "2026-04-11T20:43:56+03:00","uptime": 1091.390855333,"fps": 0.19424755023745877,"frames": 212}lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ |...
|
NULL
|
|
1768
|
37
|
23
|
2026-04-11T17:54:35.131091+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775930075131_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Screenpipe 14-day retention explained
Screenpipe 14-day retention explained
Reddit homepage feed overview
Reddit homepage feed overview
Docker container not visible in console
Docker container not visible in console
DIA browser RAM configuration
DIA browser RAM configuration
Screenpipe company background
Screenpipe company background
DSK Bank Bulgaria secure investing explained
DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Screenpipe free version guide
Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
Reminders connector not syncing to iOS
Reminders connector not syncing to iOS
Setting up Gemma model in Open WebUI
Setting up Gemma model in Open WebUI
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
how to query screenpipe. WHat queries can i make to laverage fully form the app
20:54
Edit
Copy
Relevant chats
Relevant chats
Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:
REST API (localhost:3030)
REST API (localhost
:3030
)
The main query endpoint:
Copy to clipboard
bash
GET http://localhost:3030/search
Core parameters
Core parameters
Param
Values
Notes
q
any text
Full-text search across OCR + audio
content_type
ocr
,
audio
,
all
Default:
all
limit
integer
Results to return
offset
integer
Pagination
start_time
ISO 8601
e.g.
2026-04-11T09:00:00
end_time
ISO 8601
e.g.
2026-04-11T18:00:00
app_name
string
e.g.
PhpStorm
,
Slack
,
Arc
window_name
string
Window title substring match
min_length
integer
Min chars in result
speaker_ids
array
For audio — filter by speaker
Param
q
content_type
limit
offset
start_time
end_time
app_name
window_name
min_length
speaker_ids
Values
any text
ocr
,
audio
,
all
integer
integer
ISO 8601
ISO 8601
string
string
integer
array
Notes
Full-text search across OCR + audio
Default:
all
Results to return
Pagination
e.g.
2026-04-11T09:00:00
e.g.
2026-04-11T18:00:00
e.g.
PhpStorm
,
Slack
,
Arc
Window title substring match
Min chars in result
For audio — filter by speaker
Param
Values
Notes
Example queries
Example queries
"What was I doing this morning?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?content_type=all&start_time=2026-04-11T08:00:00&end_time=2026-04-11T12:00:00&limit=50"
"What code was in PhpStorm today?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?content_type=ocr&app_name=PhpStorm&start_time=2026-04-11T00:00:00&limit=100"
"What did I read in Slack about deployments?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?q=deployment&app_name=Slack&content_type=ocr"
"What was on screen around 3pm?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?start_time=2026-04-11T14:55:00&end_time=2026-04-11T15:05:00&content_type=all"
Other endpoints
Other endpoints
Copy to clipboard
bash
# Health check
GET /health
# List all frames (raw, no search)
GET /frames?start_time
=
..
.
&
end_time
=
..
.
# Get a specific frame image
GET /frames/
{
frame_id
}
/image
# Audio transcriptions only
GET /audio/transcriptions
# App usage stats (time per app)
GET /stats/apps?start_time
=
..
.
&
end_time
=
..
.
# Raw SQL on the SQLite DB
POST /raw_sql
Body:
{
"query"
:
"SELECT app_name, COUNT(*) FROM frames GROUP BY app_name"
}
Raw SQL — the most powerful approach
Raw SQL — the most powerful approach
The SQLite DB is at `~/.screenpipe/db.s
Scroll to bottom
Reply...
Reply...
Add files, connectors, and more
Sonnet 4.6
Sonnet 4.6
Stop response
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses....
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"Close sidebar","depth":11,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Back","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward","depth":11,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Chat","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Cowork","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Code","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"New chat","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘O","depth":17,"role_description":"text"},{"role":"AXLink","text":"Search","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Search","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⌘K","depth":17,"role_description":"text"},{"role":"AXLink","text":"Customize","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":18,"role_description":"text"},{"role":"AXLink","text":"Chats","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chats","depth":19,"role_description":"text"},{"role":"AXLink","text":"Projects","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Projects","depth":19,"role_description":"text"},{"role":"AXLink","text":"Artifacts","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Artifacts","depth":18,"role_description":"text"},{"role":"AXHeading","text":"Starred","depth":18,"role_description":"heading"},{"role":"AXStaticText","text":"Starred","depth":19,"role_description":"text"},{"role":"AXLink","text":"Bulgarian citizenship application process for EU residents","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bulgarian citizenship application process for EU residents","depth":22,"role_description":"text"},{"role":"AXLink","text":"Dawarich location tracking project","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dawarich location tracking project","depth":22,"role_description":"text"},{"role":"AXButton","text":"Recents Hide","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Recents","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"Hide","depth":19,"role_description":"text"},{"role":"AXLink","text":"Screenpipe 14-day retention explained","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe 14-day retention explained","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reddit homepage feed overview","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reddit homepage feed overview","depth":22,"role_description":"text"},{"role":"AXLink","text":"Docker container not visible in console","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker container not visible in console","depth":22,"role_description":"text"},{"role":"AXLink","text":"DIA browser RAM configuration","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DIA browser RAM configuration","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe company background","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe company background","depth":22,"role_description":"text"},{"role":"AXLink","text":"DSK Bank Bulgaria secure investing explained","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DSK Bank Bulgaria secure investing explained","depth":22,"role_description":"text"},{"role":"AXLink","text":"Building a comprehensive personal homelab system","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Building a comprehensive personal homelab system","depth":22,"role_description":"text"},{"role":"AXLink","text":"Importing Google Timeline data to Owntracks","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Importing Google Timeline data to Owntracks","depth":22,"role_description":"text"},{"role":"AXLink","text":"Chromecast remote volume buttons not working","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chromecast remote volume buttons not working","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe free version guide","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe free version guide","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe database query setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe database query setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Running screenpipe for free","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running screenpipe for free","depth":22,"role_description":"text"},{"role":"AXLink","text":"Mac Studio network switch setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Mac Studio network switch setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Claude extension in Vivaldi browser","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude extension in Vivaldi browser","depth":22,"role_description":"text"},{"role":"AXLink","text":"General information request","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"General information request","depth":22,"role_description":"text"},{"role":"AXLink","text":"Red dots on neck causes","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Red dots on neck causes","depth":22,"role_description":"text"},{"role":"AXLink","text":"Change approval","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Change approval","depth":22,"role_description":"text"},{"role":"AXLink","text":"Querying Screenpipe with Claude AI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Querying Screenpipe with Claude AI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up daily backups in Ugreen NAS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up daily backups in Ugreen NAS","depth":22,"role_description":"text"},{"role":"AXLink","text":"Upcoming reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Upcoming reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"Accessing tools in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Accessing tools in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Laravel issue troubleshooting","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel issue troubleshooting","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminder to take rodný list","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminder to take rodný list","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up reminders in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up reminders in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"NAS reverse proxy access issues after UGOS update","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"NAS reverse proxy access issues after UGOS update","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminders summary and management","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminders summary and management","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted screen recording and activity tracking","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted screen recording and activity tracking","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminders connector not syncing to iOS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminders connector not syncing to iOS","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up Gemma model in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up Gemma model in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"All chats","depth":19,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All chats","depth":20,"bounds":{"left":0.50625,"top":0.0,"width":0.039583333,"height":0.02},"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Kovalik, Settings","depth":16,"bounds":{"left":0.47430557,"top":0.0,"width":0.19930555,"height":0.07111111},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"LK","depth":19,"bounds":{"left":0.49097222,"top":0.0,"width":0.015277778,"height":0.023333333},"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.52013886,"top":0.0,"width":0.063194446,"height":0.02},"role_description":"text"},{"role":"AXStaticText","text":"Pro plan","depth":17,"bounds":{"left":0.52013886,"top":0.0,"width":0.031944446,"height":0.016666668},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":18,"bounds":{"left":0.625,"top":0.0,"width":0.022222223,"height":0.035555556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe query capabilities and usage","depth":16,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":14,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to query screenpipe. WHat queries can i make to laverage fully form the app","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"20:54","depth":17,"role_description":"text"},{"role":"AXButton","text":"Edit","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Relevant chats","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Relevant chats","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:","depth":20,"role_description":"text"},{"role":"AXHeading","text":"REST API (localhost:3030)","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"REST API (localhost","depth":20,"role_description":"text"},{"role":"AXStaticText","text":":3030","depth":20,"role_description":"text"},{"role":"AXStaticText","text":")","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"The main query endpoint:","depth":20,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"GET http://localhost:3030/search","depth":22,"role_description":"text"},{"role":"AXHeading","text":"Core parameters","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"Core parameters","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Values","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"q","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"any text","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Full-text search across OCR + audio","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"content_type","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"audio","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Default:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"limit","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Results to return","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"offset","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Pagination","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"start_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T09:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"end_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T18:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"PhpStorm","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Slack","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Arc","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Window title substring match","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"min_length","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Min chars in result","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"speaker_ids","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"array","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"For audio — filter by speaker","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"q","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"content_type","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"limit","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"offset","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"start_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"end_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"min_length","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"speaker_ids","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Values","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"any text","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"ocr","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"audio","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"array","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Full-text search across OCR + audio","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Default:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Results to return","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Pagination","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T09:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T18:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"PhpStorm","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Slack","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Arc","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Window title substring match","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Min chars in result","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"For audio — filter by speaker","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Values","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":22,"role_description":"text"},{"role":"AXHeading","text":"Example queries","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"Example queries","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"\"What was I doing this morning?\"","depth":21,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?content_type=all&start_time=2026-04-11T08:00:00&end_time=2026-04-11T12:00:00&limit=50\"","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"\"What code was in PhpStorm today?\"","depth":21,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":23,"bounds":{"left":0.775,"top":0.0,"width":0.024305556,"height":0.02111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.7986111,"top":0.0,"width":0.00625,"height":0.02111111},"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?content_type=ocr&app_name=PhpStorm&start_time=2026-04-11T00:00:00&limit=100\"","depth":23,"bounds":{"left":0.8041667,"top":0.0,"width":0.19583333,"height":0.02111111},"role_description":"text"},{"role":"AXStaticText","text":"\"What did I read in Slack about deployments?\"","depth":21,"bounds":{"left":0.77013886,"top":0.0,"width":0.22986114,"height":0.01},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"bounds":{"left":0.775,"top":0.0,"width":0.019444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.024305556,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.7986111,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?q=deployment&app_name=Slack&content_type=ocr\"","depth":22,"bounds":{"left":0.8041667,"top":0.0,"width":0.19583333,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"\"What was on screen around 3pm?\"","depth":21,"bounds":{"left":0.77013886,"top":0.0,"width":0.18819444,"height":0.0011111111},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"bounds":{"left":0.775,"top":0.0,"width":0.019444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"curl","depth":23,"bounds":{"left":0.775,"top":0.0,"width":0.024305556,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.7986111,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"\"http://localhost:3030/search?start_time=2026-04-11T14:55:00&end_time=2026-04-11T15:05:00&content_type=all\"","depth":23,"bounds":{"left":0.8041667,"top":0.0,"width":0.19583333,"height":0.0011111111},"role_description":"text"},{"role":"AXHeading","text":"Other endpoints","depth":19,"bounds":{"left":0.76458335,"top":0.0,"width":0.23541665,"height":0.0011111111},"role_description":"heading"},{"role":"AXStaticText","text":"Other endpoints","depth":20,"bounds":{"left":0.77013886,"top":0.0,"width":0.099305555,"height":0.0011111111},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"bounds":{"left":0.775,"top":0.0,"width":0.019444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"# Health check","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.08263889,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"GET /health","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.06458333,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"# List all frames (raw, no search)","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.19930555,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"GET /frames?start_time","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.12916666,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":22,"bounds":{"left":0.90347224,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"..","depth":22,"bounds":{"left":0.90902776,"top":0.0,"width":0.0125,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":".","depth":22,"bounds":{"left":0.92083335,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"&","depth":22,"bounds":{"left":0.92638886,"top":0.0,"width":0.0069444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"end_time","depth":22,"bounds":{"left":0.9326389,"top":0.0,"width":0.047222223,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":22,"bounds":{"left":0.9791667,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"..","depth":22,"bounds":{"left":0.9847222,"top":0.0,"width":0.0125,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":".","depth":22,"bounds":{"left":0.9965278,"top":0.0,"width":0.003472209,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"# Get a specific frame image","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.16388889,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"GET /frames/","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.07083333,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"{","depth":22,"bounds":{"left":0.8451389,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"frame_id","depth":22,"bounds":{"left":0.8506944,"top":0.0,"width":0.047222223,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"}","depth":22,"bounds":{"left":0.8972222,"top":0.0,"width":0.0069444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"/image","depth":22,"bounds":{"left":0.90347224,"top":0.0,"width":0.035416666,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"# Audio transcriptions only","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.15833333,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"GET /audio/transcriptions","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.14652778,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"# App usage stats (time per app)","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.1875,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"GET /stats/apps?start_time","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.15208334,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":22,"bounds":{"left":0.92638886,"top":0.0,"width":0.0069444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"..","depth":22,"bounds":{"left":0.9326389,"top":0.0,"width":0.0125,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":".","depth":22,"bounds":{"left":0.9444444,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"&","depth":22,"bounds":{"left":0.95,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"end_time","depth":22,"bounds":{"left":0.95555556,"top":0.0,"width":0.04444444,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":22,"bounds":{"left":1.0,"top":0.0,"width":-0.0027778149,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"..","depth":22,"bounds":{"left":1.0,"top":0.0,"width":-0.008333325,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":".","depth":22,"bounds":{"left":1.0,"top":0.0,"width":-0.02013886,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"# Raw SQL on the SQLite DB","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.15208334,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"POST /raw_sql","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.07638889,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"Body:","depth":22,"bounds":{"left":0.775,"top":0.0,"width":0.035416666,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"{","depth":22,"bounds":{"left":0.80972224,"top":0.0,"width":0.0069444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.8159722,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"\"query\"","depth":22,"bounds":{"left":0.8215278,"top":0.0,"width":0.041666668,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":":","depth":22,"bounds":{"left":0.8625,"top":0.0,"width":0.00625,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.8680556,"top":0.0,"width":0.0069444445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, COUNT(*) FROM frames GROUP BY app_name\"","depth":22,"bounds":{"left":0.87430555,"top":0.0,"width":0.12569445,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"}","depth":22,"role_description":"text"},{"role":"AXHeading","text":"Raw SQL — the most powerful approach","depth":19,"bounds":{"left":0.76458335,"top":0.0,"width":0.23541665,"height":0.0011111111},"role_description":"heading"},{"role":"AXStaticText","text":"Raw SQL — the most powerful approach","depth":20,"bounds":{"left":0.77013886,"top":0.0,"width":0.22986114,"height":0.0011111111},"role_description":"text"},{"role":"AXStaticText","text":"The SQLite DB is at `~/.screenpipe/db.s","depth":20,"bounds":{"left":0.77013886,"top":0.0,"width":0.20069444,"height":0.0011111111},"role_description":"text"},{"role":"AXButton","text":"Scroll to bottom","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Reply...","depth":20,"value":"Reply...","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reply...","depth":23,"role_description":"text"},{"role":"AXPopUpButton","text":"Add files, connectors, and more","depth":22,"bounds":{"left":0.7652778,"top":0.0,"width":0.022916667,"height":0.035555556},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Sonnet 4.6","depth":21,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Sonnet 4.6","depth":23,"role_description":"text"},{"role":"AXButton","text":"Stop response","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":17,"bounds":{"left":0.88055557,"top":0.0,"width":0.11944443,"height":0.016666668},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":18,"bounds":{"left":0.88055557,"top":0.0,"width":0.11944443,"height":0.016666668},"role_description":"text"}]...
|
-192196924979143805
|
970281881280211378
|
app_switch
|
accessibility
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Screenpipe 14-day retention explained
Screenpipe 14-day retention explained
Reddit homepage feed overview
Reddit homepage feed overview
Docker container not visible in console
Docker container not visible in console
DIA browser RAM configuration
DIA browser RAM configuration
Screenpipe company background
Screenpipe company background
DSK Bank Bulgaria secure investing explained
DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Screenpipe free version guide
Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
Reminders connector not syncing to iOS
Reminders connector not syncing to iOS
Setting up Gemma model in Open WebUI
Setting up Gemma model in Open WebUI
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
how to query screenpipe. WHat queries can i make to laverage fully form the app
20:54
Edit
Copy
Relevant chats
Relevant chats
Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:
REST API (localhost:3030)
REST API (localhost
:3030
)
The main query endpoint:
Copy to clipboard
bash
GET http://localhost:3030/search
Core parameters
Core parameters
Param
Values
Notes
q
any text
Full-text search across OCR + audio
content_type
ocr
,
audio
,
all
Default:
all
limit
integer
Results to return
offset
integer
Pagination
start_time
ISO 8601
e.g.
2026-04-11T09:00:00
end_time
ISO 8601
e.g.
2026-04-11T18:00:00
app_name
string
e.g.
PhpStorm
,
Slack
,
Arc
window_name
string
Window title substring match
min_length
integer
Min chars in result
speaker_ids
array
For audio — filter by speaker
Param
q
content_type
limit
offset
start_time
end_time
app_name
window_name
min_length
speaker_ids
Values
any text
ocr
,
audio
,
all
integer
integer
ISO 8601
ISO 8601
string
string
integer
array
Notes
Full-text search across OCR + audio
Default:
all
Results to return
Pagination
e.g.
2026-04-11T09:00:00
e.g.
2026-04-11T18:00:00
e.g.
PhpStorm
,
Slack
,
Arc
Window title substring match
Min chars in result
For audio — filter by speaker
Param
Values
Notes
Example queries
Example queries
"What was I doing this morning?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?content_type=all&start_time=2026-04-11T08:00:00&end_time=2026-04-11T12:00:00&limit=50"
"What code was in PhpStorm today?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?content_type=ocr&app_name=PhpStorm&start_time=2026-04-11T00:00:00&limit=100"
"What did I read in Slack about deployments?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?q=deployment&app_name=Slack&content_type=ocr"
"What was on screen around 3pm?"
Copy to clipboard
bash
curl
"http://localhost:3030/search?start_time=2026-04-11T14:55:00&end_time=2026-04-11T15:05:00&content_type=all"
Other endpoints
Other endpoints
Copy to clipboard
bash
# Health check
GET /health
# List all frames (raw, no search)
GET /frames?start_time
=
..
.
&
end_time
=
..
.
# Get a specific frame image
GET /frames/
{
frame_id
}
/image
# Audio transcriptions only
GET /audio/transcriptions
# App usage stats (time per app)
GET /stats/apps?start_time
=
..
.
&
end_time
=
..
.
# Raw SQL on the SQLite DB
POST /raw_sql
Body:
{
"query"
:
"SELECT app_name, COUNT(*) FROM frames GROUP BY app_name"
}
Raw SQL — the most powerful approach
Raw SQL — the most powerful approach
The SQLite DB is at `~/.screenpipe/db.s
Scroll to bottom
Reply...
Reply...
Add files, connectors, and more
Sonnet 4.6
Sonnet 4.6
Stop response
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses....
|
NULL
|
|
1905
|
39
|
38
|
2026-04-12T08:41:48.660134+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-12/1775 /Users/lukas/.screenpipe/data/data/2026-04-12/1775983308660_m1.jpg...
|
Firefox
|
Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminn Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
True
|
mail.google.com/mail/u/0/#inbox
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Problem loading page
Problem loading page
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Settings
Settings
Inbox (1,539) - [EMAIL] - Jiminny Mail
Inbox (1,539) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
None selected
Skip to content
Skip to content
Using Jiminny Mail with screen readers
Using Jiminny Mail with screen readers
Main menu
Gmail
Search mail
Search mail
Ask Gmail
Advanced search options
Search mail
Status: Active
Support
Settings
Studio
Ask Gemini
Google apps
Google Account: [EMAIL]
Google Account: [EMAIL]
Enable desktop notifications for Jiminny Mail.
OK
OK
No thanks
No thanks
Close
Mail, 1539 unread messages
Mail
Mail
Chat, 26 unread messages
26 new messages
Chat
Chat
Meet
Meet
Meet
Compose
Labels
Labels
Inbox 1539 unread
Inbox
1,539
Starred
Starred
Snoozed
Snoozed
Sent
Sent
Drafts 2 unread
Drafts
2
Collapse label: Categories
Categories expanded
Categories
Purchases 2 unread has menu
Purchases
2
More labels
More
Labels
Labels
Create new label
Labels
Labels
App emails has menu
App emails
Collapse label: Github
Github 738 unread expanded has menu
Github
738
app 5449 unread has menu
app
5,449
extension 215 unread has menu
extension
215
vuejs has menu
vuejs
JIRA has menu
JIRA
Collapse label: Notes
Notes expanded has menu
Notes
Shared has menu
Shared
Sentry 100630 unread has menu
Sentry
100,630
Utilities has menu
Utilities
New chat
New chat
Shortcuts
Shortcuts
Home
Mentions
star
Starred
Direct messages 25 unread messages
Direct messages
25
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Sprint Review - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Sprint Review - Apr 1
Meeting conversation
Open in a pop-up
Options
Unread [Platform] Planning I Session - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
[Platform] Planning I Session
- Apr 1
Meeting conversation
Open in a pop-up
Options...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik, here is your weekly update for 7 Apr - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik, here is your weekly update for 7 Apr - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None selected","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Using Jiminny Mail with screen readers","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Using Jiminny Mail with screen readers","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Main menu","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Gmail","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Search mail","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search mail","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Ask Gmail","depth":18,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Advanced search options","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search mail","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Status: Active","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Support","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Settings","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Studio","depth":12,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Ask Gemini","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: lukas.kovalik@jiminny.com","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: lukas.kovalik@jiminny.com","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enable desktop notifications for Jiminny Mail.","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OK","depth":12,"bounds":{"left":0.04236111,"top":0.0,"width":0.025,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OK","depth":13,"bounds":{"left":0.047916666,"top":0.0,"width":0.013888889,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"No thanks","depth":12,"bounds":{"left":0.072916664,"top":0.0,"width":0.057638887,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No thanks","depth":13,"bounds":{"left":0.07847222,"top":0.0,"width":0.046527777,"height":0.02111111},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":11,"bounds":{"left":0.14166667,"top":0.0,"width":0.013888889,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Mail, 1539 unread messages","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mail","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mail","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat, 26 unread messages","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"26 new messages","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Chat","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chat","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Meet","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Meet","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meet","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Compose","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox 1539 unread","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,539","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Starred","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Starred","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Snoozed","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Snoozed","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Drafts 2 unread","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Drafts","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Collapse label: Categories","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Categories expanded","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Categories","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Purchases 2 unread has menu","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Purchases","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Labels","depth":11,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create new label","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"App emails has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"App emails","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Collapse label: Github","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Github 738 unread expanded has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Github","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"738","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app 5449 unread has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,449","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"extension 215 unread has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"extension","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vuejs has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vuejs","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JIRA has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JIRA","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Collapse label: Notes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Notes expanded has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notes","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Shared has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shared","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sentry 100630 unread has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sentry","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100,630","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Utilities has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Utilities","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New chat","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New chat","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Shortcuts","depth":18,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Shortcuts","depth":19,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mentions","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"star","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Direct messages 25 unread messages","depth":18,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Direct messages","depth":19,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"25","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unread","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Q2 Kick-Off - Local in","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"&","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"at our","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- Apr 2","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unread","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Q2 Kick-Off - Local in","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"&","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"at our","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- Apr 2","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Sprint Review - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sprint Review - Apr 1","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Unread [Platform] Planning I Session - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unread","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Platform] Planning I Session","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- Apr 1","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6874412233001779041
|
-253354549404388871
|
app_switch
|
accessibility
|
NULL
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Problem loading page
Problem loading page
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Settings
Settings
Inbox (1,539) - [EMAIL] - Jiminny Mail
Inbox (1,539) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
None selected
Skip to content
Skip to content
Using Jiminny Mail with screen readers
Using Jiminny Mail with screen readers
Main menu
Gmail
Search mail
Search mail
Ask Gmail
Advanced search options
Search mail
Status: Active
Support
Settings
Studio
Ask Gemini
Google apps
Google Account: [EMAIL]
Google Account: [EMAIL]
Enable desktop notifications for Jiminny Mail.
OK
OK
No thanks
No thanks
Close
Mail, 1539 unread messages
Mail
Mail
Chat, 26 unread messages
26 new messages
Chat
Chat
Meet
Meet
Meet
Compose
Labels
Labels
Inbox 1539 unread
Inbox
1,539
Starred
Starred
Snoozed
Snoozed
Sent
Sent
Drafts 2 unread
Drafts
2
Collapse label: Categories
Categories expanded
Categories
Purchases 2 unread has menu
Purchases
2
More labels
More
Labels
Labels
Create new label
Labels
Labels
App emails has menu
App emails
Collapse label: Github
Github 738 unread expanded has menu
Github
738
app 5449 unread has menu
app
5,449
extension 215 unread has menu
extension
215
vuejs has menu
vuejs
JIRA has menu
JIRA
Collapse label: Notes
Notes expanded has menu
Notes
Shared has menu
Shared
Sentry 100630 unread has menu
Sentry
100,630
Utilities has menu
Utilities
New chat
New chat
Shortcuts
Shortcuts
Home
Mentions
star
Starred
Direct messages 25 unread messages
Direct messages
25
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Sprint Review - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Sprint Review - Apr 1
Meeting conversation
Open in a pop-up
Options
Unread [Platform] Planning I Session - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
[Platform] Planning I Session
- Apr 1
Meeting conversation
Open in a pop-up
Options...
|
NULL
|
|
1906
|
40
|
41
|
2026-04-12T08:41:48.666907+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-12/1775 /Users/lukas/.screenpipe/data/data/2026-04-12/1775983308666_m2.jpg...
|
Firefox
|
Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminn Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminny Mail — Work...
|
True
|
mail.google.com/mail/u/0/#inbox
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Problem loading page
Problem loading page
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Settings
Settings
Inbox (1,539) - [EMAIL] - Jiminny Mail
Inbox (1,539) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
None selected
Skip to content
Skip to content
Using Jiminny Mail with screen readers
Using Jiminny Mail with screen readers
Main menu
Gmail
Search mail
Search mail
Ask Gmail
Advanced search options
Search mail
Status: Active
Support
Settings
Studio
Ask Gemini
Google apps
Google Account: [EMAIL]
Google Account: [EMAIL]
Enable desktop notifications for Jiminny Mail.
OK
OK
No thanks
No thanks
Close
Mail, 1539 unread messages
Mail
Mail
Chat, 26 unread messages
26 new messages
Chat
Chat
Meet
Meet
Meet
Compose
Labels
Labels
Inbox 1539 unread
Inbox
1,539
Starred
Starred
Snoozed
Snoozed
Sent
Sent
Drafts 2 unread
Drafts
2
Collapse label: Categories
Categories expanded
Categories
Purchases 2 unread has menu
Purchases
2
More labels
More
Labels
Labels
Create new label
Labels
Labels
App emails has menu
App emails
Collapse label: Github
Github 738 unread expanded has menu
Github
738
app 5449 unread has menu
app
5,449
extension 215 unread has menu
extension
215
vuejs has menu
vuejs
JIRA has menu
JIRA
Collapse label: Notes
Notes expanded has menu
Notes
Shared has menu
Shared
Sentry 100630 unread has menu
Sentry
100,630
Utilities has menu
Utilities
New chat
New chat
Shortcuts
Shortcuts
Home
Mentions
star
Starred
Direct messages 25 unread messages
Direct messages
25
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Sprint Review - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Sprint Review - Apr 1
Meeting conversation
Open in a pop-up
Options
Unread [Platform] Planning I Session - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
[Platform] Planning I Session
- Apr 1
Meeting conversation
Open in a pop-up
Options...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Problem loading page","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Lukas Kovalik, here is your weekly update for 7 Apr - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lukas Kovalik, here is your weekly update for 7 Apr - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Settings","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Inbox (1,539) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None selected","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Using Jiminny Mail with screen readers","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Using Jiminny Mail with screen readers","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Main menu","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXLink","text":"Gmail","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Search mail","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Search mail","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Ask Gmail","depth":18,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Advanced search options","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Search mail","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Status: Active","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Support","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Settings","depth":13,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Studio","depth":12,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Ask Gemini","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google apps","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: lukas.kovalik@jiminny.com","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Google Account: lukas.kovalik@jiminny.com","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enable desktop notifications for Jiminny Mail.","depth":12,"bounds":{"left":0.0,"top":0.0,"width":0.11171875,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OK","depth":12,"bounds":{"left":0.023828125,"top":0.0,"width":0.0140625,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OK","depth":13,"bounds":{"left":0.026953125,"top":0.0,"width":0.0078125,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"No thanks","depth":12,"bounds":{"left":0.041015625,"top":0.0,"width":0.032421876,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No thanks","depth":13,"bounds":{"left":0.044140626,"top":0.0,"width":0.026171874,"height":0.013194445},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":11,"bounds":{"left":0.0796875,"top":0.0,"width":0.0078125,"height":0.013888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Mail, 1539 unread messages","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Mail","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mail","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat, 26 unread messages","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"26 new messages","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Chat","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Chat","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Meet","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Meet","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meet","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Compose","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Inbox 1539 unread","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1,539","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Starred","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Starred","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Snoozed","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Snoozed","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sent","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sent","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Drafts 2 unread","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Drafts","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Collapse label: Categories","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Categories expanded","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Categories","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Purchases 2 unread has menu","depth":16,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Purchases","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More labels","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"More","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Labels","depth":11,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create new label","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Labels","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"App emails has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"App emails","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Collapse label: Github","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Github 738 unread expanded has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Github","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"738","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app 5449 unread has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5,449","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"extension 215 unread has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"extension","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"215","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vuejs has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vuejs","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JIRA has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JIRA","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Collapse label: Notes","depth":15,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Notes expanded has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notes","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Shared has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shared","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sentry 100630 unread has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sentry","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100,630","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Utilities has menu","depth":17,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Utilities","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New chat","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New chat","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Shortcuts","depth":18,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Shortcuts","depth":19,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Home","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mentions","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"star","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Starred","depth":19,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Direct messages 25 unread messages","depth":18,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Direct messages","depth":19,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"25","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unread","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Q2 Kick-Off - Local in","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"&","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"at our","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- Apr 2","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unread","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Q2 Kick-Off - Local in","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"&","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"at our","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- Apr 2","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Sprint Review - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sprint Review - Apr 1","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Unread [Platform] Planning I Session - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.","depth":24,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unread","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"[Platform] Planning I Session","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- Apr 1","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Meeting conversation","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open in a pop-up","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Options","depth":27,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-6874412233001779041
|
-253354549404388871
|
app_switch
|
accessibility
|
NULL
|
Platform Sprint 1 Q2 - Platform Team - Scrum Board Platform Sprint 1 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Problem loading page
Problem loading page
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Lukas Kovalik, here is your weekly update for 7 Apr - [EMAIL] - Jiminny Mail
Settings
Settings
Inbox (1,539) - [EMAIL] - Jiminny Mail
Inbox (1,539) - [EMAIL] - Jiminny Mail
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
None selected
Skip to content
Skip to content
Using Jiminny Mail with screen readers
Using Jiminny Mail with screen readers
Main menu
Gmail
Search mail
Search mail
Ask Gmail
Advanced search options
Search mail
Status: Active
Support
Settings
Studio
Ask Gemini
Google apps
Google Account: [EMAIL]
Google Account: [EMAIL]
Enable desktop notifications for Jiminny Mail.
OK
OK
No thanks
No thanks
Close
Mail, 1539 unread messages
Mail
Mail
Chat, 26 unread messages
26 new messages
Chat
Chat
Meet
Meet
Meet
Compose
Labels
Labels
Inbox 1539 unread
Inbox
1,539
Starred
Starred
Snoozed
Snoozed
Sent
Sent
Drafts 2 unread
Drafts
2
Collapse label: Categories
Categories expanded
Categories
Purchases 2 unread has menu
Purchases
2
More labels
More
Labels
Labels
Create new label
Labels
Labels
App emails has menu
App emails
Collapse label: Github
Github 738 unread expanded has menu
Github
738
app 5449 unread has menu
app
5,449
extension 215 unread has menu
extension
215
vuejs has menu
vuejs
JIRA has menu
JIRA
Collapse label: Notes
Notes expanded has menu
Notes
Shared has menu
Shared
Sentry 100630 unread has menu
Sentry
100,630
Utilities has menu
Utilities
New chat
New chat
Shortcuts
Shortcuts
Home
Mentions
star
Starred
Direct messages 25 unread messages
Direct messages
25
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Unread Q2 Kick-Off - Local in & at our / - Apr 2Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
Q2 Kick-Off - Local in
&
at our
/
- Apr 2
Meeting conversation
Open in a pop-up
Options
Sprint Review - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Sprint Review - Apr 1
Meeting conversation
Open in a pop-up
Options
Unread [Platform] Planning I Session - Apr 1Meeting conversation Press tab for more options or Option + 0 to preview the last message.
Unread
[Platform] Planning I Session
- Apr 1
Meeting conversation
Open in a pop-up
Options...
|
NULL
|
|
1974
|
39
|
64
|
2026-04-12T08:44:03.097996+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-12/1775 /Users/lukas/.screenpipe/data/data/2026-04-12/1775983443097_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Understanding OpenRouter API gateway
Understanding OpenRouter API gateway
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
Screenpipe 14-day retention explained
Screenpipe 14-day retention explained
Reddit homepage feed overview
Reddit homepage feed overview
Docker container not visible in console
Docker container not visible in console
DIA browser RAM configuration
DIA browser RAM configuration
Screenpipe company background
Screenpipe company background
DSK Bank Bulgaria secure investing explained
DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Screenpipe free version guide
Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
how to query screenpipe. WHat queries can i make to laverage fully form the app
20:54
Retry
Edit
Copy
Relevant chats
Relevant chats
Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:
REST API (localhost:3030)
REST API (localhost
:3030
)
The main query endpoint:
Copy to clipboard
bash
GET http://localhost:3030/search
Core parameters
Core parameters
Param
Values
Notes
q
any text
Full-text search across OCR + audio
content_type
ocr
,
audio
,
all
Default:
all
limit
integer
Results to return
offset
integer
Pagination
start_time
ISO 8601
e.g.
2026-04-11T09:00:00
end_time
ISO 8601
e.g.
2026-04-11T18:00:00
app_name
string
e.g.
PhpStorm
,
Slack
,
Arc
window_name
string
Window title substring match
min_length
integer
Min chars in result
speaker_ids
array
For audio — filter by speaker
Param...
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"Close sidebar","depth":11,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Back","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward","depth":11,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Chat","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Cowork","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Code","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"New chat","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘O","depth":17,"role_description":"text"},{"role":"AXLink","text":"Search","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Search","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⌘K","depth":17,"role_description":"text"},{"role":"AXLink","text":"Customize","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":18,"role_description":"text"},{"role":"AXLink","text":"Chats","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chats","depth":19,"role_description":"text"},{"role":"AXLink","text":"Projects","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Projects","depth":19,"role_description":"text"},{"role":"AXLink","text":"Artifacts","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Artifacts","depth":18,"role_description":"text"},{"role":"AXHeading","text":"Starred","depth":18,"role_description":"heading"},{"role":"AXStaticText","text":"Starred","depth":19,"role_description":"text"},{"role":"AXLink","text":"Bulgarian citizenship application process for EU residents","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bulgarian citizenship application process for EU residents","depth":22,"role_description":"text"},{"role":"AXLink","text":"Dawarich location tracking project","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dawarich location tracking project","depth":22,"role_description":"text"},{"role":"AXButton","text":"Recents Hide","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Recents","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"Hide","depth":19,"role_description":"text"},{"role":"AXLink","text":"Understanding OpenRouter API gateway","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Understanding OpenRouter API gateway","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe query capabilities and usage","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe query capabilities and usage","depth":22,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe 14-day retention explained","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe 14-day retention explained","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reddit homepage feed overview","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reddit homepage feed overview","depth":22,"role_description":"text"},{"role":"AXLink","text":"Docker container not visible in console","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker container not visible in console","depth":22,"role_description":"text"},{"role":"AXLink","text":"DIA browser RAM configuration","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DIA browser RAM configuration","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe company background","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe company background","depth":22,"role_description":"text"},{"role":"AXLink","text":"DSK Bank Bulgaria secure investing explained","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DSK Bank Bulgaria secure investing explained","depth":22,"role_description":"text"},{"role":"AXLink","text":"Building a comprehensive personal homelab system","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Building a comprehensive personal homelab system","depth":22,"role_description":"text"},{"role":"AXLink","text":"Importing Google Timeline data to Owntracks","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Importing Google Timeline data to Owntracks","depth":22,"role_description":"text"},{"role":"AXLink","text":"Chromecast remote volume buttons not working","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chromecast remote volume buttons not working","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe free version guide","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe free version guide","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe database query setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe database query setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Running screenpipe for free","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running screenpipe for free","depth":22,"role_description":"text"},{"role":"AXLink","text":"Mac Studio network switch setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Mac Studio network switch setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Claude extension in Vivaldi browser","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude extension in Vivaldi browser","depth":22,"role_description":"text"},{"role":"AXLink","text":"General information request","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"General information request","depth":22,"role_description":"text"},{"role":"AXLink","text":"Red dots on neck causes","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Red dots on neck causes","depth":22,"role_description":"text"},{"role":"AXLink","text":"Change approval","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Change approval","depth":22,"role_description":"text"},{"role":"AXLink","text":"Querying Screenpipe with Claude AI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Querying Screenpipe with Claude AI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up daily backups in Ugreen NAS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up daily backups in Ugreen NAS","depth":22,"role_description":"text"},{"role":"AXLink","text":"Upcoming reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Upcoming reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"Accessing tools in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Accessing tools in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Laravel issue troubleshooting","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel issue troubleshooting","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminder to take rodný list","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminder to take rodný list","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up reminders in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up reminders in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"NAS reverse proxy access issues after UGOS update","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"NAS reverse proxy access issues after UGOS update","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminders summary and management","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminders summary and management","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted screen recording and activity tracking","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted screen recording and activity tracking","depth":22,"role_description":"text"},{"role":"AXLink","text":"All chats","depth":19,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All chats","depth":20,"bounds":{"left":0.50625,"top":0.0,"width":0.039583333,"height":0.02},"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Kovalik, Settings","depth":16,"bounds":{"left":0.47430557,"top":0.0,"width":0.19930555,"height":0.07111111},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"LK","depth":19,"bounds":{"left":0.49097222,"top":0.0,"width":0.015277778,"height":0.023333333},"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.52013886,"top":0.0,"width":0.063194446,"height":0.02},"role_description":"text"},{"role":"AXStaticText","text":"Pro plan","depth":17,"bounds":{"left":0.52013886,"top":0.0,"width":0.031944446,"height":0.016666668},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":18,"bounds":{"left":0.625,"top":0.0,"width":0.022222223,"height":0.035555556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe query capabilities and usage","depth":16,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":14,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to query screenpipe. WHat queries can i make to laverage fully form the app","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"20:54","depth":17,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Relevant chats","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Relevant chats","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:","depth":20,"role_description":"text"},{"role":"AXHeading","text":"REST API (localhost:3030)","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"REST API (localhost","depth":20,"role_description":"text"},{"role":"AXStaticText","text":":3030","depth":20,"role_description":"text"},{"role":"AXStaticText","text":")","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"The main query endpoint:","depth":20,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"GET http://localhost:3030/search","depth":22,"role_description":"text"},{"role":"AXHeading","text":"Core parameters","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"Core parameters","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Values","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"q","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"any text","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Full-text search across OCR + audio","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"content_type","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"audio","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Default:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"limit","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Results to return","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"offset","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Pagination","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"start_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T09:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"end_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T18:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"PhpStorm","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Slack","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Arc","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Window title substring match","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"min_length","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Min chars in result","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"speaker_ids","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"array","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"For audio — filter by speaker","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"}]...
|
-3874836826508209467
|
-3723946727894062000
|
app_switch
|
accessibility
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Understanding OpenRouter API gateway
Understanding OpenRouter API gateway
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
Screenpipe 14-day retention explained
Screenpipe 14-day retention explained
Reddit homepage feed overview
Reddit homepage feed overview
Docker container not visible in console
Docker container not visible in console
DIA browser RAM configuration
DIA browser RAM configuration
Screenpipe company background
Screenpipe company background
DSK Bank Bulgaria secure investing explained
DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Screenpipe free version guide
Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
how to query screenpipe. WHat queries can i make to laverage fully form the app
20:54
Retry
Edit
Copy
Relevant chats
Relevant chats
Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:
REST API (localhost:3030)
REST API (localhost
:3030
)
The main query endpoint:
Copy to clipboard
bash
GET http://localhost:3030/search
Core parameters
Core parameters
Param
Values
Notes
q
any text
Full-text search across OCR + audio
content_type
ocr
,
audio
,
all
Default:
all
limit
integer
Results to return
offset
integer
Pagination
start_time
ISO 8601
e.g.
2026-04-11T09:00:00
end_time
ISO 8601
e.g.
2026-04-11T18:00:00
app_name
string
e.g.
PhpStorm
,
Slack
,
Arc
window_name
string
Window title substring match
min_length
integer
Min chars in result
speaker_ids
array
For audio — filter by speaker
Param...
|
NULL
|
|
1975
|
40
|
84
|
2026-04-12T08:44:03.097986+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-12/1775 /Users/lukas/.screenpipe/data/data/2026-04-12/1775983443097_m2.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Understanding OpenRouter API gateway
Understanding OpenRouter API gateway
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
Screenpipe 14-day retention explained
Screenpipe 14-day retention explained
Reddit homepage feed overview
Reddit homepage feed overview
Docker container not visible in console
Docker container not visible in console
DIA browser RAM configuration
DIA browser RAM configuration
Screenpipe company background
Screenpipe company background
DSK Bank Bulgaria secure investing explained
DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Screenpipe free version guide
Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
how to query screenpipe. WHat queries can i make to laverage fully form the app
20:54
Retry
Edit
Copy
Relevant chats
Relevant chats
Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:
REST API (localhost:3030)
REST API (localhost
:3030
)
The main query endpoint:
Copy to clipboard
bash
GET http://localhost:3030/search
Core parameters
Core parameters
Param
Values
Notes
q
any text
Full-text search across OCR + audio
content_type
ocr
,
audio
,
all
Default:
all
limit
integer
Results to return
offset
integer
Pagination
start_time
ISO 8601
e.g.
2026-04-11T09:00:00
end_time
ISO 8601
e.g.
2026-04-11T18:00:00
app_name
string
e.g.
PhpStorm
,
Slack
,
Arc
window_name
string
Window title substring match
min_length
integer
Min chars in result
speaker_ids
array
For audio — filter by speaker
Param...
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"Close sidebar","depth":11,"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Back","depth":11,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Forward","depth":11,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Chat","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Cowork","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Code","depth":12,"role_description":"radio button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"New chat","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⇧⌘O","depth":17,"role_description":"text"},{"role":"AXLink","text":"Search","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Search","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"⌘K","depth":17,"role_description":"text"},{"role":"AXLink","text":"Customize","depth":16,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Customize","depth":18,"role_description":"text"},{"role":"AXLink","text":"Chats","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chats","depth":19,"role_description":"text"},{"role":"AXLink","text":"Projects","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Projects","depth":19,"role_description":"text"},{"role":"AXLink","text":"Artifacts","depth":17,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Artifacts","depth":18,"role_description":"text"},{"role":"AXHeading","text":"Starred","depth":18,"role_description":"heading"},{"role":"AXStaticText","text":"Starred","depth":19,"role_description":"text"},{"role":"AXLink","text":"Bulgarian citizenship application process for EU residents","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Bulgarian citizenship application process for EU residents","depth":22,"role_description":"text"},{"role":"AXLink","text":"Dawarich location tracking project","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dawarich location tracking project","depth":22,"role_description":"text"},{"role":"AXButton","text":"Recents Hide","depth":18,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Recents","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"Hide","depth":19,"role_description":"text"},{"role":"AXLink","text":"Understanding OpenRouter API gateway","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Understanding OpenRouter API gateway","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe query capabilities and usage","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe query capabilities and usage","depth":22,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":22,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Screenpipe 14-day retention explained","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe 14-day retention explained","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reddit homepage feed overview","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reddit homepage feed overview","depth":22,"role_description":"text"},{"role":"AXLink","text":"Docker container not visible in console","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Docker container not visible in console","depth":22,"role_description":"text"},{"role":"AXLink","text":"DIA browser RAM configuration","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DIA browser RAM configuration","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe company background","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe company background","depth":22,"role_description":"text"},{"role":"AXLink","text":"DSK Bank Bulgaria secure investing explained","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DSK Bank Bulgaria secure investing explained","depth":22,"role_description":"text"},{"role":"AXLink","text":"Building a comprehensive personal homelab system","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Building a comprehensive personal homelab system","depth":22,"role_description":"text"},{"role":"AXLink","text":"Importing Google Timeline data to Owntracks","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Importing Google Timeline data to Owntracks","depth":22,"role_description":"text"},{"role":"AXLink","text":"Chromecast remote volume buttons not working","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Chromecast remote volume buttons not working","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe free version guide","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe free version guide","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":22,"role_description":"text"},{"role":"AXLink","text":"Screenpipe database query setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe database query setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Running screenpipe for free","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Running screenpipe for free","depth":22,"role_description":"text"},{"role":"AXLink","text":"Mac Studio network switch setup","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Mac Studio network switch setup","depth":22,"role_description":"text"},{"role":"AXLink","text":"Claude extension in Vivaldi browser","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude extension in Vivaldi browser","depth":22,"role_description":"text"},{"role":"AXLink","text":"General information request","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"General information request","depth":22,"role_description":"text"},{"role":"AXLink","text":"Red dots on neck causes","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Red dots on neck causes","depth":22,"role_description":"text"},{"role":"AXLink","text":"Change approval","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Change approval","depth":22,"role_description":"text"},{"role":"AXLink","text":"Querying Screenpipe with Claude AI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Querying Screenpipe with Claude AI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up daily backups in Ugreen NAS","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up daily backups in Ugreen NAS","depth":22,"role_description":"text"},{"role":"AXLink","text":"Upcoming reminders","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Upcoming reminders","depth":22,"role_description":"text"},{"role":"AXLink","text":"Accessing tools in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Accessing tools in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"Laravel issue troubleshooting","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Laravel issue troubleshooting","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminder to take rodný list","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminder to take rodný list","depth":22,"role_description":"text"},{"role":"AXLink","text":"Setting up reminders in Open WebUI","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Setting up reminders in Open WebUI","depth":22,"role_description":"text"},{"role":"AXLink","text":"NAS reverse proxy access issues after UGOS update","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"NAS reverse proxy access issues after UGOS update","depth":22,"role_description":"text"},{"role":"AXLink","text":"Reminders summary and management","depth":21,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Reminders summary and management","depth":22,"role_description":"text"},{"role":"AXLink","text":"Self-hosted screen recording and activity tracking","depth":21,"bounds":{"left":0.26992187,"top":0.0,"width":0.1015625,"height":0.022222223},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Self-hosted screen recording and activity tracking","depth":22,"bounds":{"left":0.27304688,"top":0.0,"width":0.087890625,"height":0.0125},"role_description":"text"},{"role":"AXLink","text":"All chats","depth":19,"bounds":{"left":0.26992187,"top":0.0,"width":0.1015625,"height":0.021527778},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"All chats","depth":20,"bounds":{"left":0.28476563,"top":0.0,"width":0.022265624,"height":0.0125},"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Kovalik, Settings","depth":16,"bounds":{"left":0.2667969,"top":0.0,"width":0.11210938,"height":0.044444446},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"LK","depth":19,"bounds":{"left":0.27617186,"top":0.0,"width":0.00859375,"height":0.014583333},"role_description":"text"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.29257813,"top":0.0,"width":0.035546876,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Pro plan","depth":17,"bounds":{"left":0.29257813,"top":0.0,"width":0.01796875,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":18,"bounds":{"left":0.3515625,"top":0.0,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe query capabilities and usage","depth":16,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":14,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to query screenpipe. WHat queries can i make to laverage fully form the app","depth":19,"role_description":"text"},{"role":"AXStaticText","text":"20:54","depth":17,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Relevant chats","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Relevant chats","depth":18,"role_description":"text"},{"role":"AXStaticText","text":"Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:","depth":20,"role_description":"text"},{"role":"AXHeading","text":"REST API (localhost:3030)","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"REST API (localhost","depth":20,"role_description":"text"},{"role":"AXStaticText","text":":3030","depth":20,"role_description":"text"},{"role":"AXStaticText","text":")","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"The main query endpoint:","depth":20,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":21,"role_description":"text"},{"role":"AXStaticText","text":"GET http://localhost:3030/search","depth":22,"role_description":"text"},{"role":"AXHeading","text":"Core parameters","depth":19,"role_description":"heading"},{"role":"AXStaticText","text":"Core parameters","depth":20,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Values","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Notes","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"q","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"any text","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Full-text search across OCR + audio","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"content_type","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ocr","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"audio","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Default:","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"all","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"limit","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Results to return","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"offset","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Pagination","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"start_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T09:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"end_time","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"ISO 8601","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"2026-04-11T18:00:00","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"e.g.","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"PhpStorm","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Slack","depth":23,"role_description":"text"},{"role":"AXStaticText","text":",","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Arc","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"string","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Window title substring match","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"min_length","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"integer","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Min chars in result","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"speaker_ids","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"array","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"For audio — filter by speaker","depth":22,"role_description":"text"},{"role":"AXStaticText","text":"Param","depth":22,"role_description":"text"}]...
|
-3874836826508209467
|
-3723946727894062000
|
app_switch
|
accessibility
|
NULL
|
Close sidebar
Back
Forward
Chat
Cowork
Code
New ch Close sidebar
Back
Forward
Chat
Cowork
Code
New chat
New chat
⇧⌘O
Search
Search
⌘K
Customize
Customize
Chats
Chats
Projects
Projects
Artifacts
Artifacts
Starred
Starred
Bulgarian citizenship application process for EU residents
Bulgarian citizenship application process for EU residents
Dawarich location tracking project
Dawarich location tracking project
Recents Hide
Recents
Hide
Understanding OpenRouter API gateway
Understanding OpenRouter API gateway
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
Screenpipe 14-day retention explained
Screenpipe 14-day retention explained
Reddit homepage feed overview
Reddit homepage feed overview
Docker container not visible in console
Docker container not visible in console
DIA browser RAM configuration
DIA browser RAM configuration
Screenpipe company background
Screenpipe company background
DSK Bank Bulgaria secure investing explained
DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
Chromecast remote volume buttons not working
Screenpipe free version guide
Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
Screenpipe database query setup
Running screenpipe for free
Running screenpipe for free
Mac Studio network switch setup
Mac Studio network switch setup
Claude extension in Vivaldi browser
Claude extension in Vivaldi browser
General information request
General information request
Red dots on neck causes
Red dots on neck causes
Change approval
Change approval
Querying Screenpipe with Claude AI
Querying Screenpipe with Claude AI
Setting up daily backups in Ugreen NAS
Setting up daily backups in Ugreen NAS
Upcoming reminders
Upcoming reminders
Accessing tools in Open WebUI
Accessing tools in Open WebUI
Laravel issue troubleshooting
Laravel issue troubleshooting
Reminder to take rodný list
Reminder to take rodný list
Setting up reminders in Open WebUI
Setting up reminders in Open WebUI
NAS reverse proxy access issues after UGOS update
NAS reverse proxy access issues after UGOS update
Reminders summary and management
Reminders summary and management
Self-hosted screen recording and activity tracking
Self-hosted screen recording and activity tracking
All chats
All chats
Lukas Kovalik, Settings
LK
Lukas Kovalik
Pro plan
Get apps and extensions
Screenpipe query capabilities and usage
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
how to query screenpipe. WHat queries can i make to laverage fully form the app
20:54
Retry
Edit
Copy
Relevant chats
Relevant chats
Here's a full breakdown of how to query Screenpipe, both via its REST API and via MCP:
REST API (localhost:3030)
REST API (localhost
:3030
)
The main query endpoint:
Copy to clipboard
bash
GET http://localhost:3030/search
Core parameters
Core parameters
Param
Values
Notes
q
any text
Full-text search across OCR + audio
content_type
ocr
,
audio
,
all
Default:
all
limit
integer
Results to return
offset
integer
Pagination
start_time
ISO 8601
e.g.
2026-04-11T09:00:00
end_time
ISO 8601
e.g.
2026-04-11T18:00:00
app_name
string
e.g.
PhpStorm
,
Slack
,
Arc
window_name
string
Window title substring match
min_length
integer
Min chars in result
speaker_ids
array
For audio — filter by speaker
Param...
|
NULL
|
|
2009
|
41
|
2
|
2026-04-12T09:10:09.259452+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-12/1775 /Users/lukas/.screenpipe/data/data/2026-04-12/1775985009259_m1.jpg...
|
Firefox
|
Dangbei Atom Review - RTINGS.com — Personal
|
True
|
www.rtings.com/projector/reviews/dangbei/atom-lase www.rtings.com/projector/reviews/dangbei/atom-laser-projector...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpГРОOA100% СSun 12 Apr 12:10:08-zshDOCKERO ₴1debug modetelemetryuse pii removaluse all monitorsignored windowsincluded windowscloud syncauto-destruct piddeepgram keyLanguagesDEV (-zsh)falsetruetruetruedisabled0not setO $2APP (-zsh)• *з-zsh• &4-zsh• *5-zsh₴7* Unable to acces...• x8all languagesmonitorsno monitors available$1wt2026-04-1211Z:10:05.156119Z2026-04-12T12:10:05.155724Z2026-04-12T12:10:05159681Z2026-04-12T12:10:05163034Z2026-04-12T12:10:05..170308Z2026-04-12T12:10:05.183985Z2026-04-12T12:10:05184088Z2026-04--12T12:10:05.184054Z2026-04-12T12:10:05186279Z2026-04-12T12:10:05189984Z2026-04-12T12:10:05194217Z2026-04-12T12:10:05547235Z2026-04-12T12:10:05621863Z2026-04-12T12:10:05621994Z2026-04-12T12:10:05.622006Z2026-04-12T12:10:05622028Z2026-04-12T12:10:05622056Z2026-04-12T12:10:06.456460Z2026-04-12T12:10:06.594061ZFirefoxINFUscreenpipe: startingUl eventcaptureINFOscreenpipe_core::pipes: pipeschedulerstarted (generation 2)WARNscreenpipe: pi agent install failed:bun not foundinstall from https://bun.shINFOscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true,INFOscreenpipe_engine::ui_recorder:battery=Some(100))Starting UI event captureINFOscreenpipe_engine::ui_recorder: UI recording session started:1982bc75-7b4c-48ab-80f8-a5f0f7b6ale9INFOscreenpipe_engine::hot_frame_cache:INFOhot_frame_cache:warmingfrom DB (2026-04-1109:10:05.184087 UTC to 2026-04-12 09:10:05.184087 UTC)screenpipe_engine::calendar_speaker_id:speaker identification:started (user_name=<not set>)INFOscreenpipe_engine: :meeting_detector:meeting v2: detection loopstarted (base_interval=5s, profiles=12)INFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns: mdns:advertisingscreenpipe on port 3030INFOscreenpipe_engine::hot_frame_cache: hot_frame_cache:warmed with 1483frameINFOentries, coverage from 2026-04-11screenpipe_engine::vision_manager::manager:09:10:05.184087 UTCStartingvision recording for monitor 1 (1440x900)INFOscreenpipe_engine::vision_manager::manager:Startingevent-drivencapture for monitor 1 (device:monitor_1)INFOscreenpipe_engine::vision_manager::manager:INFOSkippingmonitor2(Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher:Startingmonitor watcher(polling every 5 seconds)INFOINFOscreenpipe_engine::event_driven_capture:event-drivencapturestarted for monitor 1 (device: monitor_1)sck_rs::stream_manager: persistent SCKstreamstarted for display 1(1440x900,INFOscreenpipe_engine::event_driven.capture:startupcapture for monitor 1:2fps)frame_id=2007, dur=68ms...
|
NULL
|
-8802116587651021032
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelpГРОOA100% СSun 12 Apr 12:10:08-zshDOCKERO ₴1debug modetelemetryuse pii removaluse all monitorsignored windowsincluded windowscloud syncauto-destruct piddeepgram keyLanguagesDEV (-zsh)falsetruetruetruedisabled0not setO $2APP (-zsh)• *з-zsh• &4-zsh• *5-zsh₴7* Unable to acces...• x8all languagesmonitorsno monitors available$1wt2026-04-1211Z:10:05.156119Z2026-04-12T12:10:05.155724Z2026-04-12T12:10:05159681Z2026-04-12T12:10:05163034Z2026-04-12T12:10:05..170308Z2026-04-12T12:10:05.183985Z2026-04-12T12:10:05184088Z2026-04--12T12:10:05.184054Z2026-04-12T12:10:05186279Z2026-04-12T12:10:05189984Z2026-04-12T12:10:05194217Z2026-04-12T12:10:05547235Z2026-04-12T12:10:05621863Z2026-04-12T12:10:05621994Z2026-04-12T12:10:05.622006Z2026-04-12T12:10:05622028Z2026-04-12T12:10:05622056Z2026-04-12T12:10:06.456460Z2026-04-12T12:10:06.594061ZFirefoxINFUscreenpipe: startingUl eventcaptureINFOscreenpipe_core::pipes: pipeschedulerstarted (generation 2)WARNscreenpipe: pi agent install failed:bun not foundinstall from https://bun.shINFOscreenpipe_engine::power::manager: initial power profile: Performance (on_ac=true,INFOscreenpipe_engine::ui_recorder:battery=Some(100))Starting UI event captureINFOscreenpipe_engine::ui_recorder: UI recording session started:1982bc75-7b4c-48ab-80f8-a5f0f7b6ale9INFOscreenpipe_engine::hot_frame_cache:INFOhot_frame_cache:warmingfrom DB (2026-04-1109:10:05.184087 UTC to 2026-04-12 09:10:05.184087 UTC)screenpipe_engine::calendar_speaker_id:speaker identification:started (user_name=<not set>)INFOscreenpipe_engine: :meeting_detector:meeting v2: detection loopstarted (base_interval=5s, profiles=12)INFOscreenpipe_engine::server:Server listening on [IP_ADDRESS]:3030INFOscreenpipe_connect::mdns: mdns:advertisingscreenpipe on port 3030INFOscreenpipe_engine::hot_frame_cache: hot_frame_cache:warmed with 1483frameINFOentries, coverage from 2026-04-11screenpipe_engine::vision_manager::manager:09:10:05.184087 UTCStartingvision recording for monitor 1 (1440x900)INFOscreenpipe_engine::vision_manager::manager:Startingevent-drivencapture for monitor 1 (device:monitor_1)INFOscreenpipe_engine::vision_manager::manager:INFOSkippingmonitor2(Display 2_2560x1440_-597,-1440) - not in allowed listscreenpipe_engine::vision_manager::monitor_watcher:Startingmonitor watcher(polling every 5 seconds)INFOINFOscreenpipe_engine::event_driven_capture:event-drivencapturestarted for monitor 1 (device: monitor_1)sck_rs::stream_manager: persistent SCKstreamstarted for display 1(1440x900,INFOscreenpipe_engine::event_driven.capture:startupcapture for monitor 1:2fps)frame_id=2007, dur=68ms...
|
NULL
|