@lattices/cli 0.6.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 (44) hide show
  1. package/README.md +13 -4
  2. package/apps/mac/Info.plist +4 -2
  3. package/apps/mac/Lattices.app/Contents/Info.plist +4 -2
  4. package/apps/mac/Lattices.app/Contents/MacOS/Lattices +0 -0
  5. package/apps/mac/Lattices.app/Contents/Resources/docs/assistant-knowledge.md +130 -0
  6. package/apps/mac/Lattices.app/Contents/_CodeSignature/CodeResources +11 -0
  7. package/apps/mac/Lattices.entitlements +6 -0
  8. package/bin/assistant-intelligence.ts +41 -3
  9. package/bin/cli/capture.ts +252 -0
  10. package/bin/cli/daemon.ts +22 -0
  11. package/bin/cli/helpers.ts +105 -0
  12. package/bin/cli/layer.ts +178 -0
  13. package/bin/cli/runs.ts +43 -0
  14. package/bin/cli/search.ts +141 -0
  15. package/bin/cli/session.ts +32 -0
  16. package/bin/client.ts +2 -1
  17. package/bin/cua.ts +26 -0
  18. package/bin/infer.ts +22 -4
  19. package/bin/keychain.ts +75 -0
  20. package/bin/lattices-app.ts +111 -12
  21. package/bin/lattices-build-env.ts +77 -0
  22. package/bin/lattices-dev +29 -2
  23. package/bin/lattices.ts +729 -769
  24. package/docs/api.md +496 -3
  25. package/docs/app.md +5 -4
  26. package/docs/assistant-knowledge.md +130 -0
  27. package/docs/config.md +5 -0
  28. package/docs/hyperspace-grid-snappiness.md +210 -0
  29. package/docs/layers.md +53 -0
  30. package/docs/mouse-gestures.md +40 -3
  31. package/docs/ocr.md +3 -0
  32. package/docs/prompts/hands-off-system.md +9 -1
  33. package/docs/proposals/LAT-006-followup-gaps.md +103 -0
  34. package/docs/proposals/{LAT-006-mira-in-lattices.md → LAT-006-runs-and-capture-in-lattices.md} +83 -70
  35. package/docs/quickstart.md +3 -1
  36. package/docs/reference/dewey.config.ts +1 -1
  37. package/docs/release.md +4 -3
  38. package/docs/terminal-kit.md +87 -0
  39. package/docs/tiling-reference.md +5 -3
  40. package/docs/voice.md +3 -3
  41. package/package.json +27 -5
  42. package/packages/npm/sdk/cua.d.mts +1 -0
  43. package/packages/npm/sdk/cua.d.ts +188 -0
  44. package/packages/npm/sdk/cua.mjs +376 -0
@@ -1,23 +1,36 @@
1
- # LAT-006: Mira Inside Lattices
1
+ # LAT-006: Runs and Capture in Lattices
2
2
 
3
3
  ## Status
4
4
 
5
- Proposed.
5
+ Accepted direction; initial screenshot slice in progress.
6
6
 
7
7
  ## Summary
8
8
 
9
- Mira should stop being a separate product the user has to remember.
9
+ The Action/Mira experiment should stop being a separate product the user has to
10
+ remember. The useful runtime loop should become plain Lattices functionality:
10
11
 
11
- The useful parts of Mira should become a named capability inside Lattices:
12
+ ```text
13
+ observe -> act -> capture -> trace -> artifact -> review
14
+ ```
15
+
16
+ The user-facing concepts should be:
12
17
 
13
18
  ```text
14
19
  Lattices = workspace control plane
15
- Mira = run, capture, review, and proof mode
20
+ Actions = executable workspace operations
21
+ Runs = executions with trace and artifacts
22
+ Capture = screenshots and recordings
23
+ Review = inspect output
24
+ Actors = optional on-screen presences
16
25
  ```
17
26
 
18
- This is a stronger integration than keeping Mira as a nearby helper. The
19
- desired user experience is one macOS app, one daemon surface, one permission
20
- assistant, one command palette, and one place to find runs and artifacts.
27
+ This retires Mira as a feature name or product brand. Actors, pets, and
28
+ on-screen presences remain useful Lattices primitives, but no specific actor
29
+ should become the identity of the capture/review system.
30
+
31
+ The desired user experience is one macOS app, one daemon surface, one
32
+ permission assistant, one command palette, and one place to find runs and
33
+ artifacts.
21
34
 
22
35
  Internally, Lattices can still keep specialized helper processes. The important
23
36
  distinction is that helpers are implementation details. The product the user
@@ -25,12 +38,12 @@ grants permissions to, launches, trusts, and remembers should be Lattices.
25
38
 
26
39
  ## Why This Belongs Here
27
40
 
28
- Lattices and Mira are converging on the same operating model from opposite
41
+ Lattices and Action converged on the same operating model from opposite
29
42
  directions:
30
43
 
31
44
  - Lattices already knows about workspaces, projects, windows, Spaces, layers,
32
45
  overlays, command surfaces, and local daemon control.
33
- - Mira already knows about observing surfaces, resolving targets, running
46
+ - Action already knows about observing surfaces, resolving targets, running
34
47
  deterministic actions, recording what happened, and saving reviewable
35
48
  artifacts.
36
49
 
@@ -40,7 +53,7 @@ LAT-005 proposes the shared action loop:
40
53
  input -> canonical action -> plan -> execute -> verify -> receipt -> history
41
54
  ```
42
55
 
43
- Mira supplies the missing proof loop:
56
+ Action supplies the missing proof loop:
44
57
 
45
58
  ```text
46
59
  run -> observe -> act -> capture -> trace -> artifact -> review
@@ -51,7 +64,7 @@ control the desktop and prove what happened.
51
64
 
52
65
  ## Problem
53
66
 
54
- Keeping Mira as a separate project creates exactly the kind of operational
67
+ Keeping Action/Mira as a separate product creates exactly the kind of operational
55
68
  friction Lattices is supposed to remove:
56
69
 
57
70
  - another repo to remember
@@ -71,24 +84,23 @@ sound.
71
84
 
72
85
  ## Product Decision
73
86
 
74
- Mira should become a Lattices feature area, not a second app.
87
+ Runs and capture should become a Lattices feature area, not a second app.
75
88
 
76
89
  Recommended naming:
77
90
 
78
91
  | Concept | Product Name |
79
92
  | --- | --- |
80
- | Capture/review mode | Mira |
81
93
  | Individual execution | Run |
82
94
  | Saved output | Artifact |
83
95
  | Machine-readable event log | Trace |
84
96
  | Human-facing result | Review |
85
- | Visual desktop presence | Mira actor |
97
+ | Visual desktop presence | Actor |
86
98
 
87
99
  Examples of user-facing commands:
88
100
 
89
101
  - `Record Current Window`
90
102
  - `Capture Frontmost App`
91
- - `Start Mira Run`
103
+ - `Start Run`
92
104
  - `Review Last Run`
93
105
  - `Show Run Artifacts`
94
106
  - `Rerun Scenario`
@@ -99,17 +111,17 @@ Those details belong in diagnostics and receipts.
99
111
 
100
112
  ## Goals
101
113
 
102
- 1. Make Lattices the single user-facing app for workspace control and Mira
114
+ 1. Make Lattices the single user-facing app for workspace control and
103
115
  capture/review flows.
104
116
  2. Consolidate permission guidance into the existing Lattices Permissions
105
117
  Assistant.
106
- 3. Preserve Mira's important native runtime lesson: AppKit-dependent work must
118
+ 3. Preserve Action's important native runtime lesson: AppKit-dependent work must
107
119
  run inside a real app lifecycle.
108
120
  4. Add a first-class run/artifact model that extends LAT-005 receipts and
109
121
  history.
110
- 5. Route Mira activity through the Lattices daemon instead of requiring users
122
+ 5. Route run/capture activity through the Lattices daemon instead of requiring users
111
123
  or agents to remember a second public control plane.
112
- 6. Bundle the Mira actor as a normal Lattices overlay actor.
124
+ 6. Keep actors as optional generic Lattices presences, not a required product identity.
113
125
  7. Migrate the useful protocol/runtime ideas without importing every demo,
114
126
  composer, or release workflow at once.
115
127
 
@@ -118,9 +130,9 @@ Those details belong in diagnostics and receipts.
118
130
  - Do not ship two visible apps as the normal experience.
119
131
  - Do not push ScreenCaptureKit recording into a headless-only lifecycle.
120
132
  - Do not make Lattices a general cross-platform automation product.
121
- - Do not absorb Mira's composer/export stack before the run/capture/review loop
133
+ - Do not absorb Action's composer/export stack before the run/capture/review loop
122
134
  is integrated.
123
- - Do not remove the existing Mira/Action repo until Lattices can own the
135
+ - Do not remove the existing Action repo until Lattices can own the
124
136
  important runtime paths.
125
137
  - Do not ask users to manage Action.app permissions as part of normal Lattices
126
138
  usage.
@@ -132,8 +144,8 @@ The desired experience is:
132
144
  1. User launches Lattices.
133
145
  2. Lattices shows one permission checklist.
134
146
  3. User opens the palette and chooses `Record Current Window`.
135
- 4. Lattices starts a Mira run.
136
- 5. Mira's overlay actor indicates recording or inspection state.
147
+ 4. Lattices starts a run.
148
+ 5. Optional actors or overlays indicate recording or inspection state.
137
149
  6. The run writes media, screenshots, trace events, and receipts into the
138
150
  Lattices run store.
139
151
  7. User opens `Review Last Run` from the same app.
@@ -141,7 +153,7 @@ The desired experience is:
141
153
 
142
154
  The user should not need to open a second project, remember the `action-dev`
143
155
  CLI, or reason about `Action.app` unless they are intentionally working on the
144
- old Mira codebase.
156
+ old Action codebase.
145
157
 
146
158
  ## Permission Model
147
159
 
@@ -154,8 +166,9 @@ Lattices already has a real permission assistant for:
154
166
  - Automation
155
167
  - Input Monitoring
156
168
 
157
- Mira should extend that assistant with capture/review-specific explanations
158
- instead of introducing a second prompt path.
169
+ The Permissions Assistant should extend its existing capability model with
170
+ capture/review-specific explanations instead of introducing a second prompt
171
+ path.
159
172
 
160
173
  ### TCC Identity
161
174
 
@@ -172,7 +185,7 @@ the integration strategy important:
172
185
 
173
186
  ### AppKit Lifecycle Boundary
174
187
 
175
- Mira's recording work found an important constraint: ScreenCaptureKit recording
188
+ Action's recording work found an important constraint: ScreenCaptureKit recording
176
189
  is more reliable when the actual recording path runs inside a real AppKit app
177
190
  lifecycle.
178
191
 
@@ -183,7 +196,7 @@ Recommended shape:
183
196
  ```text
184
197
  Lattices.app
185
198
  normal mode
186
- --mira-recording-probe mode
199
+ --recording-probe mode
187
200
 
188
201
  Lattices daemon
189
202
  accepts run/capture requests
@@ -204,7 +217,7 @@ Lattices.app
204
217
  permissions assistant
205
218
  window/session/layer/overlay control
206
219
 
207
- Action.app / Mira
220
+ Action.app
208
221
  agent: ws://127.0.0.1:4319
209
222
  capture, recording probe, review loop
210
223
  runtime/session/protocol packages
@@ -217,8 +230,8 @@ Lattices.app
217
230
  daemon: ws://127.0.0.1:9399
218
231
  action runtime
219
232
  permission assistant
220
- Mira run/capture/review UI
221
- Mira recording probe mode
233
+ run/capture/review UI
234
+ recording probe mode
222
235
  overlay actor renderer
223
236
 
224
237
  Optional internal helpers
@@ -289,7 +302,7 @@ Add a run model that complements LAT-005 receipts.
289
302
  "summary": "Started recording current window",
290
303
  "data": {
291
304
  "wid": 12345,
292
- "probe": "Lattices.app --mira-recording-probe"
305
+ "probe": "Lattices.app --recording-probe"
293
306
  }
294
307
  }
295
308
  ```
@@ -321,8 +334,8 @@ Development-only bridge methods may exist while migrating:
321
334
 
322
335
  | Method | Purpose |
323
336
  | --- | --- |
324
- | `mira.bridge.status` | Check whether the old Action/Mira agent is running |
325
- | `mira.bridge.call` | Proxy a small allowlist of old agent methods |
337
+ | `action.bridge.status` | Check whether the old Action agent is running |
338
+ | `action.bridge.call` | Proxy a small allowlist of old agent methods |
326
339
 
327
340
  Those bridge methods should be treated as scaffolding, not the destination.
328
341
 
@@ -330,7 +343,7 @@ Those bridge methods should be treated as scaffolding, not the destination.
330
343
 
331
344
  ### Home
332
345
 
333
- Add a compact Mira status area only when relevant:
346
+ Add a compact run status area only when relevant:
334
347
 
335
348
  - last run
336
349
  - active recording
@@ -346,13 +359,12 @@ Add commands over the same run API:
346
359
  - `Record Current Window`
347
360
  - `Screenshot Current Window`
348
361
  - `Review Last Run`
349
- - `Stop Mira Run`
350
- - `Show Mira`
351
- - `Hide Mira`
362
+ - `Stop Run`
363
+ - `Open Run Artifacts`
352
364
 
353
365
  ### Permissions Assistant
354
366
 
355
- Add a Mira capability section that explains why capture/review uses:
367
+ Add a capture capability section that explains why capture/review uses:
356
368
 
357
369
  - Screen Recording for screenshots and recordings
358
370
  - Accessibility for target resolution and window interaction
@@ -361,13 +373,14 @@ Add a Mira capability section that explains why capture/review uses:
361
373
 
362
374
  The assistant should report which exact component is missing permission.
363
375
 
364
- ### Overlay Actor
376
+ ### Actors
365
377
 
366
- Bundle the Mira actor as a normal Lattices overlay actor.
378
+ Keep actors available as normal Lattices overlay actors.
367
379
 
368
- Mira states should map onto LAT-004 actor states:
380
+ Run/capture states can map onto LAT-004 actor states when a visible presence is
381
+ useful:
369
382
 
370
- | Mira State | Overlay State |
383
+ | Run State | Overlay State |
371
384
  | --- | --- |
372
385
  | idle | `idle` |
373
386
  | observing | `active` |
@@ -387,7 +400,7 @@ Move concepts before moving everything.
387
400
 
388
401
  ### Bring Into Lattices Early
389
402
 
390
- - Mira actor metadata and assets
403
+ - generic actor metadata and assets
391
404
  - run/session lifecycle concepts
392
405
  - artifact and trace event types
393
406
  - capture request/response contracts
@@ -406,7 +419,7 @@ Move concepts before moving everything.
406
419
 
407
420
  ### Rework Instead Of Copying Directly
408
421
 
409
- - `Action.app` shell becomes Lattices Mira mode
422
+ - `Action.app` shell becomes Lattices run/capture mode
410
423
  - old Action agent protocol becomes internal migration scaffolding
411
424
  - old CLI commands become Lattices palette, CLI, or daemon commands
412
425
  - old docs become migration references, not another documentation tree
@@ -416,21 +429,21 @@ Move concepts before moving everything.
416
429
  Suggested Lattices locations:
417
430
 
418
431
  ```text
419
- apps/mac/Sources/Core/Mira/
420
- MiraRunStore.swift
421
- MiraCaptureController.swift
422
- MiraRecordingProbe.swift
423
- MiraArtifact.swift
424
- MiraTraceEvent.swift
425
- MiraDaemonMethods.swift
426
-
427
- apps/mac/Sources/Core/Overlays/Actors/Mira/
432
+ apps/mac/Sources/Core/Runs/
433
+ RunStore.swift
434
+ RunModels.swift
435
+
436
+ apps/mac/Sources/Core/Capture/
437
+ CaptureController.swift
438
+ RecordingProbe.swift
439
+
440
+ apps/mac/Sources/Core/Overlays/Actors/
428
441
  actor metadata and bundled assets
429
442
 
430
443
  docs/proposals/
431
- LAT-006-mira-in-lattices.md
444
+ LAT-006-runs-and-capture-in-lattices.md
432
445
 
433
- docs/mira.md
446
+ docs/runs.md
434
447
  user-facing capture/review docs once implemented
435
448
  ```
436
449
 
@@ -444,24 +457,24 @@ package namespace rather than keeping `action` as the product name.
444
457
  - Add this proposal.
445
458
  - Cross-link LAT-005 and LAT-006.
446
459
  - Define `RunSession`, `RunArtifact`, and `TraceEvent`.
447
- - Add a dev-only bridge to the old Mira agent if useful for experiments.
460
+ - Add a dev-only bridge to the old Action agent if useful for experiments.
448
461
  - Do not present the bridge as the final user experience.
449
462
 
450
463
  ### Phase 2: One-Permission Screenshot Slice
451
464
 
452
- Implement the first real Mira feature entirely inside Lattices:
465
+ Implement the first real capture feature entirely inside Lattices:
453
466
 
454
467
  ```text
455
468
  Screenshot Current Window -> RunSession -> Artifact -> Review
456
469
  ```
457
470
 
458
471
  This proves the most important integration point: the user grants Lattices
459
- permission and receives a Mira artifact without opening Action.app.
472
+ permission and receives a run artifact without opening Action.app.
460
473
 
461
474
  ### Phase 3: Recording Probe In Lattices
462
475
 
463
476
  - Port the recording probe pattern.
464
- - Launch `Lattices.app --mira-recording-probe` for actual recording work.
477
+ - Launch `Lattices.app --recording-probe` for actual recording work.
465
478
  - Preserve stop-file, finished-file, and debug-log behavior.
466
479
  - Store outputs in the Lattices run directory.
467
480
 
@@ -487,7 +500,7 @@ permission and receives a Mira artifact without opening Action.app.
487
500
  The smallest meaningful integration is:
488
501
 
489
502
  ```text
490
- Record a screenshot of the current window as a Mira run inside Lattices.
503
+ Record a screenshot of the current window as a run inside Lattices.
491
504
  ```
492
505
 
493
506
  Required pieces:
@@ -498,18 +511,18 @@ Required pieces:
498
511
  - palette command
499
512
  - permission receipt
500
513
  - recent-run review surface
501
- - optional Mira actor state change
514
+ - optional actor state change
502
515
 
503
516
  This avoids the two-app permission problem from the start and gives the product
504
- a concrete user-facing Mira feature before the heavier recording probe is
517
+ a concrete user-facing capture feature before the heavier recording probe is
505
518
  ported.
506
519
 
507
520
  ## Open Questions
508
521
 
509
- ### Should The Name Stay Mira?
522
+ ### Should Actors Stay?
510
523
 
511
- Recommendation: yes. "Mira" is useful as the named capture/review personality,
512
- but it should live inside Lattices.
524
+ Recommendation: yes, as generic presences. Retire Mira as the product name, but
525
+ keep actors/pets available for agent, run, app, and task presence.
513
526
 
514
527
  ### Should The Old Action Agent Port Stay?
515
528
 
@@ -541,13 +554,13 @@ recording once the run store and review loop exist.
541
554
 
542
555
  This proposal is successful when:
543
556
 
544
- - the user sees Mira as part of Lattices, not as another app to remember
557
+ - the user sees runs and capture as part of Lattices, not as another app to remember
545
558
  - the normal capture path asks for Lattices permissions, not Action.app
546
559
  - a palette command can create a run artifact from the current window
547
560
  - run artifacts are reviewable inside Lattices
548
561
  - action receipts and run traces can reference each other
549
- - the Mira actor can reflect run state without owning the run contract
562
+ - actors can reflect run state without owning the run contract
550
563
  - recording uses a real AppKit lifecycle without requiring a separate visible
551
564
  product
552
- - the old Mira repo can eventually become a migration source, not an active
565
+ - the old Action repo can eventually become a migration source, not an active
553
566
  parallel product
@@ -55,7 +55,9 @@ your pane layout:
55
55
 
56
56
  ```bash
57
57
  brew install tmux
58
- cd ~/your-project && lattices start
58
+ cd ~/your-project
59
+ lattices # home screen: status only, does not attach
60
+ lattices start # create or reattach the session
59
61
  ```
60
62
 
61
63
  This creates a tmux session with your configured panes side by side.
@@ -4,7 +4,7 @@ export default {
4
4
  name: 'lattices',
5
5
  tagline: 'macOS developer workspace manager — tmux sessions with a native menu bar app for tiling, navigation, and project management',
6
6
  type: 'cli-tool',
7
- version: '0.5.0',
7
+ version: '0.6.1',
8
8
  },
9
9
 
10
10
  agent: {
package/docs/release.md CHANGED
@@ -124,7 +124,8 @@ GitHub release step.
124
124
 
125
125
  ## npm releases
126
126
 
127
- The CLI package is published as `@lattices/cli`.
127
+ The CLI package is published as `@arach/lattices` (npm page) and also as
128
+ `@lattices/cli` for back-compat — same tarball, dual publish in CI.
128
129
 
129
130
  There are two valid npm paths:
130
131
 
@@ -141,7 +142,7 @@ NPM_TOKEN
141
142
  ```
142
143
 
143
144
  `NPM_TOKEN` must be an npm automation or granular access token that can
144
- publish `@lattices/cli`. It currently should authenticate as the npm user
145
+ publish `@arach/lattices` and `@lattices/cli`. It currently should authenticate as the npm user
145
146
  `arach`; if a different maintainer publishes, set environment variable
146
147
  `NPM_EXPECTED_USER` to that npm username.
147
148
 
@@ -155,7 +156,7 @@ gh variable set NPM_EXPECTED_USER --repo arach/lattices --env release --body ara
155
156
  Release:
156
157
 
157
158
  ```sh
158
- git tag -a npm-v0.5.0 -m "@lattices/cli 0.5.0"
159
+ git tag -a npm-v0.6.1 -m "@arach/lattices 0.6.1"
159
160
  git push origin npm-v0.5.0
160
161
  ```
161
162
 
@@ -0,0 +1,87 @@
1
+ # LatticesTerminalKit
2
+
3
+ `LatticesTerminalKit` is the reusable Swift terminal-inventory slice of
4
+ lattices. It is designed for native hosts such as Scout that should embed the
5
+ same macOS probes directly instead of talking to the lattices daemon or CLI.
6
+
7
+ ## V1 Scope
8
+
9
+ The first slice inventories:
10
+
11
+ - Apple Terminal
12
+ - iTerm2
13
+ - Ghostty
14
+
15
+ It intentionally stays read-oriented. Focus and placement actions can build on
16
+ the returned handles later, but the v1 contract is an observed terminal
17
+ projection, not a canonical session or message store.
18
+
19
+ ## Import
20
+
21
+ The product lives in the repo's reusable Swift package:
22
+
23
+ ```swift
24
+ import LatticesTerminalKit
25
+
26
+ let snapshot = TerminalInventory.snapshot()
27
+ ```
28
+
29
+ For bounded tmux pane context:
30
+
31
+ ```swift
32
+ let snapshot = TerminalInventory.snapshot(options: .init(
33
+ includePaneContent: true,
34
+ paneContentLineLimit: 120
35
+ ))
36
+ ```
37
+
38
+ ## Snapshot Shape
39
+
40
+ `TerminalInventorySnapshot` contains:
41
+
42
+ - `snapshotId`
43
+ - `observedAt`
44
+ - `terminals`
45
+ - `tmuxSessions`
46
+ - `terminalTabs`
47
+ - `terminalWindows`
48
+
49
+ Each `TerminalInstance` includes:
50
+
51
+ - identity: `stableKey`, `tty`, app name, bundle id, app pid
52
+ - terminal UI: window id/title, tab index/title, terminal session id
53
+ - process context: interesting process rows, shell pid, cwd, cwd source
54
+ - tmux context: session and pane id
55
+ - harness detection: `detectedHarnesses` for Claude and Codex signals
56
+ - action preparation: `focusHandle`, `placementHandle`, `capabilities`
57
+ - trust metadata: `provenance` with confidence for tty/cwd/window/tmux/harness
58
+ - optional inspection: bounded `paneCapture`
59
+
60
+ ## Join Strategy
61
+
62
+ The kit joins by TTY first.
63
+
64
+ Inputs:
65
+
66
+ - process table from `ps`
67
+ - cwd lookup from batched `lsof`
68
+ - tmux sessions and panes
69
+ - AppleScript tab probes for Terminal and iTerm2
70
+ - CG window inventory for Terminal, iTerm2, and Ghostty
71
+
72
+ Window resolution order:
73
+
74
+ 1. lattices title tag: `[lattices:<session>]`
75
+ 2. app window index from Terminal/iTerm2 tab probes
76
+ 3. CG owner process tree TTY, used especially for Ghostty
77
+
78
+ Ghostty is expected to be window-level in v1. The kit does not synthesize stable
79
+ tab ids from titles or z-order.
80
+
81
+ ## Notes For Scout
82
+
83
+ CG window IDs are useful but volatile. Consumers should pair them with
84
+ `stableKey`, app pid, bundle id, tty, and tmux pane identity where available.
85
+
86
+ Pane capture is opt-in and ephemeral. It should be treated as drill-down context,
87
+ not as durable chat or terminal history.
@@ -62,11 +62,13 @@ All valid position strings that `TilePosition` accepts:
62
62
 
63
63
  ### Custom Grid Syntax
64
64
 
65
- For arbitrary grids: `grid:CxR:C,R`
65
+ For arbitrary grids: compact `CxR:C,R` or canonical `grid:CxR:C,R`
66
66
 
67
67
  - `C` = total columns, `R` = total rows
68
- - `C,R` = target cell (0-indexed position)
69
- - Example: `grid:5x3:2,1` = center cell of a 5×3 grid
68
+ - Compact `CxR:C,R` starts at 1 from the top-left
69
+ - Canonical `grid:CxR:C,R` starts at 0 for API/wire compatibility
70
+ - Example: `5x3:3,2` or `grid:5x3:2,1` = center cell of a 5×3 grid
71
+ - Spans can use two inclusive corners, such as `4x4:1,1-2,2`
70
72
 
71
73
  Parsed by `PlacementSpec` / `parseGridString()` into fractional `(x, y, w, h)`.
72
74
 
package/docs/voice.md CHANGED
@@ -4,7 +4,7 @@ description: Natural language voice control for window management
4
4
  order: 7
5
5
  ---
6
6
 
7
- Voice commands let you control Lattices by speaking. Press **Hyper+3**
7
+ Voice commands let you control Lattices by speaking. Press **Hyper+D**
8
8
  to open the voice command window, hold **Option** to speak, release to
9
9
  stop. Lattices transcribes your speech via Vox,
10
10
  matches it to an intent, and executes it.
@@ -13,7 +13,7 @@ matches it to an intent, and executes it.
13
13
 
14
14
  1. Install Vox (provides mic + transcription)
15
15
  2. Connect an Assistant provider in **Settings > AI**
16
- 3. Press **Hyper+3** to open the voice command window
16
+ 3. Press **Hyper+D** to open the voice command window
17
17
  4. Hold **Option** and speak a command
18
18
  5. Release **Option** — Lattices transcribes and executes
19
19
 
@@ -21,7 +21,7 @@ matches it to an intent, and executes it.
21
21
 
22
22
  | Key | Action |
23
23
  |-----|--------|
24
- | **Hyper+3** | Open/close voice command window |
24
+ | **Hyper+D** | Open/close voice command window |
25
25
  | **⌥ (hold)** | Push-to-talk — hold to record, release to stop |
26
26
  | **Tab** | Arm/disarm the mic |
27
27
  | **Escape** | Cancel recording or dismiss window |
package/package.json CHANGED
@@ -1,7 +1,15 @@
1
1
  {
2
2
  "name": "@lattices/cli",
3
- "version": "0.6.0",
4
- "description": "The agentic workspace manager for macOS turn your desktop into a coherent API",
3
+ "version": "0.6.1",
4
+ "description": "macOS workspace manager menu bar app, CLI, and WebSocket daemon API for tiling, search, layers, and agent control",
5
+ "homepage": "https://lattices.dev",
6
+ "bugs": {
7
+ "url": "https://github.com/arach/lattices/issues"
8
+ },
9
+ "publishConfig": {
10
+ "access": "public",
11
+ "provenance": true
12
+ },
5
13
  "packageManager": "bun@1.3.11",
6
14
  "engines": {
7
15
  "node": ">=18"
@@ -11,13 +19,19 @@
11
19
  "lattices-app": "./bin/lattices-app.ts"
12
20
  },
13
21
  "keywords": [
22
+ "lattices",
23
+ "macos",
24
+ "workspace",
25
+ "window-manager",
14
26
  "tmux",
27
+ "daemon",
28
+ "ai-agents",
15
29
  "claude",
16
- "dev-server",
17
30
  "developer-tools",
18
31
  "cli",
19
32
  "terminal",
20
- "multiplexer"
33
+ "ocr",
34
+ "tiling"
21
35
  ],
22
36
  "repository": {
23
37
  "type": "git",
@@ -27,6 +41,7 @@
27
41
  "exports": {
28
42
  ".": "./bin/client.ts",
29
43
  "./assistant-intelligence": "./bin/assistant-intelligence.ts",
44
+ "./cua": "./bin/cua.ts",
30
45
  "./daemon-client": "./bin/daemon-client.ts",
31
46
  "./project-twin": "./bin/project-twin.ts"
32
47
  },
@@ -39,6 +54,8 @@
39
54
  "check": "bun run check:types && bun run check:app",
40
55
  "check:types": "tsc --noEmit",
41
56
  "check:app": "env CLANG_MODULE_CACHE_PATH=/tmp/lattices-clang-cache SWIFTPM_TESTS_MODULECACHE=/tmp/lattices-swiftpm-cache swift build --package-path apps/mac",
57
+ "test": "node --experimental-strip-types --test tests/cli.test.mjs",
58
+ "test:cli": "node --experimental-strip-types --test tests/cli.test.mjs",
42
59
  "test:e2e": "node --experimental-strip-types --test tests/e2e-daemon.test.mjs",
43
60
  "test:e2e:voice": "node --experimental-strip-types tests/eval-voice.js",
44
61
  "typecheck": "bun run check:types",
@@ -49,9 +66,14 @@
49
66
  "prepack": "bash ./bin/lattices-build package"
50
67
  },
51
68
  "type": "module",
52
- "os": ["darwin"],
69
+ "os": [
70
+ "darwin"
71
+ ],
53
72
  "files": [
54
73
  "bin",
74
+ "packages/npm/sdk/cua.mjs",
75
+ "packages/npm/sdk/cua.d.ts",
76
+ "packages/npm/sdk/cua.d.mts",
55
77
  "apps/mac/Info.plist",
56
78
  "apps/mac/Lattices.app",
57
79
  "apps/mac/Lattices.entitlements",
@@ -0,0 +1 @@
1
+ export * from "./cua.d.ts";