@arach/lattices 0.2.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -86
  3. package/apps/mac/Info.plist +43 -0
  4. package/apps/mac/Lattices.app/Contents/Info.plist +43 -0
  5. package/apps/mac/Lattices.app/Contents/MacOS/Lattices +0 -0
  6. package/apps/mac/Lattices.app/Contents/Resources/AppIcon.icns +0 -0
  7. package/apps/mac/Lattices.app/Contents/Resources/docs/assistant-knowledge.md +130 -0
  8. package/apps/mac/Lattices.app/Contents/Resources/tap.wav +0 -0
  9. package/apps/mac/Lattices.app/Contents/_CodeSignature/CodeResources +150 -0
  10. package/apps/mac/Lattices.entitlements +21 -0
  11. package/apps/mac/Resources/Pets/assistant-spark/pet.json +62 -0
  12. package/apps/mac/Resources/Pets/assistant-spark/spritesheet.webp +0 -0
  13. package/apps/mac/Resources/Pets/scout-ranger/pet.json +6 -0
  14. package/apps/mac/Resources/Pets/scout-ranger/spritesheet.webp +0 -0
  15. package/apps/mac/Resources/tap.wav +0 -0
  16. package/assets/AppIcon.icns +0 -0
  17. package/bin/assistant-intelligence.ts +912 -0
  18. package/bin/cli/capture.ts +252 -0
  19. package/bin/cli/daemon.ts +22 -0
  20. package/bin/cli/helpers.ts +105 -0
  21. package/bin/cli/layer.ts +178 -0
  22. package/bin/cli/runs.ts +43 -0
  23. package/bin/cli/search.ts +141 -0
  24. package/bin/cli/session.ts +32 -0
  25. package/bin/client.ts +17 -0
  26. package/bin/cua.ts +26 -0
  27. package/bin/{daemon-client.js → daemon-client.ts} +49 -30
  28. package/bin/handsoff-infer.ts +96 -0
  29. package/bin/handsoff-worker.ts +531 -0
  30. package/bin/infer.ts +424 -0
  31. package/bin/keychain.ts +75 -0
  32. package/bin/lattices-app.ts +655 -0
  33. package/bin/lattices-build +125 -0
  34. package/bin/lattices-build-env.ts +77 -0
  35. package/bin/lattices-dev +362 -0
  36. package/bin/lattices.ts +3260 -0
  37. package/bin/project-twin.ts +645 -0
  38. package/docs/agent-execution-plan.md +562 -0
  39. package/docs/agent-layer-guide.md +207 -0
  40. package/docs/agents.md +233 -0
  41. package/docs/ai-chat-ux-review.md +416 -0
  42. package/docs/api.md +1041 -47
  43. package/docs/app.md +96 -13
  44. package/docs/assistant-knowledge.md +130 -0
  45. package/docs/companion-deck.md +209 -0
  46. package/docs/component-extraction-roadmap.md +392 -0
  47. package/docs/concepts.md +13 -12
  48. package/docs/config.md +83 -10
  49. package/docs/gesture-customization-proposal.md +520 -0
  50. package/docs/handsoff-test-scenarios.md +84 -0
  51. package/docs/hyperspace-grid-snappiness.md +210 -0
  52. package/docs/layers.md +176 -28
  53. package/docs/mouse-gestures.md +244 -0
  54. package/docs/ocr.md +21 -9
  55. package/docs/overview.md +42 -23
  56. package/docs/presentation-execution-review.md +491 -0
  57. package/docs/prompts/hands-off-system.md +382 -0
  58. package/docs/prompts/hands-off-turn.md +30 -0
  59. package/docs/prompts/voice-advisor.md +31 -0
  60. package/docs/prompts/voice-fallback.md +23 -0
  61. package/docs/proposals/LAT-001-gesture-visual-customization.md +522 -0
  62. package/docs/proposals/LAT-002-shared-overlay-canvas.md +353 -0
  63. package/docs/proposals/LAT-003-menu-bar-controller-architecture.md +291 -0
  64. package/docs/proposals/LAT-004-interactive-overlay-actors.md +534 -0
  65. package/docs/proposals/LAT-005-action-runtime-product-spine.md +914 -0
  66. package/docs/proposals/LAT-006-followup-gaps.md +103 -0
  67. package/docs/proposals/LAT-006-runs-and-capture-in-lattices.md +566 -0
  68. package/docs/proposals/LAT-007-unified-app-shell.md +128 -0
  69. package/docs/quickstart.md +8 -12
  70. package/docs/reference/dewey.config.ts +74 -0
  71. package/docs/reference/install-agent.md +79 -0
  72. package/docs/release.md +172 -0
  73. package/docs/repo-structure.md +100 -0
  74. package/docs/terminal-kit.md +87 -0
  75. package/docs/tiling-reference.md +224 -0
  76. package/docs/twins.md +138 -0
  77. package/docs/voice-command-protocol.md +278 -0
  78. package/docs/voice-error-model.md +73 -0
  79. package/docs/voice.md +221 -0
  80. package/package.json +69 -16
  81. package/packages/npm/sdk/cua.d.mts +1 -0
  82. package/packages/npm/sdk/cua.d.ts +188 -0
  83. package/packages/npm/sdk/cua.mjs +376 -0
  84. package/app/Lattices.app/Contents/Info.plist +0 -24
  85. package/app/Package.swift +0 -13
  86. package/app/Sources/ActionRow.swift +0 -61
  87. package/app/Sources/App.swift +0 -10
  88. package/app/Sources/AppDelegate.swift +0 -234
  89. package/app/Sources/AppShellView.swift +0 -62
  90. package/app/Sources/AppTypeClassifier.swift +0 -70
  91. package/app/Sources/AppWindowShell.swift +0 -63
  92. package/app/Sources/CheatSheetHUD.swift +0 -332
  93. package/app/Sources/CommandModeState.swift +0 -1362
  94. package/app/Sources/CommandModeView.swift +0 -1405
  95. package/app/Sources/CommandModeWindow.swift +0 -192
  96. package/app/Sources/CommandPaletteView.swift +0 -307
  97. package/app/Sources/CommandPaletteWindow.swift +0 -134
  98. package/app/Sources/DaemonProtocol.swift +0 -101
  99. package/app/Sources/DaemonServer.swift +0 -414
  100. package/app/Sources/DesktopModel.swift +0 -121
  101. package/app/Sources/DesktopModelTypes.swift +0 -71
  102. package/app/Sources/DiagnosticLog.swift +0 -271
  103. package/app/Sources/EventBus.swift +0 -30
  104. package/app/Sources/HotkeyManager.swift +0 -250
  105. package/app/Sources/HotkeyStore.swift +0 -338
  106. package/app/Sources/InventoryManager.swift +0 -35
  107. package/app/Sources/InventoryPath.swift +0 -43
  108. package/app/Sources/KeyRecorderView.swift +0 -210
  109. package/app/Sources/LatticesApi.swift +0 -1125
  110. package/app/Sources/MainView.swift +0 -467
  111. package/app/Sources/MainWindow.swift +0 -83
  112. package/app/Sources/OcrModel.swift +0 -309
  113. package/app/Sources/OcrStore.swift +0 -295
  114. package/app/Sources/OmniSearchState.swift +0 -283
  115. package/app/Sources/OmniSearchView.swift +0 -288
  116. package/app/Sources/OmniSearchWindow.swift +0 -105
  117. package/app/Sources/OrphanRow.swift +0 -129
  118. package/app/Sources/PaletteCommand.swift +0 -419
  119. package/app/Sources/PermissionChecker.swift +0 -125
  120. package/app/Sources/Preferences.swift +0 -92
  121. package/app/Sources/ProcessModel.swift +0 -199
  122. package/app/Sources/ProcessQuery.swift +0 -151
  123. package/app/Sources/Project.swift +0 -28
  124. package/app/Sources/ProjectRow.swift +0 -368
  125. package/app/Sources/ProjectScanner.swift +0 -121
  126. package/app/Sources/ScreenMapState.swift +0 -2387
  127. package/app/Sources/ScreenMapView.swift +0 -2820
  128. package/app/Sources/ScreenMapWindowController.swift +0 -89
  129. package/app/Sources/SessionManager.swift +0 -72
  130. package/app/Sources/SettingsView.swift +0 -1053
  131. package/app/Sources/SettingsWindow.swift +0 -20
  132. package/app/Sources/TabGroupRow.swift +0 -178
  133. package/app/Sources/Terminal.swift +0 -259
  134. package/app/Sources/TerminalQuery.swift +0 -156
  135. package/app/Sources/TerminalSynthesizer.swift +0 -200
  136. package/app/Sources/Theme.swift +0 -163
  137. package/app/Sources/TilePickerView.swift +0 -209
  138. package/app/Sources/TmuxModel.swift +0 -53
  139. package/app/Sources/TmuxQuery.swift +0 -81
  140. package/app/Sources/WindowTiler.swift +0 -1755
  141. package/app/Sources/WorkspaceManager.swift +0 -434
  142. package/bin/lattices-app.js +0 -221
  143. package/bin/lattices.js +0 -1418
@@ -0,0 +1,244 @@
1
+ ---
2
+ title: Mouse Gestures
3
+ description: Hold a mouse button, draw a shape or direction, release — runs matched actions like a window manager power-user shortcut system.
4
+ order: 4.2
5
+ ---
6
+
7
+ # Mouse Gestures
8
+
9
+ ## Concept
10
+
11
+ Mouse gestures are a user-level shortcut system for the macOS app. Hold a
12
+ configured mouse button, draw a direction or shape, then release to run the
13
+ matched action.
14
+
15
+ The app code owns the recognizer, action dispatcher, and JSON schema. The
16
+ gesture mappings are data, so agents can define or change hotkeys without
17
+ adding a named action in Swift. Your actual gesture mappings live in:
18
+
19
+ ```bash
20
+ ~/.lattices/mouse-shortcuts.json
21
+ ```
22
+
23
+ That file is machine-local preference data. It is not project config, and it
24
+ should not be committed to this repository unless you are intentionally adding
25
+ an example fixture or changing the schema.
26
+
27
+ ## Config Ownership
28
+
29
+ There are two layers:
30
+
31
+ - **Code defaults** in `MouseGestureConfig.swift` provide a minimal starter
32
+ config when no user file exists.
33
+ - **User rules** in `~/.lattices/mouse-shortcuts.json` are the source of truth
34
+ after the file has been created.
35
+
36
+ Do not add personal shortcuts by changing `MouseGestureConfig.swift`. Add them
37
+ to the user JSON file instead. The Settings UI can open that file from
38
+ **Settings -> Shortcuts -> Mouse Gestures -> Configure...**.
39
+
40
+ Agents should usually write these rules through the daemon:
41
+
42
+ ```js
43
+ await daemonCall('mouse.shortcuts.upsert', { rule })
44
+ ```
45
+
46
+ The daemon persists the rule, snapshots the old config, and refreshes the
47
+ running app immediately. If a tool edits `~/.lattices/mouse-shortcuts.json`
48
+ directly, call `mouse.shortcuts.reload` afterward; no app restart is required.
49
+
50
+ ## Lightweight History
51
+
52
+ Lattices keeps local snapshots of your mouse shortcut config before risky
53
+ changes:
54
+
55
+ ```bash
56
+ ~/.lattices/mouse-shortcuts.history/
57
+ ```
58
+
59
+ Snapshots are written before external edits are reloaded and before Settings
60
+ restores defaults or restores a previous snapshot. The newest 40 snapshots are
61
+ kept. Use **History** in Settings to open the folder, or **Undo Last** to
62
+ restore the latest snapshot.
63
+
64
+ ## Button Names
65
+
66
+ The config accepts these common button names:
67
+
68
+ | Config value | Meaning |
69
+ |---|---|
70
+ | `middle` | Middle button / wheel click |
71
+ | `back` | Back side button, often mouse button 4 |
72
+ | `forward` | Forward side button, often mouse button 5 |
73
+ | `right` | Right mouse button |
74
+ | `buttonN` | Explicit numbered button fallback |
75
+
76
+ Normal clicks pass through when a configured button is only being watched for
77
+ drag or shape gestures. Once movement crosses the gesture threshold and matches
78
+ a real gesture, Lattices claims the interaction.
79
+
80
+ Browser frontmost apps are bypassed so native middle-click, Back, and Forward
81
+ button behavior stays intact. This avoids half-claimed side-button gestures
82
+ accidentally navigating while you are drawing a shape.
83
+
84
+ ## Trigger Kinds
85
+
86
+ Rules match one of three trigger kinds:
87
+
88
+ | Kind | Required fields | Example |
89
+ |---|---|---|
90
+ | `click` | `button` | Middle click sends paste |
91
+ | `drag` | `button`, `direction` | Middle drag left switches Space |
92
+ | `shape` | `button`, `shape` | Back-button L shape activates iTerm |
93
+
94
+ Directions are `up`, `down`, `left`, and `right`.
95
+
96
+ Useful shapes include:
97
+
98
+ | Shape | Motion |
99
+ |---|---|
100
+ | `l-shape-down-right` | Down, then right |
101
+ | `l-shape-down-left` | Down, then left |
102
+ | `l-shape-up-right` | Up, then right |
103
+ | `l-shape-up-left` | Up, then left |
104
+ | `reverse-l-right-down` | Right, then down |
105
+ | `reverse-l-left-down` | Left, then down |
106
+ | `v-shape` | Down, then up |
107
+ | `reverse-v` | Up, then down |
108
+ | `circle` | A loose closed loop |
109
+
110
+ The circle recognizer is intentionally generous: it looks for broad circular
111
+ motion, a reasonably closed path, and enough turn coverage rather than a
112
+ geometrically perfect circle.
113
+
114
+ ## Default: Dictation Gesture
115
+
116
+ New default configs use a plain shortcut action for dictation. The middle-button
117
+ up gesture sends the Lattices voice command hotkey, currently Hyper+D:
118
+
119
+ ```json
120
+ {
121
+ "id": "dictation",
122
+ "enabled": true,
123
+ "device": "any",
124
+ "trigger": {
125
+ "button": "middle",
126
+ "kind": "drag",
127
+ "direction": "up"
128
+ },
129
+ "action": {
130
+ "type": "shortcut.send",
131
+ "shortcut": {
132
+ "key": "d",
133
+ "keyCode": 2,
134
+ "modifiers": ["control", "option", "shift", "command"]
135
+ }
136
+ }
137
+ }
138
+ ```
139
+
140
+ ## Default: Screenshot Area Gesture
141
+
142
+ New default configs include a back-button circle gesture for the macOS
143
+ screenshot area picker (`Command` + `Shift` + `4`):
144
+
145
+ ```json
146
+ {
147
+ "id": "back-circle-screenshot-area",
148
+ "enabled": true,
149
+ "device": "any",
150
+ "trigger": {
151
+ "button": "back",
152
+ "kind": "shape",
153
+ "shape": "circle"
154
+ },
155
+ "action": {
156
+ "type": "shortcut.send",
157
+ "shortcut": {
158
+ "key": "4",
159
+ "keyCode": 21,
160
+ "modifiers": ["command", "shift"]
161
+ }
162
+ },
163
+ "visual": {
164
+ "renderer": "matrix",
165
+ "theme": "lattices"
166
+ }
167
+ }
168
+ ```
169
+
170
+ ## Actions
171
+
172
+ Supported action types include:
173
+
174
+ | Type | Purpose |
175
+ |---|---|
176
+ | `space.previous` | Switch to the previous macOS Space |
177
+ | `space.next` | Switch to the next macOS Space |
178
+ | `screenmap.toggle` | Open the Screen Map overview |
179
+ | `dictation.start` | Legacy compatibility alias that presses the configured Voice Command hotkey |
180
+ | `shortcut.send` | Send a keyboard shortcut |
181
+ | `app.activate` | Activate an app by name |
182
+
183
+ ## Example: Enter Gesture
184
+
185
+ This is a user-level rule, not a code default. Add it to
186
+ `~/.lattices/mouse-shortcuts.json` if you want the back button plus a quick
187
+ down-then-left shape to press Enter:
188
+
189
+ ```json
190
+ {
191
+ "id": "back-down-left-enter",
192
+ "enabled": true,
193
+ "device": "any",
194
+ "trigger": {
195
+ "button": "back",
196
+ "kind": "shape",
197
+ "shape": "l-shape-down-left"
198
+ },
199
+ "action": {
200
+ "type": "shortcut.send",
201
+ "shortcut": {
202
+ "key": "enter",
203
+ "keyCode": 36,
204
+ "modifiers": []
205
+ }
206
+ }
207
+ }
208
+ ```
209
+
210
+ ## Visuals
211
+
212
+ Rules may include an optional `visual` block for feedback. Visuals are
213
+ decorative: they must never decide whether a gesture matches or whether an
214
+ action runs. If a visual asset is missing or slow, the gesture should still
215
+ execute through the native action path.
216
+
217
+ Shape gestures can opt into native matrix completion feedback with
218
+ `"visual": { "renderer": "matrix" }`. When enabled, Lattices smooths the
219
+ captured path, replays it briefly inside a small 3x3 rounded-cell matrix, then
220
+ snaps into a compact confirmation glyph and action label. This is feedback
221
+ only; the matched rule has already dispatched.
222
+
223
+ ## Implementation
224
+
225
+ - `apps/mac/Sources/Core/Input/MouseGestureController.swift` owns the CGEvent
226
+ tap, gesture session state, passthrough behavior, and action dispatch.
227
+ - `apps/mac/Sources/Core/Input/MouseGestureConfig.swift` defines the Codable
228
+ schema and initial fallback defaults.
229
+ - `apps/mac/Sources/Core/Input/MouseShortcutStore.swift` loads the user-level
230
+ JSON file and provides thread-safe snapshots to the event tap.
231
+ - `apps/mac/Sources/Core/Input/ShapeRecognizer.swift` converts raw gesture
232
+ paths into direction and shape labels.
233
+
234
+ ## Safety
235
+
236
+ The controller installs a session-wide CGEvent tap. To avoid blocking the
237
+ system input pipeline:
238
+
239
+ - The tap callback does only cheap work and dispatches heavier work async.
240
+ - A circuit breaker handles OS tap timeout events and pauses gestures when
241
+ needed.
242
+ - Short, unmatched clicks are replayed or passed through so native app behavior
243
+ remains intact.
244
+ - The emergency reset chord clears stuck input capture state.
package/docs/ocr.md CHANGED
@@ -59,22 +59,34 @@ contextual snippets.
59
59
  ### From the CLI
60
60
 
61
61
  ```bash
62
+ # Search windows by title, app, session, and OCR content
63
+ lattices search "error"
64
+
65
+ # Deep search — also inspects terminal tabs and processes
66
+ lattices search "myproject" --deep
67
+
68
+ # Same as --deep (all search sources)
69
+ lattices search "myproject" --all
70
+
71
+ # Search + focus + tile the top result
72
+ lattices place "myproject" left
73
+
62
74
  # View current OCR snapshot
63
- lattices ocr
75
+ lattices scan
64
76
 
65
- # Search OCR history
66
- lattices ocr search "error OR failed"
77
+ # Search OCR history directly (FTS5 syntax)
78
+ lattices scan search "error OR failed"
67
79
 
68
80
  # Trigger an immediate deep scan
69
- lattices ocr scan
81
+ lattices scan deep
70
82
 
71
83
  # View OCR history for a specific window ID
72
- lattices ocr history 12345
84
+ lattices scan history 12345
73
85
  ```
74
86
 
75
- ### From the daemon API
87
+ ### From the agent API
76
88
 
77
- Agents can query OCR data through four daemon methods:
89
+ Agents can query OCR data through four API methods:
78
90
 
79
91
  | Method | Description |
80
92
  |--------|-------------|
@@ -88,7 +100,7 @@ Agents can query OCR data through four daemon methods:
88
100
  Returns the latest OCR results for all on-screen windows.
89
101
 
90
102
  ```js
91
- import { daemonCall } from '@arach/lattices/daemon-client'
103
+ import { daemonCall } from '@lattices/cli'
92
104
 
93
105
  const snapshot = await daemonCall('ocr.snapshot')
94
106
  // [{ wid, app, title, frame, fullText, blocks, timestamp }, ...]
@@ -158,7 +170,7 @@ Entries older than 3 days are automatically deleted.
158
170
  A typical agent workflow: trigger a scan, then search for relevant content.
159
171
 
160
172
  ```js
161
- import { daemonCall } from '@arach/lattices/daemon-client'
173
+ import { daemonCall } from '@lattices/cli'
162
174
 
163
175
  // Trigger a fresh scan
164
176
  await daemonCall('ocr.scan')
package/docs/overview.md CHANGED
@@ -4,9 +4,9 @@ description: What lattices is and who it's for
4
4
  order: 0
5
5
  ---
6
6
 
7
- lattices is a macOS developer workspace manager. A native menu bar app
8
- handles window tiling, project navigation, on-screen OCR, and optionally
9
- tmux-powered terminal sessions. Your AI coding agents can use it too.
7
+ lattices is an agentic window manager for macOS. It provides a programmable
8
+ workspace, smart layout management, and managed tmux sessions all
9
+ controllable from the CLI or a 35+-method agent API.
10
10
 
11
11
  ## The problem
12
12
 
@@ -20,60 +20,79 @@ to see what's on screen, arrange windows, or jump between projects.
20
20
 
21
21
  ## The solution
22
22
 
23
- lattices fixes both sides:
23
+ lattices addresses both sides with three layers:
24
24
 
25
- - The menu bar app tiles windows, navigates projects, and manages
26
- workspace layers through a command palette. Add tmux if you want
27
- persistent terminal sessions with auto-layout.
28
- - The daemon API exposes 30 RPC methods over WebSocket. Agents can
29
- discover projects, tile windows, switch layers, read on-screen text
30
- via OCR, and launch sessions programmatically.
25
+ ### Programmable workspace
26
+
27
+ The CLI and agent API expose everything: query what's on screen, search
28
+ window text, tile layouts, manage sessions. Claude Code skills, MCP servers,
29
+ or your own scripts can drive your desktop the same way you do. Your
30
+ workspace becomes infrastructure you can observe and control programmatically.
31
+
32
+ ### Smart layout manager
33
+
34
+ A native menu bar app tracks every window across all your monitors. Tile
35
+ with hotkeys, organize into switchable layers, snap to grids. It reads
36
+ your windows too — extracting text from UI elements every 60 seconds and
37
+ running Vision OCR on background windows every 2 hours. Everything is
38
+ searchable.
39
+
40
+ ### Managed tmux sessions
41
+
42
+ We make tmux easy. Declare your dev environment in a `.lattices.json`:
43
+ which panes, which commands, what layout. lattices builds it, runs it,
44
+ and keeps it alive. Use your own terminal — sessions survive reboots
45
+ and you can reattach anytime.
31
46
 
32
47
  ## What's included
33
48
 
34
49
  | Component | Description |
35
50
  |-----------|-------------|
36
- | **CLI** | The `lattices` command. Tile windows, manage sessions, control the workspace from your terminal |
37
- | **Menu bar app** | Native macOS companion. Command palette, window tiling, project discovery |
38
- | **Daemon API** | WebSocket server on `ws://127.0.0.1:9399`. 30 methods, 5 real-time events |
39
- | **OCR engine** | Reads text from visible windows using Apple Vision, indexes it with FTS5 |
51
+ | **CLI** | The `lattices` command. Tile windows, manage sessions, scan screen text, control the workspace from your terminal |
52
+ | **Menu bar app** | Native macOS companion. Command palette, window tiling, project discovery, screen text indexing |
53
+ | **Agent API** | WebSocket server on `ws://127.0.0.1:9399`. 35+ methods, 5 real-time events |
54
+ | **Screen scanner** | Reads text from visible windows using Accessibility API (60s) and Apple Vision OCR (2h), indexes with FTS5 |
40
55
  | **Node.js client** | Zero-dependency `daemonCall()` helper for scripting |
41
56
 
42
57
  ## Example
43
58
 
44
59
  ```bash
45
- cd ~/my-project && lattices
60
+ cd ~/my-project && lattices start
46
61
  ```
47
62
 
48
63
  Agents get the same control programmatically:
49
64
 
50
65
  ```js
51
- import { daemonCall } from '@arach/lattices/daemon-client'
66
+ import { daemonCall } from '@lattices/cli'
52
67
  await daemonCall('session.launch', { path: '/Users/you/dev/frontend' })
53
- await daemonCall('window.tile', { session: 'frontend-a1b2c3', position: 'left' })
68
+ await daemonCall('window.place', {
69
+ session: 'frontend-a1b2c3',
70
+ placement: { kind: 'tile', value: 'left' }
71
+ })
54
72
  ```
55
73
 
56
74
  ## Who it's for
57
75
 
58
76
  - Developers who juggle multiple projects and want faster window management
59
- - People building AI agents that need to control the desktop
77
+ - People building AI agents that need to observe and control the desktop
60
78
  - Power users who work across multiple macOS Spaces
61
- - tmux users who want persistent, auto-configured terminal sessions
79
+ - Anyone who wants persistent, auto-configured terminal sessions
62
80
 
63
81
  ## Requirements
64
82
 
65
- - macOS 13.0+
83
+ - macOS 26.0+
66
84
  - Node.js 18+
67
85
 
68
86
  ### Dev dependencies
69
87
 
70
- - Swift 5.9+ — only to build the menu bar app from source
88
+ - Swift 6.2 / Xcode 26+ — only to build the menu bar app from source
71
89
  - tmux — needed for persistent terminal sessions (`brew install tmux`)
72
90
 
73
91
  ## Next steps
74
92
 
75
93
  - [Quickstart](/docs/quickstart): install and run your first session in 2 minutes
76
94
  - [Configuration](/docs/config): `.lattices.json` format and CLI commands
77
- - [Screen OCR](/docs/ocr): Vision-powered screen reading and full-text search
95
+ - [Screen scanning](/docs/ocr): AX text extraction, Vision OCR, and full-text search
78
96
  - [Concepts](/docs/concepts): architecture, glossary, and how it all works
79
- - [Daemon API](/docs/api): RPC method reference for agents and scripts
97
+ - [Agent Guide](/docs/agents): canonical action contracts for voice, CLI, and daemon clients
98
+ - [Agent API](/docs/api): RPC method reference for agents and scripts