|
19118
|
822
|
0
|
2026-05-11T12:26:24.791073+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778502384791_m1.jpg...
|
Code
|
Review rate limit handli… — app
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"}]...
|
4543230221098110932
|
-3532557440141753958
|
idle
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
SlackFileEditViewGoHistoryWindowHelpDOCKERcompiledeventsroutesviewsO ₴1DEV (docker)APP (-zsh)883Jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-audio:worker-audio_00:stoppedworker-crm-update:worker-crm-update_00:stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker:worker_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-conferences:worker-conferences_00: stoppedworker-crm-sync:worker-crm-sync_00:stoppedworker-emails:worker-emails_00: stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1:jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00:startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00: startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00:startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny#php artisan jiminny:debugDispatching 100 MatchActivityCrmDatajobs (portal=2)Done.Watch logs and runjiminny:debug observeRateLimit to inspect cache state.root@docker_lamp_1:/home/jiminny# ]DEV (d)-zsh> 0.(ab)Preparation for Refi... 34 m left100% <78• Mon 11 May 15:26:24• .→Describe what you are looking forHomeDMsActivityFilesLater...MoreJiminny ...# contusion-clinic# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...• Direct messagesP. Aneliya Angelova®. Galya Dimitrova&e Petko Kashinski&. Stefka StoyanovaVasil Vasilev&. Nikolay IvanovAneliya Angelova, ...Stoyan Tanev• VesE Lukas Kovalik y…..::: Appsã Jira CloudToastCanala Cala# thank-yous406 0• Messagest Add canvas+O FilesWednesday, May 6th~It shows increaiuie skir tu jump into Supportand not miss a beat.More importantly, itshows great heart and helped delight ourcustomers on two ways at the same time:Support and Trials.You embodied so many of our values duringthis period.#selflessness #lowego #customerfocus#positiveattitudeView Recognition Moment011 reply 5 days agoToday ~Greg 1:31 PMShout out to engineering/infrastructure teamand their stability work. Did you know ... last weekour Product had 100% uptime? ..not99.9999999% but /2 %!lots of little things (and a few big things) make thathappen. well done all!81NewKara Jones 1:54 PM100!!!!!! That is amazing!!! Power team!!Message #thank-yous+...
|
19116
|
NULL
|
NULL
|
NULL
|
|
21049
|
919
|
26
|
2026-05-11T17:05:09.991789+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519109991_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"}]...
|
4543230221098110932
|
-3532557440141753958
|
click
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
codeselectionViewlerminalWindowmelpEXPLORERV NO FOLDER OPENEDConnected to remote.PROBLEMSOUTPUTPORTS> OUTLINESõ31 TIMELINESSH: nas @OAo (o100% C4 & • Mon 11 May 20:05:09Open ChatShow All CommandsOpen RecentOpen File or FolderNew Untitled Text File+.00.lax8 Sign In...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
19996
|
858
|
31
|
2026-05-11T14:16:06.143798+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778508966143_m1.jpg...
|
Code
|
Review rate limit handli… — app
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6720374248521443789
|
-4144695180371426146
|
visual_change
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
SlackFileEditViewGoHistoryWindowHelpAPP ()DOCKER₴81DEV (docker)₴2APP (-zsh)-zsh* @param string SobjectType The object type('deals''companies''contacts''cal)* @param array<string, mixed>Spayload Thesearch payload with filters, sorts, prop‹* @return array The search response with'results''total''paging'keys* @throws RateLimitException When rate limit is hit* @throws HubspotException On API errors** @return array The search response with 'results', 'total', 'paging' keys*/public function search(string SobjectType, array Spayload): arrayend diff4) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff --/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-359,11+359,11 @ScrmService = ScrmResolver->prepareCrmService);-//-/1for ($i = 0; si < 3; Si++) {if (Si % 250) {Sthis->info("Syncing opportunity {Si}");Sthis->info("Matching contact {$i}");-1/-1/.+++++ScrmService->syncOpportunity('374720564');if ($i % 25=0{//Sthis->info("Syncing opportunity {$i}");Sthis->info("Matching contact {$i}");////}ScrmService->syncOpportunity('374720564');$crmService->matchByName('Robot');end diffFixed 4 of 5666 files in 146.870 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any containeror image →Learn more at https://docs.docker.com/go/debug-cli/lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20725-handle-HS-search-rate-lir• 0EDHomeDMsActivityFilesLater...More→Jiminny ...# contusion-clinic# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...• Direct messages®. Aneliya Angelova®. Galya DimitrovaPetko Kashinski&. Stefka StoyanovaVasil Vasilev&. Nikolay IvanovAneliya Angelova, ...Stoyan Tanev• VesE Lukas Kovalik y... 0::: AppsS Jira CloudToast(abl100% <78• Mon 11 May 17:16:05Describe what you are looking for# releases8 226 0MessagesC Files• Bookmarkslo Puonicumihailmihaylovjir]Today ~4ff69be1 - JY-17836: Handle non-botactivitiesaf953504 - Merge pull request #12067 fromjiminny/JY-17836-participant-speeches-hotfixjiminny/app Added by GitHubGitHub APP 5:10 PM13 new commits pushed to master by ilian-jiminny9353b609 - JY-20395 wipbee402b7 - JY-20395 Stop fetching ALLheaders (including file) for email importd6a0fe5a - JY-20395 lintdaa0373e - JY-20395 lint fixesaf59d609 - JY-20395 Removed no longer usedmethodsShow morejiminny/app | Added by GitHubCircleCl APP 5:11 PMDeployment Successful!Project: appWhen:05/11/202614:11:35Tag:View JobMessage #releases..•...
|
19994
|
NULL
|
NULL
|
NULL
|
|
20397
|
880
|
15
|
2026-05-11T15:22:15.892461+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778512935892_m1.jpg...
|
Code
|
RateLimitException.php (Working Tree) (RateLimitEx RateLimitException.php (Working Tree) (RateLimitException.php) — app — Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"}]...
|
4726851811558645686
|
-8759195952869277554
|
visual_change
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
SlackFileEditViewGoHistoryWindowHelpAPP ()DOCKER-232,9 +235,11*81DEV (docker)₴2APP (-zsh)-zsh* @param string SobjectType The object type ('deals','companies', 'contacts','cal* @param array<string,mixed› Spayload The search payload with filters, sorts, propereturn array Thesearch response with'results"total','paging'keys+* @throws RateLimitException When rate limit is hit* @throws HubspotException On API errors+* @return array The search response with 'results', 'total', 'paging'keyspublic function search(string SobjectType, array Spayload): arrayend diff4) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff--- /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-359,11 +359,11 @ScrmService = ScrmResolver->prepareCrmService();-//-//for (Si = 0; Si < 3; Si++) {if (Si%25 ===0) {Sthis->info("Syncing opportunity {$i}");Sthis->info("Matching contact {$i]");-//-//.ScrmService->syncOpportunity('374720564');if ($i % 25 === 0) {Sthis->info("Syncing opportunity {$1}");Sthis->info("Matching contact {Si}");//}//ScrmService->syncOpportunity('374720564');ScrmService-›matchByName('Robot');end diffFixed 4 of 5666 files in 146.870 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any container or image →HomeDMsActivityFilesLater..•MoreED→Jiminny ...# contusion-clinic# curiosity_lab# engineering# general# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...^ Direct messagesP. Aneliya Angelova% Galya Dimitrova I& Petko Kashinski&. Stefka StoyanovaVasil Vasilev&. Nikolay IvanovAneliya Angelova, ...Stoyan Tanev®. VesB. Lukas Kovalik y... Oi: AppsS Jira CloudToast(abl100% <78• Mon 11 May 18:22:15Describe what you are looking for# releases8 226 0• MessagesC FilesBookmarks+9353b609 - JYToday ~bee402b7- JY-20395 Stop fetching ALLheaders (including file) for email importd6a0fe5a - JY-20395 lintdaa0373e - JY-20395 lint fixesaf59d609 - JY-20395 Removed no longer usedmethodsShow morejiminny/app | Added by GitHubCircleCl APP 5:11 PMDeployment Successful!Project: appWhen:05/11/202614:11:35Tag:View JobCircleCl APP 5:35 PMDeployment Successful!Project: appWhen:05/11/202614:35:58Tag:View JobMessage #releases+..•...
|
20395
|
/Users/lukas/jiminny/app/app/Exceptions/RateLimitE /Users/lukas/jiminny/app/app/Exceptions/RateLimitException.php...
|
NULL
|
NULL
|
|
10398
|
472
|
35
|
2026-05-08T17:21:33.363348+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778260893363_m2.jpg...
|
Code
|
1. Message that arrives … — payments-logger [SSH: 1. Message that arrives … — payments-logger [SSH: nas]...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: payments-logger [SSH: nas]
Explorer Section: payments-logger [SSH: nas]
PAYMENTS-LOGGER [SSH: NAS]
.claude
backend
prisma
migrations
schema.prisma
src
routes
auth.js
index.js
parser.js
.dockerignore
Dockerfile
package.json
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
README.md, Editor Group 1
index.js, preview, Editor Group 1
index.js, preview, Editor Group 1
1. Message that arrives …, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Setting up SSH Host nas: Setting up SSH tunnel
Yes
No
Learn More
Screen reader usage detected. Do you want to enable editor.accessibilitySupport to optimize the editor for screen reader usage?...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: payments-logger [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: payments-logger [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.06017287,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"PAYMENTS-LOGGER [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.06017287,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":25,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.05817819,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.01462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.027260639,"top":0.096568234,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"prisma","depth":27,"bounds":{"left":0.028590426,"top":0.13088587,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03125,"top":0.13168396,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"migrations","depth":27,"bounds":{"left":0.03125,"top":0.14844373,"width":0.021276595,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.14924182,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.034906916,"top":0.14924182,"width":0.01761968,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"schema.prisma","depth":27,"bounds":{"left":0.03125,"top":0.1660016,"width":0.030585106,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.16679968,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.03357713,"top":0.16679968,"width":0.02825798,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"src","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.0063164895,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.030917553,"top":0.18435754,"width":0.0039893617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.20111732,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"routes","depth":27,"bounds":{"left":0.03125,"top":0.20111732,"width":0.012632979,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.2019154,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.032912236,"top":0.2019154,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.21707901,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth.js","depth":27,"bounds":{"left":0.03125,"top":0.21867518,"width":0.013297873,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03357713,"top":0.21947326,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.23463687,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"index.js","depth":27,"bounds":{"left":0.03125,"top":0.23623304,"width":0.015292553,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.23703113,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.032247342,"top":0.23703113,"width":0.014295213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":27,"bounds":{"left":0.03125,"top":0.25379092,"width":0.016954787,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.033909574,"top":0.254589,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".dockerignore","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.027593086,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.029920213,"top":0.27214685,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.031914894,"top":0.2897047,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"package.json","depth":27,"bounds":{"left":0.028590426,"top":0.3064645,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.03125,"top":0.30726257,"width":0.023936171,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.027593086,"top":0.32482043,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.33998403,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.025930852,"top":0.3415802,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.3423783,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.3423783,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3575419,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.025930852,"top":0.35913807,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.35993615,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.027260639,"top":0.35993615,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.37509975,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.37669593,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.377494,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027260639,"top":0.377494,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3926576,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"bounds":{"left":0.025930852,"top":0.3942538,"width":0.014295213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.39505187,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.028922873,"top":0.39505187,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.4102155,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.025930852,"top":0.41181165,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.41260973,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.41260973,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.42777336,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.025930852,"top":0.4293695,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"README.md, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.045545213,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"index.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.1612367,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.13796543,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14960106,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"index.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.38031915,"height":0.0007980846},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"1. Message that arrives …, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.071476065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.64644855,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.6552275,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.64644855,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.6552275,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Debug Console (⇧⌘Y)","depth":22,"bounds":{"left":0.16921543,"top":0.64644855,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"DEBUG CONSOLE","depth":24,"bounds":{"left":0.1732048,"top":0.6552275,"width":0.031914894,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.2087766,"top":0.64644855,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.21276596,"top":0.6552275,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.2130984,"top":0.6560255,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.21542554,"top":0.6560255,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.23537233,"top":0.64644855,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.2393617,"top":0.6552275,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":9,"bounds":{"left":0.96575797,"top":0.9856345,"width":0.018949468,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Yes","depth":15,"bounds":{"left":0.9361702,"top":0.94413406,"width":0.012965426,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No","depth":15,"bounds":{"left":0.95212764,"top":0.94413406,"width":0.011635638,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Learn More","depth":15,"bounds":{"left":0.96675533,"top":0.94413406,"width":0.027260639,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8507314,"top":0.88347965,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Screen reader usage detected. Do you want to enable editor.accessibilitySupport to optimize the editor for screen reader usage?","depth":16,"bounds":{"left":0.8580452,"top":0.88427776,"width":0.11968085,"height":0.04708699},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.8580452,"top":0.8850758,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":126,"bounds":{"left":0.8580452,"top":0.8850758,"width":0.11968085,"height":0.04708699}}],"role_description":"text"}]...
|
-5055243163754789469
|
-6266593763978325604
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: payments-logger [SSH: nas]
Explorer Section: payments-logger [SSH: nas]
PAYMENTS-LOGGER [SSH: NAS]
.claude
backend
prisma
migrations
schema.prisma
src
routes
auth.js
index.js
parser.js
.dockerignore
Dockerfile
package.json
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
README.md, Editor Group 1
index.js, preview, Editor Group 1
index.js, preview, Editor Group 1
1. Message that arrives …, Editor Group 2
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Debug Console (⇧⌘Y)
DEBUG CONSOLE
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Setting up SSH Host nas: Setting up SSH tunnel
Yes
No
Learn More
Screen reader usage detected. Do you want to enable editor.accessibilitySupport to optimize the editor for screen reader usage?...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
26188
|
1089
|
13
|
2026-05-12T12:12:55.396421+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587975396_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
screenpipe_sync.sh
screenpipe.db
Outline Section...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
8201799271772372056
|
-6669264093915675248
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
screenpipe_sync.sh
screenpipe.db
Outline Section...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13300
|
587
|
34
|
2026-05-09T15:18:18.354612+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339898354_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Select an option to open a Remote Window","depth":16,"on_screen":true,"placeholder":"Select an option to open a Remote Window","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...Remote-SSH","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote-SSH","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.devRemote Repositories","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.dev","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repositories","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"TunnelInstall","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tunnel","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Install","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":19,"on_screen":true,"role_description":"text"}]...
|
-8891789862553659965
|
-8683641963135187910
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
13297
|
NULL
|
NULL
|
NULL
|
|
13301
|
588
|
26
|
2026-05-09T15:18:19.887197+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339899887_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.023271276,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":8,"bounds":{"left":0.4664229,"top":0.5786113,"width":0.019614361,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.52892286,"top":0.5794094,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.5794094,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.54853725,"top":0.5794094,"width":0.0013297872,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.46276596,"top":0.59936154,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.60015965,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.46575797,"top":0.60015965,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.52892286,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.54787236,"top":0.60015965,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.46276596,"top":0.6201117,"width":0.02825798,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6209098,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.4664229,"top":0.6209098,"width":0.024601065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5382314,"top":0.6209098,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.54787236,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.041888297,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":18,"bounds":{"left":0.4664229,"top":0.64166003,"width":0.037898935,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6424581,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.54787236,"top":0.6424581,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.047872342,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.0033244682,"height":0.012769354}},{"char_start":1,"char_count":21,"bounds":{"left":0.4660904,"top":0.6624102,"width":0.04454787,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6632083,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.54787236,"top":0.6632083,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.012300532,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.013962766,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.019281914,"top":0.9856345,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.023936171,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.02925532,"top":0.9856345,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXTextField","text":"Select an option to open a Remote Window","depth":16,"bounds":{"left":0.40292552,"top":0.0311253,"width":0.19481383,"height":0.018355945},"on_screen":true,"placeholder":"Select an option to open a Remote Window","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...Remote-SSH","depth":14,"bounds":{"left":0.40259308,"top":0.055067837,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...","depth":19,"bounds":{"left":0.40625,"top":0.057462092,"width":0.036901597,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.058260176,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.40924203,"top":0.058260176,"width":0.033909574,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Remote-SSH","depth":17,"bounds":{"left":0.57081115,"top":0.058260176,"width":0.022606382,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.57081115,"top":0.05905826,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":9,"bounds":{"left":0.5731383,"top":0.05905826,"width":0.020279255,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":14,"bounds":{"left":0.40259308,"top":0.0726257,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":19,"bounds":{"left":0.40625,"top":0.075019956,"width":0.07047872,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.07581804,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":32,"bounds":{"left":0.40924203,"top":0.07581804,"width":0.0674867,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.devRemote Repositories","depth":14,"bounds":{"left":0.40259308,"top":0.090183556,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.dev","depth":20,"bounds":{"left":0.40625,"top":0.0933759,"width":0.06482713,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.09417398,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":29,"bounds":{"left":0.40924203,"top":0.09417398,"width":0.061835106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Remote Repositories","depth":18,"bounds":{"left":0.5575133,"top":0.09417398,"width":0.035904255,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5575133,"top":0.09497207,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":18,"bounds":{"left":0.55984044,"top":0.09497207,"width":0.033909574,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"TunnelInstall","depth":14,"bounds":{"left":0.40259308,"top":0.10774142,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tunnel","depth":20,"bounds":{"left":0.40625,"top":0.11093376,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.11173184,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.4085771,"top":0.11173184,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Install","depth":18,"bounds":{"left":0.5831117,"top":0.11173184,"width":0.010305851,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5831117,"top":0.112529926,"width":0.0009973404,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.58410907,"top":0.112529926,"width":0.00930851,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":14,"bounds":{"left":0.40259308,"top":0.12529927,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":19,"bounds":{"left":0.40625,"top":0.12769353,"width":0.028922873,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.12849163,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.40957448,"top":0.12849163,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":14,"bounds":{"left":0.40259308,"top":0.14285715,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":19,"bounds":{"left":0.40625,"top":0.1452514,"width":0.039228722,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.14604948,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.40957448,"top":0.14604948,"width":0.034906916,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":14,"bounds":{"left":0.40259308,"top":0.16041501,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":19,"bounds":{"left":0.40625,"top":0.16280925,"width":0.038231384,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.16360734,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.4089096,"top":0.16360734,"width":0.03557181,"height":0.011971269}}],"role_description":"text"}]...
|
-8891789862553659965
|
-8683641963135187910
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13299
|
588
|
25
|
2026-05-09T15:18:18.256399+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339898256_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.023271276,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":8,"bounds":{"left":0.4664229,"top":0.5786113,"width":0.019614361,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.52892286,"top":0.5794094,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.5794094,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.54853725,"top":0.5794094,"width":0.0013297872,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.46276596,"top":0.59936154,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.60015965,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.46575797,"top":0.60015965,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.52892286,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.54787236,"top":0.60015965,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.46276596,"top":0.6201117,"width":0.02825798,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6209098,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.4664229,"top":0.6209098,"width":0.024601065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5382314,"top":0.6209098,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.54787236,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.041888297,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":18,"bounds":{"left":0.4664229,"top":0.64166003,"width":0.037898935,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6424581,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.54787236,"top":0.6424581,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.047872342,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.0033244682,"height":0.012769354}},{"char_start":1,"char_count":21,"bounds":{"left":0.4660904,"top":0.6624102,"width":0.04454787,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6632083,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.54787236,"top":0.6632083,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.012300532,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.013962766,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.019281914,"top":0.9856345,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.023936171,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.02925532,"top":0.9856345,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXTextField","text":"Select an option to open a Remote Window","depth":16,"bounds":{"left":0.40292552,"top":0.0311253,"width":0.19481383,"height":0.018355945},"on_screen":true,"placeholder":"Select an option to open a Remote Window","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...Remote-SSH","depth":14,"bounds":{"left":0.40259308,"top":0.055067837,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect to Host...","depth":19,"bounds":{"left":0.40625,"top":0.057462092,"width":0.036901597,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.058260176,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.40924203,"top":0.058260176,"width":0.033909574,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Remote-SSH","depth":17,"bounds":{"left":0.57081115,"top":0.058260176,"width":0.022606382,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.57081115,"top":0.05905826,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":9,"bounds":{"left":0.5731383,"top":0.05905826,"width":0.020279255,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":14,"bounds":{"left":0.40259308,"top":0.0726257,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connect Current Window to Host...","depth":19,"bounds":{"left":0.40625,"top":0.075019956,"width":0.07047872,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.07581804,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":32,"bounds":{"left":0.40924203,"top":0.07581804,"width":0.0674867,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.devRemote Repositories","depth":14,"bounds":{"left":0.40259308,"top":0.090183556,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Continue Working in vscode.dev","depth":20,"bounds":{"left":0.40625,"top":0.0933759,"width":0.06482713,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.09417398,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":29,"bounds":{"left":0.40924203,"top":0.09417398,"width":0.061835106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Remote Repositories","depth":18,"bounds":{"left":0.5575133,"top":0.09417398,"width":0.035904255,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5575133,"top":0.09497207,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":18,"bounds":{"left":0.55984044,"top":0.09497207,"width":0.033909574,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"TunnelInstall","depth":14,"bounds":{"left":0.40259308,"top":0.10774142,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tunnel","depth":20,"bounds":{"left":0.40625,"top":0.11093376,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.11173184,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.4085771,"top":0.11173184,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Install","depth":18,"bounds":{"left":0.57513297,"top":0.11173184,"width":0.010305851,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.57513297,"top":0.112529926,"width":0.0009973404,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.57613033,"top":0.112529926,"width":0.00930851,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":14,"bounds":{"left":0.40259308,"top":0.12529927,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dev Container","depth":19,"bounds":{"left":0.40625,"top":0.12769353,"width":0.028922873,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.12849163,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.40957448,"top":0.12849163,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":14,"bounds":{"left":0.40259308,"top":0.14285715,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"GitHub Codespace","depth":19,"bounds":{"left":0.40625,"top":0.1452514,"width":0.039228722,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.14604948,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.40957448,"top":0.14604948,"width":0.034906916,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":14,"bounds":{"left":0.40259308,"top":0.16041501,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Remote Repository","depth":19,"bounds":{"left":0.40625,"top":0.16280925,"width":0.038231384,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.16360734,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.4089096,"top":0.16360734,"width":0.03557181,"height":0.011971269}}],"role_description":"text"}]...
|
-804302211825605550
|
-8688145562762558402
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select an option to open a Remote Window
7 Results
Connect to Host...Remote-SSH
Connect to Host...
Remote-SSH
Connect Current Window to Host...
Connect Current Window to Host...
Continue Working in vscode.devRemote Repositories
Continue Working in vscode.dev
Remote Repositories
TunnelInstall
Tunnel
Install
Dev Container
Dev Container
GitHub Codespace
GitHub Codespace
Remote Repository
Remote Repository...
|
13298
|
NULL
|
NULL
|
NULL
|
|
13302
|
587
|
35
|
2026-05-09T15:18:19.941018+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339899941_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select configured SSH host or enter user@host
16 Results
[IP_ADDRESS]
[IP_ADDRESS]
ssg
ssg
jiminny-prod-bastion
jiminny-prod-bastion
jiminny-prod-terraform
jiminny-prod-terraform
jiminny-stage-bastion
jiminny-stage-bastion
jiminny-stage-terraform
jiminny-stage-terraform
jiminny-eu-bastion
jiminny-eu-bastion
jiminny-eu-terraform
jiminny-eu-terraform
jiminny-qa-bastion
jiminny-qa-bastion
jiminny-qa-terraform
jiminny-qa-terraform
jiminny-qai-bastion
jiminny-qai-bastion
jiminny-qai-terraform
jiminny-qai-terraform
pythonanywhere
pythonanywhere
nas
nas
Add New SSH Host...
Add New SSH Host...
Configure SSH Hosts...
Configure SSH Hosts......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"Select configured SSH host or enter user@host","depth":16,"on_screen":true,"placeholder":"Select configured SSH host or enter user@host","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"100.73.206.126","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"100.73.206.126","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ssg","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"ssg","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-prod-bastion","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-prod-bastion","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-prod-terraform","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-prod-terraform","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-stage-bastion","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-stage-bastion","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-stage-terraform","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-stage-terraform","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-eu-bastion","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-eu-bastion","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-eu-terraform","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-eu-terraform","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qa-bastion","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qa-bastion","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qa-terraform","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qa-terraform","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qai-bastion","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qai-bastion","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qai-terraform","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"jiminny-qai-terraform","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pythonanywhere","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pythonanywhere","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"nas","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"nas","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":" Add New SSH Host...","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Add New SSH Host...","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Configure SSH Hosts...","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Configure SSH Hosts...","depth":19,"on_screen":true,"role_description":"text"}]...
|
3676418691461642874
|
-1920015646424161897
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Claude Code
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In
Select configured SSH host or enter user@host
16 Results
[IP_ADDRESS]
[IP_ADDRESS]
ssg
ssg
jiminny-prod-bastion
jiminny-prod-bastion
jiminny-prod-terraform
jiminny-prod-terraform
jiminny-stage-bastion
jiminny-stage-bastion
jiminny-stage-terraform
jiminny-stage-terraform
jiminny-eu-bastion
jiminny-eu-bastion
jiminny-eu-terraform
jiminny-eu-terraform
jiminny-qa-bastion
jiminny-qa-bastion
jiminny-qa-terraform
jiminny-qa-terraform
jiminny-qai-bastion
jiminny-qai-bastion
jiminny-qai-terraform
jiminny-qai-terraform
pythonanywhere
pythonanywhere
nas
nas
Add New SSH Host...
Add New SSH Host...
Configure SSH Hosts...
Configure SSH Hosts......
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10986
|
492
|
15
|
2026-05-08T18:11:22.850545+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778263882850_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.59936154,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.60015965,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.60015965,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.60015965,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.60015965,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.6201117,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.6209098,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.6209098,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.6209098,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.6209098,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Start Debugging","depth":28,"bounds":{"left":0.51263297,"top":0.64166003,"width":0.035904255,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.64166003,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":14,"bounds":{"left":0.515625,"top":0.64166003,"width":0.032912236,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"F5","depth":29,"bounds":{"left":0.59674203,"top":0.6424581,"width":0.0043218085,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59674203,"top":0.6424581,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":1,"bounds":{"left":0.5987367,"top":0.6424581,"width":0.0023271276,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0019946808,"top":0.98244214,"width":0.0076462766,"height":0.01755786},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"}]...
|
3220152240831111385
|
-906323151591841233
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In...
|
10984
|
NULL
|
NULL
|
NULL
|
|
14551
|
645
|
7
|
2026-05-10T08:35:39.873017+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778402139873_m1.jpg...
|
Code
|
Implement Authentik inte… — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml
.env
.env.example, preview
report(1).csv
report(2).csv
sms_export.json
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Sign In
Sign In...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":".env.example, preview","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Design new payment-logge…","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Implement Authentik inte…","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"}]...
|
2594314339330705918
|
-2126063352211981781
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml
.env
.env.example, preview
report(1).csv
report(2).csv
sms_export.json
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Sign In
Sign In...
|
14549
|
NULL
|
NULL
|
NULL
|
|
11063
|
494
|
27
|
2026-05-08T18:18:45.124233+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778264325124_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
payments.js, preview
Opening Remote...
Opening Remote...
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: (details) Initializing VS Code Server...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"payments.js, preview","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.04488032,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0029920214,"top":0.9840383,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: (details) Initializing VS Code Server","depth":12,"on_screen":false,"role_description":"text"}]...
|
8301702788011816547
|
-5590488959346244789
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
payments.js, preview
Opening Remote...
Opening Remote...
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: (details) Initializing VS Code Server...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13322
|
589
|
4
|
2026-05-09T15:19:00.032070+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339940032_m1.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
sms_export.json, Editor Group 1
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Remote - SSH - Output
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel
Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Setting up SSH Host nas: Setting up SSH tunnel","depth":16,"on_screen":true,"role_description":"text"}]...
|
-983393406661836948
|
-5094145206115261589
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
sms_export.json, Editor Group 1
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Remote - SSH - Output
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel
Setting up SSH Host nas: Setting up SSH tunnel...
|
13320
|
NULL
|
NULL
|
NULL
|
|
13323
|
590
|
5
|
2026-05-09T15:19:01.088455+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339941088_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
sms_export.json, Editor Group 1
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Remote - SSH - Output
remote SSH: nas
SSH: nas
No Problems
0
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.13168396,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0625,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.17785904,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"bounds":{"left":0.21775267,"top":0.047885075,"width":0.046210106,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"bounds":{"left":0.26396278,"top":0.047885075,"width":0.046875,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.31050533,"top":0.047885075,"width":0.053523935,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14527926,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.37799203,"height":0.0007980846},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.122340426,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
4051676745463200530
|
-5094144106603498710
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
sms_export.json, Editor Group 1
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Remote - SSH - Output
remote SSH: nas
SSH: nas
No Problems
0
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13324
|
589
|
5
|
2026-05-09T15:19:03.236549+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339943236_m1.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
sms_export.json, Editor Group 1
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
1762420552125769334
|
-4950027767510097045
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
sms_export.json, Editor Group 1
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
11622
|
520
|
37
|
2026-05-09T06:42:08.991667+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778308928991_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
docker-compose.yml, Editor Group 1
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.13168396,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.14844373,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.14924182,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0625,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.17785904,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14527926,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
1893930866566651756
|
-5598572553264192706
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
finance-hub
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
docker-compose.yml, Editor Group 1
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10989
|
491
|
20
|
2026-05-08T18:11:25.972638+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778263885972_m1.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Start Debugging","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"F5","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-4675164578543434048
|
-986350007752858754
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
payments-logger
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
11064
|
494
|
28
|
2026-05-08T18:18:48.180371+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778264328180_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
payments-logger
.claude
auth
backend
prisma
src
routes
payments.js
auth.js
index.js
parser.js
.dockerignore
Dockerfile
package.json
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
payments.js, preview, Editor Group 1
payments.js, preview, Editor Group 1
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.02825798,"top":0.096568234,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"dsk-uploader","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.026928192,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.024268618,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments-logger","depth":27,"bounds":{"left":0.025930852,"top":0.13088587,"width":0.034574468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.028590426,"top":0.13168396,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.01462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.14924182,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.029920213,"top":0.14924182,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.030917553,"top":0.16679968,"width":0.0066489363,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.18435754,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.20111732,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"prisma","depth":27,"bounds":{"left":0.03125,"top":0.20111732,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.2019154,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.033909574,"top":0.2019154,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.21867518,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"src","depth":27,"bounds":{"left":0.03125,"top":0.21867518,"width":0.0063164895,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.03357713,"top":0.21947326,"width":0.0039893617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.027593086,"top":0.23623304,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"routes","depth":27,"bounds":{"left":0.033909574,"top":0.23623304,"width":0.012632979,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.23703113,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03557181,"top":0.23703113,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.02925532,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"payments.js","depth":27,"bounds":{"left":0.03656915,"top":0.25379092,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03656915,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.039228722,"top":0.254589,"width":0.021609042,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth.js","depth":27,"bounds":{"left":0.033909574,"top":0.27134877,"width":0.013297873,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.27214685,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.036236703,"top":0.27214685,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.28731045,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"index.js","depth":27,"bounds":{"left":0.033909574,"top":0.28890663,"width":0.015292553,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.2897047,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.034906916,"top":0.2897047,"width":0.014295213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.026595745,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":27,"bounds":{"left":0.033909574,"top":0.3064645,"width":0.016954787,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.033909574,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.03656915,"top":0.30726257,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".dockerignore","depth":27,"bounds":{"left":0.03125,"top":0.32402235,"width":0.027593086,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.32482043,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.032579787,"top":0.32482043,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.33998403,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"bounds":{"left":0.03125,"top":0.3415802,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.3423783,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.034574468,"top":0.3423783,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.3575419,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"package.json","depth":27,"bounds":{"left":0.03125,"top":0.35913807,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.35993615,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.033909574,"top":0.35993615,"width":0.023936171,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.37669593,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.37669593,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.377494,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.377494,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.3926576,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.3942538,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.39505187,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.39505187,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.4102155,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.41181165,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.41260973,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.41260973,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.42777336,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.4293695,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.4301676,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.4301676,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.44533122,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"bounds":{"left":0.028590426,"top":0.44692737,"width":0.014295213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.44772545,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03158245,"top":0.44772545,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.46288908,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.46448523,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.46528333,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.46528333,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.48044693,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.028590426,"top":0.4820431,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"payments.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.04488032,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.15525267,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.17785904,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.18949468,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.20744681,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"payments.js, preview, Editor Group 1","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-2793908267218741115
|
-1051309084165430676
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
auth
dsk-uploader
payments-logger
.claude
auth
backend
prisma
src
routes
payments.js
auth.js
index.js
parser.js
.dockerignore
Dockerfile
package.json
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
payments.js, preview, Editor Group 1
payments.js, preview, Editor Group 1
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
11063
|
NULL
|
NULL
|
NULL
|
|
14553
|
645
|
8
|
2026-05-10T08:35:43.315075+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778402143315_m1.jpg...
|
Code
|
Implement Authentik inte… — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
finance-hub
backend
frontend
mcp
scripts
.env
.env.example
.gitignore
docker-compose.yml
README.md
sms_export.json
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
.env.example, preview, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
.env, Editor Group 1
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"mcp","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":".env.example, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":".env, Editor Group 1","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Design new payment-logge…","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Implement Authentik inte…","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"}]...
|
-6346487788653382170
|
-5523392395976133845
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
finance-hub
backend
frontend
mcp
scripts
.env
.env.example
.gitignore
docker-compose.yml
README.md
sms_export.json
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
.env.example, preview, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
.env, Editor Group 1
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server......
|
NULL
|
NULL
|
NULL
|
NULL
|
|
14552
|
646
|
4
|
2026-05-10T08:35:42.182570+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-10/1778 /Users/lukas/.screenpipe/data/data/2026-05-10/1778402142182_m2.jpg...
|
Code
|
Implement Authentik inte… — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
finance-hub
backend
frontend
mcp
scripts
.env
.env.example
.gitignore
docker-compose.yml
README.md
sms_export.json
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
.env.example, preview, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
.env, Editor Group 1
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server...
Downloading VS Code Server......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"finance-hub","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.024268618,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.027593086,"top":0.096568234,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.028590426,"top":0.11332801,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03125,"top":0.11412609,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.028590426,"top":0.13088587,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.13168396,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.03025266,"top":0.13168396,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"mcp","depth":27,"bounds":{"left":0.028590426,"top":0.14844373,"width":0.008643617,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"scripts","depth":27,"bounds":{"left":0.028590426,"top":0.1660016,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.16679968,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.030917553,"top":0.16679968,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.1819633,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.029920213,"top":0.18435754,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.19952115,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.028590426,"top":0.20111732,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.029920213,"top":0.2019154,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.028590426,"top":0.21867518,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.029920213,"top":0.21947326,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.028590426,"top":0.23623304,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.03125,"top":0.23703113,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.25219473,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.028590426,"top":0.25379092,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"sms_export.json","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.032912236,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.030917553,"top":0.27214685,"width":0.030917553,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.0625,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.17785904,"top":0.047885075,"width":0.040226065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":".env.example, preview, Editor Group 1","depth":28,"bounds":{"left":0.21775267,"top":0.047885075,"width":0.04720745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv, Editor Group 1","depth":28,"bounds":{"left":0.26462767,"top":0.047885075,"width":0.046210106,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv, Editor Group 1","depth":28,"bounds":{"left":0.31083778,"top":0.047885075,"width":0.04654255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json, Editor Group 1","depth":28,"bounds":{"left":0.35738033,"top":0.047885075,"width":0.053523935,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14527926,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":".env, Editor Group 1","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Design new payment-logge…","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.07912234,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Implement Authentik inte…","depth":28,"bounds":{"left":0.63663566,"top":0.047885075,"width":0.07446808,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19581117,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.19980054,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0019946808,"top":0.98244214,"width":0.0076462766,"height":0.01755786},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.07247341,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07413564,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07945479,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8507314,"top":0.95211494,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Downloading VS Code Server...","depth":16,"bounds":{"left":0.8580452,"top":0.952913,"width":0.062832445,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.8580452,"top":0.9537111,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":28,"bounds":{"left":0.86136967,"top":0.9537111,"width":0.059175532,"height":0.011971269}}],"role_description":"text"}]...
|
2266331478477886992
|
-5521985021093764309
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
finance-hub
backend
frontend
mcp
scripts
.env
.env.example
.gitignore
docker-compose.yml
README.md
sms_export.json
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
docker-compose.yml, Editor Group 1
.env, Editor Group 1
.env.example, preview, Editor Group 1
report(1).csv, Editor Group 1
report(2).csv, Editor Group 1
sms_export.json, Editor Group 1
.env, Editor Group 1
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server...
Downloading VS Code Server......
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10987
|
492
|
16
|
2026-05-08T18:11:24.830518+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778263884830_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.039228722,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.039228722,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.036901597,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.0933759,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.0933759,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.09736632,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.09736632,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.09736632,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.11093376,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.11093376,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.114924185,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.114924185,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.114924185,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.59936154,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.60015965,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.60015965,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.60015965,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.60015965,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.6201117,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.6209098,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.6209098,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.6209098,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.6209098,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Start Debugging","depth":28,"bounds":{"left":0.51263297,"top":0.64166003,"width":0.035904255,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.64166003,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":14,"bounds":{"left":0.515625,"top":0.64166003,"width":0.032912236,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"F5","depth":29,"bounds":{"left":0.59674203,"top":0.6424581,"width":0.0043218085,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59674203,"top":0.6424581,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":1,"bounds":{"left":0.5987367,"top":0.6424581,"width":0.0023271276,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-7228136453884782733
|
-988320295579311250
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10988
|
491
|
19
|
2026-05-08T18:11:24.890038+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778263884890_m1.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: finance [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: finance [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"FINANCE [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Start Debugging","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"F5","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-7228136453884782733
|
-988320295579311250
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: finance [SSH: nas]
Explorer Section: finance [SSH: nas]
FINANCE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
10985
|
NULL
|
NULL
|
NULL
|
|
10395
|
471
|
31
|
2026-05-08T17:21:28.884563+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778260888884_m1.jpg...
|
Code
|
1. Message that arrives … — payments-logger [SSH: 1. Message that arrives … — payments-logger [SSH: nas]...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: payments-logger [SSH: nas]
Explorer Section: payments-logger [SSH: nas]
PAYMENTS-LOGGER [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
README.md
index.js, preview
1. Message that arrives …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Screen reader usage detected. Do you want to enable editor.accessibilitySupport to optimize the editor for screen reader usage?...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Explorer Section: payments-logger [SSH: nas]","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: payments-logger [SSH: nas]","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"PAYMENTS-LOGGER [SSH: NAS]","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"README.md","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"index.js, preview","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"1. Message that arrives …","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Screen reader usage detected. Do you want to enable editor.accessibilitySupport to optimize the editor for screen reader usage?","depth":12,"on_screen":false,"role_description":"text"}]...
|
-715203827829714754
|
-6676562536281632036
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: payments-logger [SSH: nas]
Explorer Section: payments-logger [SSH: nas]
PAYMENTS-LOGGER [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
README.md
index.js, preview
1. Message that arrives …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Screen reader usage detected. Do you want to enable editor.accessibilitySupport to optimize the editor for screen reader usage?...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10397
|
472
|
34
|
2026-05-08T17:21:30.347347+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778260890347_m2.jpg...
|
Code
|
1. Message that arrives … — payments-logger [SSH: 1. Message that arrives … — payments-logger [SSH: nas]...
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: payments-logger [SSH: nas]
Explorer Section: payments-logger [SSH: nas]
PAYMENTS-LOGGER [SSH: NAS]
.claude
backend
prisma
migrations
schema.prisma
src
routes
auth.js
index.js
parser.js
.dockerignore
Dockerfile
package.json
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
README.md, Editor Group 1
index.js, preview, Editor Group 1
index.js, preview, Editor Group 1
1. Message that arrives …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: payments-logger [SSH: nas]","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: payments-logger [SSH: nas]","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.06017287,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"PAYMENTS-LOGGER [SSH: NAS]","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.06017287,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.07980846,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":25,"bounds":{"left":0.024933511,"top":0.07980846,"width":0.05817819,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":27,"bounds":{"left":0.025930852,"top":0.09577015,"width":0.01462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.096568234,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.027260639,"top":0.096568234,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"backend","depth":27,"bounds":{"left":0.025930852,"top":0.11332801,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11412609,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"prisma","depth":27,"bounds":{"left":0.028590426,"top":0.13088587,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.03125,"top":0.13168396,"width":0.010970744,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"migrations","depth":27,"bounds":{"left":0.03125,"top":0.14844373,"width":0.021276595,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.14924182,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.034906916,"top":0.14924182,"width":0.01761968,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.16440542,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"schema.prisma","depth":27,"bounds":{"left":0.03125,"top":0.1660016,"width":0.030585106,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.16679968,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.03357713,"top":0.16679968,"width":0.02825798,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.18355946,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"src","depth":27,"bounds":{"left":0.028590426,"top":0.18355946,"width":0.0063164895,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.18435754,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.030917553,"top":0.18435754,"width":0.0039893617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.024933511,"top":0.20111732,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"routes","depth":27,"bounds":{"left":0.03125,"top":0.20111732,"width":0.012632979,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.2019154,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.032912236,"top":0.2019154,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"auth.js","depth":27,"bounds":{"left":0.03125,"top":0.21867518,"width":0.013297873,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03357713,"top":0.21947326,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"index.js","depth":27,"bounds":{"left":0.03125,"top":0.23623304,"width":0.015292553,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.23703113,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.032247342,"top":0.23703113,"width":0.014295213,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.023936171,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"parser.js","depth":27,"bounds":{"left":0.03125,"top":0.25379092,"width":0.016954787,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.03125,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.033909574,"top":0.254589,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.2697526,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".dockerignore","depth":27,"bounds":{"left":0.028590426,"top":0.27134877,"width":0.027593086,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.27214685,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.029920213,"top":0.27214685,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Dockerfile","depth":27,"bounds":{"left":0.028590426,"top":0.28890663,"width":0.020611702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.2897047,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.031914894,"top":0.2897047,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.021276595,"top":0.3048683,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"package.json","depth":27,"bounds":{"left":0.028590426,"top":0.3064645,"width":0.026595745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.03125,"top":0.30726257,"width":0.023936171,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.32402235,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"frontend","depth":27,"bounds":{"left":0.025930852,"top":0.32402235,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.32482043,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.027593086,"top":0.32482043,"width":0.015625,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env","depth":27,"bounds":{"left":0.025930852,"top":0.3415802,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.3423783,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.3423783,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3575419,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".env.example","depth":27,"bounds":{"left":0.025930852,"top":0.35913807,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.35993615,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.027260639,"top":0.35993615,"width":0.024933511,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.37509975,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.025930852,"top":0.37669593,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.377494,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027260639,"top":0.377494,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.3926576,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"API.md","depth":27,"bounds":{"left":0.025930852,"top":0.3942538,"width":0.014295213,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.39505187,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.028922873,"top":0.39505187,"width":0.011303191,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.4102155,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"docker-compose.yml","depth":27,"bounds":{"left":0.025930852,"top":0.41181165,"width":0.042220745,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.41260973,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.41260973,"width":0.03956117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.01861702,"top":0.42777336,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"README.md","depth":27,"bounds":{"left":0.025930852,"top":0.4293695,"width":0.025265958,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"README.md, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.045545213,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"index.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.1612367,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.13796543,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.14960106,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"index.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.0933759,"width":0.38031915,"height":0.0007980846},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"1. Message that arrives …","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.071476065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.64644855,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.6552275,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.64644855,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.6552275,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.64644855,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.6552275,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.6560255,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.6560255,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19581117,"top":0.64644855,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.19980054,"top":0.6552275,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0023271276,"top":0.98244214,"width":0.006981383,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Signed out","depth":16,"bounds":{"left":0.9567819,"top":0.98244214,"width":0.031914894,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.9594415,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Signed out","depth":17,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.021276595,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.96476066,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":9,"bounds":{"left":0.96575797,"top":0.9856345,"width":0.018949468,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Screen Reader Optimized","depth":16,"bounds":{"left":0.90359044,"top":0.98244214,"width":0.05319149,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
4265832630431698825
|
4057908913671814652
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: payments-logger [SSH: nas]
Explorer Section: payments-logger [SSH: nas]
PAYMENTS-LOGGER [SSH: NAS]
.claude
backend
prisma
migrations
schema.prisma
src
routes
auth.js
index.js
parser.js
.dockerignore
Dockerfile
package.json
frontend
.env
.env.example
.gitignore
API.md
docker-compose.yml
README.md
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
README.md, Editor Group 1
index.js, preview, Editor Group 1
index.js, preview, Editor Group 1
1. Message that arrives …
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Signed out
Signed out
Screen Reader Optimized
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
10396
|
NULL
|
NULL
|
NULL
|
|
26187
|
1089
|
12
|
2026-05-12T12:12:52.380677+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587972380_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_f...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0003324468,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.09577015,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":27,"bounds":{"left":0.026263298,"top":0.09577015,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.096568234,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.028922873,"top":0.096568234,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.11332801,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.026263298,"top":0.11332801,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.11412609,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.028590426,"top":0.11412609,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.13088587,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"data","depth":27,"bounds":{"left":0.026263298,"top":0.13088587,"width":0.008976064,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.13168396,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.028922873,"top":0.13168396,"width":0.0063164895,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.14844373,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"logs","depth":27,"bounds":{"left":0.026263298,"top":0.14844373,"width":0.00831117,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.14924182,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.027260639,"top":0.14924182,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019946808,"top":0.1660016,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"pipes","depth":27,"bounds":{"left":0.026263298,"top":0.1660016,"width":0.010970744,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.16679968,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.028922873,"top":0.16679968,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.1819633,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".gitignore","depth":27,"bounds":{"left":0.026263298,"top":0.18355946,"width":0.018949468,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.18435754,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027593086,"top":0.18435754,"width":0.017952127,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.19952115,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app_settings.json","depth":27,"bounds":{"left":0.026263298,"top":0.20111732,"width":0.03557181,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2019154,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.028590426,"top":0.2019154,"width":0.03324468,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.21707901,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db","depth":27,"bounds":{"left":0.026263298,"top":0.21867518,"width":0.020944148,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.21947326,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.028590426,"top":0.21947326,"width":0.01861702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.23463687,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"archive.db-bak","depth":27,"bounds":{"left":0.026263298,"top":0.23623304,"width":0.03025266,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.23703113,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.028590426,"top":0.23703113,"width":0.027925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.25219473,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite","depth":27,"bounds":{"left":0.026263298,"top":0.25379092,"width":0.017287234,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.254589,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.028922873,"top":0.254589,"width":0.014960106,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.2697526,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-shm","depth":27,"bounds":{"left":0.026263298,"top":0.27134877,"width":0.027925532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.27214685,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.27214685,"width":0.025265958,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.28731045,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":27,"bounds":{"left":0.026263298,"top":0.28890663,"width":0.025930852,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.2897047,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028922873,"top":0.2897047,"width":0.023603724,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.3048683,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync_updated.sh","depth":27,"bounds":{"left":0.026263298,"top":0.3064645,"width":0.059175532,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.30726257,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.028590426,"top":0.30726257,"width":0.056848403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.32242617,"width":0.0063164895,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe_sync.sh","depth":27,"bounds":{"left":0.026263298,"top":0.32402235,"width":0.039893616,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.32482043,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":17,"bounds":{"left":0.028590426,"top":0.32482043,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.018949468,"top":0.33998403,"width":0.0076462766,"height":0.015163607},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe.db","depth":27,"bounds":{"left":0.026263298,"top":0.3415802,"width":0.028590426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.026263298,"top":0.3423783,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":12,"bounds":{"left":0.028590426,"top":0.3423783,"width":0.026595745,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json, Editor Group 1","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh, Editor Group 1","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06050532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview, Editor Group 1","depth":28,"bounds":{"left":0.23204787,"top":0.047885075,"width":0.0787899,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md, Editor Group 1","depth":28,"bounds":{"left":0.31083778,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env, Editor Group 1","depth":28,"bounds":{"left":0.35073137,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":28,"bounds":{"left":0.13796543,"top":0.584996,"width":0.42021278,"height":0.014365523},"on_screen":true,"value":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","role_description":"editor","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"#!/bin/bash\n# screenpipe_sync.sh\n# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.\n# Append-only, no deletions.\n#\n# Key design points\n# -----------------\n# 1. Multi-install safe via install_id.\n# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions\n# in the NAS archive, every synced table gets an extra `install_id` column,\n# and the logical primary key becomes (install_id, id) enforced by a\n# unique index. The install_id is a UUID stored in\n# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what\n# happens on reinstall) discards it, so the next run generates a new one.\n#\n# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the\n# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit\n# column lists so positional mismatches can't occur.\n#\n# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a\n# reinstall, INSERT OR IGNORE will silently skip rows whose id collides\n# with a previous install's id, so FTS only reliably indexes the most\n# recent install. Falls back to LIKE queries on the base tables for\n# multi-install searches (which can filter by install_id).\n#\n# Usage\n# -----\n# ./screenpipe_sync.sh # syncs yesterday\n# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date\n# ./screenpipe_sync.sh today # syncs today so far\n# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit\n# ./screenpipe_sync.sh --show-install-id # print install_id and exit\n\nset -euo pipefail\n\n# ─── CONFIG ───────────────────────────────────────────────────────────────────\nDB_SRC=\"${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}\"\nNAS_MOUNT=\"${NAS_MOUNT:-/Volumes/screenpipe}\"\nNAS_DB=\"$NAS_MOUNT/archive.db\"\nNAS_DATA=\"$NAS_MOUNT/data\"\nLOG_FILE=\"$HOME/.screenpipe/sync.log\"\nINSTALL_ID_FILE=\"$HOME/.screenpipe/.sync_install_id\"\n\n# Sync table groups. Order matters for FK-ish references\n# (parents before children).\nVISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)\nAUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)\nALL_SYNC_TABLES=(\"${VISION_TABLES[@]}\" \"${AUDIO_TABLES[@]}\")\n# ──────────────────────────────────────────────────────────────────────────────\n\nSCRIPT_START=$(date +%s)\n\n# ─── HELPERS ──────────────────────────────────────────────────────────────────\nlog() {\n local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\n echo \"$msg\" | tee -a \"$LOG_FILE\"\n}\n\nstep() {\n local now=$(date +%s)\n local elapsed=$(( now - SCRIPT_START ))\n local min=$(( elapsed / 60 ))\n local sec=$(( elapsed % 60 ))\n printf \"\\n[+%02dm%02ds] ▶ %s\\n\" \"$min\" \"$sec\" \"$*\" | tee -a \"$LOG_FILE\"\n}\n\nrun_sqlite_heredoc() {\n local label=\"$1\"\n local sql=\"$2\"\n local start=$(date +%s)\n\n printf \" %-36s \" \"$label\"\n\n sqlite3 \"$DB_SRC\" <<< \"$sql\" &\n local pid=$!\n local spin=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')\n local i=0\n while kill -0 \"$pid\" 2>/dev/null; do\n printf \"\\r %-36s %s \" \"$label\" \"${spin[$i]}\"\n i=$(( (i + 1) % 10 ))\n sleep 0.2\n done\n wait \"$pid\"\n local rc=$?\n if [ $rc -ne 0 ]; then\n printf \"\\r %-36s ✗ FAILED\\n\" \"$label\" | tee -a \"$LOG_FILE\"\n exit $rc\n fi\n\n local dur=$(( $(date +%s) - start ))\n printf \"\\r %-36s ✓ %dm%02ds\\n\" \"$label\" \"$(( dur / 60 ))\" \"$(( dur % 60 ))\" | tee -a \"$LOG_FILE\"\n}\n\ncheck() {\n local label=\"$1\" got=\"$2\" expected=\"$3\"\n if [ \"$got\" -eq \"$expected\" ]; then\n printf \" %-25s %s / %s ✓\\n\" \"$label:\" \"$got\" \"$expected\"\n else\n printf \" %-25s %s / %s ✗ MISMATCH\\n\" \"$label:\" \"$got\" \"$expected\"\n fi\n}\n\ntable_columns_with_types() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2 \"|\" $3}'\n}\n\ntable_columns() {\n local db=\"$1\" table=\"$2\"\n sqlite3 \"$db\" \"PRAGMA table_info($table);\" | awk -F'|' '{print $2}'\n}\n\ntable_exists() {\n local db=\"$1\" table=\"$2\"\n local count\n count=$(sqlite3 \"$db\" \"SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';\")\n [ \"$count\" -gt 0 ]\n}\n\n# Adds any columns present in source but missing in NAS for the given table.\n# Skips install_id (which is NAS-only and managed separately).\nensure_columns() {\n local table=\"$1\"\n local label=\"schema: $table\"\n printf \" %-36s \" \"$label\"\n\n if ! table_exists \"$DB_SRC\" \"$table\"; then\n printf \"✗ source missing — skipping\\n\"\n return 0\n fi\n\n if ! table_exists \"$NAS_DB\" \"$table\"; then\n printf \"✓ fresh (created above)\\n\"\n return 0\n fi\n\n local src_cols\n src_cols=$(table_columns_with_types \"$DB_SRC\" \"$table\")\n local nas_cols\n nas_cols=$(table_columns \"$NAS_DB\" \"$table\")\n\n local added=0\n local added_names=\"\"\n while IFS='|' read -r name type; do\n [ -z \"$name\" ] && continue\n if ! echo \"$nas_cols\" | grep -Fxq \"$name\"; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $table ADD COLUMN \\\"$name\\\" $type;\"\n added=$((added + 1))\n added_names=\"$added_names $name\"\n fi\n done <<< \"$src_cols\"\n\n if [ \"$added\" -gt 0 ]; then\n printf \"✓ added %d:%s\\n\" \"$added\" \"$added_names\"\n else\n printf \"✓ in sync\\n\"\n fi\n}\n\n# Comma-separated, double-quoted column list for a table from source DB.\n# Optional alias is prefixed (e.g. `o.\"col\"`) for JOIN selects where column\n# names would otherwise collide.\nbuild_col_list() {\n local table=\"$1\"\n local alias=\"${2:-}\"\n local prefix=\"\"\n [ -n \"$alias\" ] && prefix=\"${alias}.\"\n table_columns \"$DB_SRC\" \"$table\" | awk 'NF' | awk -v p=\"$prefix\" '{print p \"\\\"\" $0 \"\\\"\"}' | paste -sd, -\n}\n# ──────────────────────────────────────────────────────────────────────────────\n\n# ─── ARG HANDLING ─────────────────────────────────────────────────────────────\nif [ \"${1:-}\" = \"--reset-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n OLD=$(cat \"$INSTALL_ID_FILE\")\n rm -f \"$INSTALL_ID_FILE\"\n echo \"Removed install_id: $OLD\"\n else\n echo \"No install_id file at $INSTALL_ID_FILE\"\n fi\n echo \"A new install_id will be generated on the next sync run.\"\n exit 0\nfi\n\nif [ \"${1:-}\" = \"--show-install-id\" ]; then\n if [ -f \"$INSTALL_ID_FILE\" ]; then\n cat \"$INSTALL_ID_FILE\"\n else\n echo \"(none — will be generated on next run)\"\n fi\n exit 0\nfi\n\nif [ \"${1:-}\" = \"today\" ]; then\n TARGET_DATE=$(date +%Y-%m-%d)\nelif [ -n \"${1:-}\" ]; then\n TARGET_DATE=\"$1\"\n if ! [[ \"$TARGET_DATE\" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then\n echo \"ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday.\"\n exit 1\n fi\nelse\n TARGET_DATE=$(date -v-1d +%Y-%m-%d)\nfi\n\n# ─── INSTALL ID ───────────────────────────────────────────────────────────────\nINSTALL_ID=\"\"\nif [ -f \"$INSTALL_ID_FILE\" ]; then\n INSTALL_ID=$(tr -d '[:space:]' < \"$INSTALL_ID_FILE\")\nfi\nif [ -z \"$INSTALL_ID\" ]; then\n INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')\n echo \"$INSTALL_ID\" > \"$INSTALL_ID_FILE\"\n log \"Generated new install_id: $INSTALL_ID\"\nfi\n\nlog \"========================================\"\nlog \"Screenpipe sync starting for: $TARGET_DATE\"\nlog \"install_id: $INSTALL_ID\"\nlog \"========================================\"\n\n# ─── PREFLIGHT ────────────────────────────────────────────────────────────────\nstep \"Preflight checks\"\n\nif [ ! -f \"$DB_SRC\" ]; then\n log \"ERROR: Source DB not found at $DB_SRC\"; exit 1\nfi\nprintf \" %-25s %s (%s)\\n\" \"Source DB:\" \"OK\" \"$(du -sh \"$DB_SRC\" | cut -f1)\"\n\nif [ ! -d \"$NAS_MOUNT\" ]; then\n log \"ERROR: NAS not mounted at $NAS_MOUNT\"; exit 1\nfi\nprintf \" %-25s %s\\n\" \"NAS mount:\" \"OK $NAS_MOUNT\"\n\n# Check if DB already synced for this date+install_id\nDB_ALREADY_SYNCED=false\nif [ -f \"$NAS_DB\" ]; then\n if table_exists \"$NAS_DB\" \"frames\"; then\n HAS_INSTALL_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';\")\n if [ \"$HAS_INSTALL_COL\" -gt \"0\" ]; then\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';\" 2>/dev/null || echo \"0\")\n else\n EXISTING=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';\" 2>/dev/null || echo \"0\")\n fi\n if [ \"$EXISTING\" -gt \"0\" ]; then\n log \"Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n else\n printf \" %-25s %s (%s)\\n\" \"Archive DB:\" \"exists\" \"$(du -sh \"$NAS_DB\" | cut -f1)\"\n fi\n else\n printf \" %-25s %s\\n\" \"Archive DB:\" \"exists, no frames table yet\"\n fi\nelse\n printf \" %-25s %s\\n\" \"Archive DB:\" \"will be created\"\nfi\n\n# Source data dir for this date (video frames)\nDATA_SRC=\"$HOME/.screenpipe/data/data/$TARGET_DATE\"\nif [ -d \"$DATA_SRC\" ]; then\n DATA_SIZE=$(du -sh \"$DATA_SRC\" | cut -f1)\n DATA_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n printf \" %-25s %s (%s files, %s)\\n\" \"Frame data dir:\" \"OK\" \"$DATA_FILES\" \"$DATA_SIZE\"\nelse\n printf \" %-25s %s\\n\" \"Frame data dir:\" \"not found — skipping\"\nfi\n\n# Audio files (flat in ~/.screenpipe/data/, dated by filename)\nshopt -s nullglob\nAUDIO_SRC_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\nif [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then\n AUDIO_TOTAL=$(du -ch \"${AUDIO_SRC_FILES[@]}\" | tail -1 | cut -f1)\n printf \" %-25s %s (%s files, %s)\\n\" \"Audio files:\" \"OK\" \"${#AUDIO_SRC_FILES[@]}\" \"$AUDIO_TOTAL\"\nelse\n printf \" %-25s %s\\n\" \"Audio files:\" \"none for this date\"\nfi\n\n# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────\n# Adds install_id column to existing NAS tables, backfills NULLs with a\n# legacy tag, and creates the (install_id, id) unique index. Idempotent.\nif [ -f \"$NAS_DB\" ]; then\n step \"Schema migration: install_id\"\n LEGACY_TAG=\"legacy-$(date +%Y%m%d)\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n if ! table_exists \"$NAS_DB\" \"$tbl\"; then\n continue\n fi\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n ROW_COUNT=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM $tbl;\")\n printf \" %-36s adding install_id, backfill %s rows → %s\\n\" \"$tbl\" \"$ROW_COUNT\" \"$LEGACY_TAG\"\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n sqlite3 \"$NAS_DB\" \"UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\nfi\n\n# ─── DB SYNC ──────────────────────────────────────────────────────────────────\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────\n step \"Counting source rows for $TARGET_DATE\"\n\n SRC_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ELEMENTS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_UI=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_OCR=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_MEETINGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';\")\n\n SRC_ACHUNKS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\")\n SRC_ATRANS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n SRC_ATAGS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');\")\n # speakers + speaker_embeddings are install-global, not per-date; we sync all.\n SRC_SPEAKERS=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speakers;\")\n SRC_SEMB=$(sqlite3 \"$DB_SRC\" \"SELECT COUNT(*) FROM speaker_embeddings;\")\n\n printf \" %-25s %s\\n\" \"frames:\" \"$SRC_FRAMES\"\n printf \" %-25s %s\\n\" \"elements:\" \"$SRC_ELEMENTS\"\n printf \" %-25s %s\\n\" \"ui_events:\" \"$SRC_UI\"\n printf \" %-25s %s\\n\" \"ocr_text:\" \"$SRC_OCR\"\n printf \" %-25s %s\\n\" \"meetings:\" \"$SRC_MEETINGS\"\n printf \" %-25s %s\\n\" \"audio_chunks:\" \"$SRC_ACHUNKS\"\n printf \" %-25s %s\\n\" \"audio_transcriptions:\" \"$SRC_ATRANS\"\n printf \" %-25s %s\\n\" \"audio_tags:\" \"$SRC_ATAGS\"\n printf \" %-25s %s (all-time)\\n\" \"speakers:\" \"$SRC_SPEAKERS\"\n printf \" %-25s %s (all-time)\\n\" \"speaker_embeddings:\" \"$SRC_SEMB\"\n\n if [ \"$SRC_FRAMES\" -eq \"0\" ] && [ \"$SRC_ACHUNKS\" -eq \"0\" ]; then\n log \"No frames or audio chunks for $TARGET_DATE — skipping DB sync\"\n DB_ALREADY_SYNCED=true\n fi\n\nfi\n\nif [ \"$DB_ALREADY_SYNCED\" = false ]; then\n\n # ─── INIT TABLES ──────────────────────────────────────────────────────────\n step \"Initialising tables (CREATE IF NOT EXISTS)\"\n\n run_sqlite_heredoc \"creating vision tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating audio tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;\nCREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;\nDETACH nas;\n\"\n\n # Re-run install_id + index setup so freshly-created tables get them too.\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n HAS_COL=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';\")\n if [ \"$HAS_COL\" = \"0\" ]; then\n sqlite3 \"$NAS_DB\" \"ALTER TABLE $tbl ADD COLUMN install_id TEXT;\"\n fi\n sqlite3 \"$NAS_DB\" \"CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);\"\n done\n\n # ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────\n step \"Reconciling NAS schema with source\"\n for tbl in \"${ALL_SYNC_TABLES[@]}\"; do\n ensure_columns \"$tbl\"\n done\n\n run_sqlite_heredoc \"creating indexes\" \"\nATTACH '$NAS_DB' AS nas;\n-- vision\nCREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);\n-- audio\nCREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);\nCREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);\nCREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"creating FTS tables\" \"\nATTACH '$NAS_DB' AS nas;\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(\n text, role, frame_id UNINDEXED,\n content='elements', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(\n full_text, app_name, window_name, browser_url, id UNINDEXED,\n tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(\n text_content, app_name, window_title, element_name,\n content='ui_events', content_rowid='id', tokenize='unicode61'\n);\nCREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(\n transcription, device, speaker_id UNINDEXED, id UNINDEXED,\n tokenize='unicode61'\n);\nDETACH nas;\n\"\n\n # ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────\n # Source columns + install_id appended. Same on both sides of the INSERT.\n FRAMES_COLS=$(build_col_list frames)\n ELEMENTS_COLS=$(build_col_list elements)\n ELEMENTS_COLS_E=$(build_col_list elements e)\n UI_EVENTS_COLS=$(build_col_list ui_events)\n OCR_TEXT_COLS=$(build_col_list ocr_text)\n OCR_TEXT_COLS_O=$(build_col_list ocr_text o)\n VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)\n MEETINGS_COLS=$(build_col_list meetings)\n ACHUNKS_COLS=$(build_col_list audio_chunks)\n ATRANS_COLS=$(build_col_list audio_transcriptions)\n ATRANS_COLS_T=$(build_col_list audio_transcriptions t)\n SPEAKERS_COLS=$(build_col_list speakers)\n SEMB_COLS=$(build_col_list speaker_embeddings)\n ATAGS_COLS=$(build_col_list audio_tags)\n ATAGS_COLS_AT=$(build_col_list audio_tags at)\n\n # ─── SYNC VISION DATA ─────────────────────────────────────────────────────\n step \"Syncing vision data for $TARGET_DATE\"\n\n run_sqlite_heredoc \"video_chunks\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)\n SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks\n WHERE id IN (\n SELECT DISTINCT video_chunk_id FROM main.frames\n WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL\n );\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames ($SRC_FRAMES rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)\n SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ocr_text ($SRC_OCR rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)\n SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o\n JOIN main.frames f ON o.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events ($SRC_UI rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)\n SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"elements ($SRC_ELEMENTS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)\n SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e\n JOIN main.frames f ON e.frame_id = f.id\n WHERE date(f.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"meetings ($SRC_MEETINGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)\n SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────\n step \"Syncing audio data for $TARGET_DATE\"\n\n # Speakers + embeddings are install-global, not per-date. Sync everything\n # the source currently has; INSERT OR IGNORE handles the duplicate case.\n run_sqlite_heredoc \"speakers ($SRC_SPEAKERS rows, all-time)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)\n SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"speaker_embeddings ($SRC_SEMB rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)\n SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_chunks ($SRC_ACHUNKS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)\n SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions ($SRC_ATRANS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)\n SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t\n JOIN main.audio_chunks c ON t.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_tags ($SRC_ATAGS rows)\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)\n SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at\n JOIN main.audio_chunks c ON at.audio_chunk_id = c.id\n WHERE date(c.timestamp) = '$TARGET_DATE';\nDETACH nas;\n\"\n\n # ─── FTS UPDATE ───────────────────────────────────────────────────────────\n step \"Updating FTS indexes\"\n\n run_sqlite_heredoc \"elements_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)\n SELECT e.id, e.text, e.role\n FROM nas.elements e\n JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id\n WHERE date(f.timestamp) = '$TARGET_DATE'\n AND e.install_id = '$INSTALL_ID'\n AND e.text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"frames_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)\n SELECT id, full_text, app_name, window_name, browser_url, id\n FROM nas.frames\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND full_text IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"ui_events_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n SELECT id, text_content, app_name, window_title, element_name\n FROM nas.ui_events\n WHERE date(timestamp) = '$TARGET_DATE'\n AND install_id = '$INSTALL_ID'\n AND text_content IS NOT NULL;\nDETACH nas;\n\"\n\n run_sqlite_heredoc \"audio_transcriptions_fts\" \"\nATTACH '$NAS_DB' AS nas;\nINSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)\n SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id\n FROM nas.audio_transcriptions t\n JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id\n WHERE date(c.timestamp) = '$TARGET_DATE'\n AND t.install_id = '$INSTALL_ID'\n AND t.transcription IS NOT NULL AND t.transcription != '';\nDETACH nas;\n\"\n\n # ─── VERIFY ───────────────────────────────────────────────────────────────\n step \"Verifying DB\"\n\n V_FRAMES=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ELEMENTS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_UI=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_OCR=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_MEETINGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ACHUNKS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';\")\n V_ATRANS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n V_ATAGS=$(sqlite3 \"$NAS_DB\" \"SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');\")\n\n check \"frames\" \"$V_FRAMES\" \"$SRC_FRAMES\"\n check \"elements\" \"$V_ELEMENTS\" \"$SRC_ELEMENTS\"\n check \"ui_events\" \"$V_UI\" \"$SRC_UI\"\n check \"ocr_text\" \"$V_OCR\" \"$SRC_OCR\"\n check \"meetings\" \"$V_MEETINGS\" \"$SRC_MEETINGS\"\n check \"audio_chunks\" \"$V_ACHUNKS\" \"$SRC_ACHUNKS\"\n check \"audio_transcriptions\" \"$V_ATRANS\" \"$SRC_ATRANS\"\n check \"audio_tags\" \"$V_ATAGS\" \"$SRC_ATAGS\"\n\nfi\n\n# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────\n# Always runs regardless of DB sync status.\nstep \"Copying frame data folder for $TARGET_DATE\"\n\nif [ -d \"$DATA_SRC\" ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync frames → NAS\"\n rsync -a --ignore-existing \"$DATA_SRC/\" \"$NAS_DATA/$TARGET_DATE/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_FILES=$(ls \"$NAS_DATA/$TARGET_DATE\" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')\n SRC_FILES=$(ls \"$DATA_SRC\" | wc -l | tr -d ' ')\n COPIED_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE\" | cut -f1)\n if [ \"$COPIED_FILES\" -ge \"$SRC_FILES\" ]; then\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync frames → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_FILES\" \"$COPIED_SIZE\" | tee -a \"$LOG_FILE\"\n else\n printf \"\\r %-36s ✗ %s / %s files\\n\" \\\n \"rsync frames → NAS\" \"$COPIED_FILES\" \"$SRC_FILES\" | tee -a \"$LOG_FILE\"\n fi\nelse\n printf \" %-36s %s\\n\" \"rsync frames → NAS\" \"skipped (no source dir)\"\nfi\n\n# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────\n# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.\n# System Audio (output)_2026-05-11_13-48-12.mp4\n# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4\n# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.\nstep \"Copying audio files for $TARGET_DATE\"\n\nshopt -s nullglob\nAUDIO_FILES=( \"$HOME/.screenpipe/data/\"*_\"${TARGET_DATE}\"_*.mp4 )\nshopt -u nullglob\n\nif [ ${#AUDIO_FILES[@]} -gt 0 ]; then\n mkdir -p \"$NAS_DATA/$TARGET_DATE/audio\"\n RSYNC_START=$(date +%s)\n printf \" %-36s \" \"rsync audio → NAS\"\n rsync -a --ignore-existing \"${AUDIO_FILES[@]}\" \"$NAS_DATA/$TARGET_DATE/audio/\" 2>>\"$LOG_FILE\"\n RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))\n COPIED_AUDIO=$(ls \"$NAS_DATA/$TARGET_DATE/audio\" | wc -l | tr -d ' ')\n AUDIO_SIZE=$(du -sh \"$NAS_DATA/$TARGET_DATE/audio\" | cut -f1)\n printf \"\\r %-36s ✓ %dm%02ds (%s files, %s)\\n\" \\\n \"rsync audio → NAS\" \\\n \"$(( RSYNC_DUR / 60 ))\" \"$(( RSYNC_DUR % 60 ))\" \\\n \"$COPIED_AUDIO\" \"$AUDIO_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync audio → NAS\" \"skipped (no audio for date)\"\nfi\n\n# ─── COPY LOGS ────────────────────────────────────────────────────────────────\nstep \"Copying screenpipe logs for $TARGET_DATE\"\n\nNAS_LOGS=\"$NAS_MOUNT/logs\"\nmkdir -p \"$NAS_LOGS\"\n\nshopt -s nullglob\nLOG_FILES=( \"$HOME/.screenpipe/screenpipe.$TARGET_DATE.\"*.log )\nshopt -u nullglob\n\nif [ ${#LOG_FILES[@]} -gt 0 ]; then\n printf \" %-36s \" \"rsync logs → NAS\"\n rsync -a \"${LOG_FILES[@]}\" \"$NAS_LOGS/\" 2>>\"$LOG_FILE\"\n TOTAL_SIZE=$(du -ch \"${LOG_FILES[@]}\" | tail -1 | cut -f1)\n printf \"✓ %d file(s), %s\\n\" \"${#LOG_FILES[@]}\" \"$TOTAL_SIZE\" | tee -a \"$LOG_FILE\"\nelse\n printf \" %-36s %s\\n\" \"rsync logs → NAS\" \"skipped (no matching logs)\"\nfi\n\n# ─── SUMMARY ──────────────────────────────────────────────────────────────────\nTOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))\nDB_SIZE=$(du -sh \"$NAS_DB\" | cut -f1)\n\necho \"\"\nlog \"Archive DB size: $DB_SIZE\"\nlog \"Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s\"\nlog \"Sync complete for $TARGET_DATE (install $INSTALL_ID)\"\nlog \"========================================\"\n\nrsync -a \"$HOME/.screenpipe/sync.log\" \"$NAS_LOGS/sync.log\" 2>/dev/null || true","depth":29,"bounds":{"left":0.13796543,"top":0.584996,"width":0.42021278,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Implement and run pipe l…","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
7205849880262819220
|
8950930160388362005
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
#recycle
app
data
logs
pipes
.gitignore
app_settings.json
archive.db
archive.db-bak
db.sqlite
db.sqlite-shm
db.sqlite-wal
screenpipe_sync_updated.sh
screenpipe_sync.sh
screenpipe.db
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json, Editor Group 1
screenpipe_sync.sh, Editor Group 1
screenpipe_sync_updated.sh, preview, Editor Group 1
pipe.md, Editor Group 1
.env, Editor Group 1
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_src_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_onscreen_frame ON elements(frame_id) WHERE on_screen = 1 AND text IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_meetings_start ON meetings(meeting_start);
CREATE INDEX IF NOT EXISTS nas.idx_video_chunks_device ON video_chunks(device_name);
-- audio
CREATE INDEX IF NOT EXISTS nas.idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_audio_trans_speaker ON audio_transcriptions(speaker_id, timestamp DESC);
CREATE INDEX IF NOT EXISTS nas.idx_speaker_emb_speaker_id ON speaker_embeddings(speaker_id);
CREATE INDEX IF NOT EXISTS nas.idx_audio_tags_chunk_id ON audio_tags(audio_chunk_id);
DETACH nas;
"
run_sqlite_heredoc "creating FTS tables" "
ATTACH '$NAS_DB' AS nas;
CREATE VIRTUAL TABLE IF NOT EXISTS nas.elements_fts USING fts5(
text, role, frame_id UNINDEXED,
content='elements', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.frames_fts USING fts5(
full_text, app_name, window_name, browser_url, id UNINDEXED,
tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.ui_events_fts USING fts5(
text_content, app_name, window_title, element_name,
content='ui_events', content_rowid='id', tokenize='unicode61'
);
CREATE VIRTUAL TABLE IF NOT EXISTS nas.audio_transcriptions_fts USING fts5(
transcription, device, speaker_id UNINDEXED, id UNINDEXED,
tokenize='unicode61'
);
DETACH nas;
"
# ─── BUILD EXPLICIT COLUMN LISTS ──────────────────────────────────────────
# Source columns + install_id appended. Same on both sides of the INSERT.
FRAMES_COLS=$(build_col_list frames)
ELEMENTS_COLS=$(build_col_list elements)
ELEMENTS_COLS_E=$(build_col_list elements e)
UI_EVENTS_COLS=$(build_col_list ui_events)
OCR_TEXT_COLS=$(build_col_list ocr_text)
OCR_TEXT_COLS_O=$(build_col_list ocr_text o)
VIDEO_CHUNKS_COLS=$(build_col_list video_chunks)
MEETINGS_COLS=$(build_col_list meetings)
ACHUNKS_COLS=$(build_col_list audio_chunks)
ATRANS_COLS=$(build_col_list audio_transcriptions)
ATRANS_COLS_T=$(build_col_list audio_transcriptions t)
SPEAKERS_COLS=$(build_col_list speakers)
SEMB_COLS=$(build_col_list speaker_embeddings)
ATAGS_COLS=$(build_col_list audio_tags)
ATAGS_COLS_AT=$(build_col_list audio_tags at)
# ─── SYNC VISION DATA ─────────────────────────────────────────────────────
step "Syncing vision data for $TARGET_DATE"
run_sqlite_heredoc "video_chunks" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.video_chunks ($VIDEO_CHUNKS_COLS, install_id)
SELECT $VIDEO_CHUNKS_COLS, '$INSTALL_ID' FROM main.video_chunks
WHERE id IN (
SELECT DISTINCT video_chunk_id FROM main.frames
WHERE date(timestamp) = '$TARGET_DATE' AND video_chunk_id IS NOT NULL
);
DETACH nas;
"
run_sqlite_heredoc "frames ($SRC_FRAMES rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames ($FRAMES_COLS, install_id)
SELECT $FRAMES_COLS, '$INSTALL_ID' FROM main.frames WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ocr_text ($SRC_OCR rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ocr_text ($OCR_TEXT_COLS, install_id)
SELECT $OCR_TEXT_COLS_O, '$INSTALL_ID' FROM main.ocr_text o
JOIN main.frames f ON o.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "ui_events ($SRC_UI rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events ($UI_EVENTS_COLS, install_id)
SELECT $UI_EVENTS_COLS, '$INSTALL_ID' FROM main.ui_events WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "elements ($SRC_ELEMENTS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements ($ELEMENTS_COLS, install_id)
SELECT $ELEMENTS_COLS_E, '$INSTALL_ID' FROM main.elements e
JOIN main.frames f ON e.frame_id = f.id
WHERE date(f.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "meetings ($SRC_MEETINGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.meetings ($MEETINGS_COLS, install_id)
SELECT $MEETINGS_COLS, '$INSTALL_ID' FROM main.meetings WHERE date(meeting_start) = '$TARGET_DATE';
DETACH nas;
"
# ─── SYNC AUDIO DATA ──────────────────────────────────────────────────────
step "Syncing audio data for $TARGET_DATE"
# Speakers + embeddings are install-global, not per-date. Sync everything
# the source currently has; INSERT OR IGNORE handles the duplicate case.
run_sqlite_heredoc "speakers ($SRC_SPEAKERS rows, all-time)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speakers ($SPEAKERS_COLS, install_id)
SELECT $SPEAKERS_COLS, '$INSTALL_ID' FROM main.speakers;
DETACH nas;
"
run_sqlite_heredoc "speaker_embeddings ($SRC_SEMB rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.speaker_embeddings ($SEMB_COLS, install_id)
SELECT $SEMB_COLS, '$INSTALL_ID' FROM main.speaker_embeddings;
DETACH nas;
"
run_sqlite_heredoc "audio_chunks ($SRC_ACHUNKS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_chunks ($ACHUNKS_COLS, install_id)
SELECT $ACHUNKS_COLS, '$INSTALL_ID' FROM main.audio_chunks WHERE date(timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions ($SRC_ATRANS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions ($ATRANS_COLS, install_id)
SELECT $ATRANS_COLS_T, '$INSTALL_ID' FROM main.audio_transcriptions t
JOIN main.audio_chunks c ON t.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
run_sqlite_heredoc "audio_tags ($SRC_ATAGS rows)" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_tags ($ATAGS_COLS, install_id)
SELECT $ATAGS_COLS_AT, '$INSTALL_ID' FROM main.audio_tags at
JOIN main.audio_chunks c ON at.audio_chunk_id = c.id
WHERE date(c.timestamp) = '$TARGET_DATE';
DETACH nas;
"
# ─── FTS UPDATE ───────────────────────────────────────────────────────────
step "Updating FTS indexes"
run_sqlite_heredoc "elements_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.elements_fts(rowid, text, role)
SELECT e.id, e.text, e.role
FROM nas.elements e
JOIN nas.frames f ON e.frame_id = f.id AND e.install_id = f.install_id
WHERE date(f.timestamp) = '$TARGET_DATE'
AND e.install_id = '$INSTALL_ID'
AND e.text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "frames_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.frames_fts(rowid, full_text, app_name, window_name, browser_url, id)
SELECT id, full_text, app_name, window_name, browser_url, id
FROM nas.frames
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND full_text IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "ui_events_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.ui_events_fts(rowid, text_content, app_name, window_title, element_name)
SELECT id, text_content, app_name, window_title, element_name
FROM nas.ui_events
WHERE date(timestamp) = '$TARGET_DATE'
AND install_id = '$INSTALL_ID'
AND text_content IS NOT NULL;
DETACH nas;
"
run_sqlite_heredoc "audio_transcriptions_fts" "
ATTACH '$NAS_DB' AS nas;
INSERT OR IGNORE INTO nas.audio_transcriptions_fts(rowid, transcription, device, speaker_id, id)
SELECT t.id, t.transcription, COALESCE(t.device,''), t.speaker_id, t.id
FROM nas.audio_transcriptions t
JOIN nas.audio_chunks c ON t.audio_chunk_id = c.id AND t.install_id = c.install_id
WHERE date(c.timestamp) = '$TARGET_DATE'
AND t.install_id = '$INSTALL_ID'
AND t.transcription IS NOT NULL AND t.transcription != '';
DETACH nas;
"
# ─── VERIFY ───────────────────────────────────────────────────────────────
step "Verifying DB"
V_FRAMES=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ELEMENTS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM elements WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_UI=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_OCR=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM ocr_text WHERE install_id='$INSTALL_ID' AND frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_MEETINGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ACHUNKS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID';")
V_ATRANS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_transcriptions WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
V_ATAGS=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM audio_tags WHERE install_id='$INSTALL_ID' AND audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE' AND install_id='$INSTALL_ID');")
check "frames" "$V_FRAMES" "$SRC_FRAMES"
check "elements" "$V_ELEMENTS" "$SRC_ELEMENTS"
check "ui_events" "$V_UI" "$SRC_UI"
check "ocr_text" "$V_OCR" "$SRC_OCR"
check "meetings" "$V_MEETINGS" "$SRC_MEETINGS"
check "audio_chunks" "$V_ACHUNKS" "$SRC_ACHUNKS"
check "audio_transcriptions" "$V_ATRANS" "$SRC_ATRANS"
check "audio_tags" "$V_ATAGS" "$SRC_ATAGS"
fi
# ─── COPY FRAME DATA FOLDER ──────────────────────────────────────────────────
# Always runs regardless of DB sync status.
step "Copying frame data folder for $TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync frames → NAS"
rsync -a --ignore-existing "$DATA_SRC/" "$NAS_DATA/$TARGET_DATE/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_FILES=$(ls "$NAS_DATA/$TARGET_DATE" 2>/dev/null | grep -v '^audio$' | wc -l | tr -d ' ')
SRC_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
COPIED_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE" | cut -f1)
if [ "$COPIED_FILES" -ge "$SRC_FILES" ]; then
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync frames → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_FILES" "$COPIED_SIZE" | tee -a "$LOG_FILE"
else
printf "\r %-36s ✗ %s / %s files\n" \
"rsync frames → NAS" "$COPIED_FILES" "$SRC_FILES" | tee -a "$LOG_FILE"
fi
else
printf " %-36s %s\n" "rsync frames → NAS" "skipped (no source dir)"
fi
# ─── COPY AUDIO FILES ────────────────────────────────────────────────────────
# Audio is flat in ~/.screenpipe/data/ with the date in the filename, e.g.
# System Audio (output)_2026-05-11_13-48-12.mp4
# soundcore AeroClip (input)_2026-05-10_11-10-32.mp4
# Mirrored to $NAS_DATA/<date>/audio/ so each day's archive is self-contained.
step "Copying audio files for $TARGET_DATE"
shopt -s nullglob
AUDIO_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_FILES[@]} -gt 0 ]; then
mkdir -p "$NAS_DATA/$TARGET_DATE/audio"
RSYNC_START=$(date +%s)
printf " %-36s " "rsync audio → NAS"
rsync -a --ignore-existing "${AUDIO_FILES[@]}" "$NAS_DATA/$TARGET_DATE/audio/" 2>>"$LOG_FILE"
RSYNC_DUR=$(( $(date +%s) - RSYNC_START ))
COPIED_AUDIO=$(ls "$NAS_DATA/$TARGET_DATE/audio" | wc -l | tr -d ' ')
AUDIO_SIZE=$(du -sh "$NAS_DATA/$TARGET_DATE/audio" | cut -f1)
printf "\r %-36s ✓ %dm%02ds (%s files, %s)\n" \
"rsync audio → NAS" \
"$(( RSYNC_DUR / 60 ))" "$(( RSYNC_DUR % 60 ))" \
"$COPIED_AUDIO" "$AUDIO_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync audio → NAS" "skipped (no audio for date)"
fi
# ─── COPY LOGS ────────────────────────────────────────────────────────────────
step "Copying screenpipe logs for $TARGET_DATE"
NAS_LOGS="$NAS_MOUNT/logs"
mkdir -p "$NAS_LOGS"
shopt -s nullglob
LOG_FILES=( "$HOME/.screenpipe/screenpipe.$TARGET_DATE."*.log )
shopt -u nullglob
if [ ${#LOG_FILES[@]} -gt 0 ]; then
printf " %-36s " "rsync logs → NAS"
rsync -a "${LOG_FILES[@]}" "$NAS_LOGS/" 2>>"$LOG_FILE"
TOTAL_SIZE=$(du -ch "${LOG_FILES[@]}" | tail -1 | cut -f1)
printf "✓ %d file(s), %s\n" "${#LOG_FILES[@]}" "$TOTAL_SIZE" | tee -a "$LOG_FILE"
else
printf " %-36s %s\n" "rsync logs → NAS" "skipped (no matching logs)"
fi
# ─── SUMMARY ──────────────────────────────────────────────────────────────────
TOTAL_ELAPSED=$(( $(date +%s) - SCRIPT_START ))
DB_SIZE=$(du -sh "$NAS_DB" | cut -f1)
echo ""
log "Archive DB size: $DB_SIZE"
log "Total time: $(( TOTAL_ELAPSED / 60 ))m$(( TOTAL_ELAPSED % 60 ))s"
log "Sync complete for $TARGET_DATE (install $INSTALL_ID)"
log "========================================"
rsync -a "$HOME/.screenpipe/sync.log" "$NAS_LOGS/sync.log" 2>/dev/null || true
#!/bin/bash
# screenpipe_sync.sh
# Syncs Screenpipe SQLite data (vision + audio) to a NAS archive database.
# Append-only, no deletions.
#
# Key design points
# -----------------
# 1. Multi-install safe via install_id.
# Source IDs reset to 1 on every screenpipe reinstall. To avoid collisions
# in the NAS archive, every synced table gets an extra `install_id` column,
# and the logical primary key becomes (install_id, id) enforced by a
# unique index. The install_id is a UUID stored in
# ~/.screenpipe/.sync_install_id — wiping ~/.screenpipe/ (which is what
# happens on reinstall) discards it, so the next run generates a new one.
#
# 2. Schema-drift tolerant. If screenpipe migrations add new columns to the
# source DB, the NAS gets ALTER TABLE'd to match. Inserts use explicit
# column lists so positional mismatches can't occur.
#
# 3. FTS caveat. FTS tables in the NAS use source `id` as rowid. After a
# reinstall, INSERT OR IGNORE will silently skip rows whose id collides
# with a previous install's id, so FTS only reliably indexes the most
# recent install. Falls back to LIKE queries on the base tables for
# multi-install searches (which can filter by install_id).
#
# Usage
# -----
# ./screenpipe_sync.sh # syncs yesterday
# ./screenpipe_sync.sh 2026-04-15 # syncs a specific date
# ./screenpipe_sync.sh today # syncs today so far
# ./screenpipe_sync.sh --reset-install-id # rotate install_id and exit
# ./screenpipe_sync.sh --show-install-id # print install_id and exit
set -euo pipefail
# ─── CONFIG ───────────────────────────────────────────────────────────────────
DB_SRC="${SCREENPIPE_DB:-$HOME/.screenpipe/db.sqlite}"
NAS_MOUNT="${NAS_MOUNT:-/Volumes/screenpipe}"
NAS_DB="$NAS_MOUNT/archive.db"
NAS_DATA="$NAS_MOUNT/data"
LOG_FILE="$HOME/.screenpipe/sync.log"
INSTALL_ID_FILE="$HOME/.screenpipe/.sync_install_id"
# Sync table groups. Order matters for FK-ish references
# (parents before children).
VISION_TABLES=(video_chunks frames elements ocr_text ui_events meetings)
AUDIO_TABLES=(speakers speaker_embeddings audio_chunks audio_transcriptions audio_tags)
ALL_SYNC_TABLES=("${VISION_TABLES[@]}" "${AUDIO_TABLES[@]}")
# ──────────────────────────────────────────────────────────────────────────────
SCRIPT_START=$(date +%s)
# ─── HELPERS ──────────────────────────────────────────────────────────────────
log() {
local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
echo "$msg" | tee -a "$LOG_FILE"
}
step() {
local now=$(date +%s)
local elapsed=$(( now - SCRIPT_START ))
local min=$(( elapsed / 60 ))
local sec=$(( elapsed % 60 ))
printf "\n[+%02dm%02ds] ▶ %s\n" "$min" "$sec" "$*" | tee -a "$LOG_FILE"
}
run_sqlite_heredoc() {
local label="$1"
local sql="$2"
local start=$(date +%s)
printf " %-36s " "$label"
sqlite3 "$DB_SRC" <<< "$sql" &
local pid=$!
local spin=[PASSWORD] '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
local i=0
while kill -0 "$pid" 2>/dev/null; do
printf "\r %-36s %s " "$label" "${spin[$i]}"
i=$(( (i + 1) % 10 ))
sleep 0.2
done
wait "$pid"
local rc=$?
if [ $rc -ne 0 ]; then
printf "\r %-36s ✗ FAILED\n" "$label" | tee -a "$LOG_FILE"
exit $rc
fi
local dur=$(( $(date +%s) - start ))
printf "\r %-36s ✓ %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"
}
check() {
local label="$1" got="$2" expected="$3"
if [ "$got" -eq "$expected" ]; then
printf " %-25s %s / %s ✓\n" "$label:" "$got" "$expected"
else
printf " %-25s %s / %s ✗ MISMATCH\n" "$label:" "$got" "$expected"
fi
}
table_columns_with_types() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2 "|" $3}'
}
table_columns() {
local db="$1" table="$2"
sqlite3 "$db" "PRAGMA table_info($table);" | awk -F'|' '{print $2}'
}
table_exists() {
local db="$1" table="$2"
local count
count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$table';")
[ "$count" -gt 0 ]
}
# Adds any columns present in source but missing in NAS for the given table.
# Skips install_id (which is NAS-only and managed separately).
ensure_columns() {
local table="$1"
local label="schema: $table"
printf " %-36s " "$label"
if ! table_exists "$DB_SRC" "$table"; then
printf "✗ source missing — skipping\n"
return 0
fi
if ! table_exists "$NAS_DB" "$table"; then
printf "✓ fresh (created above)\n"
return 0
fi
local src_cols
src_cols=$(table_columns_with_types "$DB_SRC" "$table")
local nas_cols
nas_cols=$(table_columns "$NAS_DB" "$table")
local added=0
local added_names=""
while IFS='|' read -r name type; do
[ -z "$name" ] && continue
if ! echo "$nas_cols" | grep -Fxq "$name"; then
sqlite3 "$NAS_DB" "ALTER TABLE $table ADD COLUMN \"$name\" $type;"
added=$((added + 1))
added_names="$added_names $name"
fi
done <<< "$src_cols"
if [ "$added" -gt 0 ]; then
printf "✓ added %d:%s\n" "$added" "$added_names"
else
printf "✓ in sync\n"
fi
}
# Comma-separated, double-quoted column list for a table from source DB.
# Optional alias is prefixed (e.g. `o."col"`) for JOIN selects where column
# names would otherwise collide.
build_col_list() {
local table="$1"
local alias="${2:-}"
local prefix=""
[ -n "$alias" ] && prefix="${alias}."
table_columns "$DB_SRC" "$table" | awk 'NF' | awk -v p="$prefix" '{print p "\"" $0 "\""}' | paste -sd, -
}
# ──────────────────────────────────────────────────────────────────────────────
# ─── ARG HANDLING ─────────────────────────────────────────────────────────────
if [ "${1:-}" = "--reset-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
OLD=$(cat "$INSTALL_ID_FILE")
rm -f "$INSTALL_ID_FILE"
echo "Removed install_id: $OLD"
else
echo "No install_id file at $INSTALL_ID_FILE"
fi
echo "A new install_id will be generated on the next sync run."
exit 0
fi
if [ "${1:-}" = "--show-install-id" ]; then
if [ -f "$INSTALL_ID_FILE" ]; then
cat "$INSTALL_ID_FILE"
else
echo "(none — will be generated on next run)"
fi
exit 0
fi
if [ "${1:-}" = "today" ]; then
TARGET_DATE=$(date +%Y-%m-%d)
elif [ -n "${1:-}" ]; then
TARGET_DATE="$1"
if ! [[ "$TARGET_DATE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "ERROR: Invalid date. Use YYYY-MM-DD, 'today', or no argument for yesterday."
exit 1
fi
else
TARGET_DATE=$(date -v-1d +%Y-%m-%d)
fi
# ─── INSTALL ID ───────────────────────────────────────────────────────────────
INSTALL_ID=""
if [ -f "$INSTALL_ID_FILE" ]; then
INSTALL_ID=$(tr -d '[:space:]' < "$INSTALL_ID_FILE")
fi
if [ -z "$INSTALL_ID" ]; then
INSTALL_ID=$(uuidgen | tr 'A-Z' 'a-z')
echo "$INSTALL_ID" > "$INSTALL_ID_FILE"
log "Generated new install_id: $INSTALL_ID"
fi
log "========================================"
log "Screenpipe sync starting for: $TARGET_DATE"
log "install_id: $INSTALL_ID"
log "========================================"
# ─── PREFLIGHT ────────────────────────────────────────────────────────────────
step "Preflight checks"
if [ ! -f "$DB_SRC" ]; then
log "ERROR: Source DB not found at $DB_SRC"; exit 1
fi
printf " %-25s %s (%s)\n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"
if [ ! -d "$NAS_MOUNT" ]; then
log "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1
fi
printf " %-25s %s\n" "NAS mount:" "OK $NAS_MOUNT"
# Check if DB already synced for this date+install_id
DB_ALREADY_SYNCED=false
if [ -f "$NAS_DB" ]; then
if table_exists "$NAS_DB" "frames"; then
HAS_INSTALL_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('frames') WHERE name='install_id';")
if [ "$HAS_INSTALL_COL" -gt "0" ]; then
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE' AND install_id='$INSTALL_ID';" 2>/dev/null || echo "0")
else
EXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp)='$TARGET_DATE';" 2>/dev/null || echo "0")
fi
if [ "$EXISTING" -gt "0" ]; then
log "Date $TARGET_DATE / install $INSTALL_ID already has $EXISTING frames — skipping DB sync"
DB_ALREADY_SYNCED=true
else
printf " %-25s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"
fi
else
printf " %-25s %s\n" "Archive DB:" "exists, no frames table yet"
fi
else
printf " %-25s %s\n" "Archive DB:" "will be created"
fi
# Source data dir for this date (video frames)
DATA_SRC="$HOME/.screenpipe/data/data/$TARGET_DATE"
if [ -d "$DATA_SRC" ]; then
DATA_SIZE=$(du -sh "$DATA_SRC" | cut -f1)
DATA_FILES=$(ls "$DATA_SRC" | wc -l | tr -d ' ')
printf " %-25s %s (%s files, %s)\n" "Frame data dir:" "OK" "$DATA_FILES" "$DATA_SIZE"
else
printf " %-25s %s\n" "Frame data dir:" "not found — skipping"
fi
# Audio files (flat in ~/.screenpipe/data/, dated by filename)
shopt -s nullglob
AUDIO_SRC_FILES=( "$HOME/.screenpipe/data/"*_"${TARGET_DATE}"_*.mp4 )
shopt -u nullglob
if [ ${#AUDIO_SRC_FILES[@]} -gt 0 ]; then
AUDIO_TOTAL=$(du -ch "${AUDIO_SRC_FILES[@]}" | tail -1 | cut -f1)
printf " %-25s %s (%s files, %s)\n" "Audio files:" "OK" "${#AUDIO_SRC_FILES[@]}" "$AUDIO_TOTAL"
else
printf " %-25s %s\n" "Audio files:" "none for this date"
fi
# ─── SCHEMA MIGRATION: install_id ─────────────────────────────────────────────
# Adds install_id column to existing NAS tables, backfills NULLs with a
# legacy tag, and creates the (install_id, id) unique index. Idempotent.
if [ -f "$NAS_DB" ]; then
step "Schema migration: install_id"
LEGACY_TAG="legacy-$(date +%Y%m%d)"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
if ! table_exists "$NAS_DB" "$tbl"; then
continue
fi
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
ROW_COUNT=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM $tbl;")
printf " %-36s adding install_id, backfill %s rows → %s\n" "$tbl" "$ROW_COUNT" "$LEGACY_TAG"
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
sqlite3 "$NAS_DB" "UPDATE $tbl SET install_id = '$LEGACY_TAG' WHERE install_id IS NULL;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
fi
# ─── DB SYNC ──────────────────────────────────────────────────────────────────
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── COUNT SOURCE ROWS ────────────────────────────────────────────────────
step "Counting source rows for $TARGET_DATE"
SRC_FRAMES=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ELEMENTS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_UI=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '$TARGET_DATE';")
SRC_OCR=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM ocr_text WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '$TARGET_DATE');")
SRC_MEETINGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM meetings WHERE date(meeting_start) = '$TARGET_DATE';")
SRC_ACHUNKS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE';")
SRC_ATRANS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_transcriptions WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
SRC_ATAGS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM audio_tags WHERE audio_chunk_id IN (SELECT id FROM audio_chunks WHERE date(timestamp) = '$TARGET_DATE');")
# speakers + speaker_embeddings are install-global, not per-date; we sync all.
SRC_SPEAKERS=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speakers;")
SRC_SEMB=$(sqlite3 "$DB_SRC" "SELECT COUNT(*) FROM speaker_embeddings;")
printf " %-25s %s\n" "frames:" "$SRC_FRAMES"
printf " %-25s %s\n" "elements:" "$SRC_ELEMENTS"
printf " %-25s %s\n" "ui_events:" "$SRC_UI"
printf " %-25s %s\n" "ocr_text:" "$SRC_OCR"
printf " %-25s %s\n" "meetings:" "$SRC_MEETINGS"
printf " %-25s %s\n" "audio_chunks:" "$SRC_ACHUNKS"
printf " %-25s %s\n" "audio_transcriptions:" "$SRC_ATRANS"
printf " %-25s %s\n" "audio_tags:" "$SRC_ATAGS"
printf " %-25s %s (all-time)\n" "speakers:" "$SRC_SPEAKERS"
printf " %-25s %s (all-time)\n" "speaker_embeddings:" "$SRC_SEMB"
if [ "$SRC_FRAMES" -eq "0" ] && [ "$SRC_ACHUNKS" -eq "0" ]; then
log "No frames or audio chunks for $TARGET_DATE — skipping DB sync"
DB_ALREADY_SYNCED=true
fi
fi
if [ "$DB_ALREADY_SYNCED" = false ]; then
# ─── INIT TABLES ──────────────────────────────────────────────────────────
step "Initialising tables (CREATE IF NOT EXISTS)"
run_sqlite_heredoc "creating vision tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames WHERE 0;
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events WHERE 0;
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text WHERE 0;
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings WHERE 0;
DETACH nas;
"
run_sqlite_heredoc "creating audio tables" "
ATTACH '$NAS_DB' AS nas;
CREATE TABLE IF NOT EXISTS nas.audio_chunks AS SELECT * FROM main.audio_chunks WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_transcriptions AS SELECT * FROM main.audio_transcriptions WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speakers AS SELECT * FROM main.speakers WHERE 0;
CREATE TABLE IF NOT EXISTS nas.speaker_embeddings AS SELECT * FROM main.speaker_embeddings WHERE 0;
CREATE TABLE IF NOT EXISTS nas.audio_tags AS SELECT * FROM main.audio_tags WHERE 0;
DETACH nas;
"
# Re-run install_id + index setup so freshly-created tables get them too.
for tbl in "${ALL_SYNC_TABLES[@]}"; do
HAS_COL=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM pragma_table_info('$tbl') WHERE name='install_id';")
if [ "$HAS_COL" = "0" ]; then
sqlite3 "$NAS_DB" "ALTER TABLE $tbl ADD COLUMN install_id TEXT;"
fi
sqlite3 "$NAS_DB" "CREATE UNIQUE INDEX IF NOT EXISTS idx_${tbl}_install_pk ON ${tbl}(install_id, id);"
done
# ─── SCHEMA DRIFT ─────────────────────────────────────────────────────────
step "Reconciling NAS schema with source"
for tbl in "${ALL_SYNC_TABLES[@]}"; do
ensure_columns "$tbl"
done
run_sqlite_heredoc "creating indexes" "
ATTACH '$NAS_DB' AS nas;
-- vision
CREATE INDEX IF NOT EXISTS nas.idx_frames_timestamp ON frames(timestamp);
CREATE INDEX IF NOT EXISTS nas.idx_frames_app_name ON frames(app_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_window_name ON frames(window_name);
CREATE INDEX IF NOT EXISTS nas.idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX IF NOT EXISTS nas.idx_frames_document_path ON frames(document_path) WHERE document_path IS NOT NULL;
CREATE INDEX IF NOT EXISTS nas.idx_elements_frame_id ON elements(frame_id);
CREATE INDEX IF NOT EXISTS nas.idx_elements_f...
|
26186
|
NULL
|
NULL
|
NULL
|
|
11611
|
520
|
31
|
2026-05-09T06:41:40.862444+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778308900862_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"No Folder Opened Section","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"NO FOLDER OPENED","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"NO FOLDER OPENED","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.038231384,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connected to remote.","depth":23,"bounds":{"left":0.022606382,"top":0.10454908,"width":0.043882977,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.105347164,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":19,"bounds":{"left":0.025598405,"top":0.105347164,"width":0.04089096,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Open Folder","depth":22,"bounds":{"left":0.022606382,"top":0.12849163,"width":0.08610372,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.4509178,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.4517159,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.4517159,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.4517159,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.4517159,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.4517159,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.044215426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.47246608,"width":0.041223403,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.47326416,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.02825798,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":10,"bounds":{"left":0.5162899,"top":0.49321628,"width":0.024601065,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5880984,"top":0.49401435,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.59773934,"top":0.49401435,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.51263297,"top":0.5139665,"width":0.041888297,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.51476455,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.5162899,"top":0.51476455,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.51476455,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.59773934,"top":0.51476455,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.51263297,"top":0.53471667,"width":0.047872342,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.5355148,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.5159575,"top":0.5355148,"width":0.04454787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.5355148,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.59773934,"top":0.5355148,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19581117,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.19980054,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0023271276,"top":0.98244214,"width":0.006981383,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.07247341,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07413564,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07945479,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"}]...
|
-4415949522872146462
|
-612781311221329090
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server......
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13321
|
590
|
4
|
2026-05-09T15:18:45.907560+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339925907_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Activating Extensions...
Activating Extensions...
Notifications
Copilot disabled
Info: Downloading VS Code Server...
Open Folder
/home/Adm1n/
22 Results
OK
Show Local
..
..
.bun
.bun
.cache
.cache
.claude
.claude
.claude.lock
.claude.lock
.codeium
.codeium
.config
.config
.copilot
.copilot
.docker
.docker
.dotnet
.dotnet
.local
.local
.npm
.npm
.nvm
.nvm
.rest-client
.rest-client
.ssh
.ssh
.th-client
.th-client
.vscode-server
.vscode-server
.windsurf-server
.windsurf-server
#recycle
#recycle
Music
Music
Online Document
Online Document
Photos
Photos...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"No Folder Opened Section","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"NO FOLDER OPENED","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"NO FOLDER OPENED","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.038231384,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connected to remote.","depth":23,"bounds":{"left":0.022606382,"top":0.10454908,"width":0.043882977,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.105347164,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":19,"bounds":{"left":0.025598405,"top":0.105347164,"width":0.04089096,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Open Folder","depth":22,"bounds":{"left":0.022606382,"top":0.12849163,"width":0.08610372,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.4509178,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.4517159,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.4517159,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.4517159,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.4517159,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.4517159,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.044215426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.47246608,"width":0.041223403,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.47326416,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.02825798,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":10,"bounds":{"left":0.5162899,"top":0.49321628,"width":0.024601065,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5880984,"top":0.49401435,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.59773934,"top":0.49401435,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.51263297,"top":0.5139665,"width":0.041888297,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.51476455,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.5162899,"top":0.51476455,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.51476455,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.59773934,"top":0.51476455,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.51263297,"top":0.53471667,"width":0.047872342,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.5355148,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.5159575,"top":0.5355148,"width":0.04454787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.5355148,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.59773934,"top":0.5355148,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19581117,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.19980054,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Activating Extensions...","depth":16,"bounds":{"left":0.06881649,"top":0.98244214,"width":0.053856384,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.06948138,"top":0.98244214,"width":0.0076462766,"height":0.01755786},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Activating Extensions...","depth":17,"bounds":{"left":0.07579787,"top":0.9856345,"width":0.045212764,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.076130316,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":23,"bounds":{"left":0.07712766,"top":0.9856345,"width":0.04288564,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot disabled","depth":16,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Open Folder","depth":12,"bounds":{"left":0.48404256,"top":0.028731046,"width":0.024933511,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.48404256,"top":0.02952913,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.48736703,"top":0.02952913,"width":0.021609042,"height":0.011971269}}],"role_description":"text"},{"role":"AXTextField","text":"/home/Adm1n/","depth":16,"bounds":{"left":0.40292552,"top":0.05027933,"width":0.15192819,"height":0.018355945},"on_screen":true,"value":"/home/Adm1n/","placeholder":"Folder path","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"22 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"OK","depth":11,"bounds":{"left":0.5571808,"top":0.049481247,"width":0.011635638,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Local","depth":11,"bounds":{"left":0.57081115,"top":0.049481247,"width":0.027260639,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"..","depth":14,"bounds":{"left":0.40259308,"top":0.075019956,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"..","depth":19,"bounds":{"left":0.40625,"top":0.07741421,"width":0.0026595744,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.07821229,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":1,"bounds":{"left":0.40757978,"top":0.07821229,"width":0.0013297872,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".bun","depth":14,"bounds":{"left":0.40259308,"top":0.092577815,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".bun","depth":19,"bounds":{"left":0.40625,"top":0.09497207,"width":0.008976064,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.09577015,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.40757978,"top":0.09577015,"width":0.0076462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".cache","depth":14,"bounds":{"left":0.40259308,"top":0.110135674,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".cache","depth":19,"bounds":{"left":0.40625,"top":0.112529926,"width":0.013297873,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.11332801,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.40757978,"top":0.11332801,"width":0.011968086,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":14,"bounds":{"left":0.40259308,"top":0.12769353,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":19,"bounds":{"left":0.40625,"top":0.1300878,"width":0.01462766,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.13088587,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.40757978,"top":0.13088587,"width":0.013297873,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".claude.lock","depth":14,"bounds":{"left":0.40259308,"top":0.1452514,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude.lock","depth":19,"bounds":{"left":0.40625,"top":0.14764565,"width":0.024268618,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.14844373,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.40757978,"top":0.14844373,"width":0.022938829,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".codeium","depth":14,"bounds":{"left":0.40259308,"top":0.16280925,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".codeium","depth":19,"bounds":{"left":0.40625,"top":0.16520351,"width":0.01861702,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.1660016,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.40757978,"top":0.1660016,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".config","depth":14,"bounds":{"left":0.40259308,"top":0.18036711,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".config","depth":19,"bounds":{"left":0.40625,"top":0.18276137,"width":0.013962766,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.18355946,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.40757978,"top":0.18355946,"width":0.012632979,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".copilot","depth":14,"bounds":{"left":0.40259308,"top":0.19792499,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".copilot","depth":19,"bounds":{"left":0.40625,"top":0.20031923,"width":0.014960106,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.20111732,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.40757978,"top":0.20111732,"width":0.013630319,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".docker","depth":14,"bounds":{"left":0.40259308,"top":0.21548285,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".docker","depth":19,"bounds":{"left":0.40625,"top":0.21787709,"width":0.015292553,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.21867518,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.40757978,"top":0.21867518,"width":0.013630319,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".dotnet","depth":14,"bounds":{"left":0.40259308,"top":0.2330407,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".dotnet","depth":19,"bounds":{"left":0.40625,"top":0.23543495,"width":0.01462766,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.23623304,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.40757978,"top":0.23623304,"width":0.012965426,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".local","depth":14,"bounds":{"left":0.40259308,"top":0.25059855,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".local","depth":19,"bounds":{"left":0.40625,"top":0.2529928,"width":0.010970744,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.25379092,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.40757978,"top":0.25379092,"width":0.00930851,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".npm","depth":14,"bounds":{"left":0.40259308,"top":0.26815644,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".npm","depth":19,"bounds":{"left":0.40625,"top":0.27055067,"width":0.010305851,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.27134877,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.40757978,"top":0.27134877,"width":0.008976064,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".nvm","depth":14,"bounds":{"left":0.40259308,"top":0.2857143,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".nvm","depth":19,"bounds":{"left":0.40625,"top":0.28810853,"width":0.009973404,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.28890663,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.40757978,"top":0.28890663,"width":0.00831117,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".rest-client","depth":14,"bounds":{"left":0.40259308,"top":0.30327216,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".rest-client","depth":19,"bounds":{"left":0.40625,"top":0.3056664,"width":0.021941489,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.3064645,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":11,"bounds":{"left":0.40757978,"top":0.3064645,"width":0.020611702,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".ssh","depth":14,"bounds":{"left":0.40259308,"top":0.32083002,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".ssh","depth":19,"bounds":{"left":0.40625,"top":0.32322428,"width":0.00831117,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.32402235,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":3,"bounds":{"left":0.40757978,"top":0.32402235,"width":0.006981383,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".th-client","depth":14,"bounds":{"left":0.40259308,"top":0.33838788,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".th-client","depth":19,"bounds":{"left":0.40625,"top":0.34078214,"width":0.018284574,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.3415802,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.40757978,"top":0.3415802,"width":0.016954787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".vscode-server","depth":14,"bounds":{"left":0.40259308,"top":0.35594574,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".vscode-server","depth":19,"bounds":{"left":0.40625,"top":0.35834,"width":0.03025266,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.35913807,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":13,"bounds":{"left":0.40724733,"top":0.35913807,"width":0.02925532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":".windsurf-server","depth":14,"bounds":{"left":0.40259308,"top":0.3735036,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".windsurf-server","depth":19,"bounds":{"left":0.40625,"top":0.37589785,"width":0.03324468,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.37669593,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":15,"bounds":{"left":0.40724733,"top":0.37669593,"width":0.031914894,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":14,"bounds":{"left":0.40259308,"top":0.39106146,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":19,"bounds":{"left":0.40625,"top":0.3934557,"width":0.017287234,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.3942538,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":7,"bounds":{"left":0.4089096,"top":0.3942538,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Music","depth":14,"bounds":{"left":0.40259308,"top":0.4086193,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Music","depth":19,"bounds":{"left":0.40625,"top":0.41101357,"width":0.011968086,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.41181165,"width":0.0039893617,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.41023937,"top":0.41181165,"width":0.007978723,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Online Document","depth":14,"bounds":{"left":0.40259308,"top":0.42617717,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Online Document","depth":19,"bounds":{"left":0.40625,"top":0.42857143,"width":0.034906916,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.4293695,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":14,"bounds":{"left":0.40957448,"top":0.4293695,"width":0.03158245,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Photos","depth":14,"bounds":{"left":0.40259308,"top":0.44373503,"width":0.19547872,"height":0.017557861},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Photos","depth":19,"bounds":{"left":0.40625,"top":0.4461293,"width":0.014295213,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.40625,"top":0.44692737,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":5,"bounds":{"left":0.4089096,"top":0.44692737,"width":0.011303191,"height":0.011971269}}],"role_description":"text"}]...
|
1154417676939095249
|
2769299173205259134
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Activating Extensions...
Activating Extensions...
Notifications
Copilot disabled
Info: Downloading VS Code Server...
Open Folder
/home/Adm1n/
22 Results
OK
Show Local
..
..
.bun
.bun
.cache
.cache
.claude
.claude
.claude.lock
.claude.lock
.codeium
.codeium
.config
.config
.copilot
.copilot
.docker
.docker
.dotnet
.dotnet
.local
.local
.npm
.npm
.nvm
.nvm
.rest-client
.rest-client
.ssh
.ssh
.th-client
.th-client
.vscode-server
.vscode-server
.windsurf-server
.windsurf-server
#recycle
#recycle
Music
Music
Online Document
Online Document
Photos
Photos...
|
13319
|
NULL
|
NULL
|
NULL
|
|
13320
|
589
|
3
|
2026-05-09T15:18:45.816671+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339925816_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot disabled
Info: Downloading VS Code Server...
Open Folder
/home/Adm1n/
22 Results
OK
Show Local
..
..
.bun
.bun
.cache
.cache
.claude
.claude
.claude.lock
.claude.lock
.codeium
.codeium
.config
.config
.copilot
.copilot
.docker
.docker
.dotnet
.dotnet
.local
.local
.npm
.npm
.nvm
.nvm
.rest-client
.rest-client
.ssh
.ssh
.th-client
.th-client
.vscode-server
.vscode-server
.windsurf-server
.windsurf-server
#recycle
#recycle
Music
Music
Online Document
Online Document
Photos
Photos...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Folder Opened Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"NO FOLDER OPENED","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"NO FOLDER OPENED","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connected to remote.","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Open Folder","depth":22,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Outline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot disabled","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"Open Folder","depth":12,"on_screen":true,"role_description":"text"},{"role":"AXTextField","text":"/home/Adm1n/","depth":16,"on_screen":true,"value":"/home/Adm1n/","placeholder":"Folder path","role_description":"text field","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"22 Results","depth":15,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"OK","depth":11,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Local","depth":11,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"..","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"..","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".bun","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".bun","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".cache","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".cache","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude.lock","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".claude.lock","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".codeium","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".codeium","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".config","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".config","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".copilot","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".copilot","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".docker","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".docker","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".dotnet","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".dotnet","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".local","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".local","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".npm","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".npm","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".nvm","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".nvm","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".rest-client","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".rest-client","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".ssh","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".ssh","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".th-client","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".th-client","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".vscode-server","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".vscode-server","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".windsurf-server","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".windsurf-server","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"#recycle","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Music","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Music","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Online Document","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Online Document","depth":19,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Photos","depth":14,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Photos","depth":19,"on_screen":true,"role_description":"text"}]...
|
-1623464105911808752
|
-1842949790880582786
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot disabled
Info: Downloading VS Code Server...
Open Folder
/home/Adm1n/
22 Results
OK
Show Local
..
..
.bun
.bun
.cache
.cache
.claude
.claude
.claude.lock
.claude.lock
.codeium
.codeium
.config
.config
.copilot
.copilot
.docker
.docker
.dotnet
.dotnet
.local
.local
.npm
.npm
.nvm
.nvm
.rest-client
.rest-client
.ssh
.ssh
.th-client
.th-client
.vscode-server
.vscode-server
.windsurf-server
.windsurf-server
#recycle
#recycle
Music
Music
Online Document
Online Document
Photos
Photos...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
21047
|
919
|
25
|
2026-05-11T17:05:09.245230+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519109245_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"No Folder Opened Section","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"NO FOLDER OPENED","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"NO FOLDER OPENED","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.038231384,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connected to remote.","depth":23,"bounds":{"left":0.022606382,"top":0.10454908,"width":0.043882977,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.105347164,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":19,"bounds":{"left":0.025598405,"top":0.105347164,"width":0.04089096,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Open Folder","depth":22,"bounds":{"left":0.022606382,"top":0.12849163,"width":0.08610372,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.4509178,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.4517159,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.4517159,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.4517159,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.4517159,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.4517159,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.044215426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.47246608,"width":0.041223403,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.47326416,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.02825798,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":10,"bounds":{"left":0.5162899,"top":0.49321628,"width":0.024601065,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5880984,"top":0.49401435,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.59773934,"top":0.49401435,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.51263297,"top":0.5139665,"width":0.041888297,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.51476455,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.5162899,"top":0.51476455,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.51476455,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.59773934,"top":0.51476455,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.51263297,"top":0.53471667,"width":0.047872342,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.5355148,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.5159575,"top":0.5355148,"width":0.04454787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.5355148,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.59773934,"top":0.5355148,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19581117,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.19980054,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"}]...
|
8291038540143196174
|
-684895804918361282
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Downloading VS Code Server......
|
21046
|
NULL
|
NULL
|
NULL
|
|
11610
|
520
|
30
|
2026-05-09T06:41:37.863106+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778308897863_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: (details) Initializing VS Code Server
Setting up SSH Host nas: (
details
details
) Initializing VS Code Server...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.023271276,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":8,"bounds":{"left":0.4664229,"top":0.5786113,"width":0.019614361,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.52892286,"top":0.5794094,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.5794094,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.54853725,"top":0.5794094,"width":0.0013297872,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.46276596,"top":0.59936154,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.60015965,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.46575797,"top":0.60015965,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.52892286,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.54787236,"top":0.60015965,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.46276596,"top":0.6201117,"width":0.02825798,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6209098,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.4664229,"top":0.6209098,"width":0.024601065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5382314,"top":0.6209098,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.54787236,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.041888297,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":18,"bounds":{"left":0.4664229,"top":0.64166003,"width":0.037898935,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6424581,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.54787236,"top":0.6424581,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.047872342,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.0033244682,"height":0.012769354}},{"char_start":1,"char_count":21,"bounds":{"left":0.4660904,"top":0.6624102,"width":0.04454787,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6632083,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.54787236,"top":0.6632083,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0019946808,"top":0.98244214,"width":0.0076462766,"height":0.01755786},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.07247341,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07413564,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07945479,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: (details) Initializing VS Code Server","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8507314,"top":0.98723066,"width":0.005984043,"height":0.0127693415},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Setting up SSH Host nas: (","depth":16,"bounds":{"left":0.8580452,"top":0.9880287,"width":0.053523935,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.8580452,"top":0.9888268,"width":0.0026595744,"height":0.011173189}},{"char_start":1,"char_count":25,"bounds":{"left":0.8607048,"top":0.9888268,"width":0.05086436,"height":0.011173189}}],"role_description":"text"},{"role":"AXLink","text":"details","depth":16,"bounds":{"left":0.9115692,"top":0.9880287,"width":0.013630319,"height":0.011971269},"on_screen":true,"help_text":"Show details","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"details","depth":17,"bounds":{"left":0.9115692,"top":0.9880287,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.9115692,"top":0.9888268,"width":0.0026595744,"height":0.011173189}},{"char_start":1,"char_count":6,"bounds":{"left":0.91422874,"top":0.9888268,"width":0.010638298,"height":0.011173189}}],"role_description":"text"},{"role":"AXStaticText","text":") Initializing VS Code Server","depth":16,"bounds":{"left":0.92486703,"top":0.9880287,"width":0.05618351,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.92486703,"top":0.9888268,"width":0.0019946808,"height":0.011173189}},{"char_start":1,"char_count":28,"bounds":{"left":0.9265292,"top":0.9888268,"width":0.054521278,"height":0.011173189}}],"role_description":"text"}]...
|
-5196333310040022423
|
-1987904168429780710
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: (details) Initializing VS Code Server
Setting up SSH Host nas: (
details
details
) Initializing VS Code Server...
|
11606
|
NULL
|
NULL
|
NULL
|
|
11609
|
519
|
21
|
2026-05-09T06:41:37.443582+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778308897443_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"}]...
|
6905418462406865983
|
-4145121792796491493
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In...
|
11607
|
NULL
|
NULL
|
NULL
|
|
14401
|
641
|
1
|
2026-05-09T17:55:57.038781+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778349357038_m1.jpg...
|
Code
|
Implement Authentik inte… — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
SOURCE CONTROL
SOURCE CONTROL
CHANGES
CHANGES
No source control providers registered.
docker-compose.yml
.env
.env.example, preview
report(1).csv
report(2).csv
sms_export.json
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Sign In
Sign In...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"SOURCE CONTROL","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SOURCE CONTROL","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"CHANGES","depth":22,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CHANGES","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"No source control providers registered.","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"docker-compose.yml","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":".env.example, preview","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(1).csv","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"report(2).csv","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sms_export.json","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Design new payment-logge…","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Implement Authentik inte…","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"}]...
|
-5810964616432666686
|
-9044683027465819889
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Containers
SOURCE CONTROL
SOURCE CONTROL
CHANGES
CHANGES
No source control providers registered.
docker-compose.yml
.env
.env.example, preview
report(1).csv
report(2).csv
sms_export.json
Design new payment-logge…
Implement Authentik inte…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
Notifications
Sign In
Sign In...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
18672
|
NULL
|
0
|
2026-05-11T11:39:33.558467+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778499573558_m2.jpg...
|
Code
|
ANother questions lets s… — app
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
EXPLORER
EXPLORER
Explorer Section: app
Explorer Section: app
APP
.cursor
.github
.idea
.sonarlint
.vscode
.windsurf
app
Actions
Component...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: app","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: app","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.0076462766,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"APP","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.0076462766,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.0933759,"width":0.005319149,"height":0.0031923384},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".cursor","depth":27,"bounds":{"left":0.025930852,"top":0.0933759,"width":0.013962766,"height":0.0023942539},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.101356745,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".github","depth":27,"bounds":{"left":0.025930852,"top":0.101356745,"width":0.013962766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.10215483,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.027260639,"top":0.10215483,"width":0.012632979,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.118914604,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".idea","depth":27,"bounds":{"left":0.025930852,"top":0.118914604,"width":0.009640957,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.11971269,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":4,"bounds":{"left":0.027260639,"top":0.11971269,"width":0.008643617,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.13647246,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".sonarlint","depth":27,"bounds":{"left":0.025930852,"top":0.13647246,"width":0.01861702,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.13727055,"width":0.0013297872,"height":0.011971269}},{"char_start":1,"char_count":9,"bounds":{"left":0.027260639,"top":0.13727055,"width":0.017287234,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.15403032,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".vscode","depth":27,"bounds":{"left":0.025930852,"top":0.15403032,"width":0.015292553,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.15482841,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.026928192,"top":0.15482841,"width":0.01462766,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.17158818,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".windsurf","depth":27,"bounds":{"left":0.025930852,"top":0.17158818,"width":0.018284574,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.17238627,"width":0.0009973404,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.026928192,"top":0.17238627,"width":0.01761968,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.019614361,"top":0.18914606,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"app","depth":27,"bounds":{"left":0.025930852,"top":0.18914606,"width":0.0076462766,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.025930852,"top":0.18994413,"width":0.0023271276,"height":0.011971269}},{"char_start":1,"char_count":2,"bounds":{"left":0.02825798,"top":0.18994413,"width":0.005319149,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.20670392,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Actions","depth":27,"bounds":{"left":0.028590426,"top":0.20670392,"width":0.014960106,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.207502,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.03158245,"top":0.207502,"width":0.012300532,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.022273935,"top":0.22426178,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Component","depth":27,"bounds":{"left":0.028590426,"top":0.22426178,"width":0.023603724,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.028590426,"top":0.22505985,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.03158245,"top":0.22505985,"width":0.020611702,"height":0.011971269}}],"role_description":"text"}]...
|
7749326913495097555
|
-8756730572217235706
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
EXPLORER
EXPLORER
Explorer Section: app
Explorer Section: app
APP
.cursor
.github
.idea
.sonarlint
.vscode
.windsurf
app
Actions
Component...
|
18671
|
NULL
|
NULL
|
NULL
|
|
26186
|
1089
|
11
|
2026-05-12T12:12:49.335380+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-12/1778 /Users/lukas/.screenpipe/data/data/2026-05-12/1778587969335_m2.jpg...
|
Code
|
screenpipe_sync.sh — screenpipe [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json
screenpipe_sync.sh
screenpipe_sync_updated.sh, preview
pipe.md
.env
Implement and run pipe l…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Remote - SSH - Output
Opening Remote...
Opening Remote...
Notifications
Copilot disabled
Info: Setting up SSH Host nas: (details) Initializing VS Code Server...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0003324468,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0003324468,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0003324468,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0003324468,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0003324468,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0003324468,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0043218085,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022938829,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Explorer Section: screenpipe [SSH: nas]","depth":21,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"Explorer Section: screenpipe [SSH: nas]","depth":22,"bounds":{"left":0.022938829,"top":0.07581804,"width":0.045877658,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"SCREENPIPE [SSH: NAS]","depth":23,"bounds":{"left":0.022938829,"top":0.079010375,"width":0.045877658,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.07980846,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":20,"bounds":{"left":0.025598405,"top":0.07980846,"width":0.043218084,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022938829,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025930852,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.016289894,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.016954787,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022938829,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022938829,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025598405,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"app_settings.json","depth":28,"bounds":{"left":0.116023935,"top":0.047885075,"width":0.055851065,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync.sh","depth":28,"bounds":{"left":0.171875,"top":0.047885075,"width":0.06050532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe_sync_updated.sh, preview","depth":28,"bounds":{"left":0.23204787,"top":0.047885075,"width":0.0787899,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"pipe.md","depth":28,"bounds":{"left":0.31083778,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":".env","depth":28,"bounds":{"left":0.35073137,"top":0.047885075,"width":0.039893616,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Implement and run pipe l…","depth":28,"bounds":{"left":0.5581782,"top":0.047885075,"width":0.073803194,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.11868351,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.12267287,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.1462766,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.15026596,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16954787,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.17353724,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17386968,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17619681,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19614361,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.20013298,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Remote - SSH - Output","depth":27,"bounds":{"left":0.12267287,"top":0.9680766,"width":0.87200797,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0009973404,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0026595744,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008976064,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.010305851,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9890292,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot disabled","depth":16,"bounds":{"left":0.9793883,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: (details) Initializing VS Code Server","depth":12,"on_screen":false,"role_description":"text"}]...
|
-6411203233893363654
|
-6090634789277953077
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
EXPLORER
EXPLORER
Explorer Section: screenpipe [SSH: nas]
Explorer Section: screenpipe [SSH: nas]
SCREENPIPE [SSH: NAS]
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
app_settings.json
screenpipe_sync.sh
screenpipe_sync_updated.sh, preview
pipe.md
.env
Implement and run pipe l…
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Remote - SSH - Output
Opening Remote...
Opening Remote...
Notifications
Copilot disabled
Info: Setting up SSH Host nas: (details) Initializing VS Code Server...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13319
|
590
|
3
|
2026-05-09T15:18:44.054480+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339924054_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot disabled
Info: Downloading VS Code Server...
Downloading VS Code Server......
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"EXPLORER","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.018949468,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"EXPLORER","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.018949468,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.024933511,"top":0.056664005,"width":0.01662234,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"No Folder Opened Section","depth":21,"bounds":{"left":0.015957447,"top":0.07581804,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"NO FOLDER OPENED","depth":22,"bounds":{"left":0.022606382,"top":0.07581804,"width":0.038231384,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"NO FOLDER OPENED","depth":23,"bounds":{"left":0.022606382,"top":0.079010375,"width":0.038231384,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Connected to remote.","depth":23,"bounds":{"left":0.022606382,"top":0.10454908,"width":0.043882977,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.105347164,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":19,"bounds":{"left":0.025598405,"top":0.105347164,"width":0.04089096,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Open Folder","depth":22,"bounds":{"left":0.022606382,"top":0.12849163,"width":0.08610372,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Outline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9473264,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.9497207,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"OUTLINE","depth":22,"bounds":{"left":0.022606382,"top":0.9473264,"width":0.01662234,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"OUTLINE","depth":23,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.01662234,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.95131683,"width":0.0029920214,"height":0.0103751}},{"char_start":1,"char_count":6,"bounds":{"left":0.025598405,"top":0.95131683,"width":0.013630319,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Timeline Section","depth":21,"bounds":{"left":0.015957447,"top":0.9648843,"width":0.09940159,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":23,"bounds":{"left":0.01662234,"top":0.96727854,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"TIMELINE","depth":22,"bounds":{"left":0.022606382,"top":0.9648843,"width":0.01761968,"height":0.017557861},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"TIMELINE","depth":23,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.01761968,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.022606382,"top":0.9688747,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.025265958,"top":0.9688747,"width":0.015292553,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.4509178,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.4517159,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.4517159,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.4517159,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.4517159,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.4517159,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.044215426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.47246608,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.47246608,"width":0.041223403,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.47326416,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.02825798,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.49321628,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":10,"bounds":{"left":0.5162899,"top":0.49321628,"width":0.024601065,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5880984,"top":0.49401435,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.59773934,"top":0.49401435,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.51263297,"top":0.5139665,"width":0.041888297,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.51476455,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.5162899,"top":0.51476455,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.51476455,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.59773934,"top":0.51476455,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.51263297,"top":0.53471667,"width":0.047872342,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.5355148,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.5159575,"top":0.5355148,"width":0.04454787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.5355148,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.59773934,"top":0.5355148,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.118351065,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.122340426,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.14594415,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.14993352,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.16921543,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.1732048,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.17353724,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.17586437,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.19581117,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.19980054,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0029920214,"top":0.9840383,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.07247341,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07413564,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07945479,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot disabled","depth":16,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Downloading VS Code Server...","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8507314,"top":0.95211494,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Downloading VS Code Server...","depth":16,"bounds":{"left":0.8580452,"top":0.952913,"width":0.062832445,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.8580452,"top":0.9537111,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":28,"bounds":{"left":0.86136967,"top":0.9537111,"width":0.059175532,"height":0.011971269}}],"role_description":"text"}]...
|
-4847451698230217892
|
-613344188159782098
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
EXPLORER
EXPLORER
No Folder Opened Section
NO FOLDER OPENED
NO FOLDER OPENED
Connected to remote.
Open Folder
Outline Section
OUTLINE
OUTLINE
Timeline Section
TIMELINE
TIMELINE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot disabled
Info: Downloading VS Code Server...
Downloading VS Code Server......
|
NULL
|
NULL
|
NULL
|
NULL
|
|
21046
|
919
|
24
|
2026-05-11T17:05:06.185765+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778519106185_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: (details) Initializing VS Code Server
Setting up SSH Host nas: (
details
details
) Initializing VS Code Server...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.023271276,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":8,"bounds":{"left":0.4664229,"top":0.5786113,"width":0.019614361,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.52892286,"top":0.5794094,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.5794094,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.54853725,"top":0.5794094,"width":0.0013297872,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.46276596,"top":0.59936154,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.60015965,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.46575797,"top":0.60015965,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.52892286,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.54787236,"top":0.60015965,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.46276596,"top":0.6201117,"width":0.02825798,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6209098,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.4664229,"top":0.6209098,"width":0.024601065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5382314,"top":0.6209098,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.54787236,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.041888297,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":18,"bounds":{"left":0.4664229,"top":0.64166003,"width":0.037898935,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6424581,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.54787236,"top":0.6424581,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.047872342,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.0033244682,"height":0.012769354}},{"char_start":1,"char_count":21,"bounds":{"left":0.4660904,"top":0.6624102,"width":0.04454787,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6632083,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.54787236,"top":0.6632083,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0019946808,"top":0.98244214,"width":0.0076462766,"height":0.01755786},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.07247341,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.07413564,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.07945479,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: (details) Initializing VS Code Server","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.8507314,"top":0.95211494,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Setting up SSH Host nas: (","depth":16,"bounds":{"left":0.8580452,"top":0.952913,"width":0.053523935,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.8580452,"top":0.9537111,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":25,"bounds":{"left":0.8607048,"top":0.9537111,"width":0.05086436,"height":0.011971269}}],"role_description":"text"},{"role":"AXLink","text":"details","depth":16,"bounds":{"left":0.9115692,"top":0.952913,"width":0.013630319,"height":0.011971269},"on_screen":true,"help_text":"Show details","role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"details","depth":17,"bounds":{"left":0.9115692,"top":0.952913,"width":0.013630319,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.9115692,"top":0.9537111,"width":0.0026595744,"height":0.011971269}},{"char_start":1,"char_count":6,"bounds":{"left":0.91422874,"top":0.9537111,"width":0.010638298,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":") Initializing VS Code Server","depth":16,"bounds":{"left":0.92486703,"top":0.952913,"width":0.05618351,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.92486703,"top":0.9537111,"width":0.0019946808,"height":0.011971269}},{"char_start":1,"char_count":28,"bounds":{"left":0.9265292,"top":0.9537111,"width":0.054521278,"height":0.011971269}}],"role_description":"text"}]...
|
-7240395499493211423
|
-1771713794058649249
|
visual_change
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: (details) Initializing VS Code Server
Setting up SSH Host nas: (
details
details
) Initializing VS Code Server...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
13304
|
587
|
36
|
2026-05-09T15:18:22.153172+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339902153_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"}]...
|
-9125790000944952497
|
-1767221189540675301
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Sign In
Sign In...
|
13302
|
NULL
|
NULL
|
NULL
|
|
13318
|
589
|
2
|
2026-05-09T15:18:41.666910+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339921666_m1.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Tasks - Output
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot disabled
Info: Setting up SSH Host nas
Setting up SSH Host nas...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Tasks - Output","depth":27,"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Opening Remote...","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot disabled","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Setting up SSH Host nas","depth":16,"on_screen":true,"role_description":"text"}]...
|
-2999746952290598472
|
8609922291082564590
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Tasks - Output
Opening Remote...
Opening Remote...
No Problems
0
0
No Ports Forwarded
0
Notifications
Copilot disabled
Info: Setting up SSH Host nas
Setting up SSH Host nas...
|
13316
|
NULL
|
NULL
|
NULL
|
|
13317
|
590
|
2
|
2026-05-09T15:18:41.350869+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339921350_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Tasks - Output
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Copilot disabled...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.46276596,"top":0.4509178,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.4517159,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.4664229,"top":0.4517159,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.52892286,"top":0.4517159,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.4517159,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.54853725,"top":0.4517159,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.46276596,"top":0.47246608,"width":0.044215426,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.47246608,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":16,"bounds":{"left":0.46575797,"top":0.47246608,"width":0.041223403,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.52892286,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.47326416,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.54787236,"top":0.47326416,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.46276596,"top":0.49321628,"width":0.02825798,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.49321628,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":10,"bounds":{"left":0.4664229,"top":0.49321628,"width":0.024601065,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5382314,"top":0.49401435,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.54787236,"top":0.49401435,"width":0.0026595744,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.46276596,"top":0.5139665,"width":0.041888297,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.51476455,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":18,"bounds":{"left":0.4664229,"top":0.51476455,"width":0.037898935,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.51476455,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.54787236,"top":0.51476455,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.46276596,"top":0.53471667,"width":0.047872342,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.5355148,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":21,"bounds":{"left":0.4660904,"top":0.5355148,"width":0.04454787,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.5355148,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.54787236,"top":0.5355148,"width":0.0029920214,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Problems (⇧⌘M)","depth":22,"bounds":{"left":0.01861702,"top":0.7278532,"width":0.027925532,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PROBLEMS","depth":24,"bounds":{"left":0.022606382,"top":0.7366321,"width":0.019946808,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Output (⇧⌘U)","depth":22,"bounds":{"left":0.046210106,"top":0.7278532,"width":0.023603724,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"OUTPUT","depth":24,"bounds":{"left":0.050199468,"top":0.7366321,"width":0.015625,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Terminal (⌃`)","depth":22,"bounds":{"left":0.06948138,"top":0.7278532,"width":0.026595745,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"TERMINAL","depth":24,"bounds":{"left":0.07347074,"top":0.7366321,"width":0.01861702,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.073803194,"top":0.73743016,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":7,"bounds":{"left":0.076130316,"top":0.73743016,"width":0.016289894,"height":0.0103751}}],"role_description":"text"},{"role":"AXRadioButton","text":"Ports","depth":22,"bounds":{"left":0.09607713,"top":0.7278532,"width":0.020279255,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"PORTS","depth":24,"bounds":{"left":0.10006649,"top":0.7366321,"width":0.012300532,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"Tasks - Output","depth":27,"bounds":{"left":0.022606382,"top":0.7557861,"width":0.97074467,"height":0.014365523},"on_screen":true,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Opening Remote...","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.04654255,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0029920214,"top":0.9840383,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Opening Remote...","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.035904255,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":16,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.03357713,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.048204787,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.049867023,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.05518617,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.059840426,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.065159574,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copilot disabled","depth":16,"bounds":{"left":0.9790558,"top":0.98244214,"width":0.008643617,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-7401098186392271788
|
-1767503815555960002
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
Problems (⇧⌘M)
PROBLEMS
Output (⇧⌘U)
OUTPUT
Terminal (⌃`)
TERMINAL
Ports
PORTS
Tasks - Output
Opening Remote...
Opening Remote...
No Problems
0
0
Notifications
Copilot disabled...
|
13315
|
NULL
|
NULL
|
NULL
|
|
13298
|
588
|
24
|
2026-05-09T15:18:12.094113+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-09/1778 /Users/lukas/.screenpipe/data/data/2026-05-09/1778339892094_m2.jpg...
|
Code
|
Visual Studio Code
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X)","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.023271276,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.5786113,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":8,"bounds":{"left":0.4664229,"top":0.5786113,"width":0.019614361,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.52892286,"top":0.5794094,"width":0.0033244682,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.5794094,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.54853725,"top":0.5794094,"width":0.0013297872,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.46276596,"top":0.59936154,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.60015965,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.46575797,"top":0.60015965,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.52892286,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.54787236,"top":0.60015965,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Recent","depth":28,"bounds":{"left":0.46276596,"top":0.6201117,"width":0.02825798,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6209098,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":10,"bounds":{"left":0.4664229,"top":0.6209098,"width":0.024601065,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5382314,"top":0.6209098,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"R","depth":29,"bounds":{"left":0.54787236,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open File or Folder","depth":28,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.041888297,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.64166003,"width":0.003656915,"height":0.012769354}},{"char_start":1,"char_count":18,"bounds":{"left":0.4664229,"top":0.64166003,"width":0.037898935,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6424581,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"O","depth":29,"bounds":{"left":0.54787236,"top":0.6424581,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"New Untitled Text File","depth":28,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.047872342,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.46276596,"top":0.6624102,"width":0.0033244682,"height":0.012769354}},{"char_start":1,"char_count":21,"bounds":{"left":0.4660904,"top":0.6624102,"width":0.04454787,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5382314,"top":0.6632083,"width":0.003656915,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"N","depth":29,"bounds":{"left":0.54787236,"top":0.6632083,"width":0.0029920214,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.012300532,"top":0.98244214,"width":0.022273935,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.013962766,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.019281914,"top":0.9856345,"width":0.004654255,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.023936171,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.02925532,"top":0.9856345,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"}]...
|
-5707774283223450627
|
-614297468700806881
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X)
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Open Recent
⌃
R
Open File or Folder
⌘
O
New Untitled Text File
⌘
N
remote
No Problems
0
0
Notifications
Sign In
Sign In...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
20229
|
871
|
27
|
2026-05-11T14:48:11.306062+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778510891306_m2.jpg...
|
Code
|
Review rate limit handli… — app
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2301639976708540590
|
-2992618173708598900
|
visual_change
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
selectionvIewGioV APP" services• Hubspol~OpportunitySynestrategy..# HubspotLastModifiedOpenSyncStra...,# HubspotLastModifiedSyncStrategy....# HubsootSinaleSyncstrategy.onp## HubspotSyncStrategyBase.php• HubsnotWebhookBatchSyncstrateg.y Pagination# HubspotPaginationService.php# PaginationConfig.php# PaginationState.phpProspectsearchstrategy~ Servicelraits# OpportunitySyncTrait.php• SvncCrmEntitiesTrait.phpwsuncrields.rait.ono• WriteCrmTrait.phr• Utils• WebhookBatchSvncCollector.phoBatchSvncRedisService.ohvClient.oho9.MI* ClosedDealStagesService.oho* DealFieldsService.oho* DecorateActivitv.oho• FieldDefinitions.ohn• FieldTvneConverter.ohn# HubspotClientinterface.php# HubspotTokenManager.phpR PayloadBuilder.php€ PemoteCrmObiectManinulator.nhn«* PecnonceNormalize nhn• Service.php# SyncFieldAction.php• SuncPelatedActivitvManager.php# WebhookSyncBatchProcessor.phpIntearationapo• Listeners> Metadata• MiarationV Pipedrive• OpportunitySvncStrateav• ProspectSearchStrateavOUTIINETIMELINGi8 JY-20725-handle-HS-search-rate-limit* ©@6 A 16 © 26.# MatchActivitvCrmData.pho MmRateLimitException.ohov#Client.oho 9.Mapp > Services > Crm › Hubspot › f* Client.php › °g Client › parseRetryAfter()class Client extends Baseclient 1mpLements HubspotclientIntertace123private tunction 1SHubspotRateLimit(Throwable $e): boolprivate function parseRetryAfter(Throwable $e):-intif- (method_exists($e, 'getResponseHeaders') ) -{etResponseHeaders() -?:- []:ry-After'] - ?? Sheaders ['retry-after'] ?? null;svallve = svalue 0-?7-nul1f. (15. numeric(svalue)). (recur"ane" >value,Smessage = strtolower(Se->qetMessage0):if• (str_contains($message, 'daily'))-{return 600;if-(str contains($message, 'ten secondly')) •{if. (str contains(Smessage, 'secondlv')) .{return-1:•$this->log->warning('(Hubspot) No retry-after header or known message, using default', ["exception class = ger class(se),return-10public tunction qetMinimumApiVersion: stringreturn self::MIN APT VERSION:public function getinstance: Factoryreturn new Factorvdl"kev"= Sthis-sacceccToken!"oauth?!'base url' = $this->baseUrl,public function getNewInstance(): Discoveryreturn \HubSpot\ Factory::createWithAccessToken(Sthis->accessToken)/e secondlu end dailu Limite for Huhennt Aps100% LzMon 11 May 17:48:1008 0 0 0* M&|›* Review rate limit handli... XReview rate limit handling for HubSpot jo..Here are code reveiw suggestions: Issues• 'hubspot:ratelimit:portal:42'•"hubspot: ratel1m1t: cont1q:42• Thought for 1s ?• Now uodate the testisHubspotRateLimit* and testParseRetrvAfterk tests to use reflection (since those methods are now private):• Read Clienttest.php (lines 1856-1975• Read ClientTest.oho (lines 1974-2053)• Now I'll replace the direct-call tests with reflection-based versions:• Edit ClientTest.ohoprivate function callIsHubspotRateLimit(\Throwable $e): boolsmethod = new keтLeсtzonmechod schis-cllent, IshuospotkateLmitSmethod->setAccess1ble true;return Smethod->invoke Sthis->client, Se:Ihought tor 1s >• Now tix issue 5 — remove the duolicated constants trom Handlle:ubsootRateLimitTest.ono"• Read HandleHubspotRateLimitiest.php• Edit HandleHubspotRateLimittest.ohdclass HandleHubspotRateLimitTest extends TestCaseprivate const int MAX RETRY DELAY = 600pravate const int MTTTER SECONDSY 5private HandleHubspotRateLimit Smiddleware:Oueue another meccade…9 107 lines selectedclass HandleHubspotRateLimitTest extends TestCaseprivate HandleHubspotRateLimit Smiddleware;Click to expandAsk before edit.88 SignIn...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
20317
|
878
|
0
|
2026-05-11T15:15:51.535520+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778512551535_m1.jpg...
|
Code
|
Client.php (Working Tree) (Client.php) — app — 9 p Client.php (Working Tree) (Client.php) — app — 9 problems in this file • Modified...
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2301639976708540590
|
-2992618173708598900
|
click
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpAPP (-zsh)-zsh++DOCKER-232,9 +235,11₴81DEV (docker)₴2APP (-zsh)84* eparam string SobjectType The object type ('deals', 'companies', 'contacts', 'calls')* @param array<string, mixed› Spayload The search payload with filters, sorts, properties, etc.ereturn array Thesearch response with'results'total', 'paging'keys* @throws RateLimitException When rate limit is hit* @throws HubspotException On API errors* @return array The search response with 'results', 'total','paging' keyspublic function search(string SobjectType, array Spayload): array-zsh>0 ll*5screenpipe"100% <78• Mon 11 May 18:15:51181€ 886-zsh*7 |+APPend diff4) app/Console/Commands/JiminnyDebugCommand.php (statement_indentation)begin diff--- /home/jiminny/app/Console/Commands/JiminnyDebugCommand.php+++/home/jiminny/app/Console/Commands/JiminnyDebugCommand.php-359,11 +359,11 @ScrmService = ScrmResolver->prepareCrmService();-//-//for (Si = 0; si < 3; Si++) {if (Si%25 ===0) {Sthis->info("Syncing opportunity {$1}");Sthis->info("Matching contact {$i}");-//-//.ScrmService->syncOpportunity('374720564');if ($i % 25 === 0) {Sthis->info("Syncing opportunity {$1}");Sthis->info("Matching contact {Si}");////ScrmService-›syncOpportunity('374720564');ScrmService-›matchByName('Robot');end diffFixed 4 of 5666 files in 146.870 seconds, 60.00 MB memory usedWhat's next:Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1...
|
20316
|
NULL
|
NULL
|
NULL
|
|
18673
|
805
|
0
|
2026-05-11T11:39:39.663900+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-11/1778 /Users/lukas/.screenpipe/data/data/2026-05-11/1778499579663_m2.jpg...
|
Code
|
ANother questions lets s… — app
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"}]...
|
8513204830683220266
|
-2992616110052335476
|
visual_change
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Y APP.>•github>idea• sonarlintvscodewindsuriv appActions> AcllActonitems> ActivityAcuvilyAnalyucsAcuvilysearchAlActivity lype> DIOSIAiScorecardFilterRepositorv.ohoI AiScorecardRuleRepositorv.ohoIAiScorecardRuleRunRepositorv.ohowAlScorecardRunRenositorv.oho* AiCallScorinaDtoCreator.oho• AiCal|ScorinaElicibilitvChecker.ohnR AiCallScoringResultsValidator.php• A-ScorecardFilterService.ohv1 GenerateAiCaliScorinaService nhn#R GetAiCallScoringService.php|€ GetAiCallScorinaViaDronhetService n) AckAnvthinalAck liminnvAi> AWC• BillingManagement) Coshal• CoachingFeedback• customerAoi• Datadod> DateTime> DeallnsiahtsOUTIINE, TIMELING• MYSOL@0A0# Preparation for Refi... in 21 n100% 47. • Mon 11 May 14:39:39•3C;-3 ANother questions lets s...Understanding Al call sc….# GetAiCallScorinaService.pho Xapp > Component › AiCallScoring › Services > R GetAiCallScoringService.phppublic function_ construct(private readonly search ssearchservice.readonly A1scorecarakunkepository salscorecarakunkeposicory,*[EMAIL] arrayeint, arrayestring, mixedspublic function getByFilterSet(FilterbefinitionCollection sTilterset): arraysactivitnes = sthis->oetactivitles (Stilterser:if (Sactivities→>isEmpty)) ‹returnnSaiScorecardRunsByActivityId = $this->getAiScorecardRunsByActivityIds(Sactiv1t1es->keys→>map(static tn (string $1d): 1nt => (1nt) $1d)→>allonreturn Sactivitiec->map(function (array $activity) use ($aiScorecardRunsByActivityId): ?array {$activityId = (int) $activity['activityId'];$aiScorecardRun = $aiScorecardRunsByActivityId->get($activityId);'activityId' = $activity('activityUuid'),=> Sactivity('activityDate'],"nostld= sacuivicyl nostuuldl,al call scorino= schis→>cranstorma1scorecarakunsalscorecarakun→filter(static fn Marray Srow: boo = Srow l== nulu=valluesO→>all():orivate tunction getActivities FilterDefinitionCollection <filterGet). ColloctionStilterDefinitionQueries = StilterSet->extractElasticSearchQueriesltart time')).FilterDefinitionQuerv:instancenew Exists('ai call score'))1):squery = (new Query($filterSet->getBoolQuery($filterDefinitionQueries)))→>setSourcelactual start time,user.id string'.1id strina'._scotCort("' doc!->setSize(self::ES BATCH SIZE);@ DevDb updated to 3.0.6. * Fixed auto-detection ofMariaDB in Laravel Sail. * Limited offer: *s9* one-timepavment for "lifetime" Devdo Pro. Eniov.Source: DevDb*Star on GitHulX Follow88 Sign In...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
10990
|
492
|
17
|
2026-05-08T18:11:29.215778+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778263889215_m2.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"CLAUDE CODE","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CLAUDE CODE","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.026263298,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"bounds":{"left":0.51263297,"top":0.59936154,"width":0.023271276,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.60015965,"width":0.003656915,"height":0.011971269}},{"char_start":1,"char_count":8,"bounds":{"left":0.5162899,"top":0.60015965,"width":0.019614361,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"bounds":{"left":0.5787899,"top":0.60015965,"width":0.0033244682,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.60015965,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"bounds":{"left":0.5984042,"top":0.60015965,"width":0.0013297872,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"bounds":{"left":0.51263297,"top":0.6201117,"width":0.044215426,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.6209098,"width":0.0029920214,"height":0.011971269}},{"char_start":1,"char_count":16,"bounds":{"left":0.515625,"top":0.6209098,"width":0.041223403,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"bounds":{"left":0.5787899,"top":0.6209098,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"bounds":{"left":0.5880984,"top":0.6209098,"width":0.003656915,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"bounds":{"left":0.59773934,"top":0.6209098,"width":0.0026595744,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Start Debugging","depth":28,"bounds":{"left":0.51263297,"top":0.64166003,"width":0.035904255,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.51263297,"top":0.64166003,"width":0.0029920214,"height":0.012769354}},{"char_start":1,"char_count":14,"bounds":{"left":0.515625,"top":0.64166003,"width":0.032912236,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"F5","depth":29,"bounds":{"left":0.59674203,"top":0.6424581,"width":0.0043218085,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59674203,"top":0.6424581,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":1,"bounds":{"left":0.5987367,"top":0.6424581,"width":0.0023271276,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-8183740694910453572
|
-3006073978051173010
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
10987
|
NULL
|
NULL
|
NULL
|
|
10991
|
491
|
21
|
2026-05-08T18:11:29.293793+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778263889293_m1.jpg...
|
Code
|
finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"CLAUDE CODE","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CLAUDE CODE","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Open Chat","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌃","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Show All Commands","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⇧","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"⌘","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"P","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Start Debugging","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"F5","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"}]...
|
-8183740694910453572
|
-3006073978051173010
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
Open Chat
⌃
⌘
I
Show All Commands
⇧
⌘
P
Start Debugging
F5
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel...
|
10989
|
NULL
|
NULL
|
NULL
|
|
11073
|
494
|
33
|
2026-05-08T18:19:02.109375+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778264342109_m2.jpg...
|
Code
|
payments.js — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JavaScript
Editor Language Status: No jsconfig, next: 6.0.3, TypeScript version, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 71, Col 3
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"CLAUDE CODE","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CLAUDE CODE","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.026263298,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"payments.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.04488032,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.15525267,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.17785904,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.18949468,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.20744681,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.2443484,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"bounds":{"left":0.24966756,"top":0.07821229,"width":0.003656915,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"payments.js, preview","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"JavaScript","depth":16,"bounds":{"left":0.94082445,"top":0.98244214,"width":0.021941489,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No jsconfig, next: 6.0.3, TypeScript version, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"bounds":{"left":0.93351066,"top":0.98244214,"width":0.00731383,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"bounds":{"left":0.92287236,"top":0.98244214,"width":0.007978723,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"bounds":{"left":0.9055851,"top":0.98244214,"width":0.015625,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"bounds":{"left":0.88164896,"top":0.98244214,"width":0.021941489,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 71, Col 3","depth":16,"bounds":{"left":0.85339093,"top":0.98244214,"width":0.026263298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09906915,"height":0.028731046},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Local","depth":19,"bounds":{"left":0.018949468,"top":0.11173184,"width":0.04654255,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Local","depth":20,"bounds":{"left":0.04089096,"top":0.11731844,"width":0.009973404,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.041223403,"top":0.11731844,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":4,"bounds":{"left":0.043218084,"top":0.11731844,"width":0.007978723,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Web","depth":19,"bounds":{"left":0.06615692,"top":0.11173184,"width":0.046875,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Web","depth":20,"bounds":{"left":0.08909574,"top":0.11731844,"width":0.00831117,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app Rename session Delete session","depth":19,"bounds":{"left":0.018284574,"top":0.16839585,"width":0.09541223,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Design new payment-logger and dsk-uploader hybrid app","depth":20,"bounds":{"left":0.020944148,"top":0.17398244,"width":0.07014628,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.020944148,"top":0.17398244,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":52,"bounds":{"left":0.024268618,"top":0.17398244,"width":0.11269947,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Rename session","depth":20,"bounds":{"left":0.0944149,"top":0.16999201,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Delete session","depth":20,"bounds":{"left":0.10305851,"top":0.16999201,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5711715229330760577
|
7800638190823572385
|
click
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JavaScript
Editor Language Status: No jsconfig, next: 6.0.3, TypeScript version, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 71, Col 3
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session
selectionView100% LzFri 8 May 21:19:02payments.js — tinance SSH: nas•1|0.CLAUDE COD:• Local4 Search sessio,a WebDesign new payment-logger and .Js pavments.s Xpayments-logger › backend › src › routes › js payments.js › ...async tunction sendNotiticationpaymentbody ={notification: NOTIFIER_CHANNEL,message: Tormatnocltymessage(paymenc)const res = await tetch NOTIFIER URL. <method: "post"headers: { 'Content-Type': 'application/json' },1t (tres.ok)1nst text = awalt res.text.catch ="throw new Error( Notifier respondedS"res,status: Stext- Ingest a payment (pubulc = no auch)Two modes:SMS mode (default):"message": "<raw SMS texts" "not fvPhone". "'The message is parsed to extract date/type/card/amount/balance/recipient.Structured mode (Annle Wallet / manual).Fields are stored directlv: ravMessage is svnthesised for displav.iter-post('/ingest', async (req, res) => {const { message, notifyPhone, source } = reg.body:ler dara:if (source === 'apole wallet' ll (Imessage &s rea.bodv,amount != null)) {const amount. recinient. tvne, card. date, halance ? = ren.hodv-if (amount == null ll Irecinient) <return rec ctatuc(100)- iconld error. lamount and recinient are reauired for ctructured indec+i 1).$(source II 'structured'}',typecarolardJ.filter(Boolean).join(' | '):data = <date: date ? new Date date • new Dateotvoe: tvoe 11l'WALLET!card• card ll null.* SSH: nas @0 A088 Sign In...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
11074
|
493
|
29
|
2026-05-08T18:19:02.197027+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778264342197_m1.jpg...
|
Code
|
payments.js — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JavaScript
Editor Language Status: No jsconfig, next: 6.0.3, TypeScript version, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 71, Col 3
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"CLAUDE CODE","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CLAUDE CODE","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"payments.js, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"payments.js, preview","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"JavaScript","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Editor Language Status: No jsconfig, next: 6.0.3, TypeScript version, next: $(copilot) No inline suggestion available, Inline suggestions","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"LF","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"UTF-8","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Spaces: 2","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Ln 71, Col 3","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Local","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Local","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Web","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Web","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app Rename session Delete session","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Design new payment-logger and dsk-uploader hybrid app","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Rename session","depth":20,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Delete session","depth":20,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5711715229330760577
|
7800638190823572385
|
click
|
hybrid
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
JavaScript
Editor Language Status: No jsconfig, next: 6.0.3, TypeScript version, next: $(copilot) No inline suggestion available, Inline suggestions
LF
UTF-8
Spaces: 2
Ln 71, Col 3
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp-zsh‹$0la6|screenpipe*100% C8Fri 8 May 21:19:02T81DOCKERO 81DEV (-zsh)О 882APP (-zsh)*3-rw-r--r--1lukasstaff284086 Мay21:02screenpipe.2026-05-06.0.10glukasstaff5661647 May21:50-rw-r--r--lukasstaffscreenpipe.2026-05-07.0.10g814378 May11:12screenpipe.2026-05-08.0.10g-rwxr-xr-xlukasstaff149946 May20:26screenpipe_sync.sh-rw-r--r--lukasstaff31677 May09:23sync.loglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ screenpipe_sync.sh 2026-05-07zsh: commandnotfound:screenpipe_sync.shlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-05-07[2026-05-0811:13:29][2026-05-0811:13:29]Screenpipe sync startingfor: 2026-05-07[2026-05-08 11:13:29J-zsh• 84[+00m00s]• PreflightchecksSource DB:OK(1.00)[2026-05-08 11:13:29]ERROR: NAS not mounted at /Volumes/screenpipeLukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-05-07[2026-05-0811:13:52][2026-05-0811:13:52J[2026-05-08 11:13:52]Screenpipe sync startingfor: 2026-05-07====[+00m00s] • Preflight checksSource DB:NAS mount:Archive DB:Data dir:OK(1.0G)OK/Volumes/screenpipeexists( 10G)OK(266 files, 306M)[+00m01s] • Counting source rows for 2026-05-07frames:elements:ui_events:ocr_text:meetings:6262623002741216702[+00m02s] • Initialising tables, indexes, FTScreating tablescreating indexescreating FTS tables• 0m00s• 0m00s• OmOOs[+00m02s] • Syncing data for 2026-05-07video_chunks• Om01sframes (6262 rows)• Parse error near line 3: table nas.frames has 24 columns but 30 values were suppliedlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ nasAdm1n@DXP4800PLUS-B5F8:~$ Connectionto [IP_ADDRESS] closed by remote host.Connection to [IP_ADDRESS] closed.lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ I•$5-zsh...
|
11072
|
NULL
|
NULL
|
NULL
|
|
11075
|
493
|
30
|
2026-05-08T18:19:03.666791+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778264343666_m1.jpg...
|
Code
|
Claude Code — finance [SSH: nas]
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview, Editor Group 1
Claude Code, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session
Untitled
Session history
New session
Use planning mode to talk through big changes before a commit. Press
Shift
Tab
to cycle between modes.
Prefer the Terminal experience?
Switch back in Settings.
Switch back in Settings.
Close banner
⌘ Esc to focus or unfocus Claude
⌘ Esc to focus or unfocus Claude
Add
Show command menu (/)
payments.js
payments.js
Edit automatically
Edit automatically...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXRadioButton","text":"Containers","depth":19,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"CLAUDE CODE","depth":17,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CLAUDE CODE","depth":18,"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"payments.js, preview, Editor Group 1","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"payments.js, preview, Editor Group 1","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Claude Code, Editor Group 2","depth":28,"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"New session","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Local","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Local","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Web","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Web","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app Rename session Delete session","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Design new payment-logger and dsk-uploader hybrid app","depth":20,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Rename session","depth":20,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Delete session","depth":20,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Untitled","depth":19,"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"on_screen":true,"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":19,"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Use planning mode to talk through big changes before a commit. Press","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Shift","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Tab","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"to cycle between modes.","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Prefer the Terminal experience?","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Switch back in Settings.","depth":22,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch back in Settings.","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Close banner","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"⌘ Esc to focus or unfocus Claude","depth":24,"on_screen":true,"value":"⌘ Esc to focus or unfocus Claude","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌘ Esc to focus or unfocus Claude","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Add","depth":24,"bounds":{"left":0.83125,"top":0.0,"width":0.018055556,"height":0.028888889},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show command menu (/)","depth":23,"bounds":{"left":0.8506944,"top":0.0,"width":0.018055556,"height":0.028888889},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"bounds":{"left":0.87777776,"top":0.0,"width":0.06736111,"height":0.028888889},"on_screen":true,"help_text":"Showing Claude your current file selection (payments.js)","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":24,"bounds":{"left":0.8958333,"top":0.0,"width":0.04375,"height":0.014444444},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Edit automatically","depth":24,"on_screen":true,"help_text":"Claude will edit your selected text or the whole file. Click to change, or press Shift+Tab to cycle.","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit automatically","depth":25,"on_screen":true,"role_description":"text"}]...
|
377549746013414133
|
3774103969408385552
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview, Editor Group 1
Claude Code, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session
Untitled
Session history
New session
Use planning mode to talk through big changes before a commit. Press
Shift
Tab
to cycle between modes.
Prefer the Terminal experience?
Switch back in Settings.
Switch back in Settings.
Close banner
⌘ Esc to focus or unfocus Claude
⌘ Esc to focus or unfocus Claude
Add
Show command menu (/)
payments.js
payments.js
Edit automatically
Edit automatically...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
11076
|
494
|
34
|
2026-05-08T18:19:04.101786+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-08/1778 /Users/lukas/.screenpipe/data/data/2026-05-08/1778264344101_m2.jpg...
|
Code
|
Claude Code — finance [SSH: nas]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview, Editor Group 1
Claude Code, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session
Untitled
Session history
New session
Use planning mode to talk through big changes before a commit. Press
Shift
Tab
to cycle between modes.
Prefer the Terminal experience?
Switch back in Settings.
Switch back in Settings.
Close banner
⌘ Esc to focus or unfocus Claude
⌘ Esc to focus or unfocus Claude
Add
Show command menu (/)
payments.js
payments.js
Edit automatically
Edit automatically...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Explorer (⇧⌘E)","depth":19,"bounds":{"left":0.0,"top":0.047885075,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.057462092,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Search (⇧⌘F)","depth":19,"bounds":{"left":0.0,"top":0.08619314,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.09577015,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Source Control (⌃⇧G)","depth":19,"bounds":{"left":0.0,"top":0.1245012,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.13407822,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Run and Debug (⇧⌘D)","depth":19,"bounds":{"left":0.0,"top":0.16280925,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.17238627,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Remote Explorer","depth":19,"bounds":{"left":0.0,"top":0.20111732,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.21069433,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Extensions (⇧⌘X) - 2 require update","depth":19,"bounds":{"left":0.0,"top":0.23942538,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.0039893617,"top":0.2490024,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":22,"bounds":{"left":0.009640957,"top":0.2601756,"width":0.0019946808,"height":0.008778931},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"Claude Code","depth":19,"bounds":{"left":0.0,"top":0.27773345,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":true},{"role":"AXRadioButton","text":"Containers","depth":19,"bounds":{"left":0.0,"top":0.3160415,"width":0.015957447,"height":0.03830806},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"CLAUDE CODE","depth":17,"bounds":{"left":0.022606382,"top":0.047885075,"width":0.026263298,"height":0.02793296},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"CLAUDE CODE","depth":18,"bounds":{"left":0.022606382,"top":0.056664005,"width":0.026263298,"height":0.0103751},"on_screen":true,"role_description":"text"},{"role":"AXRadioButton","text":"payments.js, preview, Editor Group 1","depth":28,"bounds":{"left":0.11569149,"top":0.047885075,"width":0.04488032,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.15525267,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.17785904,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.18949468,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.20744681,"top":0.07821229,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":29,"bounds":{"left":0.2443484,"top":0.07821229,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"…","depth":28,"bounds":{"left":0.24966756,"top":0.07821229,"width":0.003656915,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXTextArea","text":"payments.js, preview, Editor Group 1","depth":28,"on_screen":false,"role_description":"editor","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"Claude Code, Editor Group 2","depth":28,"bounds":{"left":0.5578458,"top":0.047885075,"width":0.046210106,"height":0.02793296},"on_screen":true,"role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true,"is_expanded":false},{"role":"AXButton","text":"remote SSH: nas","depth":16,"bounds":{"left":0.0006648936,"top":0.98244214,"width":0.028590426,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.0033244682,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"SSH: nas","depth":17,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.017952127,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.008643617,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":7,"bounds":{"left":0.009973404,"top":0.9856345,"width":0.01462766,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"No Problems","depth":16,"bounds":{"left":0.03025266,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.031914894,"top":0.9848364,"width":0.005319149,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.03723404,"top":0.9856345,"width":0.004986702,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.041888297,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.04720745,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"No Ports Forwarded","depth":16,"bounds":{"left":0.054521278,"top":0.98244214,"width":0.012632979,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.05618351,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"0","depth":17,"bounds":{"left":0.061502658,"top":0.9856345,"width":0.0039893617,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Notifications","depth":16,"bounds":{"left":0.9886968,"top":0.98244214,"width":0.010638298,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sign In","depth":16,"bounds":{"left":0.9650931,"top":0.98244214,"width":0.022606382,"height":0.01755786},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.96675533,"top":0.9848364,"width":0.0056515955,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Sign In","depth":17,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.013962766,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.97207445,"top":0.9856345,"width":0.0013297872,"height":0.011173184}},{"char_start":1,"char_count":6,"bounds":{"left":0.9734042,"top":0.9856345,"width":0.010638298,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"Info: Setting up SSH Host nas: Setting up SSH tunnel","depth":12,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"New session","depth":19,"bounds":{"left":0.016289894,"top":0.07581804,"width":0.09906915,"height":0.028731046},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Local","depth":19,"bounds":{"left":0.018949468,"top":0.11173184,"width":0.04654255,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Local","depth":20,"bounds":{"left":0.04089096,"top":0.11731844,"width":0.009973404,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.041223403,"top":0.11731844,"width":0.0023271276,"height":0.011173184}},{"char_start":1,"char_count":4,"bounds":{"left":0.043218084,"top":0.11731844,"width":0.007978723,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Web","depth":19,"bounds":{"left":0.06615692,"top":0.11173184,"width":0.046875,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Web","depth":20,"bounds":{"left":0.08909574,"top":0.11731844,"width":0.00831117,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Design new payment-logger and dsk-uploader hybrid app Rename session Delete session","depth":19,"bounds":{"left":0.018284574,"top":0.16839585,"width":0.09541223,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Design new payment-logger and dsk-uploader hybrid app","depth":20,"bounds":{"left":0.020944148,"top":0.17398244,"width":0.07014628,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.020944148,"top":0.17398244,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":52,"bounds":{"left":0.024268618,"top":0.17398244,"width":0.11269947,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Rename session","depth":20,"bounds":{"left":0.0944149,"top":0.16999201,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Delete session","depth":20,"bounds":{"left":0.10305851,"top":0.16999201,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Untitled","depth":19,"bounds":{"left":0.56017286,"top":0.08060654,"width":0.027925532,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Session history","depth":19,"bounds":{"left":0.9780585,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"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":19,"bounds":{"left":0.9886968,"top":0.08060654,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"New session","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Use planning mode to talk through big changes before a commit. Press","depth":22,"bounds":{"left":0.7350399,"top":0.5059856,"width":0.08277926,"height":0.02952913},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7406915,"top":0.5067837,"width":0.0033244682,"height":0.011971269}},{"char_start":1,"char_count":67,"bounds":{"left":0.7350399,"top":0.5067837,"width":0.08277926,"height":0.028731046}}],"role_description":"text"},{"role":"AXStaticText","text":"Shift","depth":22,"bounds":{"left":0.8021942,"top":0.5243416,"width":0.008643617,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.8021942,"top":0.5251397,"width":0.0026595744,"height":0.0103751}},{"char_start":1,"char_count":4,"bounds":{"left":0.80452126,"top":0.5251397,"width":0.0063164895,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"Tab","depth":22,"bounds":{"left":0.81515956,"top":0.5243416,"width":0.0066489363,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.81515956,"top":0.5251397,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":2,"bounds":{"left":0.8171542,"top":0.5251397,"width":0.004654255,"height":0.0103751}}],"role_description":"text"},{"role":"AXStaticText","text":"to cycle between modes.","depth":22,"bounds":{"left":0.75398934,"top":0.5395052,"width":0.050531916,"height":0.012769354},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.75398934,"top":0.5403033,"width":0.0016622341,"height":0.011971269}},{"char_start":1,"char_count":22,"bounds":{"left":0.7553192,"top":0.5403033,"width":0.04886968,"height":0.011971269}}],"role_description":"text"},{"role":"AXStaticText","text":"Prefer the Terminal experience?","depth":22,"bounds":{"left":0.7290558,"top":0.8858739,"width":0.056848403,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7290558,"top":0.88667196,"width":0.0026595744,"height":0.011173184}},{"char_start":1,"char_count":30,"bounds":{"left":0.73138297,"top":0.88667196,"width":0.054521278,"height":0.011173184}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":22,"bounds":{"left":0.7859042,"top":0.8858739,"width":0.0009973404,"height":0.011173184},"on_screen":true,"role_description":"text"},{"role":"AXLink","text":"Switch back in Settings.","depth":22,"bounds":{"left":0.7869016,"top":0.8858739,"width":0.043218084,"height":0.011173184},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch back in Settings.","depth":23,"bounds":{"left":0.7869016,"top":0.8858739,"width":0.043218084,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7869016,"top":0.88667196,"width":0.0026595744,"height":0.011173184}},{"char_start":1,"char_count":23,"bounds":{"left":0.78922874,"top":0.88667196,"width":0.04089096,"height":0.011173184}}],"role_description":"text"},{"role":"AXButton","text":"Close banner","depth":21,"bounds":{"left":0.82978725,"top":0.88347965,"width":0.0076462766,"height":0.017557861},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"⌘ Esc to focus or unfocus Claude","depth":24,"bounds":{"left":0.6665558,"top":0.9082203,"width":0.22539894,"height":0.0311253},"on_screen":true,"value":"⌘ Esc to focus or unfocus Claude","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌘ Esc to focus or unfocus Claude","depth":26,"bounds":{"left":0.6712101,"top":0.91779727,"width":0.06781915,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6712101,"top":0.91779727,"width":0.0039893617,"height":0.011971269}},{"char_start":1,"char_count":31,"bounds":{"left":0.67519945,"top":0.91779727,"width":0.06349734,"height":0.011971269}}],"role_description":"text"},{"role":"AXButton","text":"Add","depth":24,"bounds":{"left":0.6682181,"top":0.94413406,"width":0.008643617,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show command menu (/)","depth":23,"bounds":{"left":0.6775266,"top":0.94413406,"width":0.008643617,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"payments.js","depth":23,"bounds":{"left":0.69049203,"top":0.94413406,"width":0.032247342,"height":0.0207502},"on_screen":true,"help_text":"Showing Claude your current file selection (payments.js)","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"payments.js","depth":24,"bounds":{"left":0.69913566,"top":0.9489226,"width":0.020944148,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.69913566,"top":0.9497207,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":10,"bounds":{"left":0.70146275,"top":0.9497207,"width":0.01861702,"height":0.0103751}}],"role_description":"text"},{"role":"AXButton","text":"Edit automatically","depth":24,"bounds":{"left":0.83776593,"top":0.94413406,"width":0.04255319,"height":0.0207502},"on_screen":true,"help_text":"Claude will edit your selected text or the whole file. Click to change, or press Shift+Tab to cycle.","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Edit automatically","depth":25,"bounds":{"left":0.84640956,"top":0.9489226,"width":0.03125,"height":0.0103751},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.84640956,"top":0.9497207,"width":0.0023271276,"height":0.0103751}},{"char_start":1,"char_count":17,"bounds":{"left":0.8484042,"top":0.9497207,"width":0.02925532,"height":0.0103751}}],"role_description":"text"}]...
|
377549746013414133
|
3774103969408385552
|
click
|
accessibility
|
NULL
|
Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧ Explorer (⇧⌘E)
Search (⇧⌘F)
Source Control (⌃⇧G)
Run and Debug (⇧⌘D)
Remote Explorer
Extensions (⇧⌘X) - 2 require update
2
Claude Code
Containers
CLAUDE CODE
CLAUDE CODE
payments.js, preview, Editor Group 1
…
payments.js, preview, Editor Group 1
Claude Code, Editor Group 2
remote SSH: nas
SSH: nas
No Problems
0
0
No Ports Forwarded
0
Notifications
Sign In
Sign In
Info: Setting up SSH Host nas: Setting up SSH tunnel
New session
Local
Local
Web
Web
Design new payment-logger and dsk-uploader hybrid app Rename session Delete session
Design new payment-logger and dsk-uploader hybrid app
Rename session
Delete session
Untitled
Session history
New session
Use planning mode to talk through big changes before a commit. Press
Shift
Tab
to cycle between modes.
Prefer the Terminal experience?
Switch back in Settings.
Switch back in Settings.
Close banner
⌘ Esc to focus or unfocus Claude
⌘ Esc to focus or unfocus Claude
Add
Show command menu (/)
payments.js
payments.js
Edit automatically
Edit automatically...
|
11073
|
NULL
|
NULL
|
NULL
|